From 0110fd86c2f166de5be8d675ffa34ab815463b2d Mon Sep 17 00:00:00 2001 From: tusooa Date: Wed, 27 Dec 2023 22:30:19 -0500 Subject: [PATCH 1/6] Allow user to mark account as group --- src/boot/after_store.js | 1 + src/components/settings_modal/tabs/profile_tab.js | 10 ++++++++-- .../settings_modal/tabs/profile_tab.vue | 15 ++++++++++++--- src/i18n/en.json | 5 ++++- src/modules/instance.js | 1 + .../entity_normalizer.service.js | 1 + 6 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/boot/after_store.js b/src/boot/after_store.js index 84fea95439..7039f85a60 100644 --- a/src/boot/after_store.js +++ b/src/boot/after_store.js @@ -261,6 +261,7 @@ const getNodeInfo = async ({ store }) => { store.dispatch('setInstanceOption', { name: 'pollLimits', value: metadata.pollLimits }) store.dispatch('setInstanceOption', { name: 'mailerEnabled', value: metadata.mailerEnabled }) store.dispatch('setInstanceOption', { name: 'quotingAvailable', value: features.includes('quote_posting') }) + store.dispatch('setInstanceOption', { name: 'groupActorAvailable', value: features.includes('pleroma:group_actors') }) const uploadLimits = metadata.uploadLimits store.dispatch('setInstanceOption', { name: 'uploadlimit', value: parseInt(uploadLimits.general) }) diff --git a/src/components/settings_modal/tabs/profile_tab.js b/src/components/settings_modal/tabs/profile_tab.js index eeacad489b..3cb3ae4506 100644 --- a/src/components/settings_modal/tabs/profile_tab.js +++ b/src/components/settings_modal/tabs/profile_tab.js @@ -9,6 +9,7 @@ import suggestor from 'src/components/emoji_input/suggestor.js' import Autosuggest from 'src/components/autosuggest/autosuggest.vue' import Checkbox from 'src/components/checkbox/checkbox.vue' import InterfaceLanguageSwitcher from 'src/components/interface_language_switcher/interface_language_switcher.vue' +import Select from 'src/components/select/select.vue' import BooleanSetting from '../helpers/boolean_setting.vue' import SharedComputedObject from '../helpers/shared_computed_object.js' import localeService from 'src/services/locale/locale.service.js' @@ -39,6 +40,7 @@ const ProfileTab = { showRole: this.$store.state.users.currentUser.show_role, role: this.$store.state.users.currentUser.role, bot: this.$store.state.users.currentUser.bot, + actorType: this.$store.state.users.currentUser.actor_type, pickAvatarBtnVisible: true, bannerUploading: false, backgroundUploading: false, @@ -57,7 +59,8 @@ const ProfileTab = { ProgressButton, Checkbox, BooleanSetting, - InterfaceLanguageSwitcher + InterfaceLanguageSwitcher, + Select }, computed: { user () { @@ -116,6 +119,9 @@ const ProfileTab = { bannerImgSrc () { const src = this.$store.state.users.currentUser.cover_photo return (!src) ? this.defaultBanner : src + }, + availableActorTypes () { + return this.$store.state.instance.groupActorAvailable ? ['Person', 'Service', 'Group'] : ['Person', 'Service'] } }, methods: { @@ -127,7 +133,7 @@ const ProfileTab = { /* eslint-disable camelcase */ display_name: this.newName, fields_attributes: this.newFields.filter(el => el != null), - bot: this.bot, + actor_type: this.actorType, show_role: this.showRole, birthday: this.newBirthday || '', show_birthday: this.showBirthday diff --git a/src/components/settings_modal/tabs/profile_tab.vue b/src/components/settings_modal/tabs/profile_tab.vue index 1cc850cbfa..e6dc59872b 100644 --- a/src/components/settings_modal/tabs/profile_tab.vue +++ b/src/components/settings_modal/tabs/profile_tab.vue @@ -109,9 +109,18 @@

- - {{ $t('settings.bot') }} - +

{ output.show_role = data.source.pleroma.show_role output.discoverable = data.source.pleroma.discoverable output.show_birthday = data.pleroma.show_birthday + output.actor_type = data.source.pleroma.actor_type } } From 4777bec85fd5488c5c50d5452efe26a51f90f53e Mon Sep 17 00:00:00 2001 From: tusooa Date: Wed, 27 Dec 2023 22:36:13 -0500 Subject: [PATCH 2/6] Add a description on what groups do --- src/components/settings_modal/tabs/profile_tab.js | 5 ++++- src/components/settings_modal/tabs/profile_tab.vue | 5 +++++ src/i18n/en.json | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/components/settings_modal/tabs/profile_tab.js b/src/components/settings_modal/tabs/profile_tab.js index 3cb3ae4506..dee1745081 100644 --- a/src/components/settings_modal/tabs/profile_tab.js +++ b/src/components/settings_modal/tabs/profile_tab.js @@ -120,8 +120,11 @@ const ProfileTab = { const src = this.$store.state.users.currentUser.cover_photo return (!src) ? this.defaultBanner : src }, + groupActorAvailable () { + return this.$store.state.instance.groupActorAvailable + }, availableActorTypes () { - return this.$store.state.instance.groupActorAvailable ? ['Person', 'Service', 'Group'] : ['Person', 'Service'] + return this.groupActorAvailable ? ['Person', 'Service', 'Group'] : ['Person', 'Service'] } }, methods: { diff --git a/src/components/settings_modal/tabs/profile_tab.vue b/src/components/settings_modal/tabs/profile_tab.vue index e6dc59872b..de5219a7be 100644 --- a/src/components/settings_modal/tabs/profile_tab.vue +++ b/src/components/settings_modal/tabs/profile_tab.vue @@ -122,6 +122,11 @@

+
+ + {{ $t('settings.actor_type_description') }} + +

Date: Wed, 27 Dec 2023 22:40:07 -0500 Subject: [PATCH 3/6] Make user card group-aware --- src/components/user_card/user_card.vue | 8 +++++++- src/i18n/en.json | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue index 2de14063de..2c76a22086 100644 --- a/src/components/user_card/user_card.vue +++ b/src/components/user_card/user_card.vue @@ -124,11 +124,17 @@ {{ $t(`general.role.${visibleRole}`) }} {{ $t('user_card.bot') }} + + {{ $t('user_card.group') }} + Date: Wed, 27 Dec 2023 22:54:44 -0500 Subject: [PATCH 4/6] Implement indicator for groups --- src/components/settings_modal/tabs/filtering_tab.vue | 2 +- src/components/status/status.js | 10 ++-------- src/components/status/status.vue | 6 +++--- src/components/user_avatar/user_avatar.js | 8 +++++--- src/components/user_avatar/user_avatar.vue | 11 ++++++++--- src/i18n/en.json | 2 +- 6 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/components/settings_modal/tabs/filtering_tab.vue b/src/components/settings_modal/tabs/filtering_tab.vue index 89fdef1a89..9e82fcfdcd 100644 --- a/src/components/settings_modal/tabs/filtering_tab.vue +++ b/src/components/settings_modal/tabs/filtering_tab.vue @@ -51,7 +51,7 @@

  • - {{ $t('settings.hide_bot_indication') }} + {{ $t('settings.hide_actor_type_indication') }}
  • @@ -133,7 +133,7 @@ >
    diff --git a/src/components/user_avatar/user_avatar.js b/src/components/user_avatar/user_avatar.js index 33d9a2580b..ffd81f87cb 100644 --- a/src/components/user_avatar/user_avatar.js +++ b/src/components/user_avatar/user_avatar.js @@ -3,11 +3,13 @@ import StillImage from '../still-image/still-image.vue' import { library } from '@fortawesome/fontawesome-svg-core' import { - faRobot + faRobot, + faPeopleGroup } from '@fortawesome/free-solid-svg-icons' library.add( - faRobot + faRobot, + faPeopleGroup ) const UserAvatar = { @@ -15,7 +17,7 @@ const UserAvatar = { 'user', 'betterShadow', 'compact', - 'bot' + 'showActorTypeIndicator' ], data () { return { diff --git a/src/components/user_avatar/user_avatar.vue b/src/components/user_avatar/user_avatar.vue index 91c176118d..3cbccec3c7 100644 --- a/src/components/user_avatar/user_avatar.vue +++ b/src/components/user_avatar/user_avatar.vue @@ -18,9 +18,14 @@ :class="{ '-compact': compact }" /> + @@ -79,7 +84,7 @@ height: 100%; } - .bot-indicator { + .actor-type-indicator { position: absolute; bottom: 0; right: 0; diff --git a/src/i18n/en.json b/src/i18n/en.json index bb93f26f85..7109882219 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -499,7 +499,7 @@ "hide_media_previews": "Hide media previews", "hide_muted_posts": "Hide posts of muted users", "mute_bot_posts": "Mute bot posts", - "hide_bot_indication": "Hide bot indication in posts", + "hide_actor_type_indication": "Hide actor type (bots, groups, etc.) indication in posts", "hide_scrobbles": "Hide scrobbles", "hide_all_muted_posts": "Hide muted posts", "max_thumbnails": "Maximum amount of thumbnails per post (empty = no limit)", From a709127a3c9b20d9d6cca6d9d4f00754a4726428 Mon Sep 17 00:00:00 2001 From: tusooa Date: Wed, 27 Dec 2023 22:55:58 -0500 Subject: [PATCH 5/6] Use actor type to determine whether a user is a bot --- src/components/status/status.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/status/status.js b/src/components/status/status.js index 458c8554bc..8f22b70843 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -233,7 +233,7 @@ const Status = { return muteWordHits(this.status, this.muteWords) }, botStatus () { - return this.status.user.bot + return this.status.user.actor_type === 'Service' }, showActorTypeIndicator () { return !this.hideBotIndication From 16f326216a7e3b560bd33b58f6f6cf44fb81ad54 Mon Sep 17 00:00:00 2001 From: tusooa Date: Wed, 27 Dec 2023 22:56:47 -0500 Subject: [PATCH 6/6] Add changelog for group actors --- changelog.d/group-actor.add | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/group-actor.add diff --git a/changelog.d/group-actor.add b/changelog.d/group-actor.add new file mode 100644 index 0000000000..7b62676ae3 --- /dev/null +++ b/changelog.d/group-actor.add @@ -0,0 +1 @@ +Support group actors