Merge branch 'refactor/dont_federate_initially_flag' into 'develop'

refactor: use dont federate initially flag instead of visibility hack


See merge request firefish/firefish!10738
This commit is contained in:
laozhoubuluo 2024-04-22 02:19:28 +00:00
commit c4c175964f
5 changed files with 55 additions and 45 deletions

4
.gitignore vendored
View File

@ -56,10 +56,6 @@ packages/backend/assets/instance.css
packages/backend/assets/sounds/None.mp3
packages/backend/assets/LICENSE
!/packages/backend/queue/processors/db
!/packages/backend/src/db
!/packages/backend/src/server/api/endpoints/drive/files
packages/megalodon/lib
packages/megalodon/.idea

View File

@ -1,3 +1,5 @@
import { noteVisibilities } from "@/types.js";
export type Post = {
text: string | undefined;
cw: string | null;
@ -12,7 +14,9 @@ export function parse(acct: any): Post {
cw: acct.cw,
localOnly: acct.localOnly,
createdAt: new Date(acct.createdAt),
visibility: `hidden${acct.visibility || ""}`,
visibility: noteVisibilities.includes(acct.visibility)
? acct.visibility
: "public",
};
}

View File

@ -74,22 +74,27 @@ export async function importCkPost(
logger.info(`Note file updated`);
}
if (!note) {
note = await create(user, {
createdAt: createdAt,
files: files.length == 0 ? undefined : files,
poll: undefined,
text: text || undefined,
reply: post.replyId ? job.data.parent : null,
renote: post.renoteId ? job.data.parent : null,
cw: cw,
localOnly,
visibility: visibility,
visibleUsers: [],
channel: null,
apMentions: new Array(0),
apHashtags: undefined,
apEmojis: undefined,
});
note = await create(
user,
{
createdAt: createdAt,
files: files.length == 0 ? undefined : files,
poll: undefined,
text: text || undefined,
reply: post.replyId ? job.data.parent : null,
renote: post.renoteId ? job.data.parent : null,
cw: cw,
localOnly,
visibility: visibility,
visibleUsers: [],
channel: null,
apMentions: new Array(0),
apHashtags: undefined,
apEmojis: undefined,
},
false,
true,
);
logger.info(`Create new note`);
} else {
logger.info(`Note exist`);

View File

@ -100,24 +100,30 @@ export async function importMastoPost(
logger.info(`Note file updated`);
}
if (!note) {
note = await create(user, {
createdAt: isRenote
? new Date(post.published)
: new Date(post.object.published),
files: files.length == 0 ? undefined : files,
poll: undefined,
text: text || undefined,
reply,
renote,
cw: !isRenote && post.object.sensitive ? post.object.summary : undefined,
localOnly: false,
visibility: "hiddenpublic",
visibleUsers: [],
channel: null,
apMentions: new Array(0),
apHashtags: undefined,
apEmojis: undefined,
});
note = await create(
user,
{
createdAt: isRenote
? new Date(post.published)
: new Date(post.object.published),
files: files.length == 0 ? undefined : files,
poll: undefined,
text: text || undefined,
reply,
renote,
cw:
!isRenote && post.object.sensitive ? post.object.summary : undefined,
localOnly: false,
visibility: "public",
visibleUsers: [],
channel: null,
apMentions: new Array(0),
apHashtags: undefined,
apEmojis: undefined,
},
false,
true,
);
logger.info(`Create new note`);
} else {
logger.info(`Note exist`);

View File

@ -174,11 +174,12 @@ export default async (
},
data: Option,
silent = false,
dontFederateInitially = false,
) =>
// biome-ignore lint/suspicious/noAsyncPromiseExecutor: FIXME
new Promise<Note>(async (res, rej) => {
const dontFederateInitially =
data.visibility?.startsWith("hidden") === true;
const dontFederateInitiallyFlag =
data.visibility === "hidden" ? true : dontFederateInitially;
// If you reply outside the channel, match the scope of the target.
// TODO (I think it's a process that could be done on the client side, but it's server side for now.)
@ -212,8 +213,6 @@ export default async (
if (data.channel != null) data.visibility = "public";
if (data.channel != null) data.visibleUsers = [];
if (data.channel != null) data.localOnly = true;
if (data.visibility.startsWith("hidden") && data.visibility !== "hidden")
data.visibility = data.visibility.slice(6);
// enforce silent clients on server
if (
@ -476,7 +475,7 @@ export default async (
}
}
if (!dontFederateInitially) {
if (!dontFederateInitiallyFlag) {
let publishKey: string;
let noteToPublish: Note;
const relays = await getCachedRelays();
@ -614,7 +613,7 @@ export default async (
});
//#region AP deliver
if (Users.isLocalUser(user) && !dontFederateInitially) {
if (Users.isLocalUser(user) && !dontFederateInitiallyFlag) {
(async () => {
const noteActivity = await renderNoteOrRenoteActivity(data, note);
const dm = new DeliverManager(user, noteActivity);