wire up notification settings

This commit is contained in:
William Pitcock 2019-05-25 07:01:02 +00:00
parent ab34a75bcf
commit 28ca504576
6 changed files with 87 additions and 3 deletions

View File

@ -55,7 +55,8 @@ const UserSettings = {
changePasswordInputs: [ '', '', '' ], changePasswordInputs: [ '', '', '' ],
changedPassword: false, changedPassword: false,
changePasswordError: false, changePasswordError: false,
activeTab: 'profile' activeTab: 'profile',
notificationSettings: this.$store.state.users.currentUser.notification_settings
} }
}, },
created () { created () {
@ -128,6 +129,10 @@ const UserSettings = {
this.$store.commit('setCurrentUser', user) this.$store.commit('setCurrentUser', user)
}) })
}, },
updateNotificationSettings () {
this.$store.state.api.backendInteractor
.updateNotificationSettings({ settings: this.notificationSettings })
},
changeVis (visibility) { changeVis (visibility) {
this.newDefaultScope = visibility this.newDefaultScope = visibility
}, },

View File

@ -167,6 +167,51 @@
</div> </div>
</div> </div>
<div :label="$t('settings.interactions_tab')" v-if="pleromaBackend">
<div class="setting-item">
<h2>{{$t('settings.notifications')}}</h2>
<ul class="setting-list">
<li>
<input type="checkbox" id="notification-setting-local" v-model="notificationSettings.local">
<label for="notification-setting-local">
{{$t('settings.notification_setting_local')}}
</label>
</li>
<li>
<input type="checkbox" id="notification-setting-remote" v-model="notificationSettings.remote">
<label for="notification-setting-remote">
{{$t('settings.notification_setting_remote')}}
</label>
</li>
<li>
<input type="checkbox" id="notification-setting-follows" v-model="notificationSettings.follows">
<label for="notification-setting-follows">
{{$t('settings.notification_setting_follows')}}
</label>
</li>
<li>
<input type="checkbox" id="notification-setting-non-follows" v-model="notificationSettings.non_follows">
<label for="notification-setting-non-follows">
{{$t('settings.notification_setting_non_follows')}}
</label>
</li>
<li>
<input type="checkbox" id="notification-setting-followers" v-model="notificationSettings.followers">
<label for="notification-setting-followers">
{{$t('settings.notification_setting_followers')}}
</label>
</li>
<li>
<input type="checkbox" id="notification-setting-non-followers" v-model="notificationSettings.non_followers">
<label for="notification-setting-non-followers">
{{$t('settings.notification_setting_non_followers')}}
</label>
</li>
</ul>
<button class="btn btn-default" @click="updateNotificationSettings">{{$t('general.submit')}}</button>
</div>
</div>
<div :label="$t('settings.data_import_export_tab')" v-if="pleromaBackend"> <div :label="$t('settings.data_import_export_tab')" v-if="pleromaBackend">
<div class="setting-item"> <div class="setting-item">
<h2>{{$t('settings.follow_import')}}</h2> <h2>{{$t('settings.follow_import')}}</h2>

View File

@ -209,6 +209,7 @@
"loop_video": "Loop videos", "loop_video": "Loop videos",
"loop_video_silent_only": "Loop only videos without sound (i.e. Mastodon's \"gifs\")", "loop_video_silent_only": "Loop only videos without sound (i.e. Mastodon's \"gifs\")",
"mutes_tab": "Mutes", "mutes_tab": "Mutes",
"interactions_tab": "Interactions",
"play_videos_in_modal": "Play videos directly in the media viewer", "play_videos_in_modal": "Play videos directly in the media viewer",
"use_contain_fit": "Don't crop the attachment in thumbnails", "use_contain_fit": "Don't crop the attachment in thumbnails",
"name": "Name", "name": "Name",
@ -277,6 +278,12 @@
"true": "yes" "true": "yes"
}, },
"notifications": "Notifications", "notifications": "Notifications",
"notification_setting_local": "Show notifications from local users",
"notification_setting_remote": "Show notifications from remote users",
"notification_setting_follows": "Show notifications from users you follow",
"notification_setting_non_follows": "Show notifications from users you do not follow",
"notification_setting_followers": "Show notifications from users who follow you",
"notification_setting_non_followers": "Show notifications from users who do not follow you",
"enable_web_push_notifications": "Enable web push notifications", "enable_web_push_notifications": "Enable web push notifications",
"style": { "style": {
"switcher": { "switcher": {

View File

@ -16,6 +16,7 @@ const PERMISSION_GROUP_URL = (screenName, right) => `/api/pleroma/admin/users/${
const ACTIVATION_STATUS_URL = screenName => `/api/pleroma/admin/users/${screenName}/activation_status` const ACTIVATION_STATUS_URL = screenName => `/api/pleroma/admin/users/${screenName}/activation_status`
const ADMIN_USERS_URL = '/api/pleroma/admin/users' const ADMIN_USERS_URL = '/api/pleroma/admin/users'
const SUGGESTIONS_URL = '/api/v1/suggestions' const SUGGESTIONS_URL = '/api/v1/suggestions'
const NOTIFICATION_SETTINGS_URL = '/api/pleroma/notification_settings'
const MASTODON_USER_FAVORITES_TIMELINE_URL = '/api/v1/favourites' const MASTODON_USER_FAVORITES_TIMELINE_URL = '/api/v1/favourites'
const MASTODON_USER_NOTIFICATIONS_URL = '/api/v1/notifications' const MASTODON_USER_NOTIFICATIONS_URL = '/api/v1/notifications'
@ -97,6 +98,21 @@ const promisedRequest = ({ method, url, payload, credentials, headers = {} }) =>
}) })
} }
const updateNotificationSettings = ({credentials, settings}) => {
const form = new FormData()
each(settings, (value, key) => {
form.append(key, value)
})
return fetch(NOTIFICATION_SETTINGS_URL, {
headers: authHeaders(credentials),
method: 'PUT',
body: form
})
.then((data) => data.json())
}
const updateAvatar = ({credentials, avatar}) => { const updateAvatar = ({credentials, avatar}) => {
const form = new FormData() const form = new FormData()
form.append('avatar', avatar) form.append('avatar', avatar)
@ -767,7 +783,8 @@ const apiService = {
markNotificationsAsSeen, markNotificationsAsSeen,
fetchFavoritedByUsers, fetchFavoritedByUsers,
fetchRebloggedByUsers, fetchRebloggedByUsers,
reportUser reportUser,
updateNotificationSettings
} }
export default apiService export default apiService

View File

@ -87,6 +87,10 @@ const backendInteractorService = (credentials) => {
return apiService.deleteUser({screen_name, credentials}) return apiService.deleteUser({screen_name, credentials})
} }
const updateNotificationSettings = ({settings}) => {
return apiService.updateNotificationSettings({credentials, settings})
}
const fetchMutes = () => apiService.fetchMutes({credentials}) const fetchMutes = () => apiService.fetchMutes({credentials})
const muteUser = (id) => apiService.muteUser({credentials, id}) const muteUser = (id) => apiService.muteUser({credentials, id})
const unmuteUser = (id) => apiService.unmuteUser({credentials, id}) const unmuteUser = (id) => apiService.unmuteUser({credentials, id})
@ -171,7 +175,8 @@ const backendInteractorService = (credentials) => {
favorite, favorite,
unfavorite, unfavorite,
retweet, retweet,
unretweet unretweet,
updateNotificationSettings
} }
return backendInteractorServiceInstance return backendInteractorServiceInstance

View File

@ -141,8 +141,13 @@ export const parseUser = (data) => {
output.deactivated = data.pleroma.deactivated output.deactivated = data.pleroma.deactivated
} }
if (data.pleroma) {
output.notification_settings = data.pleroma.notification_settings
}
output.tags = output.tags || [] output.tags = output.tags || []
output.rights = output.rights || {} output.rights = output.rights || {}
output.notification_settings = output.notification_settings || {}
return output return output
} }