openmtp-git

LOW
maintainer zxp19821005 0 votes scanned 2026-08-24 07:22:23.267746
View on AUR
Why flagged

Uploaded within the last 14 days with 2 or fewer community votes — little peer review so far.

Triggered rules

Low Few votes, recently uploaded zero_votes_recent

Uploaded within the last 14 days with 2 or fewer community votes — little peer review so far.

PKGBUILD

1# Maintainer: zxp19821005 <zxp19821005 at 163 dot com>
2pkgname=openmtp-git
3_pkgname=OpenMTP
4pkgver=3.3.0.r1.g1c38907
5_electronversion=18
6_nodeversion=16.17.0
7pkgrel=1
8pkgdesc="Advanced Android File Transfer Application.(Use system-wide electron)"
9arch=(
10 'aarch64'
11 'x86_64'
12)
13url="https://openmtp.ganeshrvel.com/"
14_ghurl="https://github.com/ganeshrvel/openmtp"
15license=("MIT")
16conflicts=("${pkgname%-git}")
17provides=("${pkgname%-git}=${pkgver%.r*}")
18depends=(
19 "electron${_electronversion}"
20)
21makedepends=(
22 'npm'
23 'git'
24 'nvm'
25 'gendesk'
26 'gcc'
27 'cmake'
28 'curl'
29 'yarn'
30)
31source=(
32 "${pkgname//-/.}::git+${_ghurl}.git"
33 "${pkgname%-git}.sh"
34)
35sha256sums=('SKIP'
36 'a774c2f54fbbeeaac3cefc0f7250796d30c86d27f0fd40b7eaf9c0fdb021623d')
37pkgver() {
38 cd "${srcdir}/${pkgname//-/.}"
39 set -o pipefail
40 git describe --long --tags --abbrev=7 | sed 's/\([^-]*-g\)/r\1/;s/-/./g;s/v//g' ||
41 printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short=7 HEAD)"
42}
43_ensure_local_nvm() {
44 local NVM_DIR="${srcdir}/.nvm"
45 source /usr/share/nvm/init-nvm.sh || [[ $? != 1 ]]
46 nvm install "${_nodeversion}"
47 nvm use "${_nodeversion}"
48}
49_set_build_env() {
50 export ELECTRON_DIST="/usr/lib/electron${_electronversion}"
51 export ELECTRON_SKIP_BINARY_DOWNLOAD=1
52 export SYSTEM_ELECTRON_VERSION="$(electron${_electronversion} -v | sed 's/v//g')"
53 export HOME="${srcdir}/.electron-gyp"
54 mkdir -p "${srcdir}/.electron-gyp"
55 if [[ "$(curl -s ipinfo.io/country)" == *"CN"* ]]; then
56 {
57 export YARN_REGISTRY="https://registry.npmmirror.com"
58 export ELECTRON_MIRROR="https://registry.npmmirror.com/-/binary/electron/"
59 export ELECTRON_BUILDER_BINARIES_MIRROR="https://registry.npmmirror.com/-/binary/electron-builder-binaries/"
60 export NODEJS_ORG_MIRROR="https://npmmirror.com/mirrors/node"
61 export YARN_CACHE_FOLDER="${srcdir}/.yarn/cache"
62 export YARN_PLUGINS_FOLDER="${srcdir}/.yarn/plugins"
63 export YARN_GLOBAL_FOLDER="${srcdir}/.yarn/global"
64 export YARN_USE_HARDLINKS=true
65 # export YARN_BUILD_FROM_SOURCE=true
66 export YARN_LINK_WORKSPACE_PACKAGES=true
67 export YARN_FETCH_RETRIES=3
68 export YARN_FETCH_RETRY_TIMEOUT=10000
69 export YARN_NETWORK_CONCURRENCY=32
70 export NODE_TLS_REJECT_UNAUTHORIZED=0
71 export npm_config_strict_ssl=false
72 export SENTRYCLI_CDNURL="https://registry.npmmirror.com/-/binary/sentry-cli"
73 }
74 # 创建 .yarnrc 文件强制 yarn 使用镜像
75 cat > "${srcdir}/${pkgname//-/.}/.yarnrc" << 'EOF'
76registry "https://registry.npmmirror.com"
77EOF
78 find "${srcdir}/${pkgname//-/.}" -type f -name "yarn.lock" -exec \
79 sed -i "s/registry.yarnpkg.com/registry.npmmirror.com/g;s/registry.npmjs.org/registry.npmmirror.com/g" {} +
80 fi
81}
82_get_app_dir() {
83 find "${srcdir}" -type f -name "resources.pak" -exec dirname {} + | head -n 1
84}
85_get_electron_version() {
86 _elec_ver=$(find "${srcdir}" -maxdepth 5 -name "package.json" ! -path "*/node_modules/*" \
87 -exec grep -l '"electron"' {} + | xargs -I{} jq -r '(.devDependencies.electron // .dependencies.electron) // empty' {} 2>/dev/null | head -1)
88 [[ -z "${_elec_ver}" ]] && return 1
89 echo -e "The electron version is: \033[1;31m${_elec_ver%%.*}\033[0m"
90}
91prepare() {
92 cd "${srcdir}/${pkgname//-/.}"
93 _get_electron_version
94 sed -i -e "
95 s/@electronversion@/${_electronversion}/g
96 s/@appname@/${pkgname%-git}/g
97 s/@runname@/app.asar/g
98 s/@cfgdirname@/${pkgname%-git}/g
99 " "${srcdir}/${pkgname%-git}.sh"
100 gendesk -q -f -n \
101 --pkgname="${pkgname%-git}" \
102 --pkgdesc="${pkgdesc}" \
103 --categories="Utility" \
104 --name="${_pkgname}" \
105 --exec="${pkgname%-git} %U"
106 _set_build_env
107 _ensure_local_nvm
108 sed "/node-mac-permissions/d" -i package.json
109 # 修复 node-mac-permissions 在 Linux 上的导入问题
110 sed -i '/const { askForFoldersAccess, askForPhotosAccess } = await import(/,/);/c\
111 // Only available on macOS\
112 let askForFoldersAccess, askForPhotosAccess;\
113 try {\
114 const macPermissions = await import(\
115 // eslint-disable-next-line import/no-unresolved\
116 '\''node-mac-permissions'\''\
117 );\
118 askForFoldersAccess = macPermissions.askForFoldersAccess;\
119 askForPhotosAccess = macPermissions.askForPhotosAccess;\
120 } catch (e) {\
121 // Module not available (e.g., on Linux), return true\
122 return true;\
123 }' app/data/file-explorer/data-sources/FileExplorerLocalDataSource.js
124 # 修复 Linux 上 isKalamModeSupported 返回错误结果的问题
125 sed -i 's/export function isKalamModeSupported() {/export function isKalamModeSupported() {\n \/\/ Kalam mode is only supported on macOS\n if (getPlatform() !== '\''mac'\'') {\n return false;\n }/' app/helpers/binaries.js
126 # 修复 FileExplorerRepository.js 在 Linux 上导入 Kalam 的问题 - 使用动态导入
127 cat > /tmp/kalam_import_patch.py << 'PYTHON_EOF'
128import re
129
130with open('app/data/file-explorer/repositories/FileExplorerRepository.js', 'r') as f:
131 content = f.read()
132
133# Replace the static import with a conditional dynamic import
134old_import = "import { FileExplorerKalamDataSource } from '../data-sources/FileExplorerKalamDataSource';"
135new_import = """// Kalam is only supported on macOS, use dynamic import to prevent loading on Linux
136let FileExplorerKalamDataSource = null;
137async function getKalamDataSource() {
138 if (!FileExplorerKalamDataSource) {
139 try {
140 const module = await import('../data-sources/FileExplorerKalamDataSource');
141 FileExplorerKalamDataSource = module.FileExplorerKalamDataSource;
142 } catch (e) {
143 // Module not available (e.g., on Linux)
144 return null;
145 }
146 }
147 return FileExplorerKalamDataSource;
148}"""
149
150content = content.replace(old_import, new_import)
151
152# Replace constructor to not initialize kalamMtpDataSource
153content = content.replace(
154 'this.kalamMtpDataSource = new FileExplorerKalamDataSource();',
155 'this.kalamMtpDataSource = null; // Will be initialized lazily on macOS'
156)
157
158with open('app/data/file-explorer/repositories/FileExplorerRepository.js', 'w') as f:
159 f.write(content)
160PYTHON_EOF
161 python3 /tmp/kalam_import_patch.py
162 # 修复 Linux 图标配置
163 sed -i "s/linux: {/linux: {\n icon: 'build\/icons\/',/" electron-builder-config.js
164 NODE_ENV=development yarn install --cache-folder "${srcdir}/.yarn_cache"
165}
166build() {
167 cd "${srcdir}/${pkgname//-/.}"
168 _set_build_env
169 _ensure_local_nvm
170 NODE_ENV=production yarn build-no-verify
171 NODE_ENV=production yarn electron-builder build --linux dir -c.electronDist="${ELECTRON_DIST}" --config electron-builder-config.js
172}
173package() {
174 install -Dm755 "${srcdir}/${pkgname%-git}.sh" "${pkgdir}/usr/bin/${pkgname%-git}"
175 install -Dm755 -d "${pkgdir}/usr/lib/${pkgname%-git}"
176 local _app_dir=$(_get_app_dir)
177 cp -a "${_app_dir}/resources/"* "${pkgdir}/usr/lib/${pkgname%-git}/"
178 icon_sizes=(16x16 32x32 64x64 128x128 256x256 512x512 1024x1024)
179 for _icons in "${icon_sizes[@]}";do
180 install -Dm644 "${srcdir}/${pkgname%-git}.git/build/icons/${_icons}.png" \
181 "${pkgdir}/usr/share/icons/hicolor/${_icons}/apps/${pkgname%-git}.png"
182 done
183 install -Dm644 "${srcdir}/${pkgname//-/.}/${pkgname%-git}.desktop" -t "${pkgdir}/usr/share/applications"
184 install -Dm644 "${srcdir}/${pkgname//-/.}/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}"
185}

Scan history

Scanned at (UTC)SeverityRules
2026-08-24 07:22:23 Low 1

Report a package

Reports go to the AURWatch maintainer (one person) and are read by hand. No login required.

0 / 4000
Your suggestion