From 9656c9b96919f17647adda80ba187a4f5b2299e1 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Mon, 18 Jan 2021 15:54:12 -0600 Subject: Support old user.deactivated and new user.is_active fields --- src/services/entity_normalizer/entity_normalizer.service.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/services') diff --git a/src/services/entity_normalizer/entity_normalizer.service.js b/src/services/entity_normalizer/entity_normalizer.service.js index 625f593e..a199ebd0 100644 --- a/src/services/entity_normalizer/entity_normalizer.service.js +++ b/src/services/entity_normalizer/entity_normalizer.service.js @@ -188,7 +188,9 @@ export const parseUser = (data) => { output.follow_request_count = data.pleroma.follow_request_count output.tags = data.pleroma.tags - output.deactivated = data.pleroma.deactivated + // deactivated was changed to is_active in Pleroma 2.3.0 + // backwards compatability kept for now + output.deactivated = data.pleroma.deactivated ? !data.pleroma.is_active : data.pleroma.deactivated output.notification_settings = data.pleroma.notification_settings output.unread_chat_count = data.pleroma.unread_chat_count -- cgit v1.2.3-70-g09d2 From 36e56354e448b3c2106668f353dedcab5fde794d Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 19 Jan 2021 10:01:55 -0600 Subject: More robust backwards compatibility --- src/services/entity_normalizer/entity_normalizer.service.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/services') diff --git a/src/services/entity_normalizer/entity_normalizer.service.js b/src/services/entity_normalizer/entity_normalizer.service.js index a199ebd0..d6d84d9a 100644 --- a/src/services/entity_normalizer/entity_normalizer.service.js +++ b/src/services/entity_normalizer/entity_normalizer.service.js @@ -188,9 +188,12 @@ export const parseUser = (data) => { output.follow_request_count = data.pleroma.follow_request_count output.tags = data.pleroma.tags + // deactivated was changed to is_active in Pleroma 2.3.0 - // backwards compatability kept for now - output.deactivated = data.pleroma.deactivated ? !data.pleroma.is_active : data.pleroma.deactivated + // so check if is_active is present + output.deactivated = typeof data.pleroma.is_active !== undefined + ? !data.pleroma.is_active // new backend + : data.pleroma.deactivated // old backend output.notification_settings = data.pleroma.notification_settings output.unread_chat_count = data.pleroma.unread_chat_count -- cgit v1.2.3-70-g09d2 From 831cf9eafb193acb3cce1c3b5f705819ea41912b Mon Sep 17 00:00:00 2001 From: feld Date: Wed, 20 Jan 2021 16:04:49 +0000 Subject: Apply 1 suggestion(s) to 1 file(s) --- src/services/entity_normalizer/entity_normalizer.service.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/services') diff --git a/src/services/entity_normalizer/entity_normalizer.service.js b/src/services/entity_normalizer/entity_normalizer.service.js index d6d84d9a..6ed663e1 100644 --- a/src/services/entity_normalizer/entity_normalizer.service.js +++ b/src/services/entity_normalizer/entity_normalizer.service.js @@ -191,7 +191,7 @@ export const parseUser = (data) => { // deactivated was changed to is_active in Pleroma 2.3.0 // so check if is_active is present - output.deactivated = typeof data.pleroma.is_active !== undefined + output.deactivated = typeof data.pleroma.is_active !== 'undefined' ? !data.pleroma.is_active // new backend : data.pleroma.deactivated // old backend -- cgit v1.2.3-70-g09d2 From 11c7355749b6e0180841dd02604a06dd924dd217 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 20 Jan 2021 23:49:34 +0300 Subject: Use native language names in the language picker This seems more intuitive to me and is what I've seen in most other language pickers. --- CHANGELOG.md | 1 + .../interface_language_switcher.vue | 28 ++++++++++------------ src/services/locale/locale.service.js | 12 ++++++++++ 3 files changed, 26 insertions(+), 15 deletions(-) create mode 100644 src/services/locale/locale.service.js (limited to 'src/services') diff --git a/CHANGELOG.md b/CHANGELOG.md index 40c1d982..2d751bf3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed - Don't filter own posts when they hit your wordfilter +- Language picker now uses native language names ## [2.2.2] - 2020-12-22 ### Added diff --git a/src/components/interface_language_switcher/interface_language_switcher.vue b/src/components/interface_language_switcher/interface_language_switcher.vue index 524ec5e9..dc3bd408 100644 --- a/src/components/interface_language_switcher/interface_language_switcher.vue +++ b/src/components/interface_language_switcher/interface_language_switcher.vue @@ -12,11 +12,11 @@ v-model="language" > import languagesObject from '../../i18n/messages' +import localeService from '../../services/locale/locale.service.js' import ISO6391 from 'iso-639-1' import _ from 'lodash' import { library } from '@fortawesome/fontawesome-svg-core' @@ -42,12 +43,8 @@ library.add( export default { computed: { - languageCodes () { - return languagesObject.languages - }, - - languageNames () { - return _.map(this.languageCodes, this.getLanguageName) + languages () { + return _.map(languagesObject.languages, (code) => ({ code: code, name: this.getLanguageName(code) })).sort((a, b) => a.name.localeCompare(b.name)) }, language: { @@ -61,12 +58,13 @@ export default { methods: { getLanguageName (code) { const specialLanguageNames = { - 'ja': 'Japanese (日本語)', - 'ja_easy': 'Japanese (やさしいにほんご)', - 'zh': 'Simplified Chinese (简体中文)', - 'zh_Hant': 'Traditional Chinese (繁體中文)' + 'ja_easy': 'やさしいにほんご', + 'zh': '简体中文', + 'zh_Hant': '繁體中文' } - return specialLanguageNames[code] || ISO6391.getName(code) + const languageName = specialLanguageNames[code] || ISO6391.getNativeName(code) + const browserLocale = localeService.internalToBrowserLocale(code) + return languageName.charAt(0).toLocaleUpperCase(browserLocale) + languageName.slice(1) } } } diff --git a/src/services/locale/locale.service.js b/src/services/locale/locale.service.js new file mode 100644 index 00000000..5be99d81 --- /dev/null +++ b/src/services/locale/locale.service.js @@ -0,0 +1,12 @@ +const specialLanguageCodes = { + 'ja_easy': 'ja', + 'zh_Hant': 'zh-HANT' +} + +const internalToBrowserLocale = code => specialLanguageCodes[code] || code + +const localeService = { + internalToBrowserLocale +} + +export default localeService -- cgit v1.2.3-70-g09d2 From 272ba8f7a926a4852dc01d05f2904cc57da3c8fd Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Sat, 23 Jan 2021 13:58:40 +0200 Subject: Fix p's weird corrupt theme data crashing theme engine --- src/services/style_setter/style_setter.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'src/services') diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index 07425abd..0fb8f92a 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -242,9 +242,18 @@ export const generateShadows = (input, colors) => { panelHeader: 'panel', input: 'input' } - const inputShadows = input.shadows && !input.themeEngineVersion - ? shadows2to3(input.shadows, input.opacity) - : input.shadows || {} + + const cleanInputShadows = Object.fromEntries( + Object.entries(input.shadows) + .map(([name, shadowSlot]) => [ + name, + // defaulting color to black to avoid potential problems + shadowSlot.map(shadowDef => ({ color: '#000000', ...shadowDef })) + ]) + ) + const inputShadows = cleanInputShadows && !input.themeEngineVersion + ? shadows2to3(cleanInputShadows, input.opacity) + : cleanInputShadows || {} const shadows = Object.entries({ ...DEFAULT_SHADOWS, ...inputShadows -- cgit v1.2.3-70-g09d2 From 2576b750594ac78097fab83a101c21b2fd1925fc Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 28 Jan 2021 14:05:32 +0200 Subject: fallback if shadows aren't defined --- src/services/style_setter/style_setter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/services') diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index 0fb8f92a..a2bba67b 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -244,7 +244,7 @@ export const generateShadows = (input, colors) => { } const cleanInputShadows = Object.fromEntries( - Object.entries(input.shadows) + Object.entries(input.shadows || {}) .map(([name, shadowSlot]) => [ name, // defaulting color to black to avoid potential problems -- 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/services') 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 09fe160e8b9fad7a8c70e44ae894d67211b993e1 Mon Sep 17 00:00:00 2001 From: Shpuld Shpuldson Date: Fri, 26 Feb 2021 16:23:11 +0200 Subject: separate screen_name and screen_name_ui with decoded punycode --- CHANGELOG.md | 1 + src/components/basic_user_card/basic_user_card.vue | 2 +- src/components/chat/chat.js | 2 +- src/components/chat_title/chat_title.js | 2 +- src/components/emoji_input/suggestor.js | 4 ++-- src/components/notification/notification.vue | 10 +++++----- src/components/status/status.js | 4 ++-- src/components/status/status.vue | 6 +++--- src/components/user_avatar/user_avatar.vue | 4 ++-- src/components/user_card/user_card.vue | 4 ++-- src/components/user_list_popover/user_list_popover.vue | 2 +- src/components/user_reporting_modal/user_reporting_modal.vue | 2 +- src/services/entity_normalizer/entity_normalizer.service.js | 5 +++-- .../specs/services/entity_normalizer/entity_normalizer.spec.js | 2 +- 14 files changed, 26 insertions(+), 24 deletions(-) (limited to 'src/services') diff --git a/CHANGELOG.md b/CHANGELOG.md index 2685fd32..20d96f98 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 punycode names not working properly ### Changed - Display 'people voted' instead of 'votes' for multi-choice polls diff --git a/src/components/basic_user_card/basic_user_card.vue b/src/components/basic_user_card/basic_user_card.vue index 9e410610..c53f6a9c 100644 --- a/src/components/basic_user_card/basic_user_card.vue +++ b/src/components/basic_user_card/basic_user_card.vue @@ -42,7 +42,7 @@ class="basic-user-card-screen-name" :to="userProfileLink(user)" > - @{{ user.screen_name }} + @{{ user.screen_name_ui }} diff --git a/src/components/chat/chat.js b/src/components/chat/chat.js index 2780be75..b54f5fb2 100644 --- a/src/components/chat/chat.js +++ b/src/components/chat/chat.js @@ -73,7 +73,7 @@ const Chat = { }, formPlaceholder () { if (this.recipient) { - return this.$t('chats.message_user', { nickname: this.recipient.screen_name }) + return this.$t('chats.message_user', { nickname: this.recipient.screen_name_ui }) } else { return '' } diff --git a/src/components/chat_title/chat_title.js b/src/components/chat_title/chat_title.js index e424bb1f..edfbe7a4 100644 --- a/src/components/chat_title/chat_title.js +++ b/src/components/chat_title/chat_title.js @@ -12,7 +12,7 @@ export default Vue.component('chat-title', { ], computed: { title () { - return this.user ? this.user.screen_name : '' + return this.user ? this.user.screen_name_ui : '' }, htmlTitle () { return this.user ? this.user.name_html : '' diff --git a/src/components/emoji_input/suggestor.js b/src/components/emoji_input/suggestor.js index 14a2b41e..e8efbd1e 100644 --- a/src/components/emoji_input/suggestor.js +++ b/src/components/emoji_input/suggestor.js @@ -116,8 +116,8 @@ export const suggestUsers = ({ dispatch, state }) => { return diff + nameAlphabetically + screenNameAlphabetically /* eslint-disable camelcase */ - }).map(({ screen_name, name, profile_image_url_original }) => ({ - displayText: screen_name, + }).map(({ screen_name, screen_name_ui, name, profile_image_url_original }) => ({ + displayText: screen_name_ui, detailText: name, imageUrl: profile_image_url_original, replacement: '@' + screen_name + ' ' diff --git a/src/components/notification/notification.vue b/src/components/notification/notification.vue index f56aa977..0081dee4 100644 --- a/src/components/notification/notification.vue +++ b/src/components/notification/notification.vue @@ -11,7 +11,7 @@ > - {{ notification.from_profile.screen_name }} + {{ notification.from_profile.screen_name_ui }}