From 28ca504576134a8dd7b7e90488319c23f23b2300 Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Sat, 25 May 2019 07:01:02 +0000 Subject: [PATCH 1/3] wire up notification settings --- src/components/user_settings/user_settings.js | 7 ++- .../user_settings/user_settings.vue | 45 +++++++++++++++++++ src/i18n/en.json | 7 +++ src/services/api/api.service.js | 19 +++++++- .../backend_interactor_service.js | 7 ++- .../entity_normalizer.service.js | 5 +++ 6 files changed, 87 insertions(+), 3 deletions(-) diff --git a/src/components/user_settings/user_settings.js b/src/components/user_settings/user_settings.js index 2418450cb8..ae36e5e8fe 100644 --- a/src/components/user_settings/user_settings.js +++ b/src/components/user_settings/user_settings.js @@ -55,7 +55,8 @@ const UserSettings = { changePasswordInputs: [ '', '', '' ], changedPassword: false, changePasswordError: false, - activeTab: 'profile' + activeTab: 'profile', + notificationSettings: this.$store.state.users.currentUser.notification_settings } }, created () { @@ -128,6 +129,10 @@ const UserSettings = { this.$store.commit('setCurrentUser', user) }) }, + updateNotificationSettings () { + this.$store.state.api.backendInteractor + .updateNotificationSettings({ settings: this.notificationSettings }) + }, changeVis (visibility) { this.newDefaultScope = visibility }, diff --git a/src/components/user_settings/user_settings.vue b/src/components/user_settings/user_settings.vue index 2cb8b37ab6..69f1b44f44 100644 --- a/src/components/user_settings/user_settings.vue +++ b/src/components/user_settings/user_settings.vue @@ -167,6 +167,51 @@ +
+
+

{{$t('settings.notifications')}}

+
    +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
+ +
+
+

{{$t('settings.follow_import')}}

diff --git a/src/i18n/en.json b/src/i18n/en.json index 031c93de45..2840582b58 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -209,6 +209,7 @@ "loop_video": "Loop videos", "loop_video_silent_only": "Loop only videos without sound (i.e. Mastodon's \"gifs\")", "mutes_tab": "Mutes", + "interactions_tab": "Interactions", "play_videos_in_modal": "Play videos directly in the media viewer", "use_contain_fit": "Don't crop the attachment in thumbnails", "name": "Name", @@ -277,6 +278,12 @@ "true": "yes" }, "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", "style": { "switcher": { diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index c67eccf10a..d6904d3069 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -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 ADMIN_USERS_URL = '/api/pleroma/admin/users' 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_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 form = new FormData() form.append('avatar', avatar) @@ -767,7 +783,8 @@ const apiService = { markNotificationsAsSeen, fetchFavoritedByUsers, fetchRebloggedByUsers, - reportUser + reportUser, + updateNotificationSettings } export default apiService diff --git a/src/services/backend_interactor_service/backend_interactor_service.js b/src/services/backend_interactor_service/backend_interactor_service.js index 639bcabc40..36152429fc 100644 --- a/src/services/backend_interactor_service/backend_interactor_service.js +++ b/src/services/backend_interactor_service/backend_interactor_service.js @@ -87,6 +87,10 @@ const backendInteractorService = (credentials) => { return apiService.deleteUser({screen_name, credentials}) } + const updateNotificationSettings = ({settings}) => { + return apiService.updateNotificationSettings({credentials, settings}) + } + const fetchMutes = () => apiService.fetchMutes({credentials}) const muteUser = (id) => apiService.muteUser({credentials, id}) const unmuteUser = (id) => apiService.unmuteUser({credentials, id}) @@ -171,7 +175,8 @@ const backendInteractorService = (credentials) => { favorite, unfavorite, retweet, - unretweet + unretweet, + updateNotificationSettings } return backendInteractorServiceInstance diff --git a/src/services/entity_normalizer/entity_normalizer.service.js b/src/services/entity_normalizer/entity_normalizer.service.js index efff23d1c9..baf58e9bf3 100644 --- a/src/services/entity_normalizer/entity_normalizer.service.js +++ b/src/services/entity_normalizer/entity_normalizer.service.js @@ -141,8 +141,13 @@ export const parseUser = (data) => { output.deactivated = data.pleroma.deactivated } + if (data.pleroma) { + output.notification_settings = data.pleroma.notification_settings + } + output.tags = output.tags || [] output.rights = output.rights || {} + output.notification_settings = output.notification_settings || {} return output } From ac97cd3e469f6b3051fa74d66f72cd23dc53a2fb Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Sat, 25 May 2019 22:59:04 +0000 Subject: [PATCH 2/3] entity normalizer: collapse data.pleroma if blocks --- src/services/entity_normalizer/entity_normalizer.service.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/services/entity_normalizer/entity_normalizer.service.js b/src/services/entity_normalizer/entity_normalizer.service.js index baf58e9bf3..e27b610840 100644 --- a/src/services/entity_normalizer/entity_normalizer.service.js +++ b/src/services/entity_normalizer/entity_normalizer.service.js @@ -134,14 +134,10 @@ export const parseUser = (data) => { if (data.pleroma) { output.follow_request_count = data.pleroma.follow_request_count - } - if (data.pleroma) { output.tags = data.pleroma.tags output.deactivated = data.pleroma.deactivated - } - if (data.pleroma) { output.notification_settings = data.pleroma.notification_settings } From 855566f887cb9f705f62141b929bb9a3d089099c Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Sat, 25 May 2019 23:44:36 +0000 Subject: [PATCH 3/3] notification controls: redesign entirely --- .../user_settings/user_settings.vue | 72 +++++++++---------- src/i18n/en.json | 14 ++-- 2 files changed, 39 insertions(+), 47 deletions(-) diff --git a/src/components/user_settings/user_settings.vue b/src/components/user_settings/user_settings.vue index 69f1b44f44..20b1097995 100644 --- a/src/components/user_settings/user_settings.vue +++ b/src/components/user_settings/user_settings.vue @@ -167,47 +167,39 @@
-
+
-

{{$t('settings.notifications')}}

-
    -
  • - - -
  • -
  • - - -
  • -
  • - - -
  • -
  • - - -
  • -
  • - - -
  • -
  • - - -
  • -
+
+ {{$t('settings.notification_setting')}} +
    +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
+
+

{{$t('settings.notification_mutes')}}

+

{{$t('settings.notification_blocks')}}

diff --git a/src/i18n/en.json b/src/i18n/en.json index 2840582b58..2b5c54686e 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -209,7 +209,6 @@ "loop_video": "Loop videos", "loop_video_silent_only": "Loop only videos without sound (i.e. Mastodon's \"gifs\")", "mutes_tab": "Mutes", - "interactions_tab": "Interactions", "play_videos_in_modal": "Play videos directly in the media viewer", "use_contain_fit": "Don't crop the attachment in thumbnails", "name": "Name", @@ -278,12 +277,13 @@ "true": "yes" }, "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", + "notification_setting": "Receive notifications from:", + "notification_setting_follows": "Users you follow", + "notification_setting_non_follows": "Users you do not follow", + "notification_setting_followers": "Users who follow you", + "notification_setting_non_followers": "Users who do not follow you", + "notification_mutes": "To stop receiving notifications from a specific user, use a mute.", + "notification_blocks": "Blocking a user stops all notifications as well as unsubscribes them.", "enable_web_push_notifications": "Enable web push notifications", "style": { "switcher": {