import * as Post from "@/misc/post.js"; import create from "@/services/note/create.js"; import { Users } from "@/models/index.js"; import type { DbUserImportMastoPostJobData } from "@/queue/types.js"; import { queueLogger } from "../../logger.js"; import { uploadFromUrl } from "@/services/drive/upload-from-url.js"; import type { DriveFile } from "@/models/entities/drive-file.js"; import type Bull from "bull"; const logger = queueLogger.createSubLogger("import-calckey-post"); export async function importCkPost( job: Bull.Job, done: any, ): Promise { const user = await Users.findOneBy({ id: job.data.user.id }); if (user == null) { done(); return; } const post = job.data.post; if (post.replyId != null) { done(); return; } if (post.renoteId != null) { done(); return; } if (post.visibility !== "public") { done(); return; } const urls = (post.files || []) .map((x: any) => x.url) .filter((x: String) => x.startsWith("http")); const files: DriveFile[] = []; for (const url of urls) { try { const file = await uploadFromUrl({ url: url, user: user, }); files.push(file); } catch (e) { logger.error(`Skipped adding file to drive: ${url}`); } } const { text, cw, localOnly, createdAt } = Post.parse(post); const note = await create(user, { createdAt: createdAt, files: files.length == 0 ? undefined : files, poll: undefined, text: text || undefined, reply: null, renote: null, cw: cw, localOnly, visibility: "hidden", visibleUsers: [], channel: null, apMentions: new Array(0), apHashtags: undefined, apEmojis: undefined, }); logger.succ("Imported"); done(); }