From a463959a365a5d618a79c96a26f6506e700d6ea3 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 1 Oct 2020 01:43:07 +0300 Subject: Initial work on highlighting changed settings. Some refactoring to simplify addition of new settings --- src/modules/config.js | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'src/modules') diff --git a/src/modules/config.js b/src/modules/config.js index 409d77a4..2c1e881f 100644 --- a/src/modules/config.js +++ b/src/modules/config.js @@ -74,18 +74,24 @@ export const instanceDefaultProperties = Object.entries(defaultState) .map(([key, value]) => key) const config = { - state: defaultState, + state: { ...defaultState }, getters: { - mergedConfig (state, getters, rootState, rootGetters) { + defaultConfig (state, getters, rootState, rootGetters) { const { instance } = rootState + console.log('DC', instance.minimalScopesMode) + return { + ...defaultState, + ...Object.fromEntries( + instanceDefaultProperties.map(key => [key, instance[key]]) + ) + } + }, + mergedConfig (state, getters, rootState, rootGetters) { + const { defaultConfig } = rootGetters + console.log('DC2', defaultConfig.hideISP) return { - ...state, - ...instanceDefaultProperties - .map(key => [key, state[key] === undefined - ? instance[key] - : state[key] - ]) - .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {}) + ...defaultConfig, + ...state } } }, -- cgit v1.2.3-70-g09d2 From 66f3e72b545a7f92d2569baa0fd52275a29d629a Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Mon, 1 Feb 2021 20:08:36 +0200 Subject: update branch with recent develop changes (FA, added settings) --- .../settings_modal/helpers/boolean_setting.vue | 6 +-- .../settings_modal/helpers/modified_icon.vue | 46 ------------------- .../settings_modal/helpers/modified_indicator.vue | 51 ++++++++++++++++++++++ .../helpers/shared_computed_object.js | 1 - src/components/settings_modal/tabs/general_tab.vue | 8 ++-- src/modules/config.js | 2 - 6 files changed, 58 insertions(+), 56 deletions(-) delete mode 100644 src/components/settings_modal/helpers/modified_icon.vue create mode 100644 src/components/settings_modal/helpers/modified_indicator.vue (limited to 'src/modules') diff --git a/src/components/settings_modal/helpers/boolean_setting.vue b/src/components/settings_modal/helpers/boolean_setting.vue index f7c392cd..b600b63b 100644 --- a/src/components/settings_modal/helpers/boolean_setting.vue +++ b/src/components/settings_modal/helpers/boolean_setting.vue @@ -13,7 +13,7 @@ > - + @@ -21,7 +21,7 @@ - - diff --git a/src/components/settings_modal/helpers/modified_indicator.vue b/src/components/settings_modal/helpers/modified_indicator.vue new file mode 100644 index 00000000..b75a2811 --- /dev/null +++ b/src/components/settings_modal/helpers/modified_indicator.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/src/components/settings_modal/helpers/shared_computed_object.js b/src/components/settings_modal/helpers/shared_computed_object.js index 3cbcd288..2c833c0c 100644 --- a/src/components/settings_modal/helpers/shared_computed_object.js +++ b/src/components/settings_modal/helpers/shared_computed_object.js @@ -9,7 +9,6 @@ const SharedComputedObject = () => ({ .map(key => [ key + 'DefaultValue', function () { - console.log(this.$store.getters.defaultConfig) return this.$store.getters.defaultConfig[key] } ]) diff --git a/src/components/settings_modal/tabs/general_tab.vue b/src/components/settings_modal/tabs/general_tab.vue index 92cd2069..f93f4ea0 100644 --- a/src/components/settings_modal/tabs/general_tab.vue +++ b/src/components/settings_modal/tabs/general_tab.vue @@ -12,9 +12,9 @@
  • - + {{ $t('settings.hide_wallpaper') }} - +
  • @@ -64,9 +64,9 @@
  • - + {{ $t('settings.virtual_scrolling') }} - +
  • diff --git a/src/modules/config.js b/src/modules/config.js index 444808cf..f992519e 100644 --- a/src/modules/config.js +++ b/src/modules/config.js @@ -80,7 +80,6 @@ const config = { getters: { defaultConfig (state, getters, rootState, rootGetters) { const { instance } = rootState - console.log('DC', instance.minimalScopesMode) return { ...defaultState, ...Object.fromEntries( @@ -90,7 +89,6 @@ const config = { }, mergedConfig (state, getters, rootState, rootGetters) { const { defaultConfig } = rootGetters - console.log('DC2', defaultConfig.hideISP) return { ...defaultConfig, ...state -- cgit v1.2.3-70-g09d2 From 47770ed7151ad0ba1cd8b77eb52590edd9ce9737 Mon Sep 17 00:00:00 2001 From: Shpuld Shpuldson Date: Wed, 17 Feb 2021 10:16:58 +0200 Subject: get rid of older messages when scrolling down in chat to keep it from bloating dom --- src/components/chat/chat.js | 1 + src/modules/chats.js | 6 ++++++ src/services/chat_service/chat_service.js | 17 +++++++++++++++++ 3 files changed, 24 insertions(+) (limited to 'src/modules') diff --git a/src/components/chat/chat.js b/src/components/chat/chat.js index e57fcb91..f446f25b 100644 --- a/src/components/chat/chat.js +++ b/src/components/chat/chat.js @@ -241,6 +241,7 @@ const Chat = { this.fetchChat({ maxId: this.currentChatMessageService.minId }) } else if (this.bottomedOut(JUMP_TO_BOTTOM_BUTTON_VISIBILITY_OFFSET)) { this.jumpToBottomButtonVisible = false + this.$store.dispatch('cullOlderMessages', this.currentChatMessageService.chatId) if (this.newMessageCount > 0) { // Use a delay before marking as read to prevent situation where new messages // arrive just as you're leaving the view and messages that you didn't actually diff --git a/src/modules/chats.js b/src/modules/chats.js index 0a373d88..69d683bd 100644 --- a/src/modules/chats.js +++ b/src/modules/chats.js @@ -115,6 +115,9 @@ const chats = { }, handleMessageError ({ commit }, value) { commit('handleMessageError', { commit, ...value }) + }, + cullOlderMessages ({ commit }, chatId) { + commit('cullOlderMessages', chatId) } }, mutations: { @@ -227,6 +230,9 @@ const chats = { handleMessageError (state, { chatId, fakeId, isRetry }) { const chatMessageService = state.openedChatMessageServices[chatId] chatService.handleMessageError(chatMessageService, fakeId, isRetry) + }, + cullOlderMessages (state, chatId) { + chatService.cullOlderMessages(state.openedChatMessageServices[chatId]) } } } diff --git a/src/services/chat_service/chat_service.js b/src/services/chat_service/chat_service.js index e653ebc1..92ff689d 100644 --- a/src/services/chat_service/chat_service.js +++ b/src/services/chat_service/chat_service.js @@ -48,6 +48,22 @@ const deleteMessage = (storage, messageId) => { } } +const cullOlderMessages = (storage) => { + const maxIndex = storage.messages.length + const minIndex = maxIndex - 50 + if (maxIndex <= 50) return + + storage.messages = _.sortBy(storage.messages, ['id']) + storage.minId = storage.messages[minIndex].id + for (const message of storage.messages) { + if (message.id < storage.minId) { + delete storage.idIndex[message.id] + delete storage.idempotencyKeyIndex[message.idempotency_key] + } + } + storage.messages = storage.messages.slice(minIndex, maxIndex) +} + const handleMessageError = (storage, fakeId, isRetry) => { if (!storage) { return } const fakeMessage = storage.idIndex[fakeId] @@ -201,6 +217,7 @@ const ChatService = { empty, getView, deleteMessage, + cullOlderMessages, resetNewMessageCount, clear, handleMessageError -- cgit v1.2.3-70-g09d2 From 3f23aecd10e570f78b4142687a9a3fa349c13018 Mon Sep 17 00:00:00 2001 From: Shpuld Shpuldson Date: Tue, 23 Feb 2021 10:00:23 +0200 Subject: add sensitive by default option --- src/components/post_status_form/post_status_form.js | 4 ++-- src/components/settings_modal/tabs/general_tab.vue | 7 ++++++- src/i18n/en.json | 1 + src/modules/config.js | 3 ++- src/modules/instance.js | 1 + 5 files changed, 12 insertions(+), 4 deletions(-) (limited to 'src/modules') diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js index 4148381c..e540654b 100644 --- a/src/components/post_status_form/post_status_form.js +++ b/src/components/post_status_form/post_status_form.js @@ -115,7 +115,7 @@ const PostStatusForm = { ? this.copyMessageScope : this.$store.state.users.currentUser.default_scope - const { postContentType: contentType } = this.$store.getters.mergedConfig + const { postContentType: contentType, sensitiveByDefault } = this.$store.getters.mergedConfig return { dropFiles: [], @@ -126,7 +126,7 @@ const PostStatusForm = { newStatus: { spoilerText: this.subject || '', status: statusText, - nsfw: false, + nsfw: !!sensitiveByDefault, files: [], poll: {}, mediaDescriptions: {}, diff --git a/src/components/settings_modal/tabs/general_tab.vue b/src/components/settings_modal/tabs/general_tab.vue index f93f4ea0..9228c78e 100644 --- a/src/components/settings_modal/tabs/general_tab.vue +++ b/src/components/settings_modal/tabs/general_tab.vue @@ -144,7 +144,12 @@
  • - {{ $t('settings.minimal_scopes_mode') }} {{ minimalScopesModeDefaultValue }} + {{ $t('settings.minimal_scopes_mode') }} + +
  • +
  • + + {{ $t('settings.sensitive_by_default') }}
  • diff --git a/src/i18n/en.json b/src/i18n/en.json index 0e069785..e6acda9c 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -429,6 +429,7 @@ "subject_line_mastodon": "Like mastodon: copy as is", "subject_line_noop": "Do not copy", "post_status_content_type": "Post status content type", + "sensitive_by_default": "Mark posts as sensitive by default", "stop_gifs": "Play-on-hover GIFs", "streaming": "Enable automatic streaming of new posts when scrolled to the top", "user_mutes": "Users", diff --git a/src/modules/config.js b/src/modules/config.js index f992519e..b08903d1 100644 --- a/src/modules/config.js +++ b/src/modules/config.js @@ -67,7 +67,8 @@ export const defaultState = { greentext: undefined, // instance default hidePostStats: undefined, // instance default hideUserStats: undefined, // instance default - virtualScrolling: undefined // instance default + virtualScrolling: undefined, // instance default + sensitiveByDefault: undefined } // caching the instance default properties diff --git a/src/modules/instance.js b/src/modules/instance.js index 411b1caa..96de73ca 100644 --- a/src/modules/instance.js +++ b/src/modules/instance.js @@ -43,6 +43,7 @@ const defaultState = { subjectLineBehavior: 'email', theme: 'pleroma-dark', virtualScrolling: true, + sensitiveByDefault: false, // Nasty stuff customEmoji: [], -- cgit v1.2.3-70-g09d2 From ecb211606cddeeec809c8a6bc39f9c96a0af95f5 Mon Sep 17 00:00:00 2001 From: Shpuld Shpuldson Date: Tue, 23 Feb 2021 10:06:45 +0200 Subject: change config comment to be consistent --- src/modules/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/modules') diff --git a/src/modules/config.js b/src/modules/config.js index b08903d1..eca58c12 100644 --- a/src/modules/config.js +++ b/src/modules/config.js @@ -68,7 +68,7 @@ export const defaultState = { hidePostStats: undefined, // instance default hideUserStats: undefined, // instance default virtualScrolling: undefined, // instance default - sensitiveByDefault: undefined + sensitiveByDefault: undefined // instance default } // caching the instance default properties -- cgit v1.2.3-70-g09d2 From cd2f5ced31a3598eb8a1fcdeef47d70dabf8bb00 Mon Sep 17 00:00:00 2001 From: Shpuld Shpuldson Date: Fri, 26 Feb 2021 14:27:25 +0200 Subject: add basic validation for statusless status notifications --- CHANGELOG.md | 1 + src/modules/statuses.js | 29 ++++++++++++++++------ .../notification_utils/notification_utils.js | 7 ++++++ 3 files changed, 30 insertions(+), 7 deletions(-) (limited to 'src/modules') diff --git a/CHANGELOG.md b/CHANGELOG.md index 2685fd32..929292f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Fixed missing highlighted border in expanded conversations again - Fixed some UI jumpiness when opening images particularly in chat view - Fixed chat unread badge looking weird +- Fixed notifications crashing on an invalid notificaiton ### Changed - Display 'people voted' instead of 'votes' for multi-choice polls diff --git a/src/modules/statuses.js b/src/modules/statuses.js index 33c68c57..ac5d25c4 100644 --- a/src/modules/statuses.js +++ b/src/modules/statuses.js @@ -13,7 +13,11 @@ import { omitBy } from 'lodash' import { set } from 'vue' -import { isStatusNotification, maybeShowNotification } from '../services/notification_utils/notification_utils.js' +import { + isStatusNotification, + isValidNotification, + maybeShowNotification +} from '../services/notification_utils/notification_utils.js' import apiService from '../services/api/api.service.js' const emptyTl = (userId = 0) => ({ @@ -310,8 +314,24 @@ const addNewStatuses = (state, { statuses, showImmediately = false, timeline, us } } +const updateNotificationsMinMaxId = (state, notification) => { + state.notifications.maxId = notification.id > state.notifications.maxId + ? notification.id + : state.notifications.maxId + state.notifications.minId = notification.id < state.notifications.minId + ? notification.id + : state.notifications.minId +} + const addNewNotifications = (state, { dispatch, notifications, older, visibleNotificationTypes, rootGetters, newNotificationSideEffects }) => { each(notifications, (notification) => { + // If invalid notification, update ids but don't add it to store + if (!isValidNotification(notification)) { + console.error('Invalid notification:', notification) + updateNotificationsMinMaxId(state, notification) + return + } + if (isStatusNotification(notification.type)) { notification.action = addStatusToGlobalStorage(state, notification.action).item notification.status = notification.status && addStatusToGlobalStorage(state, notification.status).item @@ -323,12 +343,7 @@ const addNewNotifications = (state, { dispatch, notifications, older, visibleNot // Only add a new notification if we don't have one for the same action if (!state.notifications.idStore.hasOwnProperty(notification.id)) { - state.notifications.maxId = notification.id > state.notifications.maxId - ? notification.id - : state.notifications.maxId - state.notifications.minId = notification.id < state.notifications.minId - ? notification.id - : state.notifications.minId + updateNotificationsMinMaxId(state, notification) state.notifications.data.push(notification) state.notifications.idStore[notification.id] = notification diff --git a/src/services/notification_utils/notification_utils.js b/src/services/notification_utils/notification_utils.js index d912d19f..6fef1022 100644 --- a/src/services/notification_utils/notification_utils.js +++ b/src/services/notification_utils/notification_utils.js @@ -22,6 +22,13 @@ const statusNotifications = ['like', 'mention', 'repeat', 'pleroma:emoji_reactio export const isStatusNotification = (type) => includes(statusNotifications, type) +export const isValidNotification = (notification) => { + if (isStatusNotification(notification.type) && !notification.status) { + return false + } + return true +} + const sortById = (a, b) => { const seqA = Number(a.id) const seqB = Number(b.id) -- cgit v1.2.3-70-g09d2 From 0673511fc246d67356dd656ad81ba401e3179108 Mon Sep 17 00:00:00 2001 From: Shpuld Shpuldson Date: Wed, 3 Mar 2021 16:46:53 +0200 Subject: fix shoutbox header, use custom scroll-to-bottom system, remove vue-chat-scroll, temporarily add chat test hack --- package.json | 1 - src/App.vue | 2 +- src/components/chat_panel/chat_panel.js | 12 ++++++++++++ src/components/chat_panel/chat_panel.vue | 15 ++++++++++----- src/main.js | 2 -- src/modules/chat.js | 19 +++++++++++++++++++ yarn.lock | 4 ---- 7 files changed, 42 insertions(+), 13 deletions(-) (limited to 'src/modules') diff --git a/package.json b/package.json index 372155df..8dbf2503 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,6 @@ "punycode.js": "^2.1.0", "v-click-outside": "^2.1.1", "vue": "^2.6.11", - "vue-chat-scroll": "^1.2.1", "vue-i18n": "^7.3.2", "vue-router": "^3.0.1", "vue-template-compiler": "^2.6.11", diff --git a/src/App.vue b/src/App.vue index 1a166778..e09ce4c8 100644 --- a/src/App.vue +++ b/src/App.vue @@ -50,7 +50,7 @@ diff --git a/src/components/chat_panel/chat_panel.js b/src/components/chat_panel/chat_panel.js index c3887098..556694ae 100644 --- a/src/components/chat_panel/chat_panel.js +++ b/src/components/chat_panel/chat_panel.js @@ -35,6 +35,18 @@ const chatPanel = { userProfileLink (user) { return generateProfileLink(user.id, user.username, this.$store.state.instance.restrictedNicknames) } + }, + watch: { + messages (newVal) { + const scrollEl = this.$el.querySelector('.chat-window') + if (!scrollEl) return + if (scrollEl.scrollTop + scrollEl.offsetHeight + 20 > scrollEl.scrollHeight) { + this.$nextTick(() => { + if (!scrollEl) return + scrollEl.scrollTop = scrollEl.scrollHeight - scrollEl.offsetHeight + }) + } + } } } diff --git a/src/components/chat_panel/chat_panel.vue b/src/components/chat_panel/chat_panel.vue index 7993c94d..8a829115 100644 --- a/src/components/chat_panel/chat_panel.vue +++ b/src/components/chat_panel/chat_panel.vue @@ -10,17 +10,15 @@ @click.stop.prevent="togglePanel" >
    - {{ $t('shoutbox.title') }} + {{ $t('shoutbox.title') }}
    -
    +
    { + id += 1 + return { + text: 'test' + id, + author: { + username: 'test', + avatar: '', + id + } + } + } + + const loop = () => { + store.commit('addMessage', createmsg()) + setTimeout(loop, 3000) + } + loop() + channel.on('new_msg', (msg) => { store.commit('addMessage', msg) }) diff --git a/yarn.lock b/yarn.lock index 6d0095db..80c09312 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8923,10 +8923,6 @@ void-elements@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" -vue-chat-scroll@^1.2.1: - version "1.3.5" - resolved "https://registry.yarnpkg.com/vue-chat-scroll/-/vue-chat-scroll-1.3.5.tgz#a5ee5bae5058f614818a96eac5ee3be4394a2f68" - vue-eslint-parser@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz#00f4e4da94ec974b821a26ff0ed0f7a78402b8a1" -- cgit v1.2.3-70-g09d2 From becacf064303f0fceca8def3f1c49248b9d3e5f8 Mon Sep 17 00:00:00 2001 From: Shpuld Shpuldson Date: Wed, 3 Mar 2021 16:47:59 +0200 Subject: remove shoutbox test hacks --- src/App.vue | 2 +- src/modules/chat.js | 18 ------------------ 2 files changed, 1 insertion(+), 19 deletions(-) (limited to 'src/modules') diff --git a/src/App.vue b/src/App.vue index e09ce4c8..1a166778 100644 --- a/src/App.vue +++ b/src/App.vue @@ -50,7 +50,7 @@
    diff --git a/src/modules/chat.js b/src/modules/chat.js index 264ba00b..ffeb272b 100644 --- a/src/modules/chat.js +++ b/src/modules/chat.js @@ -18,24 +18,6 @@ const chat = { actions: { initializeChat (store, socket) { const channel = socket.channel('chat:public') - let id = 0 - const createmsg = () => { - id += 1 - return { - text: 'test' + id, - author: { - username: 'test', - avatar: '', - id - } - } - } - - const loop = () => { - store.commit('addMessage', createmsg()) - setTimeout(loop, 3000) - } - loop() channel.on('new_msg', (msg) => { store.commit('addMessage', msg) -- cgit v1.2.3-70-g09d2