diff --git a/src/plugins/anonymiseFileNames/index.tsx b/src/plugins/anonymiseFileNames/index.tsx index 1a34a7d0..84b42518 100644 --- a/src/plugins/anonymiseFileNames/index.tsx +++ b/src/plugins/anonymiseFileNames/index.tsx @@ -23,12 +23,10 @@ import ErrorBoundary from "@components/ErrorBoundary"; import { reverseExtensionMap } from "@equicordplugins/fixFileExtensions"; import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; -import { findByCodeLazy, findByPropsLazy } from "@webpack"; - -type AnonUpload = Upload & { anonymise?: boolean; }; +import { findByCodeLazy } from "@webpack"; +import { useState } from "@webpack/common"; const ActionBarIcon = findByCodeLazy(".actionBarIcon)"); -const UploadDraft = findByPropsLazy("popFirstFile", "update"); const enum Methods { Random, @@ -36,6 +34,7 @@ const enum Methods { Timestamp, } +const ANONYMISE_UPLOAD_SYMBOL = Symbol("vcAnonymise"); export const tarExtMatcher = /\.tar\.\w+$/; const settings = definePluginSettings({ @@ -76,41 +75,44 @@ export default definePlugin({ name: "AnonymiseFileNames", authors: [Devs.fawn], description: "Anonymise uploaded file names", + settings, + patches: [ { - find: "instantBatchUpload:", + find: 'type:"UPLOAD_START"', replacement: { - match: /uploadFiles:(\i),/, - replace: - "uploadFiles:(...args)=>(args[0].uploads.forEach(f=>f.filename=$self.anonymise(f)),$1(...args)),", + match: /await \i\.uploadFiles\((\i),/, + replace: "$1.forEach($self.anonymise),$&" }, }, { find: 'addFilesTo:"message.attachments"', replacement: { - match: /(\i.uploadFiles\((\i),)/, - replace: "$2.forEach(f=>f.filename=$self.anonymise(f)),$1" + match: /\i.uploadFiles\((\i),/, + replace: "$1.forEach($self.anonymise),$&" } }, { find: "#{intl::ATTACHMENT_UTILITIES_SPOILER}", replacement: { match: /(?<=children:\[)(?=.{10,80}tooltip:.{0,100}#{intl::ATTACHMENT_UTILITIES_SPOILER})/, - replace: "arguments[0].canEdit!==false?$self.renderIcon(arguments[0]):null," + replace: "arguments[0].canEdit!==false?$self.AnonymiseUploadButton(arguments[0]):null," }, }, ], - settings, - renderIcon: ErrorBoundary.wrap(({ upload, channelId, draftType }: { upload: AnonUpload; draftType: unknown; channelId: string; }) => { - const anonymise = upload.anonymise ?? settings.store.anonymiseByDefault; + AnonymiseUploadButton: ErrorBoundary.wrap(({ upload }: { upload: Upload; }) => { + const [anonymise, setAnonymise] = useState(upload[ANONYMISE_UPLOAD_SYMBOL] ?? settings.store.anonymiseByDefault); + + function onToggleAnonymise() { + upload[ANONYMISE_UPLOAD_SYMBOL] = !anonymise; + setAnonymise(!anonymise); + } + return ( { - upload.anonymise = !anonymise; - UploadDraft.update(channelId, upload.id, draftType, {}); // dummy update so component rerenders - }} + onClick={onToggleAnonymise} > {anonymise ? @@ -120,33 +122,37 @@ export default definePlugin({ ); }, { noop: true }), - anonymise(upload: AnonUpload) { - const file = upload.filename; - const tarMatch = tarExtMatcher.exec(file); - const extIdx = tarMatch?.index ?? file.lastIndexOf("."); - const fileName = extIdx !== -1 ? file.substring(0, extIdx) : ""; - let ext = extIdx !== -1 ? file.slice(extIdx) : ""; + anonymise(upload: Upload) { + + const originalFileName = upload.filename; + const tarMatch = tarExtMatcher.exec(originalFileName); + const extIdx = tarMatch?.index ?? originalFileName.lastIndexOf("."); + let ext = extIdx !== -1 ? originalFileName.slice(extIdx) : ""; const addSpoilerPrefix = (str: string) => settings.store.spoilerMessages ? "SPOILER_" + str : str; if (Settings.plugins.FixFileExtensions.enabled) { ext = reverseExtensionMap[ext] || ext; } - if ((upload.anonymise ?? settings.store.anonymiseByDefault) === false) return addSpoilerPrefix(fileName + ext); + if ((upload[ANONYMISE_UPLOAD_SYMBOL] ?? settings.store.anonymiseByDefault) === false) return addSpoilerPrefix(originalFileName + ext); - switch (settings.store.method) { - case Methods.Random: - const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - const returnedName = Array.from( - { length: settings.store.randomisedLength }, - () => chars[Math.floor(Math.random() * chars.length)] - ).join("") + ext; - return addSpoilerPrefix(returnedName); - case Methods.Consistent: - return addSpoilerPrefix(settings.store.consistent + ext); - case Methods.Timestamp: - return addSpoilerPrefix(Date.now().toString() + ext); - } + const newFilename = (() => { + switch (settings.store.method) { + case Methods.Random: + const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + const returnedName = Array.from( + { length: settings.store.randomisedLength }, + () => chars[Math.floor(Math.random() * chars.length)] + ).join("") + ext; + return addSpoilerPrefix(returnedName); + case Methods.Consistent: + return addSpoilerPrefix(settings.store.consistent + ext); + case Methods.Timestamp: + return addSpoilerPrefix(Date.now().toString() + ext); + } + })(); + + upload.filename = newFilename; }, commands: [{ diff --git a/src/plugins/openInApp/index.ts b/src/plugins/openInApp/index.ts index 2585f906..e1133234 100644 --- a/src/plugins/openInApp/index.ts +++ b/src/plugins/openInApp/index.ts @@ -107,6 +107,7 @@ export default definePlugin({ ] }, + // User Profile Modal & User Profile Modal v2 ...[".__invalid_connectedAccountOpenIconContainer", ".BLUESKY||"].map(find => ({ find, replacement: {