mirror of
https://gitee.com/spark-store-project/spark-store
synced 2025-10-09 03:42:20 +08:00
commit
8a4edc412a
11
debian/changelog
vendored
11
debian/changelog
vendored
@ -1,3 +1,14 @@
|
|||||||
|
spark-store (4.5.0) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
|
* 支持从商店中直接启动应用
|
||||||
|
* ssinstall 修复安装时不再指定版本号以避免出现问题
|
||||||
|
* aptss支持fish补全
|
||||||
|
* 修复: distrobox下无法正常校验应用hash
|
||||||
|
* aptss 4.5.0
|
||||||
|
* 应用更新新增进度条
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Tue, 24 Sep 2024 11:27:08 +0800
|
||||||
|
|
||||||
spark-store (4.3.3.2) UNRELEASED; urgency=medium
|
spark-store (4.3.3.2) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
* 提升升级工具体验,不再反复弹窗
|
* 提升升级工具体验,不再反复弹窗
|
||||||
|
@ -40,7 +40,7 @@ _aptss()
|
|||||||
"list"
|
"list"
|
||||||
"search"
|
"search"
|
||||||
"show" "showsrc"
|
"show" "showsrc"
|
||||||
"install" "remove" "purge" "autoremove"
|
"install" "remove" "purge" "autoremove" "autopurge"
|
||||||
"update"
|
"update"
|
||||||
"upgrade" "full-upgrade" "dist-upgrade"
|
"upgrade" "full-upgrade" "dist-upgrade"
|
||||||
"edit-sources"
|
"edit-sources"
|
||||||
|
242
pkg/usr/share/fish/completions/aptss.fish
Normal file
242
pkg/usr/share/fish/completions/aptss.fish
Normal file
@ -0,0 +1,242 @@
|
|||||||
|
# 清除已有的 aptss 补全(如果有的话)
|
||||||
|
complete -c aptss -e
|
||||||
|
|
||||||
|
# 禁用默认的文件补全(避免显示当前目录文件)
|
||||||
|
complete -c aptss -f
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
# aptss Fish 补全脚本(中文说明版,软件包补全显示简介)
|
||||||
|
#
|
||||||
|
# 说明:
|
||||||
|
# 1. 子命令和选项的说明采用中文显示。
|
||||||
|
# 2. 软件包补全部分不再调用 apt-cache,而是解析 aptss 自有的软件源索引文件,
|
||||||
|
# 从 /var/lib/aptss/lists/*Packages(或 *Sources)中提取软件包名称及简介信息。
|
||||||
|
#
|
||||||
|
# 注意:如果你的 aptss 软件源索引文件位置或格式有变化,请相应修改下面的 awk 命令。
|
||||||
|
########################################################################
|
||||||
|
|
||||||
|
### 辅助函数
|
||||||
|
|
||||||
|
# 解析 /var/lib/aptss/lists/*Packages 文件,输出符合当前输入前缀的“软件包<TAB>简介”
|
||||||
|
function __fish_aptss_print_packages
|
||||||
|
set cur (commandline -ct)
|
||||||
|
# 将所有匹配的 Packages 文件拼接后,用 awk 分段解析(RS="" 表示以空行为分段)
|
||||||
|
awk -v cur="$cur" '
|
||||||
|
BEGIN { RS=""; FS="\n" }
|
||||||
|
{
|
||||||
|
pkg = ""; desc = "";
|
||||||
|
for(i=1; i<=NF; i++){
|
||||||
|
if($i ~ /^Package: /) { pkg = substr($i, 10) } # “Package: ”共9个字符
|
||||||
|
else if($i ~ /^Description: /) { desc = substr($i, 14) } # “Description: ”共13个字符
|
||||||
|
}
|
||||||
|
if(pkg != "" && (cur == "" || pkg ~ ("^" cur))) {
|
||||||
|
print pkg "\t" desc
|
||||||
|
}
|
||||||
|
}
|
||||||
|
' /var/lib/aptss/lists/*Packages 2>/dev/null
|
||||||
|
end
|
||||||
|
|
||||||
|
# 解析已安装软件包(这里仍使用 dpkg-query,如果需要使用 aptss 数据,可另外构造)
|
||||||
|
function __fish_aptss_print_installed_packages
|
||||||
|
set cur (commandline -ct)
|
||||||
|
dpkg-query -W -f='${Package}\t${Description}\n' 2>/dev/null | grep -i "^$cur"
|
||||||
|
end
|
||||||
|
|
||||||
|
# 解析 /var/lib/aptss/lists/*Sources 文件,输出源代码包信息(如果存在)
|
||||||
|
function __fish_aptss_print_source_packages
|
||||||
|
set cur (commandline -ct)
|
||||||
|
awk -v cur="$cur" '
|
||||||
|
BEGIN { RS=""; FS="\n" }
|
||||||
|
{
|
||||||
|
pkg = ""; desc = "";
|
||||||
|
for(i=1; i<=NF; i++){
|
||||||
|
if($i ~ /^Package: /) { pkg = substr($i, 10) }
|
||||||
|
else if($i ~ /^Description: /) { desc = substr($i, 14) }
|
||||||
|
}
|
||||||
|
if(pkg != "" && (cur == "" || pkg ~ ("^" cur))) {
|
||||||
|
print pkg "\t" desc
|
||||||
|
}
|
||||||
|
}
|
||||||
|
' /var/lib/aptss/lists/*Sources 2>/dev/null
|
||||||
|
end
|
||||||
|
|
||||||
|
# 翻译子命令为中文说明(用于补全时显示在括号内)
|
||||||
|
function __fish_translate_aptss_cmd
|
||||||
|
switch $argv[1]
|
||||||
|
case ssupdate
|
||||||
|
echo "更新软件源"
|
||||||
|
case list
|
||||||
|
echo "列出软件包"
|
||||||
|
case search
|
||||||
|
echo "搜索软件包"
|
||||||
|
case show
|
||||||
|
echo "显示软件包信息"
|
||||||
|
case showsrc
|
||||||
|
echo "显示源包信息"
|
||||||
|
case install
|
||||||
|
echo "安装软件包"
|
||||||
|
case remove
|
||||||
|
echo "移除软件包"
|
||||||
|
case purge
|
||||||
|
echo "彻底移除软件包"
|
||||||
|
case autoremove
|
||||||
|
echo "自动移除不必要的软件包"
|
||||||
|
case update
|
||||||
|
echo "更新软件包列表"
|
||||||
|
case upgrade
|
||||||
|
echo "升级软件包"
|
||||||
|
case full-upgrade
|
||||||
|
echo "完全升级(可能移除其他软件包)"
|
||||||
|
case dist-upgrade
|
||||||
|
echo "发行版升级"
|
||||||
|
case edit-sources
|
||||||
|
echo "编辑软件源列表"
|
||||||
|
case help
|
||||||
|
echo "显示帮助信息"
|
||||||
|
case source
|
||||||
|
echo "下载源代码包"
|
||||||
|
case build-dep
|
||||||
|
echo "安装构建依赖"
|
||||||
|
case clean
|
||||||
|
echo "清除软件包缓存"
|
||||||
|
case autoclean
|
||||||
|
echo "自动清理旧缓存"
|
||||||
|
case download
|
||||||
|
echo "下载软件包"
|
||||||
|
case changelog
|
||||||
|
echo "显示更新日志"
|
||||||
|
case moo
|
||||||
|
echo "彩蛋"
|
||||||
|
case depends
|
||||||
|
echo "显示软件包依赖"
|
||||||
|
case rdepends
|
||||||
|
echo "显示软件包逆向依赖"
|
||||||
|
case policy
|
||||||
|
echo "显示软件包策略"
|
||||||
|
case '*'
|
||||||
|
echo $argv[1]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
### 定义各类子命令组
|
||||||
|
|
||||||
|
# 所有子命令列表
|
||||||
|
set -g __aptss_commands ssupdate list search show showsrc install remove purge autoremove update upgrade full-upgrade dist-upgrade edit-sources help source build-dep clean autoclean download changelog moo depends rdepends policy
|
||||||
|
|
||||||
|
# 需要补全二进制软件包名称的子命令(例如 install、show、search、download、changelog、depends、rdepends)
|
||||||
|
set -l __aptss_pkg_subcmds install show search download changelog depends rdepends
|
||||||
|
|
||||||
|
# 需要补全已安装软件包的子命令(例如 remove、purge、autoremove)
|
||||||
|
set -l __aptss_installed_pkg_subcmds remove purge autoremove
|
||||||
|
|
||||||
|
# 需要补全源代码包的子命令(例如 source、build-dep、showsrc、policy)
|
||||||
|
set -l __aptss_src_pkg_subcmds source build-dep showsrc policy
|
||||||
|
|
||||||
|
### 子命令补全
|
||||||
|
# 未输入子命令时,显示所有候选子命令,并在括号中显示中文说明
|
||||||
|
for cmd in $__aptss_commands
|
||||||
|
set desc (__fish_translate_aptss_cmd $cmd)
|
||||||
|
complete -c aptss -a $cmd -d "$desc" -n "not __fish_seen_subcommand_from $__aptss_commands"
|
||||||
|
end
|
||||||
|
|
||||||
|
### 公共选项(适用于一组子命令)
|
||||||
|
set -l group1 "install remove purge upgrade dist-upgrade full-upgrade autoremove"
|
||||||
|
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -l show-progress -d '显示进度'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -l fix-broken -d '修复损坏的依赖'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -l purge -d '清除配置文件'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -l verbose-versions -d '显示详细版本'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -l auto-remove -d '自动移除依赖'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -s s -l simulate -d '模拟/试运行'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -l download -d '下载软件包'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -l fix-missing -d '修复丢失文件'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -l fix-policy -d '修复策略'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -l ignore-hold -d '忽略锁定'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -l force-yes -d '强制确认'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -l trivial-only -d '仅处理简单情况'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -l reinstall -d '重新安装'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -l solver -d '使用求解器'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -s t -l target-release -d '目标版本'
|
||||||
|
|
||||||
|
# 附加的 GENERIC 选项
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -s d -l download-only -d '仅下载'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -s y -l assume-yes -d '默认确认'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -l assume-no -d '默认否定'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -s u -l show-upgraded -d '显示升级情况'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $group1" -s m -l ignore-missing -d '忽略缺失'
|
||||||
|
|
||||||
|
### 针对各个子命令的专用选项
|
||||||
|
|
||||||
|
# update 命令
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from update" -l list-cleanup -d '清理列表'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from update" -l print-uris -d '显示 URI'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from update" -l allow-insecure-repositories -d '允许不安全的仓库'
|
||||||
|
|
||||||
|
# list 命令
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from list" -l installed -d '已安装的软件包'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from list" -l upgradable -d '可升级的软件包'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from list" -l manual-installed -d '手动安装的软件包'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from list" -s v -l verbose -d '详细模式'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from list" -s a -l all-versions -d '显示所有版本'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from list" -s t -l target-release -d '目标版本'
|
||||||
|
|
||||||
|
# show 命令
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from show" -s a -l all-versions -d '显示所有版本'
|
||||||
|
|
||||||
|
# depends 和 rdepends 命令(逐项添加各选项)
|
||||||
|
for opt in i important installed pre-depends depends recommends suggests replaces breaks conflicts enhances recurse implicit
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from depends rdepends" -l $opt -d $opt
|
||||||
|
end
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from depends rdepends" -s i -d '选项 -i'
|
||||||
|
|
||||||
|
# search 命令
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from search" -s n -l names-only -d '仅匹配名称'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from search" -s f -l full -d '全文搜索'
|
||||||
|
|
||||||
|
# showsrc 命令
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from showsrc" -l only-source -d '仅显示源代码'
|
||||||
|
|
||||||
|
# source 命令
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from source" -s s -l simulate -d '模拟'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from source" -s b -l compile -d '编译/构建'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from source" -s P -l build-profiles -d '构建配置'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from source" -l diff-only -d '仅显示差异'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from source" -l debian-only -d '仅限 Debian'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from source" -l tar-only -d '仅打包 tar'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from source" -l dsc-only -d '仅下载 DSC'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from source" -s t -l target-release -d '目标版本'
|
||||||
|
|
||||||
|
# build-dep 命令
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from build-dep" -s a -l host-architecture -d '主机架构'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from build-dep" -s s -l simulate -d '模拟'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from build-dep" -s P -l build-profiles -d '构建配置'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from build-dep" -s t -l target-release -d '目标版本'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from build-dep" -l purge -d '清除'
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from build-dep" -l solver -d '求解依赖'
|
||||||
|
|
||||||
|
# moo 命令
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from moo" -l color -d '彩蛋模式'
|
||||||
|
|
||||||
|
# clean 和 autoclean 命令
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from clean autoclean" -s s -l simulate -d '模拟'
|
||||||
|
|
||||||
|
### 针对 -t/--target-release 的特殊补全
|
||||||
|
complete -c aptss -n '
|
||||||
|
begin
|
||||||
|
set -l prev (commandline -poc | string trim)
|
||||||
|
test "$prev" = "-t" -o "$prev" = "--target-release"
|
||||||
|
end
|
||||||
|
' -a '(__fish_aptss_target_release)' -d '目标版本'
|
||||||
|
|
||||||
|
### 软件包补全
|
||||||
|
# 对于需要二进制软件包名称的子命令,调用 __fish_aptss_print_packages,
|
||||||
|
# 输出的每一行格式为 "包名<TAB>简介",Fish 会将 TAB 后内容显示为注释。
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $__aptss_pkg_subcmds" -a '(__fish_aptss_print_packages)'
|
||||||
|
|
||||||
|
# 对于 remove、purge、autoremove 命令,补全已安装的软件包(使用 dpkg-query 输出)
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $__aptss_installed_pkg_subcmds" -a '(__fish_aptss_print_installed_packages)' -d '已安装软件包'
|
||||||
|
|
||||||
|
# 对于 source、build-dep、showsrc、policy 命令,补全源代码包,
|
||||||
|
# 如果存在对应的 Sources 索引文件,则调用 __fish_aptss_print_source_packages,
|
||||||
|
# 否则可考虑默认使用二进制包的索引。
|
||||||
|
complete -c aptss -n "__fish_seen_subcommand_from $__aptss_src_pkg_subcmds" -a '(__fish_aptss_print_source_packages)' -d '源代码包'
|
BIN
src/assets/icon/logo.xcf
Normal file
BIN
src/assets/icon/logo.xcf
Normal file
Binary file not shown.
@ -180,7 +180,19 @@ void AppIntoPage::openUrl(const QUrl &url)
|
|||||||
{
|
{
|
||||||
if (isUpdated)
|
if (isUpdated)
|
||||||
{
|
{
|
||||||
|
QProcess process;
|
||||||
|
QStringList arguments;
|
||||||
|
arguments << "check" << info["Pkgname"].toString();
|
||||||
|
process.start("/opt/durapps/spark-store/bin/store-helper/ss-launcher", arguments);
|
||||||
|
if (process.waitForFinished()) {
|
||||||
|
exitCode = process.exitCode();
|
||||||
|
exitStatus = process.exitStatus();
|
||||||
|
if (exitCode != 0){
|
||||||
ui->downloadButton->setText(tr("Reinstall"));
|
ui->downloadButton->setText(tr("Reinstall"));
|
||||||
|
}else{
|
||||||
|
ui->downloadButton->setText(tr("Launch"));
|
||||||
|
}
|
||||||
|
}
|
||||||
ui->downloadButton->setEnabled(true);
|
ui->downloadButton->setEnabled(true);
|
||||||
ui->downloadButton->show();
|
ui->downloadButton->show();
|
||||||
ui->pushButton_3->show();
|
ui->pushButton_3->show();
|
||||||
@ -357,14 +369,25 @@ void AppIntoPage::isDownloading(const QUrl &url)
|
|||||||
|
|
||||||
int exitCode = process.exitCode();
|
int exitCode = process.exitCode();
|
||||||
QProcess::ExitStatus exitStatus = process.exitStatus();
|
QProcess::ExitStatus exitStatus = process.exitStatus();
|
||||||
process.close();
|
|
||||||
|
|
||||||
if (exitCode == 0 && exitStatus == QProcess::NormalExit)
|
if (exitCode == 0 && exitStatus == QProcess::NormalExit)
|
||||||
{
|
{
|
||||||
ui->downloadButton->setEnabled(true);
|
QStringList arguments;
|
||||||
|
arguments << "check" << info["Pkgname"].toString();
|
||||||
|
process.start("/opt/durapps/spark-store/bin/store-helper/ss-launcher", arguments);
|
||||||
|
if (process.waitForFinished()) {
|
||||||
|
exitCode = process.exitCode();
|
||||||
|
exitStatus = process.exitStatus();
|
||||||
|
if (exitCode != 0){
|
||||||
ui->downloadButton->setText(tr("Reinstall"));
|
ui->downloadButton->setText(tr("Reinstall"));
|
||||||
|
}else{
|
||||||
|
ui->downloadButton->setText(tr("Launch"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ui->downloadButton->setEnabled(true);
|
||||||
ui->downloadButton->show();
|
ui->downloadButton->show();
|
||||||
ui->pushButton_3->show();
|
ui->pushButton_3->show();
|
||||||
|
process.close();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -498,6 +521,15 @@ void AppIntoPage::on_downloadButton_clicked()
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else if (ui->downloadButton->text() == tr("Launch"))
|
||||||
|
{
|
||||||
|
QString scriptPath = "/opt/durapps/spark-store/bin/store-helper/ss-launcher";
|
||||||
|
QStringList arguments;
|
||||||
|
arguments << "launch" << info["Pkgname"].toString();
|
||||||
|
QProcess process;
|
||||||
|
process.startDetached(scriptPath, arguments);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
emit clickedDownloadBtn();
|
emit clickedDownloadBtn();
|
||||||
|
|
||||||
@ -506,7 +538,6 @@ void AppIntoPage::on_downloadButton_clicked()
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ui->downloadButton->text() == tr("Reinstall"))
|
if (ui->downloadButton->text() == tr("Reinstall"))
|
||||||
{
|
{
|
||||||
item->reinstall = true;
|
item->reinstall = true;
|
||||||
|
@ -7,6 +7,8 @@ Dir::State::lists "/var/lib/aptss/lists/";
|
|||||||
APT::Get::Fix-Broken true;
|
APT::Get::Fix-Broken true;
|
||||||
APT::Get::List-Cleanup="0";
|
APT::Get::List-Cleanup="0";
|
||||||
|
|
||||||
|
Acquire::GzipIndexes "false";
|
||||||
|
|
||||||
#clear APT::Update::Post-Invoke-Success;
|
#clear APT::Update::Post-Invoke-Success;
|
||||||
|
|
||||||
#clear DPkg::Post-Invoke;
|
#clear DPkg::Post-Invoke;
|
||||||
|
@ -1,21 +1,25 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# apt-fast v1.9
|
# apt-fast v1.10.0
|
||||||
# Use this just like aptitude or apt-get for faster package downloading.
|
# Use this just like aptitude or apt-get for faster package downloading.
|
||||||
#
|
#
|
||||||
# Copyright: 2008-2012 Matt Parnell, http://www.mattparnell.com
|
# Copyright: 2008-2012 Matt Parnell, http://www.mattparnell.com
|
||||||
# Improvements, maintenance, revisions - 2012, 2017-2018 Dominique Lasserre
|
# Improvements, maintenance, revisions - 2012, 2017-2019 Dominique Lasserre
|
||||||
#
|
#
|
||||||
# You may distribute this file under the terms of the GNU General
|
# You may distribute this file under the terms of the GNU General
|
||||||
# Public License as published by the Free Software Foundation; either
|
# Public License as published by the Free Software Foundation; either
|
||||||
# version 3 of the License, or (at your option) any later version.
|
# version 3 of the License, or (at your option) any later version.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
shopt -s nullglob
|
||||||
[ -n "$DEBUG" ] && set -xv
|
[ -n "$DEBUG" ] && set -xv
|
||||||
|
|
||||||
# Print colored messages.
|
# Print colored messages.
|
||||||
# Usage: msg "message text" "message type" "optional: err"
|
# Usage: msg "message text" "message type" "optional: err"
|
||||||
# Message types are 'normal', 'hint' or 'warning'. Warnings and messages with a
|
# Message types are 'normal', 'hint' or 'warning'. Warnings and messages with a
|
||||||
# third argument are piped to stderr.
|
# third argument are piped to stderr.
|
||||||
|
|
||||||
|
THREADS=$(nproc 2>/dev/null || echo 4)
|
||||||
msg(){
|
msg(){
|
||||||
msg_options=()
|
msg_options=()
|
||||||
case "$2" in
|
case "$2" in
|
||||||
@ -34,7 +38,7 @@ msg(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Search for known options and decide if root privileges are needed.
|
# Search for known options and decide if root privileges are needed.
|
||||||
root=1 # default value: we need root privileges
|
root=$#
|
||||||
option=
|
option=
|
||||||
for argument in "$@"; do
|
for argument in "$@"; do
|
||||||
case "$argument" in
|
case "$argument" in
|
||||||
@ -70,7 +74,6 @@ TMP__APTMGR="${_APTMGR-${TMP_RANDOM}}"
|
|||||||
TMP_APTCACHE="${APTCACHE-${TMP_RANDOM}}"
|
TMP_APTCACHE="${APTCACHE-${TMP_RANDOM}}"
|
||||||
TMP_DLDIR="${DLDIR-${TMP_RANDOM}}"
|
TMP_DLDIR="${DLDIR-${TMP_RANDOM}}"
|
||||||
TMP_DLLIST="${DLLIST-${TMP_RANDOM}}"
|
TMP_DLLIST="${DLLIST-${TMP_RANDOM}}"
|
||||||
TMP_LISTDIR="${LISTDIR-${TMP_RANDOM}}"
|
|
||||||
TMP__MAXNUM="${MAXNUM-${TMP_RANDOM}}"
|
TMP__MAXNUM="${MAXNUM-${TMP_RANDOM}}"
|
||||||
TMP__MAXCONPERSRV="${MAXCONPERSRV-${TMP_RANDOM}}"
|
TMP__MAXCONPERSRV="${MAXCONPERSRV-${TMP_RANDOM}}"
|
||||||
TMP__SPLITCON="${SPLITCON-${TMP_RANDOM}}"
|
TMP__SPLITCON="${SPLITCON-${TMP_RANDOM}}"
|
||||||
@ -78,6 +81,7 @@ TMP__MINSPLITSZ=${MINSPLITSZ-${TMP_RANDOM}}
|
|||||||
TMP__PIECEALGO=${PIECEALGO-${TMP_RANDOM}}
|
TMP__PIECEALGO=${PIECEALGO-${TMP_RANDOM}}
|
||||||
TMP_aptfast_prefix="${aptfast_prefix-${TMP_RANDOM}}"
|
TMP_aptfast_prefix="${aptfast_prefix-${TMP_RANDOM}}"
|
||||||
TMP_APT_FAST_TIMEOUT="${APT_FAST_TIMEOUT-${TMP_RANDOM}}"
|
TMP_APT_FAST_TIMEOUT="${APT_FAST_TIMEOUT-${TMP_RANDOM}}"
|
||||||
|
TMP_APT_FAST_APT_AUTH="${APT_FAST_APT_AUTH-${TMP_RANDOM}}"
|
||||||
TMP_VERBOSE_OUTPUT="${VERBOSE_OUTPUT-${TMP_RANDOM}}"
|
TMP_VERBOSE_OUTPUT="${VERBOSE_OUTPUT-${TMP_RANDOM}}"
|
||||||
TMP_ftp_proxy="${ftp_proxy-${TMP_RANDOM}}"
|
TMP_ftp_proxy="${ftp_proxy-${TMP_RANDOM}}"
|
||||||
TMP_http_proxy="${http_proxy-${TMP_RANDOM}}"
|
TMP_http_proxy="${http_proxy-${TMP_RANDOM}}"
|
||||||
@ -85,7 +89,7 @@ TMP_https_proxy="${https_proxy-${TMP_RANDOM}}"
|
|||||||
|
|
||||||
# Check for proper privileges.
|
# Check for proper privileges.
|
||||||
# Call explicitly with environment variables to get them into root conext.
|
# Call explicitly with environment variables to get them into root conext.
|
||||||
if [ "$root" = 1 ] && [ "$UID" != 0 ]; then
|
if [ "$root" -ne 0 ] && [ "$UID" != 0 ]; then
|
||||||
exec sudo DEBUG="$DEBUG" \
|
exec sudo DEBUG="$DEBUG" \
|
||||||
LCK_FILE="$TMP_LCK_FILE" \
|
LCK_FILE="$TMP_LCK_FILE" \
|
||||||
DOWNLOADBEFORE="$TMP_DOWNLOADBEFORE" \
|
DOWNLOADBEFORE="$TMP_DOWNLOADBEFORE" \
|
||||||
@ -93,7 +97,6 @@ if [ "$root" = 1 ] && [ "$UID" != 0 ]; then
|
|||||||
APTCACHE="$TMP_APTCACHE" \
|
APTCACHE="$TMP_APTCACHE" \
|
||||||
DLDIR="$TMP_DLDIR" \
|
DLDIR="$TMP_DLDIR" \
|
||||||
DLLIST="$TMP_DLLIST" \
|
DLLIST="$TMP_DLLIST" \
|
||||||
LISTDIR="$TMP_LISTDIR" \
|
|
||||||
_MAXNUM="$TMP__MAXNUM" \
|
_MAXNUM="$TMP__MAXNUM" \
|
||||||
_MAXCONPERSRV="$TMP__MAXCONPERSRV" \
|
_MAXCONPERSRV="$TMP__MAXCONPERSRV" \
|
||||||
_SPLITCON="$TMP__SPLITCON" \
|
_SPLITCON="$TMP__SPLITCON" \
|
||||||
@ -101,6 +104,7 @@ if [ "$root" = 1 ] && [ "$UID" != 0 ]; then
|
|||||||
_PIECEALGO="$TMP__PIECEALGO" \
|
_PIECEALGO="$TMP__PIECEALGO" \
|
||||||
aptfast_prefix="$TMP_aptfast_prefix" \
|
aptfast_prefix="$TMP_aptfast_prefix" \
|
||||||
APT_FAST_TIMEOUT="$TMP_APT_FAST_TIMEOUT" \
|
APT_FAST_TIMEOUT="$TMP_APT_FAST_TIMEOUT" \
|
||||||
|
APT_FAST_APT_AUTH="$TMP_APT_FAST_APT_AUTH" \
|
||||||
VERBOSE_OUTPUT="$TMP_VERBOSE_OUTPUT" \
|
VERBOSE_OUTPUT="$TMP_VERBOSE_OUTPUT" \
|
||||||
ftp_proxy="$TMP_ftp_proxy" \
|
ftp_proxy="$TMP_ftp_proxy" \
|
||||||
http_proxy="$TMP_http_proxy" \
|
http_proxy="$TMP_http_proxy" \
|
||||||
@ -108,7 +112,6 @@ if [ "$root" = 1 ] && [ "$UID" != 0 ]; then
|
|||||||
"$0" "$@"
|
"$0" "$@"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Define lockfile.
|
# Define lockfile.
|
||||||
# Use /tmp as directory because everybody (not only root) has to have write
|
# Use /tmp as directory because everybody (not only root) has to have write
|
||||||
# permissions.
|
# permissions.
|
||||||
@ -128,22 +131,34 @@ eval "$(apt-config shell APTCACHE Dir::Cache::archives/d)"
|
|||||||
# Check if APT config option Dir::Cache::archives::apt-fast-partial is set.
|
# Check if APT config option Dir::Cache::archives::apt-fast-partial is set.
|
||||||
eval "$(apt-config shell apt_fast_partial Dir::Cache::archives::apt-fast-partial/d)"
|
eval "$(apt-config shell apt_fast_partial Dir::Cache::archives::apt-fast-partial/d)"
|
||||||
if [ -z "$apt_fast_partial" ]; then
|
if [ -z "$apt_fast_partial" ]; then
|
||||||
eval "$(apt-config -o Dir::Cache::archives::apt-fast-partial=apt-fast shell DLDIR Dir::Cache::archives::apt-fast-partial/d)"
|
DLDIR="$(realpath "${APTCACHE}/../apt-fast")"
|
||||||
else
|
else
|
||||||
eval "$(apt-config shell DLDIR Dir::Cache::archives::apt-fast-partial/d)"
|
DLDIR="${apt_fast_partial}"
|
||||||
fi
|
fi
|
||||||
# Currently not needed.
|
|
||||||
eval "$(apt-config shell LISTDIR Dir::State::lists/d)"
|
# Check for apt auth files
|
||||||
|
eval "$(apt-config shell NETRC Dir::Etc::netrc/f)"
|
||||||
|
eval "$(apt-config shell NETRCDIR Dir::Etc::netrcparts/d)"
|
||||||
|
APTAUTHFILES=()
|
||||||
|
if [ -f "$NETRC" ]; then
|
||||||
|
APTAUTHFILES=("$NETRC")
|
||||||
|
fi
|
||||||
|
APTAUTHFILES+=("$NETRCDIR"*)
|
||||||
|
|
||||||
if [ "$IS_ACE_ENV" != "" ];then
|
if [ "$IS_ACE_ENV" != "" ];then
|
||||||
DLLIST="/tmp/apt-fast-in-container.list"
|
DLLIST="/tmp/apt-fast-in-container.list"
|
||||||
else
|
else
|
||||||
DLLIST="/tmp/apt-fast.list"
|
DLLIST="/tmp/apt-fast.list"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_MAXNUM=5
|
_MAXNUM=5
|
||||||
_MAXCONPERSRV=10
|
_MAXCONPERSRV=10
|
||||||
_SPLITCON=8
|
_SPLITCON=8
|
||||||
_MINSPLITSZ="1M"
|
_MINSPLITSZ="1M"
|
||||||
_PIECEALGO="default"
|
_PIECEALGO="default"
|
||||||
|
MIRRORS=()
|
||||||
|
|
||||||
# Prefix in front of apt-fast output:
|
# Prefix in front of apt-fast output:
|
||||||
aptfast_prefix=
|
aptfast_prefix=
|
||||||
@ -162,6 +177,9 @@ APT_FAST_TIMEOUT=60
|
|||||||
# Ask for download confirmation if unset
|
# Ask for download confirmation if unset
|
||||||
DOWNLOADBEFORE=
|
DOWNLOADBEFORE=
|
||||||
|
|
||||||
|
# Enable APT authentication support
|
||||||
|
APT_FAST_APT_AUTH=1
|
||||||
|
|
||||||
# Formatted package list in download confirmation if unset
|
# Formatted package list in download confirmation if unset
|
||||||
VERBOSE_OUTPUT=
|
VERBOSE_OUTPUT=
|
||||||
|
|
||||||
@ -188,7 +206,6 @@ https_proxy=
|
|||||||
[ "$TMP_APTCACHE" = "$TMP_RANDOM" ] || APTCACHE="$TMP_APTCACHE"
|
[ "$TMP_APTCACHE" = "$TMP_RANDOM" ] || APTCACHE="$TMP_APTCACHE"
|
||||||
[ "$TMP_DLDIR" = "$TMP_RANDOM" ] || DLDIR="$TMP_DLDIR"
|
[ "$TMP_DLDIR" = "$TMP_RANDOM" ] || DLDIR="$TMP_DLDIR"
|
||||||
[ "$TMP_DLLIST" = "$TMP_RANDOM" ] || DLLIST="$TMP_DLLIST"
|
[ "$TMP_DLLIST" = "$TMP_RANDOM" ] || DLLIST="$TMP_DLLIST"
|
||||||
[ "$TMP_LISTDIR" = "$TMP_RANDOM" ] || LISTDIR="$TMP_LISTDIR"
|
|
||||||
[ "$TMP__MAXNUM" = "$TMP_RANDOM" ] || _MAXNUM="$TMP__MAXNUM"
|
[ "$TMP__MAXNUM" = "$TMP_RANDOM" ] || _MAXNUM="$TMP__MAXNUM"
|
||||||
[ "$TMP__MAXCONPERSRV" = "$TMP_RANDOM" ] || _MAXCONPERSRV="$TMP__MAXCONPERSRV"
|
[ "$TMP__MAXCONPERSRV" = "$TMP_RANDOM" ] || _MAXCONPERSRV="$TMP__MAXCONPERSRV"
|
||||||
[ "$TMP__SPLITCON" = "$TMP_RANDOM" ] || _SPLITCON="$TMP__SPLITCON"
|
[ "$TMP__SPLITCON" = "$TMP_RANDOM" ] || _SPLITCON="$TMP__SPLITCON"
|
||||||
@ -196,6 +213,7 @@ https_proxy=
|
|||||||
[ "$TMP__PIECEALGO" = "$TMP_RANDOM" ] || _PIECEALGO="$TMP__PIECEALGO"
|
[ "$TMP__PIECEALGO" = "$TMP_RANDOM" ] || _PIECEALGO="$TMP__PIECEALGO"
|
||||||
[ "$TMP_aptfast_prefix" = "$TMP_RANDOM" ] || aptfast_prefix="$TMP_aptfast_prefix"
|
[ "$TMP_aptfast_prefix" = "$TMP_RANDOM" ] || aptfast_prefix="$TMP_aptfast_prefix"
|
||||||
[ "$TMP_APT_FAST_TIMEOUT" = "$TMP_RANDOM" ] || APT_FAST_TIMEOUT="$TMP_APT_FAST_TIMEOUT"
|
[ "$TMP_APT_FAST_TIMEOUT" = "$TMP_RANDOM" ] || APT_FAST_TIMEOUT="$TMP_APT_FAST_TIMEOUT"
|
||||||
|
[ "$TMP_APT_FAST_APT_AUTH" = "$TMP_RANDOM" ] || APT_FAST_APT_AUTH="$TMP_APT_FAST_APT_AUTH"
|
||||||
[ "$TMP_VERBOSE_OUTPUT" = "$TMP_RANDOM" ] || VERBOSE_OUTPUT="$TMP_VERBOSE_OUTPUT"
|
[ "$TMP_VERBOSE_OUTPUT" = "$TMP_RANDOM" ] || VERBOSE_OUTPUT="$TMP_VERBOSE_OUTPUT"
|
||||||
[ "$TMP_ftp_proxy" = "$TMP_RANDOM" ] || ftp_proxy="$TMP_ftp_proxy"
|
[ "$TMP_ftp_proxy" = "$TMP_RANDOM" ] || ftp_proxy="$TMP_ftp_proxy"
|
||||||
[ "$TMP_http_proxy" = "$TMP_RANDOM" ] || http_proxy="$TMP_http_proxy"
|
[ "$TMP_http_proxy" = "$TMP_RANDOM" ] || http_proxy="$TMP_http_proxy"
|
||||||
@ -231,16 +249,24 @@ _create_lock()
|
|||||||
{
|
{
|
||||||
eval "exec $LCK_FD>\"$LCK_FILE.lock\""
|
eval "exec $LCK_FD>\"$LCK_FILE.lock\""
|
||||||
|
|
||||||
# trap "cleanup_aptfast; exit_cleanup_state" EXIT
|
# 设置 trap 来清理资源
|
||||||
# This will hide the exit code
|
|
||||||
trap "cleanup_aptfast" EXIT
|
trap "cleanup_aptfast" EXIT
|
||||||
trap "cleanup_aptfast; exit 1" INT TERM
|
trap "cleanup_aptfast; exit 1" INT TERM
|
||||||
|
|
||||||
timer=0
|
timer=0
|
||||||
|
max_wait=180 # 最大等待时间为180秒(3分钟)
|
||||||
|
|
||||||
until $(flock -xn $LCK_FD); do
|
until $(flock -xn $LCK_FD); do
|
||||||
msg_already_running
|
msg_already_running
|
||||||
sleep 1
|
sleep 1
|
||||||
let timer+=1
|
let timer+=1
|
||||||
|
|
||||||
|
if [ $timer -ge $max_wait ]; then
|
||||||
|
echo "timeout"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
unset timer
|
unset timer
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -271,7 +297,8 @@ cleanup_dllist()
|
|||||||
|
|
||||||
cleanup_aptfast()
|
cleanup_aptfast()
|
||||||
{
|
{
|
||||||
[ "$CLEANUP_STATE" -eq 0 ] && CLEANUP_STATE=$?
|
local last_exit_code=$?
|
||||||
|
[ "$CLEANUP_STATE" -eq 0 ] && CLEANUP_STATE=$last_exit_code
|
||||||
cleanup_dllist
|
cleanup_dllist
|
||||||
_remove_lock
|
_remove_lock
|
||||||
}
|
}
|
||||||
@ -300,7 +327,7 @@ get_mirrors(){
|
|||||||
for mirror in "${mirrors[@]}"; do
|
for mirror in "${mirrors[@]}"; do
|
||||||
# Real expension.
|
# Real expension.
|
||||||
if [[ "$1" == "$mirror"* ]]; then
|
if [[ "$1" == "$mirror"* ]]; then
|
||||||
filepath=${1#${mirror}}
|
filepath="${1#"${mirror}"}"
|
||||||
# Build list for aria download list.
|
# Build list for aria download list.
|
||||||
list="${mirrors[*]:1}"
|
list="${mirrors[*]:1}"
|
||||||
echo -e "${list// /${filepath}\\t}$filepath\n"
|
echo -e "${list// /${filepath}\\t}$filepath\n"
|
||||||
@ -311,67 +338,128 @@ get_mirrors(){
|
|||||||
# No other mirrors found.
|
# No other mirrors found.
|
||||||
echo "$1"
|
echo "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
##########SPARK ADJUST: END
|
##########SPARK ADJUST: END
|
||||||
|
|
||||||
|
AUTH_INFO_PARSED=()
|
||||||
|
# Parse apt authentication files.
|
||||||
|
# Undefined behavior on whitespaces in host, username or password.
|
||||||
|
prepare_auth(){
|
||||||
|
if [ "$APT_FAST_APT_AUTH" -eq 0 ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
for auth_file in "${APTAUTHFILES[@]}"; do
|
||||||
|
# auth files have netrc syntax, possible multiline entries starting with "machine"
|
||||||
|
auth_info="$(tr '\n' ' ' < "$auth_file" | sed 's/\(\<machine\>\)/\n\1/g' | sed '1d')"
|
||||||
|
while IFS= read -r auth; do
|
||||||
|
machine="$(echo "$auth" | sed 's/.*\<machine\>[ \t]\+\([^ \t]\+\).*/\1/')"
|
||||||
|
login="$(echo "$auth" | sed 's/.*\<login\>[ \t]\+\([^ \t]\+\).*/\1/')"
|
||||||
|
password="$(echo "$auth" | sed 's/.*\<password\>[ \t]\+\([^ \t]\+\).*/\1/')"
|
||||||
|
# if machine does not have protocol, try https://
|
||||||
|
if ! [[ "$machine" =~ ^.*:// ]]; then
|
||||||
|
machine="https://$machine"
|
||||||
|
fi
|
||||||
|
if [ -z "$machine" ] || [ -z "$login" ] || [ -z "$password" ]; then
|
||||||
|
msg "Could not parse apt authentication (skipping): $auth ($auth_file)" "warning"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
# use space separated string to convert back to array later
|
||||||
|
AUTH_INFO_PARSED+=("$machine $login $password")
|
||||||
|
done <<< "$auth_info"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Gets URI as parameter and tries to add basic http credentials. Will fail on
|
||||||
|
# credentials that contain characters that need URL-encoding.
|
||||||
|
get_auth(){
|
||||||
|
if [ "$APT_FAST_APT_AUTH" -eq 0 ]; then
|
||||||
|
echo "$1"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
for auth_info in "${AUTH_INFO_PARSED[@]}"; do
|
||||||
|
# convert to array, don't escape variable here
|
||||||
|
auth_info_arr=($auth_info)
|
||||||
|
machine="${auth_info_arr[0]}"
|
||||||
|
# takes first match
|
||||||
|
if [[ "$1" == "$machine"* ]]; then
|
||||||
|
login="${auth_info_arr[1]}"
|
||||||
|
password="${auth_info_arr[2]}"
|
||||||
|
uri="$(echo "$1" | sed "s|^\([^:]\+://\)|\1$login:$password@|")"
|
||||||
|
echo "$uri"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "$1"
|
||||||
|
}
|
||||||
|
|
||||||
# Globals to save package name, version, size and overall size.
|
# Globals to save package name, version, size and overall size.
|
||||||
DOWNLOAD_DISPLAY=
|
DOWNLOAD_DISPLAY=
|
||||||
DOWNLOAD_SIZE=0
|
DOWNLOAD_SIZE=0
|
||||||
|
|
||||||
|
# 获取包的URI
|
||||||
# Get the package URLs.
|
# Get the package URLs.
|
||||||
get_uris(){
|
get_uris(){
|
||||||
|
|
||||||
if [ ! -d "$(dirname "$DLLIST")" ]
|
if [ ! -d "$(dirname "$DLLIST")" ]
|
||||||
then
|
then
|
||||||
if ! mkdir -p -- "$(dirname "$DLLIST")"
|
if ! mkdir -p -- "$(dirname "$DLLIST")"
|
||||||
then
|
then
|
||||||
msg "Could not create download file directory." "warning"
|
msg "Could not create download file directory." "warning"
|
||||||
msg "无法创建下载文件夹" "warning"
|
msg "无法创建下载目录" "warning"
|
||||||
exit 1
|
CLEANUP_STATE=1
|
||||||
|
exit
|
||||||
fi
|
fi
|
||||||
elif [ -f "$DLLIST" ]; then
|
elif [ -f "$DLLIST" ]; then
|
||||||
if ! rm -f -- "$DLLIST" 2>/dev/null && ! touch -- "$DLLIST" 2>/dev/null
|
if ! rm -f -- "$DLLIST" 2>/dev/null && ! touch -- "$DLLIST" 2>/dev/null
|
||||||
then
|
then
|
||||||
msg "Unable to write to download file. Try restarting with root permissions or run 'aptss clean' first." "warning"
|
msg "Unable to write to download file. Try restarting with root permissions or run 'apt-fast clean' first." "warning"
|
||||||
msg "无法下载文件。尝试使用root权限,或者运行 'aptss clean'" "warning"
|
msg "无法下载文件。尝试使用root权限,或者运行 'aptss clean'" "warning"
|
||||||
exit 1
|
CLEANUP_STATE=1
|
||||||
|
exit
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Add header to overwrite file.
|
# Add header to overwrite file.
|
||||||
echo "# apt-fast mirror list: $(date)" > "$DLLIST"
|
echo "# apt-fast mirror list: $(date)" > "$DLLIST"
|
||||||
#NOTE: aptitude doesn't have this functionality, so we use apt-get to get
|
# NOTE: "aptitude" doesn't have this functionality
|
||||||
# package URIs.
|
# so we use "${_APTMGR}" to get package URI's
|
||||||
# case "$_APTMGR" in
|
case "$(basename "${_APTMGR}")" in
|
||||||
# apt|apt-get) uri_mgr=$_APTMGR;;
|
'apt'|'apt-get') uri_mgr="${_APTMGR}";;
|
||||||
# *) uri_mgr=apt-get;;
|
*) uri_mgr='apt-get';;
|
||||||
# esac
|
esac
|
||||||
# NOTE:apt可能出现变动,不建议在脚本中使用,因此在此统一改用apt-get
|
|
||||||
uri_mgr=apt-get
|
|
||||||
uris_full="$("$uri_mgr" "${APT_SCRIPT_WARNING[@]}" -y --print-uris "$@")"
|
uris_full="$("$uri_mgr" "${APT_SCRIPT_WARNING[@]}" -y --print-uris "$@")"
|
||||||
uris_full_ret="$?"
|
CLEANUP_STATE="$?"
|
||||||
if [ "$uris_full_ret" -ne 0 ]
|
if [ "$CLEANUP_STATE" -ne 0 ]
|
||||||
then
|
then
|
||||||
msg "Package manager quit with exit code.Here is the log" "warning"
|
msg "Package manager quit with exit code.Here is the log" "warning"
|
||||||
msg "包管理器以错误代码退出.日志如下" "warning"
|
msg "包管理器以错误代码退出.日志如下" "warning"
|
||||||
msg "${uris_full}"
|
msg "${uris_full}"
|
||||||
exit "$uris_full_ret"
|
exit"$CLEANUP_STATE"
|
||||||
fi
|
fi
|
||||||
while read -r pkg_uri_info
|
prepare_auth
|
||||||
do
|
local tmpdir=$(mktemp -d) || {
|
||||||
[ -z "$pkg_uri_info" ] && continue
|
msg "Failed to create tmp dir" "warning"
|
||||||
|
msg "无法创建临时目录" "warning"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
## --print-uris format is:
|
## --print-uris format is:
|
||||||
# 'fileurl' filename filesize checksum_hint:filechecksum
|
# 'fileurl' filename filesize checksum_hint:filechecksum
|
||||||
uri="$(echo "$pkg_uri_info" | cut -d' ' -f1 | tr -d "'")"
|
process_package() {
|
||||||
filename="$(echo "$pkg_uri_info" | cut -d' ' -f2)"
|
local pkg_uri_info="$@"
|
||||||
filesize="$(echo "$pkg_uri_info" | cut -d' ' -f3)"
|
|
||||||
checksum_string="$(echo "$pkg_uri_info" | cut -d' ' -f4)"
|
local display_line="" # 添加局部变量并初始化为空
|
||||||
hash_algo="$(echo "$checksum_string" | cut -d':' -f1)"
|
|
||||||
checksum="$(echo "$checksum_string" | cut -d':' -f2)"
|
IFS=' ' read -r uri filename filesize checksum_string _ <<<"$pkg_uri_info"
|
||||||
|
[ -z "$uri" ] && continue
|
||||||
|
uri="$(get_auth "${uri//"'"/}")"
|
||||||
|
IFS=':' read -r hash_algo checksum _ <<<"$checksum_string"
|
||||||
|
|
||||||
filename_decoded="$(urldecode "$filename")"
|
filename_decoded="$(urldecode "$filename")"
|
||||||
DOWNLOAD_DISPLAY="${DOWNLOAD_DISPLAY}$(echo "$filename_decoded" | cut -d'_' -f1)"
|
IFS='_' read -r pkg_name_decoded pkg_version_decoded _ <<<"$filename_decoded"
|
||||||
DOWNLOAD_DISPLAY="${DOWNLOAD_DISPLAY} $(echo "$filename_decoded" | cut -d'_' -f2)"
|
|
||||||
DOWNLOAD_DISPLAY="${DOWNLOAD_DISPLAY} $(echo "$filesize" | numfmt --to=iec-i --suffix=B)\n"
|
|
||||||
DOWNLOAD_SIZE=$((DOWNLOAD_SIZE + filesize))
|
|
||||||
|
display_line="${display_line}$pkg_name_decoded $pkg_version_decoded"
|
||||||
|
display_line="${display_line} $(echo "$filesize" | numfmt --to=iec-i --suffix=B)\n"
|
||||||
|
|
||||||
## whole uri comes encoded (urlencoded). Filename must NOT be decoded because
|
## whole uri comes encoded (urlencoded). Filename must NOT be decoded because
|
||||||
# plain aptitude do not decode it when download and install it. Therefore, we
|
# plain aptitude do not decode it when download and install it. Therefore, we
|
||||||
@ -389,40 +477,44 @@ uri_mgr=apt-get
|
|||||||
*) hash_algo=
|
*) hash_algo=
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|
||||||
# Using apt-cache show package=version to ensure recover single and
|
# Using apt-cache show package=version to ensure recover single and
|
||||||
# correct package version.
|
# correct package version.
|
||||||
# Warning: assuming that package naming uses '_' as field separator.
|
# Warning: assuming that package naming uses '_' as field separator.
|
||||||
# Therefore, this code expects package-name_version_arch.deb Otherways
|
# Therefore, this code expects package-name_version_arch.deb Otherwise
|
||||||
# below code will fail resoundingly
|
# below code will fail resoundingly
|
||||||
if [ -z "$hash_algo" ]; then
|
if [ -z "$hash_algo" ]; then
|
||||||
pkg_name="$(echo "$filename" | cut -d'_' -f1)"
|
IFS='_' read -r pkg_name _ <<<"$filename"
|
||||||
pkg_version="$(echo "$filename" | cut -d'_' -f2)"
|
pkg_version="$pkg_version_decoded"
|
||||||
pkg_version="$(urldecode "$pkg_version")"
|
# Transform multi-line field output from apt-cache to single line and sort checksums, strongest first
|
||||||
package_info="$(apt-cache show "$pkg_name=$pkg_version")"
|
package_info="$(apt-cache show "$pkg_name=$pkg_version" | sed ':r;$!{N;br};s/\n / /g' | sort -r)"
|
||||||
|
|
||||||
patch_checksum=
|
while IFS=': ' read -r field checksum _
|
||||||
if [ -n "$SHA512_SUPPORTED" ]; then
|
do
|
||||||
patch_checksum="$(echo "$package_info" | grep SHA512 | head -n 1)"
|
case "$field" in
|
||||||
[ -n "$patch_checksum" ] && hash_algo="sha-512"
|
SHA512)
|
||||||
fi
|
[ -n "$SHA512_SUPPORTED" ] || continue
|
||||||
if [ -z "$patch_checksum" ] && [ -n "$SHA256_SUPPORTED" ]; then
|
hash_algo="sha-512"
|
||||||
patch_checksum="$(echo "$package_info" | grep SHA256 | head -n 1)"
|
break ;;
|
||||||
[ -n "$patch_checksum" ] && hash_algo="sha-256"
|
SHA256)
|
||||||
fi
|
[ -n "$SHA256_SUPPORTED" ] || continue
|
||||||
if [ -z "$patch_checksum" ] && [ -n "$SHA1_SUPPORTED" ]; then
|
hash_algo="sha-256"
|
||||||
patch_checksum="$(echo "$package_info" | grep SHA1 | head -n 1)"
|
break ;;
|
||||||
[ -n "$patch_checksum" ] && hash_algo="sha-1"
|
SHA1)
|
||||||
fi
|
[ -n "$SHA1_SUPPORTED" ] || continue
|
||||||
if [ -z "$patch_checksum" ] && [ -n "$MD5sum_SUPPORTED" ]; then
|
hash_algo="sha-1"
|
||||||
patch_checksum="$(echo "$package_info" | grep MD5sum | head -n 1)"
|
break ;;
|
||||||
[ -n "$patch_checksum" ] && hash_algo="md5"
|
MD5sum)
|
||||||
fi
|
[ -n "$MD5sum_SUPPORTED" ] || continue
|
||||||
|
hash_algo="md5"
|
||||||
|
break ;;
|
||||||
|
esac
|
||||||
|
done <<<"$package_info"
|
||||||
|
|
||||||
if [ -n "$patch_checksum" ]; then
|
if [ -z "$hash_algo" ]; then
|
||||||
checksum="$(echo "$patch_checksum" | cut -d' ' -f2)"
|
checksum=
|
||||||
else
|
|
||||||
msg "Couldn't get supported checksum for $pkg_name ($pkg_version)." "warning"
|
msg "Couldn't get supported checksum for $pkg_name ($pkg_version)." "warning"
|
||||||
msg "无法获得 $pkg_name ($pkg_version) 的受支持的散列验证值" "warning"
|
msg "无法获得 $pkg_name ($pkg_version) 版本受到支持的散列验证值" "warning"
|
||||||
REMOVE_WORKING_MESSAGE=
|
REMOVE_WORKING_MESSAGE=
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@ -430,21 +522,64 @@ uri_mgr=apt-get
|
|||||||
hash_algo=
|
hash_algo=
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# 使用文件锁安全写入下载列表
|
||||||
|
(
|
||||||
|
flock -x 200 # 获取排他锁
|
||||||
{
|
{
|
||||||
get_mirrors "$uri"
|
get_mirrors "$uri"
|
||||||
#echo " dir=$DLDIR"
|
[ -n "$hash_algo" ] && echo " checksum=$hash_algo=$checksum"
|
||||||
if [ -n "$hash_algo" ]; then
|
|
||||||
echo " checksum=$hash_algo=$checksum"
|
|
||||||
fi
|
|
||||||
echo " out=$filename"
|
echo " out=$filename"
|
||||||
} >> "$DLLIST"
|
} >> "$DLLIST"
|
||||||
done <<<"$(echo "$uris_full" | grep -E "^'(http(s|)|(s|)ftp)://")"
|
) 200>>"$DLLIST" # 使用文件描述符200关联锁文件
|
||||||
|
|
||||||
|
# 将显示信息和文件大小存入临时文件
|
||||||
|
echo "$display_line" >> "$tmpdir/display"
|
||||||
|
echo "$filesize" >> "$tmpdir/sizes"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 主并行处理逻辑(新增线程控制)
|
||||||
|
mapfile -t pkg_uri_list < <(echo "$uris_full" | grep -E "^'(http(s|)|(s|)ftp)://")
|
||||||
|
total_pkgs=${#pkg_uri_list[@]}
|
||||||
|
threads=${THREADS:-4} # 默认4线程
|
||||||
|
per_thread=$(( (total_pkgs + threads - 1) / threads )) # 向上取整
|
||||||
|
|
||||||
|
# 分割任务到不同线程
|
||||||
|
for ((i=0; i<threads; i++)); do
|
||||||
|
start=$((i * per_thread))
|
||||||
|
end=$((start + per_thread -1))
|
||||||
|
[ $end -ge $total_pkgs ] && end=$((total_pkgs -1))
|
||||||
|
|
||||||
|
# 启动后台线程处理任务块
|
||||||
|
(
|
||||||
|
for ((j=start; j<=end; j++)); do
|
||||||
|
[ -z "${pkg_uri_list[j]}" ] && continue
|
||||||
|
process_package "${pkg_uri_list[j]}"
|
||||||
|
done
|
||||||
|
) &
|
||||||
|
done
|
||||||
|
|
||||||
|
# 等待所有后台任务完成
|
||||||
|
wait
|
||||||
|
|
||||||
|
# 合并显示信息
|
||||||
|
if [ -f "$tmpdir/display" ]; then
|
||||||
|
DOWNLOAD_DISPLAY+="\n$(cat "$tmpdir/display")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 计算总下载大小
|
||||||
|
if [ -f "$tmpdir/sizes" ]; then
|
||||||
|
DOWNLOAD_SIZE=$(awk '{sum+=$1} END{print sum}' "$tmpdir/sizes")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 清理临时目录
|
||||||
|
rm -rf "$tmpdir"
|
||||||
|
|
||||||
#cat "$DLLIST"
|
#cat "$DLLIST"
|
||||||
#LCK_RM
|
|
||||||
#exit
|
#exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
display_downloadfile(){
|
display_downloadfile(){
|
||||||
if [ -n "$VERBOSE_OUTPUT" ]; then
|
if [ -n "$VERBOSE_OUTPUT" ]; then
|
||||||
cat "$DLLIST"
|
cat "$DLLIST"
|
||||||
@ -452,11 +587,8 @@ display_downloadfile(){
|
|||||||
DISPLAY_SORT_OPTIONS=(-k 1,1)
|
DISPLAY_SORT_OPTIONS=(-k 1,1)
|
||||||
# Sort output after package download size (decreasing):
|
# Sort output after package download size (decreasing):
|
||||||
#DISPLAY_SORT_OPTIONS=(-k 3,3 -hr)
|
#DISPLAY_SORT_OPTIONS=(-k 3,3 -hr)
|
||||||
while read -r line; do
|
while IFS=' ' read -r pkg ver size _; do
|
||||||
[ -z "$line" ] && continue
|
[ -z "$pkg" ] && continue
|
||||||
pkg="$(echo "$line" | cut -d' ' -f1)"
|
|
||||||
ver="$(echo "$line" | cut -d' ' -f2)"
|
|
||||||
size="$(echo "$line" | cut -d' ' -f3)"
|
|
||||||
printf '%s%-40s %-20s %10s\n' "$aptfast_prefix" "$pkg" "$ver" "$size"
|
printf '%s%-40s %-20s %10s\n' "$aptfast_prefix" "$pkg" "$ver" "$size"
|
||||||
done <<<"$(echo -e "$DOWNLOAD_DISPLAY" | sort "${DISPLAY_SORT_OPTIONS[@]}")"
|
done <<<"$(echo -e "$DOWNLOAD_DISPLAY" | sort "${DISPLAY_SORT_OPTIONS[@]}")"
|
||||||
fi
|
fi
|
||||||
@ -464,6 +596,7 @@ display_downloadfile(){
|
|||||||
msg "下载大小: $(echo "$DOWNLOAD_SIZE" | numfmt --to=iec-i --suffix=B)" "normal"
|
msg "下载大小: $(echo "$DOWNLOAD_SIZE" | numfmt --to=iec-i --suffix=B)" "normal"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# Create and insert a PID number to lockfile.
|
# Create and insert a PID number to lockfile.
|
||||||
|
|
||||||
_create_lock
|
_create_lock
|
||||||
@ -473,19 +606,21 @@ CMD="$(echo "$_DOWNLOADER" | sed 's/^\s*\([^ ]\+\).*$/\1/')"
|
|||||||
if [ ! "$(command -v "$CMD")" ]; then
|
if [ ! "$(command -v "$CMD")" ]; then
|
||||||
msg "Command not found: $CMD" "normal" "err"
|
msg "Command not found: $CMD" "normal" "err"
|
||||||
msg "You must configure $CONFFILE to use aria2c or another supported download manager" "normal" "err"
|
msg "You must configure $CONFFILE to use aria2c or another supported download manager" "normal" "err"
|
||||||
exit 1
|
CLEANUP_STATE=1
|
||||||
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Make sure package manager is available.
|
# Make sure package manager is available.
|
||||||
if [ ! "$(command -v "$_APTMGR")" ]; then
|
if [ ! "$(command -v "$_APTMGR")" ]; then
|
||||||
msg "\`$_APTMGR\` command not available." "warning"
|
msg "\`$_APTMGR\` command not available." "warning"
|
||||||
msg "You must configure $CONFFILE to use either apt-get or aptitude." "normal" "err"
|
msg "You must configure $CONFFILE to use either apt-get or aptitude." "normal" "err"
|
||||||
exit 1
|
CLEANUP_STATE=1
|
||||||
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Disable script warning if apt is used.
|
# Disable script warning if apt is used.
|
||||||
APT_SCRIPT_WARNING=()
|
APT_SCRIPT_WARNING=()
|
||||||
if [ "$_APTMGR" == "apt" ]; then
|
if [ "$(basename "${_APTMGR}")" == 'apt' ]; then
|
||||||
APT_SCRIPT_WARNING=(-o "Apt::Cmd::Disable-Script-Warning=true")
|
APT_SCRIPT_WARNING=(-o "Apt::Cmd::Disable-Script-Warning=true")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -532,6 +667,8 @@ while true; do
|
|||||||
d)
|
d)
|
||||||
DOWNLOAD_ONLY=true
|
DOWNLOAD_ONLY=true
|
||||||
;;
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
((OPTIND++))
|
((OPTIND++))
|
||||||
@ -574,7 +711,7 @@ if [ "$option" == "install" ]; then
|
|||||||
msg "Do you want to download the packages? [Y/n] " "question"
|
msg "Do you want to download the packages? [Y/n] " "question"
|
||||||
|
|
||||||
while ((!updsys)); do
|
while ((!updsys)); do
|
||||||
read -r -sn1 -t "$APT_FAST_TIMEOUT" answer || { msg; msg "Timed out." "warning"; exit 1; }
|
read -r -sn1 -t "$APT_FAST_TIMEOUT" answer || { msg; msg "Timed out." "warning"; CLEANUP_STATE=1; exit; }
|
||||||
case "$answer" in
|
case "$answer" in
|
||||||
[JjYy]) result=1; updsys=1 ;;
|
[JjYy]) result=1; updsys=1 ;;
|
||||||
[Nn]) result=0; updsys=1 ;;
|
[Nn]) result=0; updsys=1 ;;
|
||||||
@ -596,7 +733,7 @@ if [ "$option" == "install" ]; then
|
|||||||
mkdir -p -- "$DLDIR"
|
mkdir -p -- "$DLDIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd "$DLDIR" &>/dev/null || exit 1
|
cd "$DLDIR" &>/dev/null || { msg; msg "Not able to change into download directory." "warning"; CLEANUP_STATE=1; exit; }
|
||||||
|
|
||||||
eval "${_DOWNLOADER}" # execute downloadhelper command
|
eval "${_DOWNLOADER}" # execute downloadhelper command
|
||||||
if [ "$(find "$DLDIR" -printf . | wc -c)" -gt 1 ]; then
|
if [ "$(find "$DLDIR" -printf . | wc -c)" -gt 1 ]; then
|
||||||
@ -616,22 +753,26 @@ if [ "$option" == "install" ]; then
|
|||||||
cd - &>/dev/null || msg "Failed to change back directory" "warning"
|
cd - &>/dev/null || msg "Failed to change back directory" "warning"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
exit 1
|
CLEANUP_STATE=1
|
||||||
|
exit
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
[ -t 1 ] && tput el
|
[ -t 1 ] && tput el
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$DOWNLOAD_ONLY" ] || [ "$_APTMGR" == "aptitude" ]; then
|
# different problem resolving for aptitude
|
||||||
|
if [ -z "$DOWNLOAD_ONLY" ] || [ "$(basename "${_APTMGR}")" == 'aptitude' ]; then
|
||||||
"${_APTMGR}" "${APT_SCRIPT_WARNING[@]}" "$@"
|
"${_APTMGR}" "${APT_SCRIPT_WARNING[@]}" "$@"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
elif [ "$option" == "clean" ]; then
|
elif [ "$option" == "clean" ]; then
|
||||||
"${_APTMGR}" "${APT_SCRIPT_WARNING[@]}" "$@" && {
|
"${_APTMGR}" "${APT_SCRIPT_WARNING[@]}" "$@" && {
|
||||||
|
if [ -d "$DLDIR" ]; then
|
||||||
find "$DLDIR" -maxdepth 1 -type f -delete
|
find "$DLDIR" -maxdepth 1 -type f -delete
|
||||||
CLEANUP_STATE="$?"
|
CLEANUP_STATE="$?"
|
||||||
[ -f "$DLLIST" ] && rm -f -- "$DLLIST"* || true
|
[ -f "$DLLIST" ] && rm -f -- "$DLLIST"* || true
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
elif [ "$option" == "download" ]; then
|
elif [ "$option" == "download" ]; then
|
||||||
@ -649,7 +790,8 @@ elif [ "$option" == "download" ]; then
|
|||||||
eval "${_DOWNLOADER}"
|
eval "${_DOWNLOADER}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$_APTMGR" == "aptitude" ]; then
|
# different problem resolving for aptitude
|
||||||
|
if [ "$(basename "${_APTMGR}")" == 'aptitude' ]; then
|
||||||
"${_APTMGR}" "$@"
|
"${_APTMGR}" "$@"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ if [ ! -f "$1" ]; then
|
|||||||
PACKAGE_NAME=$(echo "$FILENAME" | sed -r 's/^([^_]+)_.*$/\1/')
|
PACKAGE_NAME=$(echo "$FILENAME" | sed -r 's/^([^_]+)_.*$/\1/')
|
||||||
VERSION=$(echo "$FILENAME" | sed -r 's/^[^_]+_([^_]+)_.*$/\1/')
|
VERSION=$(echo "$FILENAME" | sed -r 's/^[^_]+_([^_]+)_.*$/\1/')
|
||||||
pushd ${FILEPATH}
|
pushd ${FILEPATH}
|
||||||
aptss download ${PACKAGE_NAME}=${VERSION}
|
aptss download ${PACKAGE_NAME}
|
||||||
popd
|
popd
|
||||||
if [ ! -f "$1" ]; then
|
if [ ! -f "$1" ]; then
|
||||||
echo "OMG-IT-GOES-WRONG"
|
echo "OMG-IT-GOES-WRONG"
|
||||||
|
@ -41,12 +41,13 @@ function log.debug() { log.log "debug" $@; }
|
|||||||
|
|
||||||
function scan_desktop_file_log(){
|
function scan_desktop_file_log(){
|
||||||
unset desktop_file_path
|
unset desktop_file_path
|
||||||
|
package_name=$1
|
||||||
for desktop_file_path in $(dpkg -L "$1" |grep /usr/share/applications/ | awk '/\.desktop$/ {print}'); do
|
for desktop_file_path in $(dpkg -L "$1" |grep /usr/share/applications/ | awk '/\.desktop$/ {print}'); do
|
||||||
if [ "$(cat $desktop_file_path | grep NoDisplay=true)" = "" ];then
|
if [ "$(cat $desktop_file_path | grep NoDisplay=true)" = "" ];then
|
||||||
log.info "$desktop_file_path is found."
|
log.info "$desktop_file_path is found."
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
for desktop_file_path in $(dpkg -L "$1" |grep /opt/apps/$package_name/entries/applications | awk '/\.desktop$/ {print}'); do
|
for desktop_file_path in $(dpkg -L "$1" |grep /opt/apps/$package_name/entries/applications/ | awk '/\.desktop$/ {print}'); do
|
||||||
if [ "$(cat $desktop_file_path | grep NoDisplay=true)" = "" ];then
|
if [ "$(cat $desktop_file_path | grep NoDisplay=true)" = "" ];then
|
||||||
log.info "$desktop_file_path is found."
|
log.info "$desktop_file_path is found."
|
||||||
fi
|
fi
|
||||||
@ -100,7 +101,7 @@ function launch_app(){
|
|||||||
log.info "Command is $exec_command"
|
log.info "Command is $exec_command"
|
||||||
|
|
||||||
# 在默认终端执行命令
|
# 在默认终端执行命令
|
||||||
eval "$exec_command"
|
bash -c $exec_command
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ "$#" -lt 2 ];then
|
if [ "$#" -lt 2 ];then
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
if [ "$(id -u)" != "0" ] ; then
|
if [ "$(id -u)" != "0" ] ; then
|
||||||
if [ "$IS_ACE_ENV" = "1" ] ; then
|
if [ "$IS_ACE_ENV" = "1" ] ; then
|
||||||
/opt/durapps/spark-store/bin/store-helper/pass-auth.sh "$0" "$@"
|
/opt/durapps/spark-store/bin/store-helper/pass-auth.sh "$0" "$@"
|
||||||
@ -8,8 +9,7 @@ if [ "$(id -u)" != "0" ] ; then
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
HERE=$(dirname $0)
|
||||||
|
|
||||||
trap "rm -f /tmp/spark-store/upgradeStatus.txt" EXIT
|
trap "rm -f /tmp/spark-store/upgradeStatus.txt" EXIT
|
||||||
source /opt/durapps/spark-store/bin/bashimport/transhell.amber
|
source /opt/durapps/spark-store/bin/bashimport/transhell.amber
|
||||||
load_transhell_debug
|
load_transhell_debug
|
||||||
@ -24,53 +24,54 @@ function get_name_from_desktop_file() {
|
|||||||
if [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "true" ] || [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "True" ] ; then
|
if [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "true" ] || [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "True" ] ; then
|
||||||
continue
|
continue
|
||||||
else
|
else
|
||||||
name_orig=$(grep -m 1 '^Name=' "$desktop_file_path" | cut -d '=' -f 2)
|
name_orig=$(awk -F= '/^\[Desktop Entry\]$/ {found=1} found && /^Name=/ {print $2; exit} /^\[.*\]$/ && !/\[Desktop Entry\]/ {exit}' "$desktop_file_path")
|
||||||
name_i18n=$(grep -m 1 "^Name\[${LANGUAGE}\]\=" "$desktop_file_path" | cut -d '=' -f 2)
|
name_i18n=$(awk -v lang="Name[$LANGUAGE]" -F= '/^\[Desktop Entry\]$/ {found=1} found && /^Name\[/ && $1 == lang {print $2; exit} /^\[.*\]$/ && !/\[Desktop Entry\]/ {exit}' "$desktop_file_path")
|
||||||
if [ -z "$name_i18n" ] ; then
|
if [ -z "$name_i18n" ] ; then
|
||||||
app_name_in_desktop=$name_orig
|
app_name_in_desktop=$name_orig
|
||||||
else
|
else
|
||||||
app_name_in_desktop=$name_i18n
|
app_name_in_desktop=$name_i18n
|
||||||
fi
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
for desktop_file_path in $(dpkg -L "$package_name" |grep /opt/apps/$package_name/entries/applications | awk '/\.desktop$/ {print}') ; do
|
for desktop_file_path in $(dpkg -L "$package_name" |grep /opt/apps/$package_name/entries/applications | awk '/\.desktop$/ {print}') ; do
|
||||||
if [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "true" ] || [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "True" ] ; then
|
if [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "true" ] || [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "True" ] ; then
|
||||||
continue
|
continue
|
||||||
else
|
else
|
||||||
name_orig=$(grep -m 1 '^Name=' "$desktop_file_path" | cut -d '=' -f 2)
|
name_orig=$(awk -F= '/^\[Desktop Entry\]$/ {found=1} found && /^Name=/ {print $2; exit} /^\[.*\]$/ && !/\[Desktop Entry\]/ {exit}' "$desktop_file_path")
|
||||||
name_i18n=$(grep -m 1 "^Name\[${LANGUAGE}\]\=" "$desktop_file_path" | cut -d '=' -f 2)
|
name_i18n=$(awk -v lang="Name[$LANGUAGE]" -F= '/^\[Desktop Entry\]$/ {found=1} found && /^Name\[/ && $1 == lang {print $2; exit} /^\[.*\]$/ && !/\[Desktop Entry\]/ {exit}' "$desktop_file_path")
|
||||||
if [ -z "$name_i18n" ] ; then
|
if [ -z "$name_i18n" ] ; then
|
||||||
app_name_in_desktop=$name_orig
|
app_name_in_desktop=$name_orig
|
||||||
else
|
else
|
||||||
app_name_in_desktop=$name_i18n
|
app_name_in_desktop=$name_i18n
|
||||||
fi
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -z "$app_name_in_desktop" ] ; then
|
if [ -z "$app_name_in_desktop" ] ; then
|
||||||
app_name_in_desktop=${package_name}
|
app_name_in_desktop=${package_name}
|
||||||
fi
|
fi
|
||||||
echo ${app_name_in_desktop}
|
|
||||||
|
|
||||||
|
echo ${app_name_in_desktop}
|
||||||
}
|
}
|
||||||
|
|
||||||
touch /tmp/spark-store/upgradeStatus.txt
|
touch /tmp/spark-store/upgradeStatus.txt
|
||||||
|
|
||||||
# 执行 apt update
|
# 执行 apt update
|
||||||
pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh ssupdate 2>&1 > /dev/null | zenity --progress --auto-close --pulsate --no-cancel --text="${TRANSHELL_CONTENT_UPDATE_CHEKING_PLEASE_WAIT}" --height 70 --width 400 --title="${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
pkexec ${HERE}/ss-do-upgrade-worker.sh ssupdate 2>&1 > /dev/null | zenity --progress --auto-close --pulsate --no-cancel --text="${TRANSHELL_CONTENT_UPDATE_CHEKING_PLEASE_WAIT}" --height 70 --width 400 --title="${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
||||||
|
|
||||||
if [ -z `cat /tmp/spark-store-app-ssupdate-status.txt` ] ; then
|
if [ -z `cat /tmp/spark-store-app-ssupdate-status.txt` ] ; then
|
||||||
/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh clean-log
|
${HERE}/ss-do-upgrade-worker.sh clean-log
|
||||||
else
|
else
|
||||||
zenity --error --text "${TRANSHELL_CONTENT_CHECK_UPDATE_PROCESS_ERROR_PRESS_CONFIRM_TO_CHECK}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 200 --width 350 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
zenity --error --text "${TRANSHELL_CONTENT_CHECK_UPDATE_PROCESS_ERROR_PRESS_CONFIRM_TO_CHECK}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 200 --width 350 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
||||||
zenity --text-info --filename=/tmp/spark-store-app-ssupdate-log.txt --checkbox="${TRANSHELL_CONTENT_I_ALREDY_COPIED_THE_LOG_HERE_AND_WILL_USE_IT_TO_FEEDBACK}" --title="${TRANSHELL_CONTENT_FEEDBACK_CAN_BE_FOUND_IN_THE_SETTINGS}" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
zenity --text-info --filename=/tmp/spark-store-app-ssupdate-log.txt --checkbox="${TRANSHELL_CONTENT_I_ALREDY_COPIED_THE_LOG_HERE_AND_WILL_USE_IT_TO_FEEDBACK}" --title="${TRANSHELL_CONTENT_FEEDBACK_CAN_BE_FOUND_IN_THE_SETTINGS}" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
||||||
/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh clean-log
|
${HERE}/ss-do-upgrade-worker.sh clean-log
|
||||||
rm -f /tmp/spark-store/upgradeStatus.txt
|
rm -f /tmp/spark-store/upgradeStatus.txt
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 获取可更新应用列表
|
# 获取可更新应用列表
|
||||||
PKG_LIST="$(/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh upgradable-list)"
|
PKG_LIST="$(${HERE}/ss-do-upgrade-worker.sh upgradable-list)"
|
||||||
## 如果没更新,就弹出不需要更新
|
## 如果没更新,就弹出不需要更新
|
||||||
if [ -z "$PKG_LIST" ] ; then
|
if [ -z "$PKG_LIST" ] ; then
|
||||||
zenity --info --text "${TRANSHELL_CONTENT_NO_NEED_TO_UPGRADE}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
zenity --info --text "${TRANSHELL_CONTENT_NO_NEED_TO_UPGRADE}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
||||||
@ -112,44 +113,60 @@ done)
|
|||||||
|
|
||||||
## 如果没有应用需要更新,则直接退出
|
## 如果没有应用需要更新,则直接退出
|
||||||
if [ -z "$PKG_UPGRADE_LIST" ] ; then
|
if [ -z "$PKG_UPGRADE_LIST" ] ; then
|
||||||
zenity --info --text "${TRANSHELL_CONTENT_NO_NEED_TO_UPGRADE}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
zenity --info --text "${TRANSHELL_CONTENT_NO_NEED_TO_UPGRADE}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 150 --width 300
|
||||||
else
|
exit 0
|
||||||
PKG_UPGRADE_LIST=$(echo "$PKG_UPGRADE_LIST" | zenity --list --text="${TRANSHELL_CONTENT_CHOOSE_APP_TO_UPGRADE}" --column="${TRANSHELL_CONTENT_CHOOSE}" --column="${TRANSHELL_CONTENT_APP_NAME}" --column="${TRANSHELL_CONTENT_NEW_VERSION}" --column="${TRANSHELL_CONTENT_UPGRADE_FROM}" --column="${TRANSHELL_CONTENT_PKG_NAME}" --separator=" " --checklist --multiple --print-column=5 --height 350 --width 650 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg)
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
while true;do
|
||||||
|
PKG_UPGRADE_LIST=$(echo "$PKG_UPGRADE_LIST" | zenity --list --text="${TRANSHELL_CONTENT_CHOOSE_APP_TO_UPGRADE}" --column="${TRANSHELL_CONTENT_CHOOSE}" --column="${TRANSHELL_CONTENT_APP_NAME}" --column="${TRANSHELL_CONTENT_NEW_VERSION}" --column="${TRANSHELL_CONTENT_UPGRADE_FROM}" --column="${TRANSHELL_CONTENT_PKG_NAME}" --separator=" " --checklist --multiple --print-column=5 --height 350 --width 650 )
|
||||||
## 如果没有选择,则直接退出
|
## 如果没有选择,则直接退出
|
||||||
if [ -z "$PKG_UPGRADE_LIST" ] ; then
|
if [ -z "$PKG_UPGRADE_LIST" ] ; then
|
||||||
zenity --info --text "${TRANSHELL_CONTENT_NO_APP_IS_CHOSEN}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
zenity --info --text "${TRANSHELL_CONTENT_NO_APP_IS_CHOSEN}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 150 --width 300
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
if [[ "$PKG_UPGRADE_LIST" == *"(null)"* ]]; then
|
||||||
|
zenity --error --text "${TRANSHELL_CONTENT_LIST_NOT_LOADED_PLEASE_WAIT}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 150 --width 300
|
||||||
else
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
### 更新用户选择的应用
|
### 更新用户选择的应用
|
||||||
|
# for PKG_UPGRADE in $PKG_UPGRADE_LIST;do
|
||||||
|
# APP_UPGRADE="$(get_name_from_desktop_file $PKG_UPGRADE)"
|
||||||
|
# update_transhell
|
||||||
|
|
||||||
|
(
|
||||||
|
total=$(echo "$PKG_UPGRADE_LIST" | wc -w)
|
||||||
|
count=0
|
||||||
|
|
||||||
(for PKG_UPGRADE in $PKG_UPGRADE_LIST; do
|
for PKG_UPGRADE in $PKG_UPGRADE_LIST; do
|
||||||
|
count=$((count + 1))
|
||||||
APP_UPGRADE="$(get_name_from_desktop_file $PKG_UPGRADE)"
|
APP_UPGRADE="$(get_name_from_desktop_file $PKG_UPGRADE)"
|
||||||
update_transhell
|
update_transhell
|
||||||
|
|
||||||
# 启动升级任务
|
# 启动升级任务
|
||||||
(pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh upgrade-app $PKG_UPGRADE -y 2>&1 > /dev/null ) &
|
(yes | pkexec ${HERE}/ss-do-upgrade-worker.sh upgrade-app $PKG_UPGRADE -y 2>&1 > /dev/null ) &
|
||||||
cmd_pid=$!
|
|
||||||
|
# 计算进度百分比
|
||||||
|
progress=$(( count * 100 / total - 1))
|
||||||
|
|
||||||
# 动态修改zenity的文本
|
# 动态修改zenity的文本
|
||||||
echo "# ${TRANSHELL_CONTENT_UPGRADING_PLEASE_WAIT}"
|
echo "# ${TRANSHELL_CONTENT_UPGRADING_PLEASE_WAIT}"
|
||||||
|
echo "$progress"
|
||||||
wait
|
wait
|
||||||
done) | zenity --progress --auto-close --no-cancel --pulsate --text="Preparing..." --height 70 --width 400 --title="${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
done
|
||||||
|
) | zenity --progress --auto-close --no-cancel --text="Preparing..." --height 70 --width 400 --title="${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 更新成功
|
#### 更新成功
|
||||||
if [ -z "`cat /tmp/spark-store-app-upgrade-status.txt`" ] ; then
|
if [ -z "`cat /tmp/spark-store-app-upgrade-status.txt`" ] ; then
|
||||||
zenity --info --text "${TRANSHELL_CONTENT_CHOSEN_APP_UPGRADE_FINISHED}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
zenity --info --text "${TRANSHELL_CONTENT_CHOSEN_APP_UPGRADE_FINISHED}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
||||||
else
|
else #### 更新异常
|
||||||
#### 更新异常
|
|
||||||
zenity --error --text "${TRANSHELL_CONTENT_APP_UGRADE_PROCESS_ERROR_PRESS_CONFIRM_TO_CHECK}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 200 --width 350 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
zenity --error --text "${TRANSHELL_CONTENT_APP_UGRADE_PROCESS_ERROR_PRESS_CONFIRM_TO_CHECK}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 200 --width 350 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
||||||
zenity --text-info --filename=/tmp/spark-store-app-upgrade-log.txt --checkbox="${TRANSHELL_CONTENT_I_ALREDY_COPIED_THE_LOG_HERE_AND_WILL_USE_IT_TO_FEEDBACK}" --title="${TRANSHELL_CONTENT_FEEDBACK_CAN_BE_FOUND_IN_THE_SETTINGS}" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
zenity --text-info --filename=/tmp/spark-store-app-upgrade-log.txt --checkbox="${TRANSHELL_CONTENT_I_ALREDY_COPIED_THE_LOG_HERE_AND_WILL_USE_IT_TO_FEEDBACK}" --title="${TRANSHELL_CONTENT_FEEDBACK_CAN_BE_FOUND_IN_THE_SETTINGS}" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
rm -f /tmp/spark-store/upgradeStatus.txt
|
rm -f /tmp/spark-store/upgradeStatus.txt
|
||||||
# 从最开头
|
# 从最开头
|
||||||
|
@ -126,10 +126,10 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.ui" line="244"/>
|
<location filename="../src/pages/appintopage.ui" line="244"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="198"/>
|
<location filename="../src/pages/appintopage.cpp" line="210"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="338"/>
|
<location filename="../src/pages/appintopage.cpp" line="350"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="372"/>
|
<location filename="../src/pages/appintopage.cpp" line="395"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="541"/>
|
<location filename="../src/pages/appintopage.cpp" line="572"/>
|
||||||
<source>Download and Install</source>
|
<source>Download and Install</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@ -186,69 +186,76 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="183"/>
|
<location filename="../src/pages/appintopage.cpp" line="191"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="365"/>
|
<location filename="../src/pages/appintopage.cpp" line="382"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="510"/>
|
<location filename="../src/pages/appintopage.cpp" line="541"/>
|
||||||
<source>Reinstall</source>
|
<source>Reinstall</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="190"/>
|
<location filename="../src/pages/appintopage.cpp" line="193"/>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="384"/>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="524"/>
|
||||||
|
<source>Launch</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="202"/>
|
||||||
<source>Upgrade</source>
|
<source>Upgrade</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="343"/>
|
<location filename="../src/pages/appintopage.cpp" line="355"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="483"/>
|
<location filename="../src/pages/appintopage.cpp" line="506"/>
|
||||||
<source>Install</source>
|
<source>Install</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="348"/>
|
<location filename="../src/pages/appintopage.cpp" line="360"/>
|
||||||
<source>Installing</source>
|
<source>Installing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="462"/>
|
<location filename="../src/pages/appintopage.cpp" line="485"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="466"/>
|
<location filename="../src/pages/appintopage.cpp" line="489"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="470"/>
|
<location filename="../src/pages/appintopage.cpp" line="493"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="474"/>
|
<location filename="../src/pages/appintopage.cpp" line="497"/>
|
||||||
<source>Warning</source>
|
<source>Warning</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="462"/>
|
<location filename="../src/pages/appintopage.cpp" line="485"/>
|
||||||
<source>The current application does not support or tested on deepin, there may be problems</source>
|
<source>The current application does not support or tested on deepin, there may be problems</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="466"/>
|
<location filename="../src/pages/appintopage.cpp" line="489"/>
|
||||||
<source>The current application does not support or tested on UOS, there may be problems</source>
|
<source>The current application does not support or tested on UOS, there may be problems</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="470"/>
|
<location filename="../src/pages/appintopage.cpp" line="493"/>
|
||||||
<source>The current application does not support or tested on Ubuntu, there may be problems</source>
|
<source>The current application does not support or tested on Ubuntu, there may be problems</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="474"/>
|
<location filename="../src/pages/appintopage.cpp" line="497"/>
|
||||||
<source>The current application does not support or tested on current platform, there may be problems</source>
|
<source>The current application does not support or tested on current platform, there may be problems</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="544"/>
|
<location filename="../src/pages/appintopage.cpp" line="575"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="559"/>
|
<location filename="../src/pages/appintopage.cpp" line="590"/>
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="544"/>
|
<location filename="../src/pages/appintopage.cpp" line="575"/>
|
||||||
<source>Uninstall succeeded</source>
|
<source>Uninstall succeeded</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="559"/>
|
<location filename="../src/pages/appintopage.cpp" line="590"/>
|
||||||
<source>The URL has been copied to the clipboard</source>
|
<source>The URL has been copied to the clipboard</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -126,10 +126,10 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.ui" line="244"/>
|
<location filename="../src/pages/appintopage.ui" line="244"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="198"/>
|
<location filename="../src/pages/appintopage.cpp" line="210"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="338"/>
|
<location filename="../src/pages/appintopage.cpp" line="350"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="372"/>
|
<location filename="../src/pages/appintopage.cpp" line="395"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="541"/>
|
<location filename="../src/pages/appintopage.cpp" line="572"/>
|
||||||
<source>Download and Install</source>
|
<source>Download and Install</source>
|
||||||
<translation>Descargar e instalar</translation>
|
<translation>Descargar e instalar</translation>
|
||||||
</message>
|
</message>
|
||||||
@ -186,69 +186,76 @@
|
|||||||
<translation>Se ha desactivado el modo desarrollador</translation>
|
<translation>Se ha desactivado el modo desarrollador</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="183"/>
|
<location filename="../src/pages/appintopage.cpp" line="191"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="365"/>
|
<location filename="../src/pages/appintopage.cpp" line="382"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="510"/>
|
<location filename="../src/pages/appintopage.cpp" line="541"/>
|
||||||
<source>Reinstall</source>
|
<source>Reinstall</source>
|
||||||
<translation>Reinstalación</translation>
|
<translation>Reinstalación</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="190"/>
|
<location filename="../src/pages/appintopage.cpp" line="193"/>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="384"/>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="524"/>
|
||||||
|
<source>Launch</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="202"/>
|
||||||
<source>Upgrade</source>
|
<source>Upgrade</source>
|
||||||
<translation>Actualización</translation>
|
<translation>Actualización</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="343"/>
|
<location filename="../src/pages/appintopage.cpp" line="355"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="483"/>
|
<location filename="../src/pages/appintopage.cpp" line="506"/>
|
||||||
<source>Install</source>
|
<source>Install</source>
|
||||||
<translation>Instalación</translation>
|
<translation>Instalación</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="348"/>
|
<location filename="../src/pages/appintopage.cpp" line="360"/>
|
||||||
<source>Installing</source>
|
<source>Installing</source>
|
||||||
<translation>Se está instalando</translation>
|
<translation>Se está instalando</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="462"/>
|
<location filename="../src/pages/appintopage.cpp" line="485"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="466"/>
|
<location filename="../src/pages/appintopage.cpp" line="489"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="470"/>
|
<location filename="../src/pages/appintopage.cpp" line="493"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="474"/>
|
<location filename="../src/pages/appintopage.cpp" line="497"/>
|
||||||
<source>Warning</source>
|
<source>Warning</source>
|
||||||
<translation>Aviso</translation>
|
<translation>Aviso</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="462"/>
|
<location filename="../src/pages/appintopage.cpp" line="485"/>
|
||||||
<source>The current application does not support or tested on deepin, there may be problems</source>
|
<source>The current application does not support or tested on deepin, there may be problems</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="466"/>
|
<location filename="../src/pages/appintopage.cpp" line="489"/>
|
||||||
<source>The current application does not support or tested on UOS, there may be problems</source>
|
<source>The current application does not support or tested on UOS, there may be problems</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="470"/>
|
<location filename="../src/pages/appintopage.cpp" line="493"/>
|
||||||
<source>The current application does not support or tested on Ubuntu, there may be problems</source>
|
<source>The current application does not support or tested on Ubuntu, there may be problems</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="474"/>
|
<location filename="../src/pages/appintopage.cpp" line="497"/>
|
||||||
<source>The current application does not support or tested on current platform, there may be problems</source>
|
<source>The current application does not support or tested on current platform, there may be problems</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="544"/>
|
<location filename="../src/pages/appintopage.cpp" line="575"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="559"/>
|
<location filename="../src/pages/appintopage.cpp" line="590"/>
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation>SPARK Store</translation>
|
<translation>SPARK Store</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="544"/>
|
<location filename="../src/pages/appintopage.cpp" line="575"/>
|
||||||
<source>Uninstall succeeded</source>
|
<source>Uninstall succeeded</source>
|
||||||
<translation>Desinstalación exitosa</translation>
|
<translation>Desinstalación exitosa</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="559"/>
|
<location filename="../src/pages/appintopage.cpp" line="590"/>
|
||||||
<source>The URL has been copied to the clipboard</source>
|
<source>The URL has been copied to the clipboard</source>
|
||||||
<translation>La URL ha sido copiada al portapapeles</translation>
|
<translation>La URL ha sido copiada al portapapeles</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -126,10 +126,10 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.ui" line="244"/>
|
<location filename="../src/pages/appintopage.ui" line="244"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="198"/>
|
<location filename="../src/pages/appintopage.cpp" line="210"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="338"/>
|
<location filename="../src/pages/appintopage.cpp" line="350"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="372"/>
|
<location filename="../src/pages/appintopage.cpp" line="395"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="541"/>
|
<location filename="../src/pages/appintopage.cpp" line="572"/>
|
||||||
<source>Download and Install</source>
|
<source>Download and Install</source>
|
||||||
<translation>Télécharger et installer</translation>
|
<translation>Télécharger et installer</translation>
|
||||||
</message>
|
</message>
|
||||||
@ -186,69 +186,76 @@
|
|||||||
<translation>Mode développeur désactivé</translation>
|
<translation>Mode développeur désactivé</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="183"/>
|
<location filename="../src/pages/appintopage.cpp" line="191"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="365"/>
|
<location filename="../src/pages/appintopage.cpp" line="382"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="510"/>
|
<location filename="../src/pages/appintopage.cpp" line="541"/>
|
||||||
<source>Reinstall</source>
|
<source>Reinstall</source>
|
||||||
<translation>Réinstaller</translation>
|
<translation>Réinstaller</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="190"/>
|
<location filename="../src/pages/appintopage.cpp" line="193"/>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="384"/>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="524"/>
|
||||||
|
<source>Launch</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="202"/>
|
||||||
<source>Upgrade</source>
|
<source>Upgrade</source>
|
||||||
<translation>Mise à niveau</translation>
|
<translation>Mise à niveau</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="343"/>
|
<location filename="../src/pages/appintopage.cpp" line="355"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="483"/>
|
<location filename="../src/pages/appintopage.cpp" line="506"/>
|
||||||
<source>Install</source>
|
<source>Install</source>
|
||||||
<translation>Installation</translation>
|
<translation>Installation</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="348"/>
|
<location filename="../src/pages/appintopage.cpp" line="360"/>
|
||||||
<source>Installing</source>
|
<source>Installing</source>
|
||||||
<translation>Installation en cours</translation>
|
<translation>Installation en cours</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="462"/>
|
<location filename="../src/pages/appintopage.cpp" line="485"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="466"/>
|
<location filename="../src/pages/appintopage.cpp" line="489"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="470"/>
|
<location filename="../src/pages/appintopage.cpp" line="493"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="474"/>
|
<location filename="../src/pages/appintopage.cpp" line="497"/>
|
||||||
<source>Warning</source>
|
<source>Warning</source>
|
||||||
<translation>Avertissement</translation>
|
<translation>Avertissement</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="462"/>
|
<location filename="../src/pages/appintopage.cpp" line="485"/>
|
||||||
<source>The current application does not support or tested on deepin, there may be problems</source>
|
<source>The current application does not support or tested on deepin, there may be problems</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="466"/>
|
<location filename="../src/pages/appintopage.cpp" line="489"/>
|
||||||
<source>The current application does not support or tested on UOS, there may be problems</source>
|
<source>The current application does not support or tested on UOS, there may be problems</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="470"/>
|
<location filename="../src/pages/appintopage.cpp" line="493"/>
|
||||||
<source>The current application does not support or tested on Ubuntu, there may be problems</source>
|
<source>The current application does not support or tested on Ubuntu, there may be problems</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="474"/>
|
<location filename="../src/pages/appintopage.cpp" line="497"/>
|
||||||
<source>The current application does not support or tested on current platform, there may be problems</source>
|
<source>The current application does not support or tested on current platform, there may be problems</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="544"/>
|
<location filename="../src/pages/appintopage.cpp" line="575"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="559"/>
|
<location filename="../src/pages/appintopage.cpp" line="590"/>
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation>Le Spark store</translation>
|
<translation>Le Spark store</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="544"/>
|
<location filename="../src/pages/appintopage.cpp" line="575"/>
|
||||||
<source>Uninstall succeeded</source>
|
<source>Uninstall succeeded</source>
|
||||||
<translation>Désinstallation réussie</translation>
|
<translation>Désinstallation réussie</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="559"/>
|
<location filename="../src/pages/appintopage.cpp" line="590"/>
|
||||||
<source>The URL has been copied to the clipboard</source>
|
<source>The URL has been copied to the clipboard</source>
|
||||||
<translation>L'URL a été copiée dans le presse - papiers</translation>
|
<translation>L'URL a été copiée dans le presse - papiers</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -121,10 +121,10 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.ui" line="244"/>
|
<location filename="../src/pages/appintopage.ui" line="244"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="198"/>
|
<location filename="../src/pages/appintopage.cpp" line="210"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="338"/>
|
<location filename="../src/pages/appintopage.cpp" line="350"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="372"/>
|
<location filename="../src/pages/appintopage.cpp" line="395"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="541"/>
|
<location filename="../src/pages/appintopage.cpp" line="572"/>
|
||||||
<source>Download and Install</source>
|
<source>Download and Install</source>
|
||||||
<translation>下载并安装</translation>
|
<translation>下载并安装</translation>
|
||||||
</message>
|
</message>
|
||||||
@ -186,69 +186,76 @@
|
|||||||
<translation>开发者模式未开启</translation>
|
<translation>开发者模式未开启</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="183"/>
|
<location filename="../src/pages/appintopage.cpp" line="191"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="365"/>
|
<location filename="../src/pages/appintopage.cpp" line="382"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="510"/>
|
<location filename="../src/pages/appintopage.cpp" line="541"/>
|
||||||
<source>Reinstall</source>
|
<source>Reinstall</source>
|
||||||
<translation>重新安装</translation>
|
<translation>重新安装</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="190"/>
|
<location filename="../src/pages/appintopage.cpp" line="193"/>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="384"/>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="524"/>
|
||||||
|
<source>Launch</source>
|
||||||
|
<translation>启动应用</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="202"/>
|
||||||
<source>Upgrade</source>
|
<source>Upgrade</source>
|
||||||
<translation>升级</translation>
|
<translation>升级</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="343"/>
|
<location filename="../src/pages/appintopage.cpp" line="355"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="483"/>
|
<location filename="../src/pages/appintopage.cpp" line="506"/>
|
||||||
<source>Install</source>
|
<source>Install</source>
|
||||||
<translation>安装</translation>
|
<translation>安装</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="348"/>
|
<location filename="../src/pages/appintopage.cpp" line="360"/>
|
||||||
<source>Installing</source>
|
<source>Installing</source>
|
||||||
<translation>正在安装</translation>
|
<translation>正在安装</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="462"/>
|
<location filename="../src/pages/appintopage.cpp" line="485"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="466"/>
|
<location filename="../src/pages/appintopage.cpp" line="489"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="470"/>
|
<location filename="../src/pages/appintopage.cpp" line="493"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="474"/>
|
<location filename="../src/pages/appintopage.cpp" line="497"/>
|
||||||
<source>Warning</source>
|
<source>Warning</source>
|
||||||
<translation>警告</translation>
|
<translation>警告</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="462"/>
|
<location filename="../src/pages/appintopage.cpp" line="485"/>
|
||||||
<source>The current application does not support or tested on deepin, there may be problems</source>
|
<source>The current application does not support or tested on deepin, there may be problems</source>
|
||||||
<translation>当前应用不支持或未在deepin上测试过,安装后可能会出现问题</translation>
|
<translation>当前应用不支持或未在deepin上测试过,安装后可能会出现问题</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="466"/>
|
<location filename="../src/pages/appintopage.cpp" line="489"/>
|
||||||
<source>The current application does not support or tested on UOS, there may be problems</source>
|
<source>The current application does not support or tested on UOS, there may be problems</source>
|
||||||
<translation>当前应用不支持或未在UOS上测试过,安装后可能会出现问题</translation>
|
<translation>当前应用不支持或未在UOS上测试过,安装后可能会出现问题</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="470"/>
|
<location filename="../src/pages/appintopage.cpp" line="493"/>
|
||||||
<source>The current application does not support or tested on Ubuntu, there may be problems</source>
|
<source>The current application does not support or tested on Ubuntu, there may be problems</source>
|
||||||
<translation>当前应用不支持或未在Ubuntu上测试过,安装后可能会出现问题</translation>
|
<translation>当前应用不支持或未在Ubuntu上测试过,安装后可能会出现问题</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="474"/>
|
<location filename="../src/pages/appintopage.cpp" line="497"/>
|
||||||
<source>The current application does not support or tested on current platform, there may be problems</source>
|
<source>The current application does not support or tested on current platform, there may be problems</source>
|
||||||
<translation>当前应用不支持或未在您的平台上测试过,安装后可能会出现问题</translation>
|
<translation>当前应用不支持或未在您的平台上测试过,安装后可能会出现问题</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="544"/>
|
<location filename="../src/pages/appintopage.cpp" line="575"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="559"/>
|
<location filename="../src/pages/appintopage.cpp" line="590"/>
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation>星火应用商店</translation>
|
<translation>星火应用商店</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="544"/>
|
<location filename="../src/pages/appintopage.cpp" line="575"/>
|
||||||
<source>Uninstall succeeded</source>
|
<source>Uninstall succeeded</source>
|
||||||
<translation>卸载成功</translation>
|
<translation>卸载成功</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="559"/>
|
<location filename="../src/pages/appintopage.cpp" line="590"/>
|
||||||
<source>The URL has been copied to the clipboard</source>
|
<source>The URL has been copied to the clipboard</source>
|
||||||
<translation>链接已复制到剪贴板</translation>
|
<translation>链接已复制到剪贴板</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -121,10 +121,10 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.ui" line="244"/>
|
<location filename="../src/pages/appintopage.ui" line="244"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="198"/>
|
<location filename="../src/pages/appintopage.cpp" line="210"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="338"/>
|
<location filename="../src/pages/appintopage.cpp" line="350"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="372"/>
|
<location filename="../src/pages/appintopage.cpp" line="395"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="541"/>
|
<location filename="../src/pages/appintopage.cpp" line="572"/>
|
||||||
<source>Download and Install</source>
|
<source>Download and Install</source>
|
||||||
<translation>下載並安裝</translation>
|
<translation>下載並安裝</translation>
|
||||||
</message>
|
</message>
|
||||||
@ -186,69 +186,76 @@
|
|||||||
<translation>开发者模式未开启</translation>
|
<translation>开发者模式未开启</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="183"/>
|
<location filename="../src/pages/appintopage.cpp" line="191"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="365"/>
|
<location filename="../src/pages/appintopage.cpp" line="382"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="510"/>
|
<location filename="../src/pages/appintopage.cpp" line="541"/>
|
||||||
<source>Reinstall</source>
|
<source>Reinstall</source>
|
||||||
<translation>重新安裝</translation>
|
<translation>重新安裝</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="190"/>
|
<location filename="../src/pages/appintopage.cpp" line="193"/>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="384"/>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="524"/>
|
||||||
|
<source>Launch</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="202"/>
|
||||||
<source>Upgrade</source>
|
<source>Upgrade</source>
|
||||||
<translation>升级</translation>
|
<translation>升级</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="343"/>
|
<location filename="../src/pages/appintopage.cpp" line="355"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="483"/>
|
<location filename="../src/pages/appintopage.cpp" line="506"/>
|
||||||
<source>Install</source>
|
<source>Install</source>
|
||||||
<translation>安装</translation>
|
<translation>安装</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="348"/>
|
<location filename="../src/pages/appintopage.cpp" line="360"/>
|
||||||
<source>Installing</source>
|
<source>Installing</source>
|
||||||
<translation>正在安装</translation>
|
<translation>正在安装</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="462"/>
|
<location filename="../src/pages/appintopage.cpp" line="485"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="466"/>
|
<location filename="../src/pages/appintopage.cpp" line="489"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="470"/>
|
<location filename="../src/pages/appintopage.cpp" line="493"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="474"/>
|
<location filename="../src/pages/appintopage.cpp" line="497"/>
|
||||||
<source>Warning</source>
|
<source>Warning</source>
|
||||||
<translation></translation>
|
<translation></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="462"/>
|
<location filename="../src/pages/appintopage.cpp" line="485"/>
|
||||||
<source>The current application does not support or tested on deepin, there may be problems</source>
|
<source>The current application does not support or tested on deepin, there may be problems</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="466"/>
|
<location filename="../src/pages/appintopage.cpp" line="489"/>
|
||||||
<source>The current application does not support or tested on UOS, there may be problems</source>
|
<source>The current application does not support or tested on UOS, there may be problems</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="470"/>
|
<location filename="../src/pages/appintopage.cpp" line="493"/>
|
||||||
<source>The current application does not support or tested on Ubuntu, there may be problems</source>
|
<source>The current application does not support or tested on Ubuntu, there may be problems</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="474"/>
|
<location filename="../src/pages/appintopage.cpp" line="497"/>
|
||||||
<source>The current application does not support or tested on current platform, there may be problems</source>
|
<source>The current application does not support or tested on current platform, there may be problems</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="544"/>
|
<location filename="../src/pages/appintopage.cpp" line="575"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="559"/>
|
<location filename="../src/pages/appintopage.cpp" line="590"/>
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation>星火应用商店</translation>
|
<translation>星火应用商店</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="544"/>
|
<location filename="../src/pages/appintopage.cpp" line="575"/>
|
||||||
<source>Uninstall succeeded</source>
|
<source>Uninstall succeeded</source>
|
||||||
<translation>卸载成功</translation>
|
<translation>卸载成功</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="559"/>
|
<location filename="../src/pages/appintopage.cpp" line="590"/>
|
||||||
<source>The URL has been copied to the clipboard</source>
|
<source>The URL has been copied to the clipboard</source>
|
||||||
<translation>链接已复制到剪贴板</translation>
|
<translation>链接已复制到剪贴板</translation>
|
||||||
</message>
|
</message>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user