From 4dc5aeff16f37f6814312c8a44d099ee35df0699 Mon Sep 17 00:00:00 2001 From: Allen Houchins <32207388+allenhouchins@users.noreply.github.com> Date: Mon, 8 Dec 2025 17:59:21 -0600 Subject: [PATCH] Add Transmit as a macOS FMA (#36933) --- .../inputs/homebrew/transmit.json | 8 +++++++ ee/maintained-apps/outputs/apps.json | 7 ++++++ .../outputs/transmit/darwin.json | 21 ++++++++++++++++++ .../components/icons/Transmit.tsx | 14 ++++++++++++ .../SoftwarePage/components/icons/index.ts | 2 ++ .../images/app-icon-transmit-60x60@2x.png | Bin 0 -> 18288 bytes 6 files changed, 52 insertions(+) create mode 100644 ee/maintained-apps/inputs/homebrew/transmit.json create mode 100644 ee/maintained-apps/outputs/transmit/darwin.json create mode 100644 frontend/pages/SoftwarePage/components/icons/Transmit.tsx create mode 100644 website/assets/images/app-icon-transmit-60x60@2x.png diff --git a/ee/maintained-apps/inputs/homebrew/transmit.json b/ee/maintained-apps/inputs/homebrew/transmit.json new file mode 100644 index 0000000000..56150162d9 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/transmit.json @@ -0,0 +1,8 @@ +{ + "name": "Transmit", + "unique_identifier": "com.panic.Transmit", + "token": "transmit", + "installer_format": "zip", + "slug": "transmit/darwin", + "default_categories": ["Productivity"] +} diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index 5505d6a71c..8bbfc02f23 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -967,6 +967,13 @@ "unique_identifier": "com.fournova.Tower", "description": "Tower is a git client focusing on power and productivity." }, + { + "name": "Transmit", + "slug": "transmit/darwin", + "platform": "darwin", + "unique_identifier": "com.panic.Transmit", + "description": "Transmit is a file transfer application." + }, { "name": "Tunnelblick", "slug": "tunnelblick/darwin", diff --git a/ee/maintained-apps/outputs/transmit/darwin.json b/ee/maintained-apps/outputs/transmit/darwin.json new file mode 100644 index 0000000000..c0c638a110 --- /dev/null +++ b/ee/maintained-apps/outputs/transmit/darwin.json @@ -0,0 +1,21 @@ +{ + "versions": [ + { + "version": "5.11.3", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.panic.Transmit';" + }, + "installer_url": "https://download-cdn.panic.com/transmit/Transmit%205.11.3.zip", + "install_script_ref": "75b13eb8", + "uninstall_script_ref": "098dc5d4", + "sha256": "7a068b1489669e851a338de73e9d0645dac68715db379959023c10bed02306ce", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "098dc5d4": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Transmit.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.panic.transmit.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.panic.Transmit'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Transmit'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.panic.Transmit'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.plausiblelabs.crashreporter.data/com.panic.Transmit'\ntrash $LOGGED_IN_USER '~/Library/Caches/Transmit'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.panic.Transmit'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.panic.Transmit.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.panic.Transmit.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.panic.Transmit'\n", + "75b13eb8": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_application 'com.panic.Transmit'\nif [ -d \"$APPDIR/Transmit.app\" ]; then\n\tsudo mv \"$APPDIR/Transmit.app\" \"$TMPDIR/Transmit.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Transmit.app\" \"$APPDIR\"\n" + } +} diff --git a/frontend/pages/SoftwarePage/components/icons/Transmit.tsx b/frontend/pages/SoftwarePage/components/icons/Transmit.tsx new file mode 100644 index 0000000000..4bdce820b5 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Transmit.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Transmit = (props: SVGProps) => ( + + + +); +export default Transmit; diff --git a/frontend/pages/SoftwarePage/components/icons/index.ts b/frontend/pages/SoftwarePage/components/icons/index.ts index a7c4bd72b7..91e0bc7ba3 100644 --- a/frontend/pages/SoftwarePage/components/icons/index.ts +++ b/frontend/pages/SoftwarePage/components/icons/index.ts @@ -131,6 +131,7 @@ import Terminal from "./Terminal"; import Thunderbird from "./Thunderbird"; import Todoist from "./Todoist"; import Tower from "./Tower"; +import Transmit from "./Transmit"; import Tunnelblick from "./Tunnelblick"; import Twingate from "./Twingate"; import VisualStudioCode from "./VisualStudioCode"; @@ -283,6 +284,7 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { thunderbird: Thunderbird, todoist: Todoist, tower: Tower, + transmit: Transmit, tunnelblick: Tunnelblick, twingate: Twingate, "vnc viewer": VncViewer, diff --git a/website/assets/images/app-icon-transmit-60x60@2x.png b/website/assets/images/app-icon-transmit-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..005186f3700afeae198c4589dbe878c613e5f851 GIT binary patch literal 18288 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 iI0Jz*5cvNJ0{;(>9GT_EwgpiD0000