openmtp-git
LOW
maintainer zxp19821005
0 votes
scanned 2026-08-24 07:22:23.267746
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>
2
pkgname=openmtp-git
3
_pkgname=OpenMTP
4
pkgver=3.3.0.r1.g1c38907
5
_electronversion=18
6
_nodeversion=16.17.0
7
pkgrel=1
8
pkgdesc="Advanced Android File Transfer Application.(Use system-wide electron)"
9
arch=(
10
'aarch64'
11
'x86_64'
12
)
13
url="https://openmtp.ganeshrvel.com/"
14
_ghurl="https://github.com/ganeshrvel/openmtp"
15
license=("MIT")
16
conflicts=("${pkgname%-git}")
17
provides=("${pkgname%-git}=${pkgver%.r*}")
18
depends=(
19
"electron${_electronversion}"
20
)
21
makedepends=(
22
'npm'
23
'git'
24
'nvm'
25
'gendesk'
26
'gcc'
27
'cmake'
28
'curl'
29
'yarn'
30
)
31
source=(
32
"${pkgname//-/.}::git+${_ghurl}.git"
33
"${pkgname%-git}.sh"
34
)
35
sha256sums=('SKIP'
36
'a774c2f54fbbeeaac3cefc0f7250796d30c86d27f0fd40b7eaf9c0fdb021623d')
37
pkgver() {
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'
76
registry "https://registry.npmmirror.com"
77
EOF
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
}
91
prepare() {
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'
128
import re
129
130
with 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
134
old_import = "import { FileExplorerKalamDataSource } from '../data-sources/FileExplorerKalamDataSource';"
135
new_import = """// Kalam is only supported on macOS, use dynamic import to prevent loading on Linux
136
let FileExplorerKalamDataSource = null;
137
async 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
150
content = content.replace(old_import, new_import)
151
152
# Replace constructor to not initialize kalamMtpDataSource
153
content = content.replace(
154
'this.kalamMtpDataSource = new FileExplorerKalamDataSource();',
155
'this.kalamMtpDataSource = null; // Will be initialized lazily on macOS'
156
)
157
158
with open('app/data/file-explorer/repositories/FileExplorerRepository.js', 'w') as f:
159
f.write(content)
160
PYTHON_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
}
166
build() {
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
}
173
package() {
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) | Severity | Rules |
|---|---|---|
| 2026-08-24 07:22:23 | Low | 1 |