├── .github ├── FUNDING.yml ├── dependabot.yml ├── ISSUE_TEMPLATE │ ├── question.yml │ ├── feature-request.yaml │ └── bug-report.yaml └── workflows │ └── flutter_build_test.yml ├── fastlane └── metadata │ └── android │ └── en-US │ ├── title.txt │ ├── short_description.txt │ ├── changelogs │ ├── 2.txt │ ├── 1.txt │ ├── 12.txt │ ├── 4.txt │ ├── 13.txt │ └── 3.txt │ ├── images │ ├── icon.png │ └── phoneScreenshots │ │ ├── 1.jpg │ │ ├── 2.jpg │ │ ├── 3.jpg │ │ ├── 4.jpg │ │ └── 5.jpg │ └── full_description.txt ├── ios ├── Runner │ ├── Runner-Bridging-Header.h │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ ├── 100.png │ │ │ ├── 1024.png │ │ │ ├── 114.png │ │ │ ├── 120.png │ │ │ ├── 144.png │ │ │ ├── 152.png │ │ │ ├── 167.png │ │ │ ├── 180.png │ │ │ ├── 20.png │ │ │ ├── 29.png │ │ │ ├── 40.png │ │ │ ├── 50.png │ │ │ ├── 57.png │ │ │ ├── 58.png │ │ │ ├── 60.png │ │ │ ├── 72.png │ │ │ ├── 76.png │ │ │ ├── 80.png │ │ │ ├── 87.png │ │ │ └── Contents.json │ ├── Runner.entitlements │ ├── Property List.plist │ ├── AppDelegate.swift │ ├── Base.lproj │ │ ├── Main.storyboard │ │ └── LaunchScreen.storyboard │ └── Info.plist ├── Flutter │ ├── Debug.xcconfig │ ├── Release.xcconfig │ └── AppFrameworkInfo.plist ├── Share Extension │ ├── SharingFileType.swift │ ├── Share Extension.entitlements │ ├── SharingFile.swift │ ├── Info.plist │ └── Base.lproj │ │ └── MainInterface.storyboard ├── Runner.xcodeproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── WorkspaceSettings.xcsettings │ │ └── IDEWorkspaceChecks.plist ├── RunnerTests │ └── RunnerTests.swift ├── .gitignore ├── Podfile └── Podfile.lock ├── android ├── app │ ├── key.jks │ ├── src │ │ ├── main │ │ │ ├── ic_launcher-playstore.png │ │ │ ├── res │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ ├── ic_launcher.webp │ │ │ │ │ ├── ic_launcher_round.webp │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ ├── ic_launcher.webp │ │ │ │ │ ├── ic_launcher_round.webp │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ ├── ic_launcher.webp │ │ │ │ │ ├── ic_launcher_round.webp │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ ├── ic_launcher.webp │ │ │ │ │ ├── ic_launcher_round.webp │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ ├── ic_launcher.webp │ │ │ │ │ ├── ic_launcher_round.webp │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ ├── values │ │ │ │ │ ├── ic_launcher_background.xml │ │ │ │ │ └── styles.xml │ │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ │ ├── ic_launcher.xml │ │ │ │ │ └── ic_launcher_round.xml │ │ │ │ ├── drawable │ │ │ │ │ ├── ic_launcher_background.xml │ │ │ │ │ ├── launch_background.xml │ │ │ │ │ ├── ic_launcher_monochrome.xml │ │ │ │ │ └── ic_launcher_foreground.xml │ │ │ │ ├── drawable-v21 │ │ │ │ │ └── launch_background.xml │ │ │ │ └── values-night │ │ │ │ │ └── styles.xml │ │ │ ├── AndroidManifest.xml │ │ │ ├── kotlin │ │ │ │ └── com │ │ │ │ │ └── nyx │ │ │ │ │ └── custom_uploader │ │ │ │ │ └── MainActivity.kt │ │ │ └── java │ │ │ │ └── io │ │ │ │ └── flutter │ │ │ │ └── plugins │ │ │ │ └── GeneratedPluginRegistrant.java │ │ ├── debug │ │ │ ├── ic_launcher-playstore.png │ │ │ ├── res │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ └── drawable │ │ │ │ │ └── ic_launcher_background.xml │ │ │ └── AndroidManifest.xml │ │ └── profile │ │ │ └── AndroidManifest.xml │ ├── build.gradle.kts │ └── build.gradle ├── key.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradle.properties ├── .gitignore ├── build.gradle ├── settings.gradle ├── android.iml └── gradlew.bat ├── l10n.yaml ├── .gitmodules ├── PRIVACY.md ├── SECURITY.md ├── lib ├── utils │ ├── show_message.dart │ ├── ScaffoldFix.dart │ ├── build_favicon.dart │ ├── init_database.dart │ └── response_parser.dart ├── services │ ├── response_logger.dart │ └── database.dart ├── views │ └── http_share_form.dart ├── assets │ └── preset_uploaders.yaml ├── main.dart └── l10n │ ├── app_Arabic.arb │ ├── app_Czech.arb │ ├── app_Danish.arb │ ├── app_Dutch.arb │ ├── app_French.arb │ ├── app_German.arb │ ├── app_Greek.arb │ ├── app_Hebrew.arb │ ├── app_Korean.arb │ ├── app_Polish.arb │ ├── app_Afrikaans.arb │ ├── app_Catalan.arb │ ├── app_Finnish.arb │ ├── app_Hungarian.arb │ ├── app_Italian.arb │ ├── app_Japanese.arb │ ├── app_Norwegian.arb │ ├── app_Portuguese.arb │ ├── app_Romanian.arb │ ├── app_Russian.arb │ └── app_Swedish.arb ├── custom_uploader.iml ├── .gitignore ├── LICENSE ├── .metadata ├── BUILDING.md ├── pubspec.yaml ├── analysis_options.yaml └── README.md /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | liberapay: Eris 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/title.txt: -------------------------------------------------------------------------------- 1 | Custom Uploader -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /android/app/key.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/key.jks -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/short_description.txt: -------------------------------------------------------------------------------- 1 | Upload files to a file host of your choice -------------------------------------------------------------------------------- /android/key.properties: -------------------------------------------------------------------------------- 1 | storePassword=10122001 2 | keyPassword=10122001 3 | keyAlias=key 4 | storeFile=../app/key.jks -------------------------------------------------------------------------------- /l10n.yaml: -------------------------------------------------------------------------------- 1 | arb-dir: lib/l10n 2 | template-arb-file: app_English.arb 3 | output-localization-file: app_localizations.dart -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "flutter"] 2 | path = flutter 3 | url = https://github.com/flutter/flutter 4 | branch = stable 5 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "pub" 4 | directory: "/" 5 | schedule: 6 | interval: "weekly" 7 | -------------------------------------------------------------------------------- /android/app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/2.txt: -------------------------------------------------------------------------------- 1 | 1. Added an simple view for the add uploader page 2 | 2. Uploaders are now included in the app as presets -------------------------------------------------------------------------------- /android/app/src/debug/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/debug/ic_launcher-playstore.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/fastlane/metadata/android/en-US/images/icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError 2 | android.useAndroidX=true 3 | android.enableJetifier=true -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg -------------------------------------------------------------------------------- /ios/Share Extension/SharingFileType.swift: -------------------------------------------------------------------------------- 1 | enum SharingFileType: Int, Codable { 2 | case text 3 | case url 4 | case image 5 | case video 6 | case file 7 | } 8 | -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/debug/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/debug/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/debug/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/debug/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3DDC84 4 | -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SrS2225a/custom_uploader/HEAD/android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/1.txt: -------------------------------------------------------------------------------- 1 | 1. Custom Uploader now uses the MediaStore API to export configs, to make google play happy. 2 | 2. Change logs are now included in a fastlane changelog file. -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/12.txt: -------------------------------------------------------------------------------- 1 | 1. You can now also long press to edit/delete an uploader 2 | 2. Enlarged the upload button to make it easier to press 3 | 3. Uploaders are now sorted in abc order with url protocol removed 4 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-all.zip 6 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/4.txt: -------------------------------------------------------------------------------- 1 | 1. Changed the generic User-Agent string to a uniquely identifiable one; improving transparency 2 | 2. Improved the way that the automatic url parser parses out links 3 | 3. Added a log color for 3XX status code responses -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /PRIVACY.md: -------------------------------------------------------------------------------- 1 | # Privacy Policy 2 | While using Our Service, we will never ask you to provide us with any Personal Data. We may collect some Personal Data that you voluntarily provide to us when You register the Application, and/or when You choose to contact Us. However, you have the option not to provide us with any Personal Data. 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /ios/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /ios/Runner/Runner.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.application-groups 6 | 7 | group.com.nyx.customUploader 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner/Property List.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /ios/Share Extension/Share Extension.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.application-groups 6 | 7 | group.com.nyx.customUploader 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 10 | 11 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | allprojects { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | } 6 | } 7 | 8 | rootProject.buildDir = '../build' 9 | subprojects { 10 | project.buildDir = "${rootProject.buildDir}/${project.name}" 11 | } 12 | subprojects { 13 | project.evaluationDependsOn(':app') 14 | } 15 | 16 | tasks.register("clean", Delete) { 17 | delete rootProject.buildDir 18 | } 19 | -------------------------------------------------------------------------------- /android/app/src/debug/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 10 | 11 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.yml: -------------------------------------------------------------------------------- 1 | name: Question 2 | description: Got a question about Custom Uploader? Ask it here! 3 | labels: ["help wanted"] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | NOTE: Please take a moment to check that your question hasn't already been asked. 9 | - type: textarea 10 | id: description 11 | attributes: 12 | label: Question 13 | description: A clear and concise description of what you want to ask 14 | validations: 15 | required: true 16 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/13.txt: -------------------------------------------------------------------------------- 1 | 1. Ios support is now included 2 | 2. Upgraded UI to material v3 while improving how UI events are handled 3 | 3. Added support for ftp protocol 4 | 4. Updated to a new logo that fits the app better (logo by https://www.deviantart.com/doppelvishop) 5 | 5. You can now upload multiple files at a time 6 | 6. Translation support is now included 7 | 7. Moved the old "help" over to https://github.com/SrS2225a/custom_uploader/wiki with more detail about how to use the app 8 | 8. In addition to copying, you can now share your uploaded links to other apps using the system share -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | Only the latest version of this project is supported. Older versions will not receive security updates or patches. Please ensure you are using the most recent release. 6 | 7 | ## Reporting a Vulnerability 8 | 9 | If you discover a security vulnerability in this project, please report it to us directly at: 10 | 11 | **Email:** [info@fenriris.net](mailto:info@fenriris.net) 12 | 13 | We take security seriously and will respond as quickly as possible to resolve any reported issues. 14 | 15 | Thank you for helping to keep this project secure! 16 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/3.txt: -------------------------------------------------------------------------------- 1 | 1. Enhanced the look of the uploaders list for a better user experience. 2 | 2. Updated dependencies to the latest versions for improved security and performance. 3 | 3. Support for patch requests added, expanding compatibility with various file hosts. 4 | 4. Added an automatic timeout which ensures stalled connections are closed if the server takes too long to respond 5 | 5. Added a log for all responses, improving debugging and visibility of upload requests. 6 | 6. Introduced support for file MIME types in form data for better content handling. 7 | 7. Implemented a wrapper that converts uploaded text into a text file for easier sharing. 8 | 8. Added a donation button to help support project development -------------------------------------------------------------------------------- /lib/utils/show_message.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:custom_uploader/l10n/app_localizations.dart'; 3 | 4 | showAlert(BuildContext context, String title, String message) { 5 | showDialog(context: context, builder: (context) { 6 | return AlertDialog( 7 | title: Text(title), 8 | content: Text(message), 9 | actions: [ 10 | TextButton( 11 | onPressed: () { 12 | Navigator.pop(context); 13 | }, 14 | child: Text(AppLocalizations.of(context)!.ok), 15 | ) 16 | ], 17 | ); 18 | }); 19 | } 20 | 21 | showSnackBar(BuildContext context, String message) { 22 | ScaffoldMessenger.of(context).showSnackBar(SnackBar( 23 | content: Text(message), 24 | )); 25 | } -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | def flutterSdkPath = { 3 | def properties = new Properties() 4 | file("local.properties").withInputStream { properties.load(it) } 5 | def flutterSdkPath = properties.getProperty("flutter.sdk") 6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 7 | return flutterSdkPath 8 | }() 9 | 10 | includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") 11 | 12 | repositories { 13 | google() 14 | mavenCentral() 15 | gradlePluginPortal() 16 | } 17 | } 18 | 19 | plugins { 20 | id "dev.flutter.flutter-plugin-loader" version "1.0.0" 21 | id "com.android.application" version "8.6.0" apply false 22 | id "org.jetbrains.kotlin.android" version "2.1.0" apply false 23 | } 24 | 25 | include ":app" 26 | -------------------------------------------------------------------------------- /lib/services/response_logger.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | import 'package:path_provider/path_provider.dart'; 3 | 4 | class Logger { 5 | static Future getLogFile() async { 6 | final directory = await getApplicationDocumentsDirectory(); 7 | return File('${directory.path}/upload_logs'); 8 | } 9 | 10 | static Future clearLogs() async { 11 | final file = await getLogFile(); 12 | await file.writeAsString(''); // Clear the log file 13 | } 14 | 15 | static Future logResponse({ 16 | required String endpoint, 17 | required int? statusCode, 18 | required String responseBody, 19 | }) async { 20 | final file = await getLogFile(); 21 | final logEntry = "[${DateTime.now()}] Endpoint: $endpoint, Status: $statusCode, Response: $responseBody\n"; 22 | 23 | await file.writeAsString(logEntry, mode: FileMode.append); 24 | } 25 | } -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/ic_launcher_monochrome.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 12.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /custom_uploader.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /ios/Share Extension/SharingFile.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | class SharingFile: Codable { 4 | var value: String; 5 | var thumbnail: String?; // video thumbnail 6 | var duration: Double?; // video duration in milliseconds 7 | var type: SharingFileType; 8 | 9 | 10 | init(value: String, thumbnail: String?, duration: Double?, type: SharingFileType) { 11 | self.value = value 12 | self.thumbnail = thumbnail 13 | self.duration = duration 14 | self.type = type 15 | } 16 | 17 | // toString method to print out SharingFile details in the console 18 | func toString() { 19 | print("[SharingFile] \n\tvalue: \(self.value)\n\tthumbnail: \(self.thumbnail ?? "--" )\n\tduration: \(self.duration ?? 0)\n\ttype: \(self.type)") 20 | } 21 | 22 | func toData(data: [SharingFile]) -> Data { 23 | let encodedData = try? JSONEncoder().encode(data) 24 | return encodedData! 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .build/ 9 | .buildlog/ 10 | .history 11 | .svn/ 12 | .swiftpm/ 13 | migrate_working_dir/ 14 | 15 | # IntelliJ related 16 | *.iml 17 | *.ipr 18 | *.iws 19 | .idea/ 20 | 21 | # The .vscode folder contains launch configuration and tasks you configure in 22 | # VS Code which you may wish to be included in version control, so this line 23 | # is commented out by default. 24 | #.vscode/ 25 | 26 | # Flutter/Dart/Pub related 27 | **/doc/api/ 28 | **/ios/Flutter/.last_build_id 29 | .dart_tool/ 30 | .flutter-plugins 31 | .flutter-plugins-dependencies 32 | .packages 33 | .pub-cache/ 34 | .pub/ 35 | /build/ 36 | 37 | # Symbolication related 38 | app.*.symbols 39 | 40 | # Obfuscation related 41 | app.*.map.json 42 | 43 | # Android Studio will place build artifacts here 44 | /android/app/debug 45 | /android/app/profile 46 | /android/app/release 47 | 48 | /android/local.properties 49 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 13 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright © 2025 Nyx 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.yaml: -------------------------------------------------------------------------------- 1 | name: Feature Request 2 | description: Got an idea for a feature that Custom Uploader doesn't have currently? Submit your idea here! 3 | labels: ["enhancement"] 4 | assignees: 5 | - SrS2225a 6 | body: 7 | - type: markdown 8 | attributes: 9 | value: | 10 | NOTE: Please take a moment to check that your feature hasn't already been suggested. 11 | - type: textarea 12 | id: description 13 | attributes: 14 | label: What you want to be added 15 | description: A clear and concise description of what you want to be added 16 | validations: 17 | required: true 18 | - type: textarea 19 | id: why 20 | attributes: 21 | label: Why you want this feature 22 | description: A clear and concise description of why you want this feature 23 | validations: 24 | required: true 25 | - type: textarea 26 | id: screenshots 27 | attributes: 28 | label: Screenshots 29 | description: If you can, provide screenshots of an implementation on another site e.g. GitHub -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: "c519ee916eaeb88923e67befb89c0f1dabfa83e6" 8 | channel: "[user-branch]" 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: c519ee916eaeb88923e67befb89c0f1dabfa83e6 17 | base_revision: c519ee916eaeb88923e67befb89c0f1dabfa83e6 18 | - platform: ios 19 | create_revision: c519ee916eaeb88923e67befb89c0f1dabfa83e6 20 | base_revision: c519ee916eaeb88923e67befb89c0f1dabfa83e6 21 | 22 | # User provided section 23 | 24 | # List of Local paths (relative to this file) that should be 25 | # ignored by the migrate tool. 26 | # 27 | # Files that are not part of the templates will be ignored by default. 28 | unmanaged_files: 29 | - 'lib/main.dart' 30 | - 'ios/Runner.xcodeproj/project.pbxproj' 31 | -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import flutter_sharing_intent 4 | 5 | @main 6 | @objc class AppDelegate: FlutterAppDelegate { 7 | override func application( 8 | _ application: UIApplication, 9 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 10 | ) -> Bool { 11 | GeneratedPluginRegistrant.register(with: self) 12 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 13 | } 14 | 15 | override func application( 16 | _ app: UIApplication, 17 | open url: URL, 18 | options: [UIApplication.OpenURLOptionsKey : Any] = [:] 19 | ) -> Bool { 20 | let sharingIntent = SwiftFlutterSharingIntentPlugin.instance 21 | 22 | // If the URL matches the plugin's scheme, handle it 23 | if sharingIntent.hasSameSchemePrefix(url: url) { 24 | return sharingIntent.application(app, open: url, options: options) 25 | } 26 | 27 | // Otherwise, forward to other handlers (e.g., uni_links) 28 | return super.application(app, open: url, options: options) 29 | } 30 | } 31 | 32 | -------------------------------------------------------------------------------- /BUILDING.md: -------------------------------------------------------------------------------- 1 | # Building the flutter project 2 | 3 | ## Prerequisites 4 | 1. Begin by cloning the repository: 5 | 6 | ```bash 7 | git clone https://github.com/SrS2225a/custom_uploader.git 8 | cd custom_uploader 9 | ``` 10 | 11 | 2. Instead of installing flutter manually, we use a submodule of it. We use the Flutter submodule to ensure that everyone is working with the same version of Flutter, preventing issues caused by mismatched versions. It also simplifies setup, as developers don't need to worry about installing the correct version of Flutter. You will need to initialize and update the submodule before building: 12 | ```bash 13 | git submodule init 14 | git submodule update 15 | flutter/bin/flutter doctor -v #This will check if we have installed the flutter submodule correctly 16 | ``` 17 | 18 | ## Building the project 19 | 1. To build the project, run the following commands: 20 | ```bash 21 | flutter/bin/flutter pub get 22 | flutter/bin/flutter pub run build_runner build -d #This will generate/update any code based on annotations in the project 23 | flutter/bin/flutter build apk --release 24 | ``` 25 | 26 | That's it! You should now have the project built and ready to run. 27 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: custom_uploader 2 | description: Allows you to upload files to a custom server 3 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev 4 | 5 | version: 2.1.0+14 6 | 7 | environment: 8 | sdk: '>=3.5.0 <4.0.1' 9 | flutter: '3.29.3' 10 | dependencies: 11 | flutter: 12 | sdk: flutter 13 | flutter_localizations: 14 | sdk: flutter 15 | intl: any 16 | dio: ^5.9.0 17 | dio_cache_interceptor: ^4.0.3 18 | file_picker: ^10.3.2 19 | percent_indicator: ^4.2.5 20 | xml: ^6.3.0 21 | hive: ^2.2.3 22 | hive_flutter: ^1.1.0 # contains Isar Core 23 | trina_grid: ^2.0.0 24 | flutter_sharing_intent: ^1.1.1 25 | url_launcher: ^6.3.2 26 | permission_handler: ^12.0.1 27 | device_info_plus: ^11.5.0 28 | package_info_plus: ^8.3.1 29 | yaml: ^3.1.2 30 | mime: ^2.0.0 31 | http_parser: ^4.1.2 32 | path_provider: ^2.0.1 33 | pure_ftp: ^0.7.5 34 | flutter_speed_dial: ^7.0.0 35 | share_plus: ^11.1.0 36 | 37 | dev_dependencies: 38 | flutter_test: 39 | sdk: flutter 40 | flutter_lints: ^5.0.0 41 | hive_generator: ^2.0.0 42 | build_runner: ^2.4.13 43 | intl_utils: ^2.8.2 44 | 45 | flutter: 46 | generate: true 47 | assets: 48 | - lib/assets/preset_uploaders.yaml 49 | uses-material-design: true 50 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 16 | 20 | 21 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/full_description.txt: -------------------------------------------------------------------------------- 1 |

Custom Uploader is a user-friendly file uploading tool that makes it easy for you to transfer files to your preferred hosting service. It is designed to be lightweight and efficient, with a straightforward interface that allows you to upload files quickly and easily. With Custom Uploader, you can upload a variety of different file types, including documents, images, videos, and more. The versatile tool is perfect for anyone who needs a reliable and convenient way to upload files for storage or sharing. Whenever you are a business owner, a student, or a professional, Custom Uploader can help you manage and share your files with ease.

Features:

  • Easily upload anything to your host of choice (images, videos, documents, etc.) with a simple and easy to use interface.
  • Easily create multiple uploaders for different hosts, and switch between them.
  • Upload files from your gallery, camera, or any other app that supports sharing.
  • Import/Export your uploaders to share them with others, with support for sharex's uploader format.
  • Comes with built in uploader presets
  • Comes with a powerful url parser that allows you to extract the url of the uploaded file from the response of the host.
2 | -------------------------------------------------------------------------------- /.github/workflows/flutter_build_test.yml: -------------------------------------------------------------------------------- 1 | name: Flutter Build Test 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | branches: 9 | - master 10 | 11 | jobs: 12 | build_android: 13 | name: Build Flutter App (Android) 14 | runs-on: ubuntu-latest 15 | 16 | steps: 17 | - name: Checkout repository 18 | uses: actions/checkout@v4 19 | 20 | - name: Set up Flutter 21 | uses: subosito/flutter-action@v2 22 | with: 23 | channel: stable 24 | flutter-version-file: pubspec.yaml 25 | 26 | - name: Get dependencies 27 | run: flutter pub get 28 | 29 | - name: Build APK 30 | run: flutter build apk --release 31 | 32 | - name: Build App Bundle 33 | run: flutter build appbundle --release 34 | 35 | build_ios: 36 | name: Build Flutter App (iOS) 37 | runs-on: macos-13 38 | 39 | steps: 40 | - name: Checkout repository 41 | uses: actions/checkout@v4 42 | 43 | - name: Set up Flutter 44 | uses: subosito/flutter-action@v2 45 | with: 46 | channel: stable 47 | flutter-version-file: pubspec.yaml 48 | 49 | - name: Get dependencies 50 | run: flutter pub get 51 | 52 | - name: Build iOS (no code signing) 53 | run: flutter build ipa --release --no-codesign 54 | -------------------------------------------------------------------------------- /ios/Share Extension/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AppGroupId 6 | $(CUSTOM_GROUP_ID) 7 | 8 | NSExtension 9 | 10 | NSExtensionAttributes 11 | 12 | PHSupportedMediaTypes 13 | 14 | Video 15 | Image 16 | 17 | NSExtensionActivationRule 18 | 19 | NSExtensionActivationSupportsText 20 | 21 | NSExtensionActivationSupportsWebURLWithMaxCount 22 | 20 23 | NSExtensionActivationSupportsImageWithMaxCount 24 | 20 25 | NSExtensionActivationSupportsMovieWithMaxCount 26 | 20 27 | NSExtensionActivationSupportsFileWithMaxCount 28 | 20 29 | 30 | 31 | NSExtensionMainStoryboard 32 | MainInterface 33 | NSExtensionPointIdentifier 34 | com.apple.share-services 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | #platform :ios, '12.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def flutter_root 14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) 15 | unless File.exist?(generated_xcode_build_settings_path) 16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" 17 | end 18 | 19 | File.foreach(generated_xcode_build_settings_path) do |line| 20 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 21 | return matches[1].strip if matches 22 | end 23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" 24 | end 25 | 26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 27 | 28 | flutter_ios_podfile_setup 29 | 30 | target 'Runner' do 31 | use_frameworks! 32 | use_modular_headers! 33 | 34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 35 | end 36 | 37 | 38 | post_install do |installer| 39 | installer.pods_project.targets.each do |target| 40 | flutter_additional_ios_build_settings(target) 41 | end 42 | end 43 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at 17 | # https://dart-lang.github.io/linter/lints/index.html. 18 | # 19 | # Instead of disabling a lint rule for the entire project in the 20 | # section below, it can also be suppressed for a single line of code 21 | # or a specific dart file by using the `// ignore: name_of_lint` and 22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 23 | # producing the lint. 24 | rules: 25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 27 | 28 | # Additional information about this file can be found at 29 | # https://dart.dev/guides/language/analysis-options 30 | -------------------------------------------------------------------------------- /android/app/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("com.android.application") 3 | id("kotlin-android") 4 | // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. 5 | id("dev.flutter.flutter-gradle-plugin") 6 | } 7 | 8 | android { 9 | namespace = "com.nyx.custom_uploader" 10 | compileSdk = flutter.compileSdkVersion 11 | ndkVersion = flutter.ndkVersion 12 | 13 | compileOptions { 14 | sourceCompatibility = JavaVersion.VERSION_11 15 | targetCompatibility = JavaVersion.VERSION_11 16 | } 17 | 18 | kotlinOptions { 19 | jvmTarget = JavaVersion.VERSION_11.toString() 20 | } 21 | 22 | defaultConfig { 23 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 24 | applicationId = "com.nyx.custom_uploader" 25 | // You can update the following values to match your application needs. 26 | // For more information, see: https://flutter.dev/to/review-gradle-config. 27 | minSdk = flutter.minSdkVersion 28 | targetSdk = flutter.targetSdkVersion 29 | versionCode = flutter.versionCode 30 | versionName = flutter.versionName 31 | } 32 | 33 | buildTypes { 34 | release { 35 | // TODO: Add your own signing config for the release build. 36 | // Signing with the debug keys for now, so `flutter run --release` works. 37 | signingConfig = signingConfigs.getByName("debug") 38 | } 39 | } 40 | } 41 | 42 | flutter { 43 | source = "../.." 44 | } 45 | -------------------------------------------------------------------------------- /android/android.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /ios/Share Extension/Base.lproj/MainInterface.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-report.yaml: -------------------------------------------------------------------------------- 1 | name: Bug Report 2 | description: Found something in Custom Uploader you weren't expecting? Report it here! 3 | labels: 4 | - bug 5 | assignees: 6 | - SrS2225a 7 | body: 8 | - type: markdown 9 | attributes: 10 | value: | 11 | NOTE: Make sure you are using the latest release and take a moment to check that your issue hasn't been reported before. 12 | - type: textarea 13 | id: description 14 | attributes: 15 | label: Describe The Bug 16 | description: | 17 | A clear and concise description of what the bug is. 18 | validations: 19 | required: true 20 | - type: textarea 21 | id: description-reproduce 22 | attributes: 23 | label: To Reproduce 24 | description: | 25 | Steps to reproduce the behavior 26 | placeholder: | 27 | 1. Go to '...' 28 | 2. Click on '...' 29 | 3. See error 30 | validations: 31 | required: true 32 | - type: textarea 33 | id: expected-behavoir 34 | attributes: 35 | label: Expected Behavior 36 | description: | 37 | A clear and concise description of what you expected to happen. 38 | validations: 39 | required: true 40 | - type: textarea 41 | id: actual-behavior 42 | attributes: 43 | label: Actual Behavior 44 | description: | 45 | Describe what actually happened when you encountered the issue. 46 | validations: 47 | required: true 48 | - type: textarea 49 | id: screenshots 50 | attributes: 51 | label: Screenshots 52 | description: | 53 | If applicable, add screenshots to help explain your problem. 54 | - type: input 55 | id: os-ver 56 | attributes: 57 | label: OS Version 58 | description: Your current version of Android you are running 59 | - type: input 60 | id: app-ver 61 | attributes: 62 | label: App Version 63 | description: Your current version of Custom Uploader 64 | -------------------------------------------------------------------------------- /lib/utils/ScaffoldFix.dart: -------------------------------------------------------------------------------- 1 | 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | /* Later android versions made it so that the navigation bar draws on top of the app. 6 | * This custom scaffold implementation fixes that until flutter fixes it on their end */ 7 | 8 | class ScaffoldFix extends StatelessWidget { 9 | final Widget body; 10 | final Widget? bottomNavigationBar; 11 | final Color? backgroundColor; 12 | final PreferredSizeWidget? appBar; 13 | final bool resizeToAvoidBottomInset; 14 | final Widget? floatingActionButton; 15 | final FloatingActionButtonLocation? floatingActionButtonLocation; 16 | final Drawer? drawer; 17 | final Drawer? endDrawer; 18 | final bool extendBody; 19 | 20 | const ScaffoldFix({ 21 | super.key, 22 | required this.body, 23 | this.bottomNavigationBar, 24 | this.backgroundColor, 25 | this.appBar, 26 | this.resizeToAvoidBottomInset = true, 27 | this.floatingActionButton, 28 | this.floatingActionButtonLocation, 29 | this.drawer, 30 | this.endDrawer, 31 | this.extendBody = false, 32 | }); 33 | 34 | @override 35 | Widget build(BuildContext context) { 36 | // final bottomPadding = MediaQuery.of(context).viewPadding.bottom; 37 | 38 | return Scaffold( 39 | backgroundColor: backgroundColor, 40 | appBar: appBar, 41 | extendBody: extendBody, 42 | resizeToAvoidBottomInset: resizeToAvoidBottomInset, 43 | floatingActionButton: floatingActionButton, 44 | floatingActionButtonLocation: floatingActionButtonLocation, 45 | drawer: drawer, 46 | endDrawer: endDrawer, 47 | body: bottomNavigationBar == null 48 | ? SafeArea( 49 | child: body, 50 | ) 51 | : body, 52 | bottomNavigationBar: bottomNavigationBar != null 53 | ? SafeArea( 54 | child: Padding( 55 | padding: EdgeInsets.only(bottom: 0), 56 | child: bottomNavigationBar, 57 | ), 58 | ) 59 | : null, 60 | ); 61 | } 62 | } -------------------------------------------------------------------------------- /lib/utils/build_favicon.dart: -------------------------------------------------------------------------------- 1 | import 'dart:typed_data'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:dio/dio.dart'; 4 | import 'package:dio_cache_interceptor/dio_cache_interceptor.dart'; 5 | 6 | final Dio dio = Dio() 7 | ..interceptors.add( 8 | DioCacheInterceptor( 9 | options: CacheOptions( 10 | store: MemCacheStore(), 11 | policy: CachePolicy.forceCache, 12 | maxStale: const Duration(days: 7), 13 | ), 14 | ), 15 | ); 16 | 17 | final Map faviconCache = {}; 18 | 19 | Future getFavicon(String url) async { 20 | if (faviconCache.containsKey(url)) { 21 | return faviconCache[url]; // Return cached favicon if available 22 | } 23 | 24 | try { 25 | Response> response = await dio.get( 26 | 'https://www.google.com/s2/favicons?domain=$url&sz=256', 27 | options: Options(responseType: ResponseType.bytes), 28 | ); 29 | 30 | if (response.statusCode == 200 && response.data != null) { 31 | final favicon = Uint8List.fromList(response.data!); 32 | faviconCache[url] = favicon; // Cache the fetched favicon 33 | return favicon; 34 | } 35 | } catch (error) { 36 | print('Error fetching favicon: $error'); 37 | } 38 | return null; 39 | } 40 | 41 | Widget buildFaviconImage(String uploaderUrl) { 42 | if (faviconCache.containsKey(uploaderUrl) && faviconCache[uploaderUrl] != null) { 43 | return Image.memory(faviconCache[uploaderUrl]!, width: 32, height: 32, fit: BoxFit.fill); 44 | } else { 45 | return FutureBuilder( 46 | future: getFavicon(uploaderUrl), 47 | builder: (context, snapshot) { 48 | if (snapshot.connectionState == ConnectionState.waiting) { 49 | return const SizedBox(width: 32, height: 32, child: CircularProgressIndicator()); 50 | } 51 | if (snapshot.hasError || snapshot.data == null) { 52 | return const Icon(Icons.public, size: 32); 53 | } else { 54 | return Image.memory(snapshot.data!, width: 32, height: 32, fit: BoxFit.fill); 55 | } 56 | }, 57 | ); 58 | } 59 | } -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id "com.android.application" 3 | id "kotlin-android" 4 | // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. 5 | id "dev.flutter.flutter-gradle-plugin" 6 | } 7 | 8 | def keystoreProperties = new Properties() 9 | def keystorePropertiesFile = rootProject.file('key.properties') 10 | if (keystorePropertiesFile.exists()) { 11 | keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) 12 | } 13 | 14 | android { 15 | if (project.android.hasProperty("namespace")) { 16 | namespace = "com.nyx.custom_uploader" 17 | } 18 | compileSdk = flutter.compileSdkVersion 19 | // ndkVersion = flutter.ndkVersion 20 | 21 | dependenciesInfo { 22 | // Disables dependency metadata when building APKs. 23 | includeInApk = false 24 | // Disables dependency metadata when building Android App Bundles. 25 | includeInBundle = false 26 | } 27 | 28 | compileOptions { 29 | sourceCompatibility = JavaVersion.VERSION_1_8 30 | targetCompatibility = JavaVersion.VERSION_1_8 31 | } 32 | 33 | sourceSets { 34 | main.java.srcDirs += 'src/main/kotlin' 35 | } 36 | 37 | kotlinOptions { 38 | jvmTarget = JavaVersion.VERSION_1_8 39 | } 40 | 41 | defaultConfig { 42 | applicationId = "com.nyx.custom_uploader" 43 | minSdk = flutter.minSdkVersion 44 | targetSdk = flutter.targetSdkVersion 45 | versionCode = flutter.versionCode 46 | versionName = flutter.versionName 47 | } 48 | signingConfigs { 49 | release { 50 | v1SigningEnabled true 51 | v2SigningEnabled true 52 | keyAlias keystoreProperties['keyAlias'] 53 | keyPassword keystoreProperties['keyPassword'] 54 | storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null 55 | storePassword keystoreProperties['storePassword'] 56 | } 57 | } 58 | buildTypes { 59 | release { 60 | signingConfig = signingConfigs.release 61 | } 62 | } 63 | } 64 | 65 | flutter { 66 | source = "../.." 67 | } -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AppGroupId 6 | $(CUSTOM_GROUP_ID) 7 | CADisableMinimumFrameDurationOnPhone 8 | 9 | CFBundleDevelopmentRegion 10 | $(DEVELOPMENT_LANGUAGE) 11 | CFBundleDisplayName 12 | Custom Uploader 13 | CFBundleExecutable 14 | $(EXECUTABLE_NAME) 15 | CFBundleIdentifier 16 | $(PRODUCT_BUNDLE_IDENTIFIER) 17 | CFBundleInfoDictionaryVersion 18 | 6.0 19 | CFBundleName 20 | custom_uploader 21 | CFBundlePackageType 22 | APPL 23 | CFBundleShortVersionString 24 | $(FLUTTER_BUILD_NAME) 25 | CFBundleSignature 26 | ???? 27 | CFBundleURLTypes 28 | 29 | 30 | CFBundleTypeRole 31 | Editor 32 | CFBundleURLSchemes 33 | 34 | ShareMedia-$(PRODUCT_BUNDLE_IDENTIFIER) 35 | 36 | 37 | 38 | CFBundleVersion 39 | $(FLUTTER_BUILD_NUMBER) 40 | LSRequiresIPhoneOS 41 | 42 | NSPhotoLibraryUsageDescription 43 | To upload photos, please allow permission to access your photo library. 44 | UIApplicationSupportsIndirectInputEvents 45 | 46 | UILaunchStoryboardName 47 | LaunchScreen 48 | UIMainStoryboardFile 49 | Main 50 | UIStatusBarStyle 51 | 52 | UISupportedInterfaceOrientations 53 | 54 | UIInterfaceOrientationPortrait 55 | UIInterfaceOrientationPortraitUpsideDown 56 | UIInterfaceOrientationLandscapeLeft 57 | UIInterfaceOrientationLandscapeRight 58 | 59 | UIFileSharingEnabled 60 | 61 | LSSupportsOpeningDocumentsInPlace 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /lib/views/http_share_form.dart: -------------------------------------------------------------------------------- 1 | import 'package:custom_uploader/services/database.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:hive/hive.dart'; 4 | import 'package:custom_uploader/l10n/app_localizations.dart'; 5 | 6 | import '../utils/ScaffoldFix.dart'; 7 | import 'components/add_uploader_advanced.dart'; 8 | import 'components/add_uploader_simple.dart'; 9 | 10 | class HTTPShareForm extends StatefulWidget { 11 | final Share? editor; 12 | HTTPShareForm({super.key, required this.editor}); 13 | 14 | @override 15 | State createState() => _MyCreatorState(); 16 | } 17 | 18 | class _MyCreatorState extends State { 19 | var viewBox = Hive.openBox("custom_view"); 20 | bool _isAdvancedView = false; 21 | 22 | @override 23 | void initState() { 24 | super.initState(); 25 | // Initialize checkboxValue from Hive 26 | viewBox.then((value) { 27 | bool? advancedView = value.get('addNewView', defaultValue: false); 28 | setState(() { 29 | _isAdvancedView = advancedView!; 30 | }); 31 | }); 32 | } 33 | 34 | @override 35 | Widget build(BuildContext context) { 36 | return ScaffoldFix( 37 | appBar: AppBar( 38 | title: Text(AppLocalizations.of(context)!.type_uploader("HTTP")), 39 | actions: [ 40 | PopupMenuButton(itemBuilder: (BuildContext context) { 41 | return [ 42 | CheckedPopupMenuItem( 43 | checked: _isAdvancedView, 44 | value: 0, 45 | child: Text(AppLocalizations.of(context)!.advanced), 46 | ), 47 | ]; 48 | }, 49 | onSelected: (value) { 50 | if (value == 0) { 51 | setState(() { 52 | _isAdvancedView = !_isAdvancedView; 53 | updateSelectedView(_isAdvancedView); 54 | }); 55 | } 56 | },) 57 | ], 58 | ), 59 | body: SingleChildScrollView( 60 | child: _isAdvancedView ? AdvancedView(widget.editor) : SimpleView(widget.editor) 61 | ), 62 | ); 63 | } 64 | 65 | void updateSelectedView(bool newValue) async { 66 | viewBox.then((value) => value.put('addNewView', newValue)); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /lib/utils/init_database.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/services.dart' show rootBundle; 2 | import 'package:hive_flutter/hive_flutter.dart'; 3 | import 'package:yaml/yaml.dart'; 4 | import 'package:custom_uploader/services/database.dart'; 5 | 6 | Future initializeDatabase() async { 7 | await Hive.initFlutter(); 8 | 9 | Hive.registerAdapter(ShareAdapter()); 10 | Hive.registerAdapter(NetworkShareAdapter()); 11 | 12 | // Open boxes in parallel 13 | final futures = await Future.wait([ 14 | Hive.openBox("custom_upload"), 15 | Hive.openBox("share_upload"), 16 | Hive.openBox('custom_view'), 17 | ]); 18 | 19 | final shareBox = futures[0] as Box; 20 | final viewBox = futures[2]; 21 | 22 | final bool loadPresets = viewBox.get('shouldLoadPresets', defaultValue: false); 23 | 24 | if (!loadPresets) { 25 | final String yamlString = await rootBundle.loadString('lib/assets/preset_uploaders.yaml'); 26 | final yamlList = loadYaml(yamlString); 27 | 28 | for (final item in yamlList) { 29 | if (!shareBox.values.any((s) => s.uploaderUrl == item["RequestURL"])) { 30 | shareBox.add(Share( 31 | uploaderUrl: item["RequestURL"] ?? "", 32 | formDataName: item["FileFormName"] ?? "upload", 33 | uploadFormData: item["UseBytes"] ?? false, 34 | uploadHeaders: Map.from(yamlMapToMap(item["Headers"] ?? {})), 35 | uploadParameters: Map.from(yamlMapToMap(item["Parameters"] ?? {})), 36 | uploadArguments: Map.from(yamlMapToMap(item["Arguments"] ?? {})), 37 | uploaderResponseParser: item["URLResponse"] ?? "", 38 | uploaderErrorParser: item["ErrorResponse"] ?? "", 39 | selectedUploader: false, 40 | method: item["RequestMethod"], 41 | )); 42 | } 43 | } 44 | 45 | await viewBox.put('shouldLoadPresets', true); 46 | } 47 | 48 | await viewBox.close(); 49 | } 50 | 51 | // Since the dart yaml package does not use an ordinary map type, we need to convert it. 52 | // Why the hell would you use an custom type in this way instead of an regular type? It drives me insane 53 | dynamic yamlMapToMap(dynamic value) { 54 | if (value is Map) { 55 | return Map.fromEntries( 56 | value.entries.map((e) => MapEntry(e.key.toString(), yamlMapToMap(e.value))), 57 | ); 58 | } else if (value is List) { 59 | return value.map(yamlMapToMap).toList(); 60 | } else { 61 | return value; 62 | } 63 | } -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /android/gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /lib/services/database.dart: -------------------------------------------------------------------------------- 1 | import 'package:hive/hive.dart'; 2 | part 'database.g.dart'; 3 | 4 | @HiveType(typeId: 0) // 1 5 | class Share extends HiveObject { 6 | @HiveField(0) 7 | String uploaderUrl; 8 | 9 | @HiveField(1) 10 | String formDataName; 11 | 12 | @HiveField(2) 13 | bool uploadFormData; 14 | 15 | @HiveField(3) 16 | Map uploadHeaders; 17 | 18 | @HiveField(4) 19 | Map uploadParameters; 20 | 21 | @HiveField(5) 22 | Map uploadArguments; 23 | 24 | @HiveField(6) 25 | String uploaderResponseParser; 26 | 27 | @HiveField(7) 28 | String uploaderErrorParser; 29 | 30 | @HiveField(8) 31 | bool selectedUploader; // No longer `late` or nullable, initialized in constructor 32 | 33 | @HiveField(9) 34 | String? method; 35 | 36 | Share({ 37 | required this.uploaderUrl, 38 | required this.formDataName, 39 | required this.uploadFormData, 40 | required this.uploadHeaders, 41 | required this.uploadParameters, 42 | required this.uploadArguments, 43 | required this.uploaderResponseParser, 44 | required this.uploaderErrorParser, 45 | this.selectedUploader = false, // Default to false 46 | this.method, 47 | }); 48 | 49 | // Setter method to safely update selectedUploader 50 | void setSelectedUploader(bool value) { 51 | selectedUploader = value; 52 | } 53 | } 54 | 55 | @HiveType(typeId: 1) // 2 56 | class ViewSelection { 57 | // define the type of the field 58 | @HiveField(0) 59 | bool addNewView; // for selecting the simple or advanced view for the add uploader page 60 | @HiveField(1) 61 | bool shouldLoadPresets; // for if the default uploader presets should be loaded 62 | 63 | ViewSelection(this.addNewView, this.shouldLoadPresets); 64 | } 65 | 66 | @HiveType(typeId: 2) // 3 67 | class NetworkShare extends HiveObject { 68 | @HiveField(0) 69 | String protocol; // incase we add any other protocols than ftp 70 | 71 | @HiveField(1) 72 | String domain; 73 | 74 | @HiveField(2) 75 | String username; 76 | 77 | @HiveField(3) 78 | String password; 79 | 80 | @HiveField(4) 81 | String folderPath; 82 | 83 | @HiveField(5) 84 | int port; // optional: default to 21 for FTP 85 | 86 | @HiveField(6) 87 | bool selected; 88 | 89 | @HiveField(7) 90 | String? urlPath; 91 | 92 | NetworkShare({ 93 | required this.protocol, 94 | required this.domain, 95 | required this.username, 96 | required this.password, 97 | required this.folderPath, 98 | this.port = 21, // can set default 99 | this.selected = false, 100 | this.urlPath = "", 101 | }); 102 | 103 | void setSelectedShare(bool value) { 104 | selected = value; 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /lib/assets/preset_uploaders.yaml: -------------------------------------------------------------------------------- 1 | ################################################################################################### 2 | 3 | # This YAML file contains upload presets for various services. 4 | # Each preset includes configurations for uploading files, such as URLs, parameters, 5 | # headers, and request methods. 6 | # 7 | # Each preset is represented as a mapping and includes the following fields: 8 | # - RequestURL*: The URL to which the file will be uploaded 9 | # - FileFormName*: The name of the form field where the file will be attached 10 | # - UseByes*: A boolean indicating whether to use bytes for file upload 11 | # - Headers: Additional headers to include in the request 12 | # - Parameters: Additional parameters to include in the request 13 | # - Arguments: Additional arguments for the request (form data) 14 | # - URLResponse: How the app should parse the returned url from the server. Custom Uploader will 15 | # attempt to get the returned url automatically, but some services may break up the returned url, 16 | # in which case this field should be used 17 | # - ErrorResponse: How the app should parse the error returned from the server in case the upload 18 | # failed 19 | # - RequestMethod*: The HTTP request method to use (POST, PUT, GET, PATCH) 20 | # 21 | # Each preset may have a different set of fields depending on the service. 22 | # Additionally, fields marked with an "*" are required. 23 | # 24 | # Feel free to contribute more presets by following the same structure :) 25 | 26 | ################################################################################################### 27 | 28 | # 0x0 29 | - RequestURL: "https://0x0.st" 30 | FileFormName: "file" 31 | UseBytes: false 32 | RequestMethod: "POST" 33 | 34 | # Catbox (Litterbox) 35 | - RequestURL: "https://litterbox.catbox.moe/resources/internals/api.php" 36 | FileFormName: "fileToUpload" 37 | UseBytes: false 38 | Arguments: 39 | reqtype: "fileupload" 40 | time: "72h" 41 | RequestMethod: "POST" 42 | 43 | # Imgur 44 | - RequestURL: "https://api.imgur.com/3/image" 45 | FileFormName: "image" 46 | UseBytes: false 47 | Headers: 48 | Authorization: Client-ID 49 | RequestMethod: "POST" 50 | URLResponse: "$json:data.link$" 51 | ErrorResponse: "$json:data.error$" 52 | 53 | # Giphy 54 | - RequestURL: "upload.giphy.com/v1/gifs" 55 | FileFormName: "file" 56 | UseBytes: false 57 | Arguments: 58 | api_key: "" 59 | RequestMethod: "POST" 60 | 61 | 62 | # Pastebin 63 | - RequestURL: "https://pastebin.com/api/api_post.php" 64 | FileFormName: "api_paste_code" 65 | UseBytes: true 66 | Arguments: 67 | api_dev_key: "" 68 | api_option: "paste" 69 | api_paste_name: "Custom Uploader Paste" 70 | RequestMethod: "POST" 71 | ErrorResponse: "$regex:.*$" 72 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 18 | 22 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 48 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/nyx/custom_uploader/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.nyx.custom_uploader 2 | 3 | import android.annotation.SuppressLint 4 | import android.content.ContentValues 5 | import android.os.Build 6 | import android.os.Environment 7 | import android.provider.MediaStore 8 | import android.util.Log 9 | import android.webkit.MimeTypeMap 10 | import io.flutter.embedding.android.FlutterActivity 11 | import io.flutter.embedding.engine.FlutterEngine 12 | import io.flutter.plugin.common.MethodChannel 13 | import java.io.File 14 | import java.io.IOException 15 | 16 | class MainActivity : FlutterActivity() { 17 | override fun configureFlutterEngine(flutterEngine: FlutterEngine) { 18 | super.configureFlutterEngine(flutterEngine) 19 | MethodChannel( 20 | flutterEngine.dartExecutor.binaryMessenger, 21 | "flutter_media_store" 22 | ).setMethodCallHandler { call, result -> 23 | when (call.method) { 24 | "addItem" -> { 25 | addItem(call.argument("path")!!, call.argument("name")!!) 26 | result.success(null) 27 | } 28 | } 29 | } 30 | } 31 | 32 | @SuppressLint("NewApi") // suppress warning for MediaStore.Downloads since it's only used on API 29+ (current min is 19) 33 | private fun addItem(path: String, name: String) { 34 | val extension = MimeTypeMap.getFileExtensionFromUrl(path) 35 | val mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension) ?: "text/plain" 36 | 37 | val collection = if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { 38 | MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY) 39 | } else { 40 | MediaStore.Downloads.EXTERNAL_CONTENT_URI 41 | } 42 | 43 | val values = ContentValues().apply { 44 | put(MediaStore.Images.Media.DISPLAY_NAME, name) 45 | put(MediaStore.Images.Media.MIME_TYPE, mimeType) 46 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { 47 | put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS + File.separator + "CustomUploader") 48 | put(MediaStore.Downloads.IS_PENDING, 1) 49 | } 50 | } 51 | 52 | val resolver = applicationContext.contentResolver 53 | val uri = resolver.insert(collection, values)!! 54 | 55 | try { 56 | resolver.openOutputStream(uri).use { os -> 57 | File(path).inputStream().use { it.copyTo(os!!) } 58 | } 59 | 60 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { 61 | values.clear() 62 | values.put(MediaStore.Downloads.IS_PENDING, 0) 63 | resolver.update(uri, values, null, null) 64 | } 65 | } catch (ex: IOException) { 66 | Log.e("MediaStore", ex.message, ex) 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java: -------------------------------------------------------------------------------- 1 | package io.flutter.plugins; 2 | 3 | import androidx.annotation.Keep; 4 | import androidx.annotation.NonNull; 5 | import io.flutter.Log; 6 | 7 | import io.flutter.embedding.engine.FlutterEngine; 8 | 9 | /** 10 | * Generated file. Do not edit. 11 | * This file is generated by the Flutter tool based on the 12 | * plugins that support the Android platform. 13 | */ 14 | @Keep 15 | public final class GeneratedPluginRegistrant { 16 | private static final String TAG = "GeneratedPluginRegistrant"; 17 | public static void registerWith(@NonNull FlutterEngine flutterEngine) { 18 | try { 19 | flutterEngine.getPlugins().add(new dev.fluttercommunity.plus.device_info.DeviceInfoPlusPlugin()); 20 | } catch (Exception e) { 21 | Log.e(TAG, "Error registering plugin device_info_plus, dev.fluttercommunity.plus.device_info.DeviceInfoPlusPlugin", e); 22 | } 23 | try { 24 | flutterEngine.getPlugins().add(new com.mr.flutter.plugin.filepicker.FilePickerPlugin()); 25 | } catch (Exception e) { 26 | Log.e(TAG, "Error registering plugin file_picker, com.mr.flutter.plugin.filepicker.FilePickerPlugin", e); 27 | } 28 | try { 29 | flutterEngine.getPlugins().add(new io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin()); 30 | } catch (Exception e) { 31 | Log.e(TAG, "Error registering plugin flutter_plugin_android_lifecycle, io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin", e); 32 | } 33 | try { 34 | flutterEngine.getPlugins().add(new com.techind.flutter_sharing_intent.FlutterSharingIntentPlugin()); 35 | } catch (Exception e) { 36 | Log.e(TAG, "Error registering plugin flutter_sharing_intent, com.techind.flutter_sharing_intent.FlutterSharingIntentPlugin", e); 37 | } 38 | try { 39 | flutterEngine.getPlugins().add(new dev.fluttercommunity.plus.packageinfo.PackageInfoPlugin()); 40 | } catch (Exception e) { 41 | Log.e(TAG, "Error registering plugin package_info_plus, dev.fluttercommunity.plus.packageinfo.PackageInfoPlugin", e); 42 | } 43 | try { 44 | flutterEngine.getPlugins().add(new io.flutter.plugins.pathprovider.PathProviderPlugin()); 45 | } catch (Exception e) { 46 | Log.e(TAG, "Error registering plugin path_provider_android, io.flutter.plugins.pathprovider.PathProviderPlugin", e); 47 | } 48 | try { 49 | flutterEngine.getPlugins().add(new com.baseflow.permissionhandler.PermissionHandlerPlugin()); 50 | } catch (Exception e) { 51 | Log.e(TAG, "Error registering plugin permission_handler_android, com.baseflow.permissionhandler.PermissionHandlerPlugin", e); 52 | } 53 | try { 54 | flutterEngine.getPlugins().add(new dev.fluttercommunity.plus.share.SharePlusPlugin()); 55 | } catch (Exception e) { 56 | Log.e(TAG, "Error registering plugin share_plus, dev.fluttercommunity.plus.share.SharePlusPlugin", e); 57 | } 58 | try { 59 | flutterEngine.getPlugins().add(new io.flutter.plugins.urllauncher.UrlLauncherPlugin()); 60 | } catch (Exception e) { 61 | Log.e(TAG, "Error registering plugin url_launcher_android, io.flutter.plugins.urllauncher.UrlLauncherPlugin", e); 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | {"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"72x72","expected-size":"72","filename":"72.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"76x76","expected-size":"152","filename":"152.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"50x50","expected-size":"100","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"76x76","expected-size":"76","filename":"76.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"50x50","expected-size":"50","filename":"50.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"72x72","expected-size":"144","filename":"144.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"40x40","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"83.5x83.5","expected-size":"167","filename":"167.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"20x20","expected-size":"20","filename":"20.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"}]} -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:custom_uploader/views/home_page.dart'; 3 | import 'package:flutter/services.dart'; 4 | import 'package:custom_uploader/utils/init_database.dart'; 5 | import 'package:custom_uploader/l10n/app_localizations.dart'; 6 | import 'package:flutter_localizations/flutter_localizations.dart'; 7 | 8 | Future main() async { 9 | WidgetsFlutterBinding.ensureInitialized(); 10 | await initializeDatabase(); 11 | runApp(const MainApp()); 12 | } 13 | 14 | class MainApp extends StatelessWidget { 15 | const MainApp({super.key}); 16 | 17 | // This widget is the root of the application. 18 | @override 19 | Widget build(BuildContext context) { 20 | SystemChrome.setPreferredOrientations([ 21 | DeviceOrientation.portraitUp, 22 | DeviceOrientation.portraitDown, 23 | ]); 24 | SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); 25 | return MaterialApp( 26 | localizationsDelegates: const [ 27 | AppLocalizations.delegate, // Generated delegate 28 | GlobalMaterialLocalizations.delegate, 29 | GlobalWidgetsLocalizations.delegate, 30 | GlobalCupertinoLocalizations.delegate, 31 | ], 32 | supportedLocales: const [ 33 | Locale('en'), // English 34 | Locale('fr'), // French 35 | Locale('de'), // German 36 | Locale('es'), // Spanish 37 | Locale('ru'), // Russian 38 | Locale('zh'), // Simplified Chinese 39 | Locale('it'), // Italian 40 | Locale('ja'), // Japanese 41 | Locale('ar'), // Arabic 42 | Locale('pt', 'BR'), // Brazilian Portuguese 43 | Locale('pl'), // Polish 44 | Locale('nl'), // Dutch 45 | Locale('tr'), // Turkish 46 | Locale('ko'), // Korean 47 | Locale('pt'), // Portuguese 48 | Locale('uk'), // Ukrainian 49 | Locale('zh', 'Hant'),// Traditional Chinese 50 | Locale('vi'), // Vietnamese 51 | Locale('sv'), // Swedish 52 | Locale('cs'), // Czech 53 | Locale('da'), // Danish 54 | Locale('ro'), // Romanian 55 | Locale('hu'), // Hungarian 56 | Locale('fi'), // Finnish 57 | Locale('el'), // Greek 58 | Locale('no'), // Norwegian 59 | Locale('he'), // Hebrew 60 | Locale('af'), // Afrikaans 61 | Locale('ca'), // Catalan 62 | Locale('sr', 'Cyrl'),// Serbian (Cyrillic) 63 | ], 64 | localeResolutionCallback: (deviceLocale, supportedLocales) { 65 | for (var locale in supportedLocales) { 66 | if (locale.languageCode == deviceLocale?.languageCode && 67 | (locale.countryCode == null || locale.countryCode == deviceLocale?.countryCode)) { 68 | return locale; 69 | } 70 | } 71 | return supportedLocales.first; // fallback locale 72 | }, 73 | home: HomePage(), 74 | theme: ThemeData( 75 | brightness: Brightness.light, 76 | primarySwatch: Colors.blue, 77 | ), 78 | darkTheme: ThemeData( 79 | brightness: Brightness.dark, 80 | primarySwatch: Colors.blue, 81 | ), 82 | themeMode: ThemeMode.system, 83 | ); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Custom Uploader 2 | 3 |
4 | Custom Uploader Logo 5 |
6 | 7 | [](https://github.com/SrS2225a/custom_uploader/blob/master/LICENSE) 8 | [](https://github.com/SrS2225a/custom_uploader/releases) 9 | [](https://github.com/SrS2225a/custom_uploader) 10 | [](https://github.com/SrS2225a/custom_uploader/fork) 11 | [](https://github.com/SrS2225a/custom_uploader/issues) 12 | [](https://liberapay.com/Eris/donate) 13 | [](https://github.com/SrS2225a/custom_uploader/actions/workflows/flutter_build_test.yml) 14 | 15 | Custom Uploader is a user-friendly file uploading tool that makes it easy for you to transfer files to your preferred hosting service. It is designed to be lightweight and efficient, with a straightforward interface that allows you to upload files quickly and easily. With Custom Uploader, you can upload a variety of different file types, including documents, images, videos, and more. The versatile tool is perfect for anyone who needs a reliable and convenient way to upload files for storage or sharing. Whenever you are a business owner, a student, or a professional, Custom Uploader can help you manage and share your files with ease. 16 | 17 | ![Alt](https://repobeats.axiom.co/api/embed/c8985de5c0a937d7ac206ecab2aeb364003b71f0.svg "Repobeats analytics image") 18 | 19 | ## Features 20 | * Easily upload anything to your host of choice (images, videos, documents, etc.) with a simple and easy to use interface. 21 | * Easily create multiple uploaders for different hosts, and switch between them. 22 | * Upload files from your gallery, camera, or any other app that supports sharing. 23 | * Import/Export your uploaders to share them with others, with support for sharex's uploader format. 24 | * Comes with built in uploader presets 25 | * Comes with a powerful url parser that allows you to get the url of the uploaded file from the response of the host. 26 | 27 | ## Getting Started 28 | [Get it on Google Play](https://play.google.com/store/apps/details?id=com.nyx.custom_uploader) 29 | [Get it on F-Droid](https://f-droid.org/en/packages/com.nyx.custom_uploader/) 30 | [Get it on F-Droid](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22com.nyx.custom_uploader%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2FSrS2225a%2Fcustom_uploader%22%2C%22author%22%3A%22SrS2225a%22%2C%22name%22%3A%22Custom%20Uploader%22%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Afalse%7D%22%7D) 31 | 32 | You can also get the latest version of the app from the [releases](https://github.com/SrS2225a/custom_uploader/releases) page. 33 | 34 | Minimum supported Android version for this app is 5.0 (Lolipop). 35 | 36 | ## Building 37 | See [BUILDING.MD](./BUILDING.md) for details 38 | 39 | ## Donate 40 | Like the app? Consider [donating](https://liberapay.com/Eris/donate) to support the development of the app. 41 | 42 | -------------------------------------------------------------------------------- /ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - device_info_plus (0.0.1): 3 | - Flutter 4 | - DKImagePickerController/Core (4.3.9): 5 | - DKImagePickerController/ImageDataManager 6 | - DKImagePickerController/Resource 7 | - DKImagePickerController/ImageDataManager (4.3.9) 8 | - DKImagePickerController/PhotoGallery (4.3.9): 9 | - DKImagePickerController/Core 10 | - DKPhotoGallery 11 | - DKImagePickerController/Resource (4.3.9) 12 | - DKPhotoGallery (0.0.19): 13 | - DKPhotoGallery/Core (= 0.0.19) 14 | - DKPhotoGallery/Model (= 0.0.19) 15 | - DKPhotoGallery/Preview (= 0.0.19) 16 | - DKPhotoGallery/Resource (= 0.0.19) 17 | - SDWebImage 18 | - SwiftyGif 19 | - DKPhotoGallery/Core (0.0.19): 20 | - DKPhotoGallery/Model 21 | - DKPhotoGallery/Preview 22 | - SDWebImage 23 | - SwiftyGif 24 | - DKPhotoGallery/Model (0.0.19): 25 | - SDWebImage 26 | - SwiftyGif 27 | - DKPhotoGallery/Preview (0.0.19): 28 | - DKPhotoGallery/Model 29 | - DKPhotoGallery/Resource 30 | - SDWebImage 31 | - SwiftyGif 32 | - DKPhotoGallery/Resource (0.0.19): 33 | - SDWebImage 34 | - SwiftyGif 35 | - file_picker (0.0.1): 36 | - DKImagePickerController/PhotoGallery 37 | - Flutter 38 | - Flutter (1.0.0) 39 | - flutter_sharing_intent (0.0.1): 40 | - Flutter 41 | - package_info_plus (0.4.5): 42 | - Flutter 43 | - path_provider_foundation (0.0.1): 44 | - Flutter 45 | - FlutterMacOS 46 | - permission_handler_apple (9.3.0): 47 | - Flutter 48 | - SDWebImage (5.21.0): 49 | - SDWebImage/Core (= 5.21.0) 50 | - SDWebImage/Core (5.21.0) 51 | - SwiftyGif (5.4.5) 52 | - url_launcher_ios (0.0.1): 53 | - Flutter 54 | 55 | DEPENDENCIES: 56 | - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) 57 | - file_picker (from `.symlinks/plugins/file_picker/ios`) 58 | - Flutter (from `Flutter`) 59 | - flutter_sharing_intent (from `.symlinks/plugins/flutter_sharing_intent/ios`) 60 | - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) 61 | - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) 62 | - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) 63 | - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) 64 | 65 | SPEC REPOS: 66 | trunk: 67 | - DKImagePickerController 68 | - DKPhotoGallery 69 | - SDWebImage 70 | - SwiftyGif 71 | 72 | EXTERNAL SOURCES: 73 | device_info_plus: 74 | :path: ".symlinks/plugins/device_info_plus/ios" 75 | file_picker: 76 | :path: ".symlinks/plugins/file_picker/ios" 77 | Flutter: 78 | :path: Flutter 79 | flutter_sharing_intent: 80 | :path: ".symlinks/plugins/flutter_sharing_intent/ios" 81 | package_info_plus: 82 | :path: ".symlinks/plugins/package_info_plus/ios" 83 | path_provider_foundation: 84 | :path: ".symlinks/plugins/path_provider_foundation/darwin" 85 | permission_handler_apple: 86 | :path: ".symlinks/plugins/permission_handler_apple/ios" 87 | url_launcher_ios: 88 | :path: ".symlinks/plugins/url_launcher_ios/ios" 89 | 90 | SPEC CHECKSUMS: 91 | device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe 92 | DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c 93 | DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 94 | file_picker: a0560bc09d61de87f12d246fc47d2119e6ef37be 95 | Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 96 | flutter_sharing_intent: afdc98985814d2c01d8c0956a177d6b6dfbdc373 97 | package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499 98 | path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 99 | permission_handler_apple: 4ed2196e43d0651e8ff7ca3483a069d469701f2d 100 | SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868 101 | SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 102 | url_launcher_ios: 694010445543906933d732453a59da0a173ae33d 103 | 104 | PODFILE CHECKSUM: f788a8d40da8aac68cf546adbadd09bc47a31f87 105 | 106 | COCOAPODS: 1.16.2 107 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 37 | 38 | 39 | 40 | 43 | 49 | 50 | 51 | 52 | 53 | 64 | 66 | 72 | 73 | 74 | 75 | 81 | 83 | 89 | 90 | 91 | 92 | 94 | 95 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /lib/utils/response_parser.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'package:xml/xml.dart'; 3 | 4 | String? parseResponse(dynamic response, String parse) { 5 | try { 6 | final buffer = StringBuffer(); 7 | 8 | final expressionRegex = RegExp(r'\$(.*?)\$'); 9 | final matches = expressionRegex.allMatches(parse).toList(); 10 | 11 | // Fallback: if no $...$ expressions are present, try to auto-detect a URL 12 | if (matches.isEmpty) { 13 | final urlRegex = RegExp(r"((https?|ftp)\:\/\/|)([A-Za-z0-9.-]+\.[A-Za-z]{2,}|(\d{1,3}\.){3}\d{1,3})(:\d+)?(\/[A-Za-z0-9\-\._~%?!$&'()*+=:@]+)+"); 14 | final urlMatches = 15 | urlRegex 16 | .allMatches(response.toString()) 17 | .map((m) => m.group(0)) 18 | .toList(); 19 | if (urlMatches.isNotEmpty) { 20 | return urlMatches.first; 21 | } 22 | return ""; 23 | } 24 | 25 | int lastMatchEnd = 0; 26 | 27 | for (final match in matches) { 28 | buffer.write(parse.substring(lastMatchEnd, match.start)); 29 | final content = match.group(1)!; 30 | 31 | final parts = content.split(":"); 32 | if (parts.length != 2) { 33 | buffer.write("[Invalid expression: $content]"); 34 | lastMatchEnd = match.end; 35 | continue; 36 | } 37 | 38 | final type = parts[0].toLowerCase(); 39 | final path = parts[1]; 40 | 41 | switch (type) { 42 | case "json": 43 | final jsonData = 44 | (response is String) ? json.decode(response) : response; 45 | buffer.write(_extractFromJson(jsonData, path)); 46 | break; 47 | 48 | case "xml": 49 | final xmlDoc = 50 | (response is XmlDocument) 51 | ? response 52 | : XmlDocument.parse(response.toString()); 53 | buffer.write(_extractFromXml(xmlDoc, path)); 54 | break; 55 | 56 | case "regex": 57 | final patternParts = path.split("??"); 58 | final pattern = patternParts[0]; 59 | final index = 60 | patternParts.length > 1 ? int.tryParse(patternParts[1]) ?? 1 : 1; 61 | 62 | final regex = RegExp(pattern); 63 | final allMatches = 64 | regex 65 | .allMatches(response.toString()) 66 | .map((m) => m.group(0)) 67 | .toList(); 68 | if (allMatches.length >= index) { 69 | buffer.write(allMatches[index - 1]); 70 | } else { 71 | buffer.write("[no match]"); 72 | } 73 | break; 74 | 75 | default: 76 | buffer.write("[unknown type: $type]"); 77 | break; 78 | } 79 | 80 | lastMatchEnd = match.end; 81 | } 82 | 83 | buffer.write(parse.substring(lastMatchEnd)); 84 | return buffer.toString(); 85 | } catch (e) { 86 | print("Parsing error: $e"); 87 | return ""; 88 | } 89 | } 90 | 91 | dynamic _extractFromJson(dynamic object, String path) { 92 | final segments = path.split("."); 93 | for (var segment in segments) { 94 | final match = RegExp(r'([^\[]+)(?:\[(\d+)\])?').firstMatch(segment); 95 | if (match != null) { 96 | final key = match.group(1)!; 97 | final index = match.group(2); 98 | 99 | object = object[key]; 100 | if (index != null && object is List) { 101 | object = object[int.parse(index)]; 102 | } 103 | } else { 104 | return "[invalid path]"; 105 | } 106 | } 107 | return object?.toString() ?? "[null]"; 108 | } 109 | 110 | String _extractFromXml(XmlDocument doc, String path) { 111 | final segments = path.split("/"); 112 | XmlElement? element = doc.rootElement; 113 | 114 | // Skip the first segment if it matches the root tag name 115 | int start = segments[0] == element.name.toString() ? 1 : 0; 116 | 117 | for (var i = start; i < segments.length; i++) { 118 | final match = RegExp(r'([^\[]+)(?:\[(\d+)\])?').firstMatch(segments[i]); 119 | if (match != null) { 120 | final tag = match.group(1)!; 121 | final index = int.tryParse(match.group(2) ?? "0")!; 122 | final elements = element!.findElements(tag).toList(); 123 | 124 | if (elements.length > index) { 125 | element = elements[index]; 126 | } else { 127 | return "[missing element]"; 128 | } 129 | } else { 130 | return "[invalid XML path]"; 131 | } 132 | } 133 | 134 | return element?.text ?? "[null]"; 135 | } 136 | -------------------------------------------------------------------------------- /lib/l10n/app_Arabic.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "ar", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_Czech.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "cs", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_Danish.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "da", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_Dutch.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "nl", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_French.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "fr", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_German.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "de", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_Greek.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "el", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_Hebrew.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "he", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_Korean.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "ko", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_Polish.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "pl", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_Afrikaans.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "af", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_Catalan.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "ca", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_Finnish.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "fi", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_Hungarian.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "hu", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_Italian.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "it", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_Japanese.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "ja", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_Norwegian.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "no", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_Portuguese.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "gl", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_Romanian.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "ro", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_Russian.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "ru", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } -------------------------------------------------------------------------------- /lib/l10n/app_Swedish.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "sv", 3 | "custom_uploader": "Custom Uploader", 4 | "github": "Github", 5 | "donate": "Donate", 6 | "help": "Help", 7 | "no_file_selected": "No file has been selected. Select one then try again!", 8 | "no_custom_uploaders": "No Custom Uploaders", 9 | "before_you_can_upload_files": "Before you can begin uploading files, you will need an uploader of your choice created and selected, then try again.", 10 | "uploading": "Uploading...", 11 | "choose_files": "Choose File(s)", 12 | "ok": "OK", 13 | "uploadingFile": "Uploading file {current} of {total}: {fileName}", 14 | "delete_this_share": "Are you sure you want to delete this share?", 15 | "yes": "Yes", 16 | "no": "No", 17 | "view_logs": "View Logs", 18 | "ftp_not_supported": "Currently, ftp shares cannot be imported or exported", 19 | "no_uploader_selected": "No uploader selected", 20 | "import_from_file": "Import from file", 21 | "export_to_file": "Export to file", 22 | "edit": "Edit", 23 | "delete": "Delete {delete}", 24 | "upload_method_and_type": "Upload Method: {method} • Type: {type}", 25 | "upload_type_only": "Type: {type}", 26 | "logs_downloaded_successfully": "The logs were downloaded successfully", 27 | "failed_to_export": "Failed to export", 28 | "failed_to_import": "Failed to import", 29 | "permission_denied": "The permission to write to {permission} was denied.", 30 | "failed_to_download_logs": "Failed to download logs. \n\n Error: {error}", 31 | "no_logs_available": "No logs available", 32 | "custom_uploader_logs": "Custom Uploader Logs", 33 | "download_logs": "Download Logs", 34 | "clear_logs": "Clear Logs", 35 | "error_loading_logs": "Error loading logs", 36 | "type_uploader": "{type} Uploader", 37 | "advanced": "Advanced", 38 | "save": "Save", 39 | "cancel": "Cancel", 40 | "test": "Test", 41 | "connection_successful": "Connection Successful", 42 | "connection_failed": "Connection Failed", 43 | "domain": "Domain", 44 | "username": "Username", 45 | "password": "Password", 46 | "port": "Port", 47 | "remote_folder_path": "Remote Folder Path", 48 | "protocol": "Protocol", 49 | "url_path": "URL Path", 50 | "advanced_view_tip": "Tip: If you need to supply arguments to an uploader, try the advanced view", 51 | "use_file_encoding": "Use File Encoding", 52 | "share_already_exists": "A share with that URL already exists.", 53 | "upload_url_hint": "The URL to upload to.", 54 | "upload_url_label": "Upload URL *", 55 | "upload_url_error": "Please enter a valid URL", 56 | "form_data_name_hint": "The name of the form data field.", 57 | "form_data_name_label": "Form Data Name *", 58 | "form_data_name_error": "Please enter a form name", 59 | "url_response_hint": "The response of the url to parse", 60 | "url_response_label": "URL Response", 61 | "url_error_response_hint": "The error response of the url to parse", 62 | "url_error_response_label": "URL Error Response", 63 | "method_label": "Method *", 64 | "upload_headers_label": "Upload Headers", 65 | "upload_parameters_label": "Upload Parameters", 66 | "upload_arguments_label": "Upload Arguments", 67 | "failed_to_connect": "Failed to connect to server. Please check your internet connection.", 68 | "upload_error_message": "Error transferring to {url}: ({status_code}) {status_message}", 69 | "upload_error_message_with_details": "Error transferring to {url}: ({status_code}) {status_message}; {details}", 70 | "upload_success_message": "Upload successful", 71 | "upload_success_message_with_details": "File uploaded successfully as: {parsedResponse}. It has been copied to your clipboard.", 72 | "upload_success": "Upload successful", 73 | "upload_success_with_url": "File uploaded successfully as: {url}. It has been copied to your clipboard.", 74 | "upload_failed_unexpectedly": "Upload failed unexpectedly.", 75 | "upload_error_unknown": "Unknown FTP error", 76 | "upload_error_with_message": "Error transferring to {domain}: ({error})", 77 | "invalid_json": "The file you selected appears to not be a valid JSON file. \n\n Error: {error}", 78 | "import_uploader_already_exists": "The uploader you are trying to import already exists.", 79 | "import_uploader_invalid": "The uploader you are trying to import is invalid.", 80 | "import_request_method_not_supported": "The request method ({requestMethod}) is not supported.", 81 | "import_not_valid_uploader": "The file you selected appears to not be a valid uploader.", 82 | "import_successful": "The uploader was imported successfully.", 83 | "export_successful": "The uploader was exported successfully.", 84 | "export_failed": "Failed to export the uploader. \\n\\nError: {error}.", 85 | "key": "Key", 86 | "value": "Value", 87 | "platform_not_supported": "" 88 | } --------------------------------------------------------------------------------