summaryrefslogtreecommitdiff
path: root/packages/backend/src/queue/processors
diff options
context:
space:
mode:
authormisskey-release-bot[bot] <157398866+misskey-release-bot[bot]@users.noreply.github.com>2025-05-31 12:37:06 +0000
committerGitHub <noreply@github.com>2025-05-31 12:37:06 +0000
commit92b9a5218db145e9bb831cefd36c309de86083b5 (patch)
tree2ebad71633f9bbacabbc193254223146f1662aee /packages/backend/src/queue/processors
parentMerge pull request #15933 from misskey-dev/develop (diff)
parentRelease: 2025.5.1 (diff)
downloadmisskey-92b9a5218db145e9bb831cefd36c309de86083b5.tar.gz
misskey-92b9a5218db145e9bb831cefd36c309de86083b5.tar.bz2
misskey-92b9a5218db145e9bb831cefd36c309de86083b5.zip
Merge pull request #16005 from misskey-dev/develop
Release: 2025.5.1
Diffstat (limited to 'packages/backend/src/queue/processors')
-rw-r--r--packages/backend/src/queue/processors/ExportAntennasProcessorService.ts4
-rw-r--r--packages/backend/src/queue/processors/ExportFollowingProcessorService.ts3
-rw-r--r--packages/backend/src/queue/processors/ExportUserListsProcessorService.ts4
-rw-r--r--packages/backend/src/queue/processors/ImportAntennasProcessorService.ts13
-rw-r--r--packages/backend/src/queue/processors/ImportFollowingProcessorService.ts15
-rw-r--r--packages/backend/src/queue/processors/ImportUserListsProcessorService.ts19
6 files changed, 47 insertions, 11 deletions
diff --git a/packages/backend/src/queue/processors/ExportAntennasProcessorService.ts b/packages/backend/src/queue/processors/ExportAntennasProcessorService.ts
index b3111865ad..053ba99005 100644
--- a/packages/backend/src/queue/processors/ExportAntennasProcessorService.ts
+++ b/packages/backend/src/queue/processors/ExportAntennasProcessorService.ts
@@ -15,6 +15,7 @@ import { bindThis } from '@/decorators.js';
import { createTemp } from '@/misc/create-temp.js';
import { UtilityService } from '@/core/UtilityService.js';
import { NotificationService } from '@/core/NotificationService.js';
+import { ExportedAntenna } from '@/queue/processors/ImportAntennasProcessorService.js';
import { QueueLoggerService } from '../QueueLoggerService.js';
import type { DBExportAntennasData } from '../types.js';
import type * as Bull from 'bullmq';
@@ -86,7 +87,8 @@ export class ExportAntennasProcessorService {
excludeBots: antenna.excludeBots,
withReplies: antenna.withReplies,
withFile: antenna.withFile,
- }));
+ excludeNotesInSensitiveChannel: antenna.excludeNotesInSensitiveChannel,
+ } satisfies Required<ExportedAntenna>));
if (antennas.length - 1 !== index) {
write(', ');
}
diff --git a/packages/backend/src/queue/processors/ExportFollowingProcessorService.ts b/packages/backend/src/queue/processors/ExportFollowingProcessorService.ts
index 903f962515..91c39cb758 100644
--- a/packages/backend/src/queue/processors/ExportFollowingProcessorService.ts
+++ b/packages/backend/src/queue/processors/ExportFollowingProcessorService.ts
@@ -94,7 +94,8 @@ export class ExportFollowingProcessorService {
continue;
}
- const content = this.utilityService.getFullApAccount(u.username, u.host);
+ const userAcct = this.utilityService.getFullApAccount(u.username, u.host);
+ const content = `${userAcct},withReplies=${following.withReplies}`;
await new Promise<void>((res, rej) => {
stream.write(content + '\n', err => {
if (err) {
diff --git a/packages/backend/src/queue/processors/ExportUserListsProcessorService.ts b/packages/backend/src/queue/processors/ExportUserListsProcessorService.ts
index c483d79854..733e75f65f 100644
--- a/packages/backend/src/queue/processors/ExportUserListsProcessorService.ts
+++ b/packages/backend/src/queue/processors/ExportUserListsProcessorService.ts
@@ -67,10 +67,12 @@ export class ExportUserListsProcessorService {
const users = await this.usersRepository.findBy({
id: In(memberships.map(j => j.userId)),
});
+ const usersWithReplies = new Set(memberships.filter(m => m.withReplies).map(m => m.userId));
for (const u of users) {
const acct = this.utilityService.getFullApAccount(u.username, u.host);
- const content = `${list.name},${acct}`;
+ // 3rd column and later will be key=value pairs
+ const content = `${list.name},${acct},withReplies=${usersWithReplies.has(u.id)}`;
await new Promise<void>((res, rej) => {
stream.write(content + '\n', err => {
if (err) {
diff --git a/packages/backend/src/queue/processors/ImportAntennasProcessorService.ts b/packages/backend/src/queue/processors/ImportAntennasProcessorService.ts
index 9c033b73e2..4c7f2d09bb 100644
--- a/packages/backend/src/queue/processors/ImportAntennasProcessorService.ts
+++ b/packages/backend/src/queue/processors/ImportAntennasProcessorService.ts
@@ -11,17 +11,18 @@ import Logger from '@/logger.js';
import type { AntennasRepository } from '@/models/_.js';
import { DI } from '@/di-symbols.js';
import { bindThis } from '@/decorators.js';
+import { Schema, SchemaType } from '@/misc/json-schema.js';
import { QueueLoggerService } from '../QueueLoggerService.js';
import { DBAntennaImportJobData } from '../types.js';
import type * as Bull from 'bullmq';
const Ajv = _Ajv.default;
-const validate = new Ajv().compile({
+const exportedAntennaSchema = {
type: 'object',
properties: {
name: { type: 'string', minLength: 1, maxLength: 100 },
- src: { type: 'string', enum: ['home', 'all', 'users', 'list'] },
+ src: { type: 'string', enum: ['home', 'all', 'users', 'list', 'users_blacklist'] },
userListAccts: {
type: 'array',
items: {
@@ -47,9 +48,14 @@ const validate = new Ajv().compile({
excludeBots: { type: 'boolean' },
withReplies: { type: 'boolean' },
withFile: { type: 'boolean' },
+ excludeNotesInSensitiveChannel: { type: 'boolean' },
},
required: ['name', 'src', 'keywords', 'excludeKeywords', 'users', 'caseSensitive', 'withReplies', 'withFile'],
-});
+} as const satisfies Schema;
+
+export type ExportedAntenna = SchemaType<typeof exportedAntennaSchema>;
+
+const validate = new Ajv().compile<ExportedAntenna>(exportedAntennaSchema);
@Injectable()
export class ImportAntennasProcessorService {
@@ -91,6 +97,7 @@ export class ImportAntennasProcessorService {
excludeBots: antenna.excludeBots,
withReplies: antenna.withReplies,
withFile: antenna.withFile,
+ excludeNotesInSensitiveChannel: antenna.excludeNotesInSensitiveChannel,
});
this.logger.succ('Antenna created: ' + result.id);
this.globalEventService.publishInternalEvent('antennaCreated', result);
diff --git a/packages/backend/src/queue/processors/ImportFollowingProcessorService.ts b/packages/backend/src/queue/processors/ImportFollowingProcessorService.ts
index 70c9f3a096..03663d3b06 100644
--- a/packages/backend/src/queue/processors/ImportFollowingProcessorService.ts
+++ b/packages/backend/src/queue/processors/ImportFollowingProcessorService.ts
@@ -67,8 +67,19 @@ export class ImportFollowingProcessorService {
const user = job.data.user;
try {
- const acct = line.split(',')[0].trim();
+ const parts = line.split(',');
+ const acct = parts[0].trim();
const { username, host } = Acct.parse(acct);
+ let withReplies: boolean | null = null;
+
+ for (const keyValue of parts.slice(2)) {
+ const [key, value] = keyValue.split('=');
+ switch (key) {
+ case 'withReplies':
+ withReplies = value === 'true';
+ break;
+ }
+ }
if (!host) return;
@@ -95,7 +106,7 @@ export class ImportFollowingProcessorService {
this.logger.info(`Follow ${target.id} ${job.data.withReplies ? 'with replies' : 'without replies'} ...`);
- this.queueService.createFollowJob([{ from: user, to: { id: target.id }, silent: true, withReplies: job.data.withReplies }]);
+ await this.queueService.createFollowJob([{ from: user, to: { id: target.id }, silent: true, withReplies: withReplies ?? job.data.withReplies }]);
} catch (e) {
this.logger.warn(`Error: ${e}`);
}
diff --git a/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts b/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts
index db9255b35d..bf061a1f78 100644
--- a/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts
+++ b/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts
@@ -70,8 +70,19 @@ export class ImportUserListsProcessorService {
linenum++;
try {
- const listName = line.split(',')[0].trim();
- const { username, host } = Acct.parse(line.split(',')[1].trim());
+ const parts = line.split(',');
+ const listName = parts[0].trim();
+ const { username, host } = Acct.parse(parts[1].trim());
+ let withReplies = false;
+
+ for (const keyValue of parts.slice(2)) {
+ const [key, value] = keyValue.split('=');
+ switch (key) {
+ case 'withReplies':
+ withReplies = value === 'true';
+ break;
+ }
+ }
let list = await this.userListsRepository.findOneBy({
userId: user.id,
@@ -100,7 +111,9 @@ export class ImportUserListsProcessorService {
if (await this.userListMembershipsRepository.findOneBy({ userListId: list!.id, userId: target.id }) != null) continue;
- this.userListService.addMember(target, list!, user);
+ await this.userListService.addMember(target, list, user, {
+ withReplies: withReplies,
+ });
} catch (e) {
this.logger.warn(`Error in line:${linenum} ${e}`);
}