chore: minor refactor of check-hit-antenna
This commit is contained in:
parent
ddbe213f59
commit
3b9f161251
3 changed files with 4 additions and 66 deletions
|
@ -1,11 +1,7 @@
|
||||||
import type { Antenna } from "@/models/entities/antenna.js";
|
import type { Antenna } from "@/models/entities/antenna.js";
|
||||||
import type { Note } from "@/models/entities/note.js";
|
import type { Note } from "@/models/entities/note.js";
|
||||||
import type { User } from "@/models/entities/user.js";
|
import type { User } from "@/models/entities/user.js";
|
||||||
import {
|
import { Blockings } from "@/models/index.js";
|
||||||
UserListJoinings,
|
|
||||||
UserGroupJoinings,
|
|
||||||
Blockings,
|
|
||||||
} from "@/models/index.js";
|
|
||||||
import { getFullApAccount } from "./convert-host.js";
|
import { getFullApAccount } from "./convert-host.js";
|
||||||
import * as Acct from "@/misc/acct.js";
|
import * as Acct from "@/misc/acct.js";
|
||||||
import type { Packed } from "./schema.js";
|
import type { Packed } from "./schema.js";
|
||||||
|
@ -13,17 +9,10 @@ import { Cache } from "./cache.js";
|
||||||
|
|
||||||
const blockingCache = new Cache<User["id"][]>("blocking", 60 * 5);
|
const blockingCache = new Cache<User["id"][]>("blocking", 60 * 5);
|
||||||
|
|
||||||
// NOTE: フォローしているユーザーのノート、リストのユーザーのノート、グループのユーザーのノート指定はパフォーマンス上の理由で無効になっている
|
|
||||||
|
|
||||||
/**
|
|
||||||
* noteUserFollowers / antennaUserFollowing はどちらか一方が指定されていればよい
|
|
||||||
*/
|
|
||||||
export async function checkHitAntenna(
|
export async function checkHitAntenna(
|
||||||
antenna: Antenna,
|
antenna: Antenna,
|
||||||
note: Note | Packed<"Note">,
|
note: Note | Packed<"Note">,
|
||||||
noteUser: { id: User["id"]; username: string; host: string | null },
|
noteUser: { id: User["id"]; username: string; host: string | null },
|
||||||
noteUserFollowers?: User["id"][],
|
|
||||||
antennaUserFollowing?: User["id"][],
|
|
||||||
): Promise<boolean> {
|
): Promise<boolean> {
|
||||||
if (note.visibility === "specified") return false;
|
if (note.visibility === "specified") return false;
|
||||||
if (note.visibility === "home") return false;
|
if (note.visibility === "home") return false;
|
||||||
|
@ -36,41 +25,9 @@ export async function checkHitAntenna(
|
||||||
);
|
);
|
||||||
if (blockings.some((blocking) => blocking === antenna.userId)) return false;
|
if (blockings.some((blocking) => blocking === antenna.userId)) return false;
|
||||||
|
|
||||||
if (note.visibility === "followers") {
|
|
||||||
if (noteUserFollowers && !noteUserFollowers.includes(antenna.userId))
|
|
||||||
return false;
|
|
||||||
if (antennaUserFollowing && !antennaUserFollowing.includes(note.userId))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!antenna.withReplies && note.replyId != null) return false;
|
if (!antenna.withReplies && note.replyId != null) return false;
|
||||||
|
|
||||||
if (antenna.src === "home") {
|
if (antenna.src === "users") {
|
||||||
if (noteUserFollowers && !noteUserFollowers.includes(antenna.userId))
|
|
||||||
return false;
|
|
||||||
if (antennaUserFollowing && !antennaUserFollowing.includes(note.userId))
|
|
||||||
return false;
|
|
||||||
} else if (antenna.src === "list") {
|
|
||||||
const listUsers = (
|
|
||||||
await UserListJoinings.findBy({
|
|
||||||
userListId: antenna.userListId!,
|
|
||||||
})
|
|
||||||
).map((x) => x.userId);
|
|
||||||
|
|
||||||
if (!listUsers.includes(note.userId)) return false;
|
|
||||||
} else if (antenna.src === "group") {
|
|
||||||
const joining = await UserGroupJoinings.findOneByOrFail({
|
|
||||||
id: antenna.userGroupJoiningId!,
|
|
||||||
});
|
|
||||||
|
|
||||||
const groupUsers = (
|
|
||||||
await UserGroupJoinings.findBy({
|
|
||||||
userGroupId: joining.userGroupId,
|
|
||||||
})
|
|
||||||
).map((x) => x.userId);
|
|
||||||
|
|
||||||
if (!groupUsers.includes(note.userId)) return false;
|
|
||||||
} else if (antenna.src === "users") {
|
|
||||||
const accts = antenna.users.map((x) => {
|
const accts = antenna.users.map((x) => {
|
||||||
const { username, host } = Acct.parse(x);
|
const { username, host } = Acct.parse(x);
|
||||||
return getFullApAccount(username, host).toLowerCase();
|
return getFullApAccount(username, host).toLowerCase();
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import * as mfm from "mfm-js";
|
import * as mfm from "mfm-js";
|
||||||
import es from "../../db/elasticsearch.js";
|
import es from "@/db/elasticsearch.js";
|
||||||
import sonic from "../../db/sonic.js";
|
import sonic from "@/db/sonic.js";
|
||||||
import {
|
import {
|
||||||
publishMainStream,
|
publishMainStream,
|
||||||
publishNotesStream,
|
publishNotesStream,
|
||||||
|
|
|
@ -9,8 +9,6 @@ import {
|
||||||
} from "@/models/index.js";
|
} from "@/models/index.js";
|
||||||
import { Not, IsNull, In } from "typeorm";
|
import { Not, IsNull, In } from "typeorm";
|
||||||
import type { Channel } from "@/models/entities/channel.js";
|
import type { Channel } from "@/models/entities/channel.js";
|
||||||
import { checkHitAntenna } from "@/misc/check-hit-antenna.js";
|
|
||||||
import { getAntennas } from "@/misc/antenna-cache.js";
|
|
||||||
import { readNotificationByQuery } from "@/server/api/common/read-notification.js";
|
import { readNotificationByQuery } from "@/server/api/common/read-notification.js";
|
||||||
import type { Packed } from "@/misc/schema.js";
|
import type { Packed } from "@/misc/schema.js";
|
||||||
|
|
||||||
|
@ -66,23 +64,6 @@ export default async function (
|
||||||
if (note.channelId && followingChannels.has(note.channelId)) {
|
if (note.channelId && followingChannels.has(note.channelId)) {
|
||||||
readChannelNotes.push(note);
|
readChannelNotes.push(note);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (note.user != null) {
|
|
||||||
// // たぶんnullになることは無いはずだけど一応
|
|
||||||
// for (const antenna of myAntennas) {
|
|
||||||
// if (
|
|
||||||
// await checkHitAntenna(
|
|
||||||
// antenna,
|
|
||||||
// note,
|
|
||||||
// note.user,
|
|
||||||
// undefined,
|
|
||||||
// Array.from(following),
|
|
||||||
// )
|
|
||||||
// ) {
|
|
||||||
// readAntennaNotes.push(note);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
|
|
Loading…
Reference in a new issue