diff --git a/src/spark-update-tool/src/applistmodel.cpp b/src/spark-update-tool/src/applistmodel.cpp index 31e244a93e0eb54954fd6b0c0e27911d69874179..e5acd963e312de33f7e788c968e511efee5638f5 100644 --- a/src/spark-update-tool/src/applistmodel.cpp +++ b/src/spark-update-tool/src/applistmodel.cpp @@ -1,4 +1,5 @@ #include "applistmodel.h" +#include AppListModel::AppListModel(QObject *parent) : QAbstractListModel(parent) {} diff --git a/src/spark-update-tool/src/aptssupdater.cpp b/src/spark-update-tool/src/aptssupdater.cpp index c4bd906045b365dc59b1ef66a8092a4ec0d64904..f4bb6dd5de5b5cbbf395fc31ffc0bbd5c5e14cf7 100644 --- a/src/spark-update-tool/src/aptssupdater.cpp +++ b/src/spark-update-tool/src/aptssupdater.cpp @@ -24,7 +24,7 @@ QStringList aptssUpdater::getUpdateablePackages() } QString output = process.readAllStandardOutput(); - QStringList lines = output.split('\n', Qt::SkipEmptyParts); + QStringList lines = output.split('\n', QString::SkipEmptyParts); // 创建临时文件 QTemporaryFile tempFile; @@ -131,7 +131,7 @@ QStringList aptssUpdater::getDesktopAppNames() // 获取包文件列表 dpkgProcess.start("dpkg", QStringList() << "-L" << packageName); dpkgProcess.waitForFinished(); - QStringList files = QString(dpkgProcess.readAllStandardOutput()).split('\n', Qt::SkipEmptyParts); + QStringList files = QString(dpkgProcess.readAllStandardOutput()).split('\n', QString::SkipEmptyParts); // 先检查常规应用目录 QStringList regularDesktopFiles = files.filter("/usr/share/applications/"); @@ -237,7 +237,7 @@ QStringList aptssUpdater::getPackageIcons() // 获取包文件列表 dpkgProcess.start("dpkg", QStringList() << "-L" << packageName); dpkgProcess.waitForFinished(); - QStringList files = QString(dpkgProcess.readAllStandardOutput()).split('\n', Qt::SkipEmptyParts); + QStringList files = QString(dpkgProcess.readAllStandardOutput()).split('\n', QString::SkipEmptyParts); // 查找.desktop文件 QStringList desktopFiles = files.filter(QRegularExpression("/(usr/share|opt/apps)/.*\\.desktop$")); diff --git a/tool/apt-fast/ss-apt-fast b/tool/apt-fast/ss-apt-fast index dea3648a65d0dbacb18b06379509f6f1677065f5..f1a07464fa17d94e96a1ab5ba0a072d764fa68a0 100755 --- a/tool/apt-fast/ss-apt-fast +++ b/tool/apt-fast/ss-apt-fast @@ -20,6 +20,13 @@ shopt -s nullglob # third argument are piped to stderr. THREADS=$(nproc 2>/dev/null || echo 4) + +# Set color variables. +cGreen='\e[0;32m' +cRed='\e[0;31m' +cBlue='\e[0;34m' +endColor='\e[0m' + msg(){ msg_options=() case "$2" in @@ -36,6 +43,51 @@ msg(){ echo -e "${msg_options[@]}" "${aptfast_prefix}${beginColor}$1${endColor}" >&2 fi } +msg_already_running() +{ + msg "Other aptss is running. Waited $timer senconds..." "normal" + msg "有其他的aptss正在运行。已经等待了$timer秒" "normal" +} + +# Check if a lock file exists. +#if [ -f "$LCK_FILE.lock" ]; then +# msg_already_running +# exit 1 +#fi + +LCK_FD=99 +# create the lock file and lock it, die on failure +_create_lock() +{ + eval "exec $LCK_FD>\"$LCK_FILE.lock\"" + + # 设置 trap 来清理资源 + trap "cleanup_aptfast" EXIT + trap "cleanup_aptfast; exit 1" INT TERM + + timer=0 + max_wait=180 # 最大等待时间为180秒(3分钟) + + until $(flock -xn $LCK_FD); do + msg_already_running + sleep 1 + let timer+=1 + + if [ $timer -ge $max_wait ]; then + echo "timeout" + exit 1 + fi + done + + unset timer +} + +# unlock and remove the lock file +_remove_lock() +{ + flock -u "$LCK_FD" 2>/dev/null + rm -f "$LCK_FILE.lock" +} # Search for known options and decide if root privileges are needed. root=$# @@ -44,6 +96,7 @@ for argument in "$@"; do case "$argument" in upgrade | full-upgrade | install | dist-upgrade | build-dep) option="install" + _create_lock ;; clean | autoclean) option="clean" @@ -122,7 +175,7 @@ LCK_FILE="/tmp/apt-fast-in-container.lock" else LCK_FILE="/tmp/apt-fast.lock" fi -LCK_FD=99 + # Set default package manager, APT cache, temporary download dir, # temporary download list file, and maximal parallel downloads @@ -145,11 +198,9 @@ if [ -f "$NETRC" ]; then fi APTAUTHFILES+=("$NETRCDIR"*) -if [ "$IS_ACE_ENV" != "" ];then -DLLIST="/tmp/apt-fast-in-container.list" -else -DLLIST="/tmp/apt-fast.list" -fi +LISTTEMP=$(mktemp -d) +DLLIST="${LISTTEMP}/apt-fast.list" + @@ -164,11 +215,7 @@ MIRRORS=() aptfast_prefix= # aptfast_prefix="$(date '+%b %_d %T.%N') apt-fast: " -# Set color variables. -cGreen='\e[0;32m' -cRed='\e[0;31m' -cBlue='\e[0;34m' -endColor='\e[0m' + # Set timout value for apt-fast download confirmation dialog. # Value is in seconds. @@ -240,51 +287,7 @@ if [ ! -t 1 ]; then fi -msg_already_running() -{ - msg "Other aptss is running. Waited $timer senconds..." "normal" - msg "有其他的aptss正在运行。已经等待了$timer秒" "normal" -} - -# Check if a lock file exists. -#if [ -f "$LCK_FILE.lock" ]; then -# msg_already_running -# exit 1 -#fi - - -# create the lock file and lock it, die on failure -_create_lock() -{ - eval "exec $LCK_FD>\"$LCK_FILE.lock\"" - - # 设置 trap 来清理资源 - trap "cleanup_aptfast" EXIT - trap "cleanup_aptfast; exit 1" INT TERM - - timer=0 - max_wait=180 # 最大等待时间为180秒(3分钟) - until $(flock -xn $LCK_FD); do - msg_already_running - sleep 1 - let timer+=1 - - if [ $timer -ge $max_wait ]; then - echo "timeout" - exit 1 - fi - done - - unset timer -} - -# unlock and remove the lock file -_remove_lock() -{ - flock -u "$LCK_FD" 2>/dev/null - rm -f "$LCK_FILE.lock" -} # Move download file away so missing permissions won't stop usage. CLEANUP_STATE=0 @@ -294,7 +297,7 @@ cleanup_dllist() then if ! mv -- "$DLLIST{,.old}" 2>/dev/null then - if ! rm -f -- "$DLLIST" 2>/dev/null + if ! rm -fr -- "${LISTTEMP}" 2>/dev/null then msg "Could not clean up download list file." "warning" msg "无法清除下载列表文件." "warning" @@ -608,7 +611,7 @@ display_downloadfile(){ # Create and insert a PID number to lockfile. -_create_lock + # Make sure aria2c (in general first parameter from _DOWNLOADER) is available. CMD="$(echo "$_DOWNLOADER" | sed 's/^\s*\([^ ]\+\).*$/\1/')"