summaryrefslogtreecommitdiff
path: root/packages/backend/src/core/NoteCreateService.ts
diff options
context:
space:
mode:
authorMarie <github@yuugi.dev>2024-10-15 21:50:32 +0000
committerMarie <github@yuugi.dev>2024-10-15 21:50:32 +0000
commit7647aa637a997937f0c85f955f260050b74f1bda (patch)
treeaf36317d6a784496bf9cd8a424bff9df25b4c507 /packages/backend/src/core/NoteCreateService.ts
parentmerge: Add filter options to following feed (resolves #726) (!671) (diff)
parentadd unit tests for `SkLatestNote.areEquivalent` (diff)
downloadsharkey-7647aa637a997937f0c85f955f260050b74f1bda.tar.gz
sharkey-7647aa637a997937f0c85f955f260050b74f1bda.tar.bz2
sharkey-7647aa637a997937f0c85f955f260050b74f1bda.zip
merge: Improvements and tweaks to latest note handling (resolves #744) (!688)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/688 Closes #744 Approved-by: dakkar <dakkar@thenautilus.net> Approved-by: Marie <github@yuugi.dev>
Diffstat (limited to 'packages/backend/src/core/NoteCreateService.ts')
-rw-r--r--packages/backend/src/core/NoteCreateService.ts38
1 files changed, 6 insertions, 32 deletions
diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts
index cbc9dcaf8f..cd497a7d87 100644
--- a/packages/backend/src/core/NoteCreateService.ts
+++ b/packages/backend/src/core/NoteCreateService.ts
@@ -14,8 +14,7 @@ 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 { SkLatestNote } from '@/models/LatestNote.js';
-import type { ChannelFollowingsRepository, ChannelsRepository, FollowingsRepository, InstancesRepository, LatestNotesRepository, MiFollowing, MutingsRepository, NotesRepository, NoteThreadMutingsRepository, UserListMembershipsRepository, UserProfilesRepository, UsersRepository } from '@/models/_.js';
+import type { ChannelFollowingsRepository, ChannelsRepository, FollowingsRepository, InstancesRepository, MiFollowing, MutingsRepository, NotesRepository, NoteThreadMutingsRepository, UserListMembershipsRepository, UserProfilesRepository, UsersRepository } from '@/models/_.js';
import type { MiDriveFile } from '@/models/DriveFile.js';
import type { MiApp } from '@/models/App.js';
import { concat } from '@/misc/prelude/array.js';
@@ -63,7 +62,7 @@ import { isReply } from '@/misc/is-reply.js';
import { trackPromise } from '@/misc/promise-tracker.js';
import { isUserRelated } from '@/misc/is-user-related.js';
import { IdentifiableError } from '@/misc/identifiable-error.js';
-import { isPureRenote } from '@/misc/is-renote.js';
+import { LatestNoteService } from '@/core/LatestNoteService.js';
type NotificationType = 'reply' | 'renote' | 'quote' | 'mention';
@@ -172,9 +171,6 @@ export class NoteCreateService implements OnApplicationShutdown {
@Inject(DI.notesRepository)
private notesRepository: NotesRepository,
- @Inject(DI.latestNotesRepository)
- private latestNotesRepository: LatestNotesRepository,
-
@Inject(DI.mutingsRepository)
private mutingsRepository: MutingsRepository,
@@ -226,6 +222,7 @@ export class NoteCreateService implements OnApplicationShutdown {
private utilityService: UtilityService,
private userBlockingService: UserBlockingService,
private cacheService: CacheService,
+ private latestNoteService: LatestNoteService,
) { }
@bindThis
@@ -531,8 +528,6 @@ export class NoteCreateService implements OnApplicationShutdown {
await this.notesRepository.insert(insert);
}
- await this.updateLatestNote(insert);
-
return insert;
} catch (e) {
// duplicate key error
@@ -815,6 +810,9 @@ export class NoteCreateService implements OnApplicationShutdown {
});
}
+ // Update the Latest Note index / following feed
+ this.latestNoteService.handleCreatedNoteBG(note);
+
// Register to search database
if (!user.noindex) this.index(note);
}
@@ -1144,28 +1142,4 @@ export class NoteCreateService implements OnApplicationShutdown {
public onApplicationShutdown(signal?: string | undefined): void {
this.dispose();
}
-
- private async updateLatestNote(note: MiNote) {
- // Ignore DMs.
- // Followers-only posts are *included*, as this table is used to back the "following" feed.
- if (note.visibility === 'specified') return;
-
- // Ignore pure renotes
- if (isPureRenote(note)) return;
-
- // Compute the compound key of the entry to check
- const key = SkLatestNote.keyFor(note);
-
- // Make sure that this isn't an *older* post.
- // We can get older posts through replies, lookups, etc.
- const currentLatest = await this.latestNotesRepository.findOneBy(key);
- if (currentLatest != null && currentLatest.noteId >= note.id) return;
-
- // Record this as the latest note for the given user
- const latestNote = new SkLatestNote({
- ...key,
- noteId: note.id,
- });
- await this.latestNotesRepository.upsert(latestNote, ['userId', 'isPublic', 'isReply', 'isQuote']);
- }
}