From 65a2ea6a74fbcb56216d667a9feb8259f744d30d Mon Sep 17 00:00:00 2001 From: Mar0xy Date: Thu, 30 Nov 2023 02:11:47 +0100 Subject: upd: improve post editing on polls Fixes not being able to edit post if poll expiry was set and now checks properly if poll was edited or not --- packages/backend/src/core/NoteEditService.ts | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) (limited to 'packages/backend/src/core') diff --git a/packages/backend/src/core/NoteEditService.ts b/packages/backend/src/core/NoteEditService.ts index dfcff0e5b1..e5918e6c2f 100644 --- a/packages/backend/src/core/NoteEditService.ts +++ b/packages/backend/src/core/NoteEditService.ts @@ -14,18 +14,15 @@ import { extractCustomEmojisFromMfm } from '@/misc/extract-custom-emojis-from-mf import { extractHashtags } from '@/misc/extract-hashtags.js'; import type { IMentionedRemoteUsers } from '@/models/Note.js'; import { MiNote } from '@/models/Note.js'; -import type { NoteEditRepository, ChannelFollowingsRepository, ChannelsRepository, FollowingsRepository, InstancesRepository, MiFollowing, MutingsRepository, NotesRepository, NoteThreadMutingsRepository, UserListMembershipsRepository, UserProfilesRepository, UsersRepository } from '@/models/_.js'; +import type { NoteEditRepository, ChannelFollowingsRepository, ChannelsRepository, FollowingsRepository, InstancesRepository, MiFollowing, MutingsRepository, NotesRepository, NoteThreadMutingsRepository, UserListMembershipsRepository, UserProfilesRepository, UsersRepository, PollsRepository } from '@/models/_.js'; import type { MiDriveFile } from '@/models/DriveFile.js'; import type { MiApp } from '@/models/App.js'; import { concat } from '@/misc/prelude/array.js'; import { IdService } from '@/core/IdService.js'; import type { MiUser, MiLocalUser, MiRemoteUser } from '@/models/User.js'; import { MiPoll, type IPoll } from '@/models/Poll.js'; -import { checkWordMute } from '@/misc/check-word-mute.js'; import type { MiChannel } from '@/models/Channel.js'; import { normalizeForSearch } from '@/misc/normalize-for-search.js'; -import { MemorySingleCache } from '@/misc/cache.js'; -import type { MiUserProfile } from '@/models/UserProfile.js'; import { RelayService } from '@/core/RelayService.js'; import { FederatedInstanceService } from '@/core/FederatedInstanceService.js'; import { DI } from '@/di-symbols.js'; @@ -35,7 +32,6 @@ import ActiveUsersChart from '@/core/chart/charts/active-users.js'; import { GlobalEventService } from '@/core/GlobalEventService.js'; import { NotificationService } from '@/core/NotificationService.js'; import { WebhookService } from '@/core/WebhookService.js'; -import { HashtagService } from '@/core/HashtagService.js'; import { QueueService } from '@/core/QueueService.js'; import { NoteEntityService } from '@/core/entities/NoteEntityService.js'; import { UserEntityService } from '@/core/entities/UserEntityService.js'; @@ -48,11 +44,7 @@ import { DB_MAX_NOTE_TEXT_LENGTH } from '@/const.js'; import { RoleService } from '@/core/RoleService.js'; import { MetaService } from '@/core/MetaService.js'; import { SearchService } from '@/core/SearchService.js'; -import { FeaturedService } from '@/core/FeaturedService.js'; import { FunoutTimelineService } from '@/core/FunoutTimelineService.js'; -import { AntennaService } from './AntennaService.js'; -import NotesChart from './chart/charts/notes.js'; -import PerUserNotesChart from './chart/charts/per-user-notes.js'; import { UtilityService } from '@/core/UtilityService.js'; type NotificationType = 'reply' | 'renote' | 'quote' | 'mention'; @@ -191,6 +183,9 @@ export class NoteEditService implements OnApplicationShutdown { @Inject(DI.noteEditRepository) private noteEditRepository: NoteEditRepository, + @Inject(DI.pollsRepository) + private pollsRepository: PollsRepository, + private userEntityService: UserEntityService, private noteEntityService: NoteEntityService, private idService: IdService, @@ -201,18 +196,13 @@ export class NoteEditService implements OnApplicationShutdown { private notificationService: NotificationService, private relayService: RelayService, private federatedInstanceService: FederatedInstanceService, - private hashtagService: HashtagService, - private antennaService: AntennaService, private webhookService: WebhookService, - private featuredService: FeaturedService, private remoteUserResolveService: RemoteUserResolveService, private apDeliverManagerService: ApDeliverManagerService, private apRendererService: ApRendererService, private roleService: RoleService, private metaService: MetaService, private searchService: SearchService, - private notesChart: NotesChart, - private perUserNotesChart: PerUserNotesChart, private activeUsersChart: ActiveUsersChart, private instanceChart: InstanceChart, private utilityService: UtilityService, @@ -385,6 +375,10 @@ export class NoteEditService implements OnApplicationShutdown { update.hasPoll = !!data.poll; } + const poll = await this.pollsRepository.findOneBy({ noteId: oldnote.id }); + + const oldPoll = poll ? { choices: poll.choices, multiple: poll.multiple, expiresAt: poll.expiresAt } : null; + if (Object.keys(update).length > 0) { const exists = await this.noteEditRepository.findOneBy({ noteId: oldnote.id }); @@ -456,7 +450,7 @@ export class NoteEditService implements OnApplicationShutdown { })); } - if (data.poll != null) { + if (data.poll != null && JSON.stringify(data.poll) !== JSON.stringify(oldPoll)) { // Start transaction await this.db.transaction(async transactionalEntityManager => { await transactionalEntityManager.update(MiNote, oldnote.id, note); -- cgit v1.2.3-freya