From dbc2bcfb7e2dea1fd29565f86bf096aba8a78698 Mon Sep 17 00:00:00 2001 From: Key Date: Fri, 20 Mar 2026 19:56:29 +0000 Subject: [PATCH] FileUpload: upload to discord if size does not exceed allowed size (#924) * FileUpload: upload via discord if file size does not exceed allowed file size * Change default file upload limit to 8 MB * :) * t * Update index.tsx * FileUpload: get fallback file size from getUserMaxFileSize instead of hardcoded values * FileUpload: move findbyProps * Update index.tsx * Update index.tsx --------- Co-authored-by: thororen1234 <78185467+thororen1234@users.noreply.github.com> Co-authored-by: creations Co-authored-by: Marvin Blank --- src/equicordplugins/fileUpload/index.tsx | 20 ++++++++++++++++++-- src/equicordplugins/fileUpload/settings.tsx | 13 +++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/equicordplugins/fileUpload/index.tsx b/src/equicordplugins/fileUpload/index.tsx index ea4b2f074..e06d504a8 100644 --- a/src/equicordplugins/fileUpload/index.tsx +++ b/src/equicordplugins/fileUpload/index.tsx @@ -12,14 +12,15 @@ import { OpenExternalIcon } from "@components/Icons"; import { Devs, EquicordDevs } from "@utils/constants"; import { classNameFactory } from "@utils/css"; import definePlugin from "@utils/types"; -import { DraftType, FluxDispatcher, Menu, PermissionsBits, PermissionStore, React, useEffect, useState } from "@webpack/common"; +import { findByPropsLazy } from "@webpack"; +import { DraftType, FluxDispatcher, Menu, PermissionsBits, PermissionStore, React, useEffect, UserStore, useState } from "@webpack/common"; import { settings } from "./settings"; import { serviceLabels, ServiceType } from "./types"; import { getMediaUrl } from "./utils/getMediaUrl"; import { cancelCurrentUpload, getUploadState, isConfigured, subscribeUploadState, uploadFile, uploadPickedFile, uploadProvidedFiles } from "./utils/upload"; - const cl = classNameFactory("vc-file-upload-"); +const { getUserMaxFileSize } = findByPropsLazy("getUserMaxFileSize"); let uploadAddFilesInterceptor: ((event: unknown) => void) | null = null; type UploadAddFilesEvent = { @@ -28,8 +29,22 @@ type UploadAddFilesEvent = { uploads?: unknown; items?: unknown; draftType?: unknown; + maxFileSize?: unknown; + fileSizeLimit?: unknown; + limits?: { + fileSize?: unknown; + }; }; +function shouldInterceptUploadFiles(files: readonly File[], payload: UploadAddFilesEvent): boolean { + if (!settings.store.interceptDiscordUploadOnlyOverLimit) return true; + + const directLimit = [payload.maxFileSize, payload.fileSizeLimit, payload.limits?.fileSize].find(limit => Number.isFinite(limit)) as number | undefined; + const fallbackLimit = getUserMaxFileSize(UserStore.getCurrentUser()); + const discordLimit = Math.max(0, directLimit ?? fallbackLimit); + + return files.some(file => file.size > discordLimit); +} function extractFilesFromValue(value: unknown): File[] { if (value instanceof File) return [value]; @@ -68,6 +83,7 @@ function interceptUploadAddFiles(event: unknown): void { const uniqueFiles = Array.from(new Set(files)); if (!uniqueFiles.length) return; + if (!shouldInterceptUploadFiles(uniqueFiles, payload)) return; payload.files = []; payload.uploads = []; diff --git a/src/equicordplugins/fileUpload/settings.tsx b/src/equicordplugins/fileUpload/settings.tsx index a682afc21..acebee402 100644 --- a/src/equicordplugins/fileUpload/settings.tsx +++ b/src/equicordplugins/fileUpload/settings.tsx @@ -172,6 +172,12 @@ export const settings = definePluginSettings({ default: false, hidden: true }, + interceptDiscordUploadOnlyOverLimit: { + type: OptionType.BOOLEAN, + description: "Only intercept uploads that exceed Discord file size limit.", + default: true, + hidden: true + }, gofileToken: { type: OptionType.STRING, description: "Optional GoFile API token", @@ -518,6 +524,13 @@ export function SettingsComponent() { /> + + store.interceptDiscordUploadOnlyOverLimit = v} + /> + +