mirror of
https://codeberg.org/yeentown/barkey.git
synced 2025-04-28 17:46:56 +00:00
handle scheduled notes when migrating account - fixes #931
I'm not sure we want the "change ownership of notes if dst is local", though
This commit is contained in:
parent
acf1b661a2
commit
687cb5b168
3 changed files with 33 additions and 2 deletions
1
locales/index.d.ts
vendored
1
locales/index.d.ts
vendored
|
@ -5904,6 +5904,7 @@ export interface Locale extends ILocale {
|
|||
* ・Followers from this account will automatically be migrated to the new account
|
||||
* ・This account will unfollow all users it is currently following
|
||||
* ・You will be unable to create new notes etc. on this account
|
||||
* ・Scheduled notes will be migrated to the new account if it's on this same instance
|
||||
*
|
||||
* While migration of followers is automatic, you must manually prepare some steps to migrate the list of users you are following. To do so, carry out a follows export that you will later import on the new account in the settings menu. The same procedure applies to your lists as well as your muted and blocked users.
|
||||
*
|
||||
|
|
|
@ -9,7 +9,7 @@ import { IsNull, In, MoreThan, Not } from 'typeorm';
|
|||
import { bindThis } from '@/decorators.js';
|
||||
import { DI } from '@/di-symbols.js';
|
||||
import type { MiLocalUser, MiRemoteUser, MiUser } from '@/models/User.js';
|
||||
import type { BlockingsRepository, FollowingsRepository, InstancesRepository, MiMeta, MutingsRepository, UserListMembershipsRepository, UsersRepository } from '@/models/_.js';
|
||||
import type { BlockingsRepository, FollowingsRepository, InstancesRepository, MiMeta, MutingsRepository, UserListMembershipsRepository, UsersRepository, NoteScheduleRepository, MiNoteSchedule } from '@/models/_.js';
|
||||
import type { RelationshipJobData, ThinUser } from '@/queue/types.js';
|
||||
|
||||
import { IdService } from '@/core/IdService.js';
|
||||
|
@ -49,6 +49,9 @@ export class AccountMoveService {
|
|||
@Inject(DI.instancesRepository)
|
||||
private instancesRepository: InstancesRepository,
|
||||
|
||||
@Inject(DI.noteScheduleRepository)
|
||||
private noteScheduleRepository: NoteScheduleRepository,
|
||||
|
||||
private userEntityService: UserEntityService,
|
||||
private idService: IdService,
|
||||
private apPersonService: ApPersonService,
|
||||
|
@ -119,6 +122,7 @@ export class AccountMoveService {
|
|||
await Promise.all([
|
||||
this.copyBlocking(src, dst),
|
||||
this.copyMutings(src, dst),
|
||||
this.updateScheduledNotes(src, dst),
|
||||
this.updateLists(src, dst),
|
||||
]);
|
||||
} catch {
|
||||
|
@ -201,6 +205,32 @@ export class AccountMoveService {
|
|||
await this.mutingsRepository.insert(arrayToInsert);
|
||||
}
|
||||
|
||||
@bindThis
|
||||
public async updateScheduledNotes(src: ThinUser, dst: MiUser): Promise<void> {
|
||||
// we're moving to a different local user: change scheduled notes' ownership
|
||||
if (dst.host === null) {
|
||||
await this.noteScheduleRepository.update(
|
||||
{ userId: src.id },
|
||||
{ userId: dst.id },
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// we're moving to a remote user: delete scheduled notes
|
||||
const scheduledNotes = await this.noteScheduleRepository.findBy({
|
||||
userId: src.id,
|
||||
}) as MiNoteSchedule[];
|
||||
|
||||
for (const note of scheduledNotes) {
|
||||
await this.queueService.ScheduleNotePostQueue.remove(`schedNote:${note.id}`);
|
||||
}
|
||||
|
||||
await this.noteScheduleRepository.delete({
|
||||
userId: src.id,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Update lists while moving accounts.
|
||||
* - No removal of the old account from the lists
|
||||
|
|
|
@ -206,7 +206,7 @@ _serverSettings:
|
|||
inquiryUrl: "Contact URL"
|
||||
inquiryUrlDescription: "Specify the URL of a web page that contains a contact form or the instance operators' contact information."
|
||||
_accountMigration:
|
||||
moveAccountDescription: "This will migrate your account to a different one.\n ・Followers from this account will automatically be migrated to the new account\n ・This account will unfollow all users it is currently following\n ・You will be unable to create new notes etc. on this account\n\nWhile migration of followers is automatic, you must manually prepare some steps to migrate the list of users you are following. To do so, carry out a follows export that you will later import on the new account in the settings menu. The same procedure applies to your lists as well as your muted and blocked users.\n\n(This explanation applies to Sharkey v13.12.0 and later. Other ActivityPub software, such as Mastodon, might function differently.)"
|
||||
moveAccountDescription: "This will migrate your account to a different one.\n ・Followers from this account will automatically be migrated to the new account\n ・This account will unfollow all users it is currently following\n ・You will be unable to create new notes etc. on this account\n ・Scheduled notes will be migrated to the new account if it's on this same instance\n\nWhile migration of followers is automatic, you must manually prepare some steps to migrate the list of users you are following. To do so, carry out a follows export that you will later import on the new account in the settings menu. The same procedure applies to your lists as well as your muted and blocked users.\n\n(This explanation applies to Sharkey v13.12.0 and later. Other ActivityPub software, such as Mastodon, might function differently.)"
|
||||
_achievements:
|
||||
_types:
|
||||
_notes1:
|
||||
|
|
Loading…
Add table
Reference in a new issue