aboutsummaryrefslogtreecommitdiff
path: root/src/modules/serverSideConfig.js
blob: 2db6fc065432af962a43da9a7689721726099faf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import { get, set } from 'lodash'

export const settingsMapGet = {
  'defaultScope': 'source.privacy',
  'defaultNSFW': 'source.sensitive', // BROKEN: pleroma/pleroma#2837
  'stripRichContent': 'source.pleroma.no_rich_text',
  // Privacy
  'locked': 'locked',
  'acceptChatMessages': 'pleroma.accepts_chat_messages',
  'allowFollowingMove': 'pleroma.allow_following_move',
  'discoverable': 'source.discoverable',
  'hideFavorites': 'pleroma.hide_favorites',
  'hideFollowers': 'pleroma.hide_followers',
  'hideFollows': 'pleroma.hide_follows',
  'hideFollowersCount': 'pleroma.hide_followers_count',
  'hideFollowsCount': 'pleroma.hide_follows_count',
  // NotificationSettingsAPIs
  'webPushHideContents': 'pleroma.notification_settings.hide_notification_contents',
  'blockNotificationsFromStrangers': 'pleroma.notification_settings.block_from_strangers'
}

export const settingsMapSet = {
  'defaultScope': 'source.privacy',
  'defaultNSFW': 'source.sensitive',
  'stripRichContent': 'no_rich_text',
  // Privacy
  'locked': 'locked',
  'acceptChatMessages': 'accepts_chat_messages',
  'allowFollowingMove': 'allow_following_move',
  'discoverable': 'source.discoverable',
  'hideFavorites': 'hide_favorites',
  'hideFollowers': 'hide_followers',
  'hideFollows': 'hide_follows',
  'hideFollowersCount': 'hide_followers_count',
  'hideFollowsCount': 'hide_follows_count',
  // NotificationSettingsAPIs
  'webPushHideContents': 'hide_notification_contents',
  'blockNotificationsFromStrangers': 'block_from_strangers'
}

export const customAPIs = {
  __defaultApi: 'updateProfile',
  'webPushHideContents': 'updateNotificationSettings',
  'blockNotificationsFromStrangers': 'updateNotificationSettings'
}

export const defaultState = Object.fromEntries(Object.keys(settingsMapGet).map(key => [key, null]))

const serverSideConfig = {
  state: { ...defaultState },
  mutations: {
    confirmServerSideOption (state, { name, value }) {
      set(state, name, value)
    },
    wipeServerSideOption (state, { name }) {
      set(state, name, null)
    },
    // Set the settings based on their path location
    setCurrentUser (state, user) {
      Object.entries(settingsMapGet).forEach(([name, path]) => {
        set(state, name, get(user._original, path))
      })
    }
  },
  actions: {
    setServerSideOption ({ rootState, state, commit, dispatch }, { name, value }) {
      const oldValue = get(state, name)
      const params = {}
      const path = settingsMapSet[name]
      if (!path) throw new Error('Invalid server-side setting')
      commit('wipeServerSideOption', { name })
      const customAPIName = customAPIs[name] || customAPIs.__defaultApi
      const api = rootState.api.backendInteractor[customAPIName]
      let prefix = ''
      switch (customAPIName) {
        case 'updateNotificationSettings':
          prefix = 'settings.'
          break
        default:
          prefix = 'params.'
          break
      }

      set(params, prefix + path, value)
      api(params)
        .then((result) => {
          switch (customAPIName) {
            case 'updateNotificationSettings':
              console.log(result)
              if (result.status === 'success') {
                commit('confirmServerSideOption', { name, value })
              } else {
                commit('confirmServerSideOption', { name, value: oldValue })
              }
              break
            default:
              commit('addNewUsers', [result])
              commit('setCurrentUser', result)
              break
          }
          console.log(state)
        })
        .catch((e) => {
          console.warn('Error setting server-side option:', e)
          commit('confirmServerSideOption', { name, value: oldValue })
        })
    }
  }
}

export default serverSideConfig