Compare commits

...

77 Commits

Author SHA1 Message Date
d1270dd65f !161 fix shebang
Merge pull request !161 from shenmo/lts-3.5
2022-12-11 10:04:33 +00:00
e8c344f75d version 3.5.1.1
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-11 10:03:35 +00:00
a388535361 fix shebang
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-11 10:02:20 +00:00
e94ee00ade update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-11 10:01:39 +00:00
7390e292ae !159 3.5.1
Merge pull request !159 from shenmo/lts-3.5
2022-12-10 12:54:35 +00:00
0119b21c82 version 3.5.1
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-10 12:54:32 +00:00
601b086923 update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-10 12:53:24 +00:00
f1a2886161 !158 dev--->lts3.5同步
Merge pull request !158 from shenmo/dev
2022-12-10 12:48:59 +00:00
e2f1a344c4 !157 合入zty的修改
Merge pull request !157 from shenmo/lts-3.5
2022-12-10 12:48:16 +00:00
9fc5153f37 !156 修复搜索的一些细节
Merge pull request !156 from Pluto/lts-3.5
2022-12-09 05:09:18 +00:00
zty199
b93f6362b7 fix: Issues #I65G7Y 在 appinfo 界面执行搜索无反应
网页搜索未切换 stackedWidget

Log: 添加切换 stackedWidget 至 index 0 操作
2022-12-09 12:41:29 +08:00
32350cf519 fix: 多次搜索后页面不显示 2022-12-09 12:26:14 +08:00
c27c922d0b fix: 清除web缓存 2022-12-09 12:23:27 +08:00
6dee04f5e8 update .workflow/dtk-build-commit-20220425.yml.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-09 03:47:22 +00:00
924d8d18a9 update dtk-build-release-tag-20220425.yml 2022-12-09 03:41:27 +00:00
f027a2fa7e !155 版本号
Merge pull request !155 from shenmo/dev
2022-12-09 03:34:32 +00:00
89c4b968f3 版本号
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-09 03:33:40 +00:00
ab36e76032 !154 dev--->master: 3.5正式版
Merge pull request !154 from shenmo/dev
2022-12-09 03:32:27 +00:00
f49db42c3a update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-09 03:27:52 +00:00
58b31f182a !153 搜索从网页加载
Merge pull request !153 from Pluto/dev
2022-12-09 03:25:07 +00:00
fbffe12501 feat:搜索从网页加载 2022-12-08 22:44:34 +08:00
a30c26a7f2 !151 fix: aria2指定dns,指定最大并发下载数
Merge pull request !151 from Pluto/dev
2022-12-08 10:20:40 +00:00
df7b49dbe2 fix: aria2指定dns,指定最大并发下载数 2022-12-08 17:51:18 +08:00
9d93966124 Merge remote-tracking branch 'upstream/dev' into dev 2022-12-08 17:46:20 +08:00
977b2ebdc9 update src/main.cpp.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-04 07:09:26 +00:00
28ed452bb0 * feat: aptss不再尝试安装apt-fast,转而自带
* chore:  删除password-check模块
2022-12-04 15:07:44 +08:00
512d86feac update: 更新aria2下载参数 2022-11-27 12:21:15 +08:00
8e1e0cea7a fix: minor updates 2022-11-26 19:33:20 +08:00
d2214114fb Merge remote-tracking branch 'upstream/dev' into dev 2022-11-26 19:27:41 +08:00
4dbd79a1ac !150 333 正式版
Merge pull request !150 from shenmo/dev
2022-11-26 09:28:40 +00:00
c90232022e update src/main.cpp.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-26 09:27:43 +00:00
84a1554b4b !149 333 feat feat: 首页链接调用浏览器打开
Merge pull request !149 from shenmo/master
2022-11-26 09:27:04 +00:00
71dbf9b958 update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-26 09:22:56 +00:00
9d12086f09 !148 feat: 首页链接调用浏览器打开
Merge pull request !148 from zty199/auto-7392693-master-b04b4cba
2022-11-26 09:20:37 +00:00
zty199
54a55e15a9 feat: 首页链接调用浏览器打开
首页链接调用浏览器打开

Log: 使用自定义 WebEngineView 和 WebEnginePage 替代 QWebEngineView,重写 createWindow 方法,当页面存在新建窗口或标签页动作时调用浏览器打开网址;修改 Widget UI 布局,在 page1 添加 QVBoxLayout,保证 WebEngineView 自动撑满布局,去除 webFoot 填充控件;更新翻译文件,添加“请勿频繁搜索”翻译文案,去除残留翻译
2022-11-26 17:14:48 +08:00
5385e2d1b1 update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-26 08:50:41 +00:00
1e468ba774 fix: 邮件超时 2022-11-26 14:30:00 +08:00
25efce0017 !147 dev--->master:流水线准备优化,先行同步
Merge pull request !147 from shenmo/dev
2022-11-26 02:07:44 +00:00
707a2b5e4c !146 修正一些问题
Merge pull request !146 from Pluto/dev
2022-11-26 02:06:19 +00:00
b9121c13ab feat: 改进搜索动画 2022-11-26 02:20:17 +08:00
9c80179493 feat: 版本号新增编译时间 2022-11-25 22:29:23 +08:00
2a89135d1a fix: 指针未释放 2022-11-25 22:05:29 +08:00
b91e0142f4 bigimage: 对应用信息下的截图预览优化(#I62F4X) 2022-11-22 11:58:09 +08:00
55897e3cb9 update: 更新介绍 2022-11-20 20:23:45 +08:00
f17fcdfe85 feat: 跳转到反馈器 2022-11-20 20:00:14 +08:00
9046a3a965 fix: 只允许一个更新进程 2022-11-18 01:11:20 +08:00
1e72fcb7f2 !145 文案:修复换行
Merge pull request !145 from shenmo/dev
2022-11-17 14:48:33 +00:00
9007bdf3d3 update README.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-17 14:48:13 +00:00
afd926ae4a update README.zh.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-17 14:47:46 +00:00
4949d67852 !144 文案:添加RC入口
Merge pull request !144 from shenmo/dev
2022-11-17 14:46:44 +00:00
5f5d71fbd0 update README.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-17 14:46:16 +00:00
9fd8f64195 update README.zh.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-17 14:45:25 +00:00
c32ffb7cd2 update .workflow/dtk-build-release-tag-20220425.yml.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-10 11:34:28 +00:00
af9217b1dc !143 333t4
Merge pull request !143 from shenmo/dev
2022-11-10 11:30:47 +00:00
93e218dd53 update README.zh.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-10 11:28:20 +00:00
4de32fa8a6 update README.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-10 11:27:19 +00:00
2d59a61796 修改: debian/changelog
修改:     debian/spark-store.postinst
	修改:     src/main.cpp
2022-11-09 20:06:50 +08:00
7abdd90215 文案修改 update tool/update-upgrade/ss-do-upgrade.sh.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-08 13:45:24 +00:00
cbd594e217 !142 333t3
Merge pull request !142 from shenmo/dev
2022-10-28 13:45:08 +00:00
42b6a20c97 fix 菜单中进入更新列表失效 2022-10-28 21:43:57 +08:00
110adc995d 文案修改 2022-10-28 10:20:23 +08:00
cd6d0ac133 cmmit 2022-10-28 10:19:17 +08:00
568e73de07 文案修改 2022-10-28 09:58:17 +08:00
62c8841c50 aptss的download也使用ss-apt-fast 2022-10-28 09:55:48 +08:00
6fd611919b Now use ss-apt-fast as aptss backend 2022-10-28 09:08:21 +08:00
77a84785de !141 333t2
Merge pull request !141 from shenmo/dev
2022-10-27 16:58:38 +00:00
9969f4f2fc just in case有些用户没有找到QQ群.... 2022-10-28 00:57:02 +08:00
833a8ec14b version 2022-10-28 00:52:25 +08:00
dd679f3f26 333t2推仓库 2022-10-28 00:50:31 +08:00
5411a832dc fix:更新和检查更新出错时不报错 2022-10-28 00:48:53 +08:00
0aeadb5526 update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-27 13:14:10 +00:00
91fd97b878 修改文案:检查更新 2022-10-27 10:37:51 +08:00
f2cf344f62 polkit文件 2022-10-26 16:01:55 +08:00
8d84e433a6 zenity 不再以root启动 2022-10-26 15:43:43 +08:00
a6e9dac2f9 没啥用,又加回来了 2022-10-24 09:22:07 +08:00
495ef3292e 更新提示超时时间增加到15 2022-10-24 09:15:04 +08:00
5900b3cdf3 feat:安装时不再需要网络
modify: 为了CI的构建速度,在构建依赖中不再依赖语言工具
2022-10-24 09:12:37 +08:00
31 changed files with 1761 additions and 1203 deletions

View File

@@ -18,7 +18,7 @@ stages:
name: execute_by_docker
displayName: 基于镜像的脚本执行
certificate: ''
image: docker.io/debian:buster-slim
image: docker.io/debian:buster
command:
- sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
- '# 换源'

View File

@@ -14,30 +14,40 @@ stages:
trigger: auto
executor: []
steps:
- step: build@nodejs
name: build_dtk
displayName: DTK构建
nodeVersion: 14.16.0
commands:
- git clone https://gitlink.org.cn/shenmo7192/debian-10-container.git
- mv debian-10-container/Debian-10.tar.xz /mnt
- rm -rf debian-10-container
- WORK_DIR=`pwd`
- cd /mnt/
- tar -xf Debian-10.tar.xz
- cd Debian-10
- wget https://gitee.com/deepin-community-store/repo_auto_update_script/raw/master/spark-build.sh
- chmod +x spark-build.sh
- mkdir build-spark
- cp -r $WORK_DIR build-spark/spark-store
- echo "进入Debian 10环境"
- chroot /mnt/Debian-10 /bin/bash /spark-build.sh
- cd /mnt/Debian-10/build-spark
- step: execute@docker
name: execute_by_docker
displayName: 基于镜像的DTK构建
certificate: ''
image: docker.io/debian:buster
command:
- sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
- '# 换源'
- apt update
- export DEBIAN_FRONTEND=noninteractive
- echo "安装git devscripts equivs curl..."
- 'apt install git devscripts equivs curl -y '
- git clone https://gitlink.org.cn/shenmo7192/dtk-old-bundle.git
- cd dtk-old-bundle
- apt install ./*.deb -y
- cd ..
- rm -rf dtk-old-bundle
- ''
- 'mk-build-deps --install --tool "apt-get -o Debug::pkgProblemResolver=yes -y" '
- ''
- dpkg-buildpackage -b -us -uc
- cd ..
- ls -all
- pwd
- ''
- 'mkdir target '
- for f in $(find . -type f -name "*.deb")
- do
- ' mv $f target'
- done
artifacts:
- name: BUILD_ARTIFACT
path:
- /mnt/Debian-10/build-spark/target
caches: []
- ../target
notify: []
strategy:
retry: '0'

View File

@@ -11,6 +11,9 @@ All packages will be shared in our repository for users to get freely.
Distrobution supportedDeepin 20 ; Ubuntu 22.04 LTS / Ubuntu 20.04 LTS(May stop support in the future ; UniontechOS Home 21
*About OpenKylin and deepin 23*
The adaptation work is scheduled after their official release.
You can track our Issue resoving progress here https://gitee.com/deepin-community-store/spark-store/board
@@ -57,4 +60,14 @@ dpkg-buildpackage
We use Gitee as our code hosting platform. Please click here to contact us.
https://gitee.com/deepin-community-store/spark-store
https://gitee.com/deepin-community-store/spark-store
### Rocket Chat
https://chat.shenmo.tech/
PWA Client
spk://store/chat/store.spark-app.feedback
Copy and paste to search bar or in browser address bar after installing Spark Store

View File

@@ -8,6 +8,10 @@
我们创建了这个应用商店广泛收录大家需要的软件包搜集优质小工具主动适配wine应用存放到储存库供大家获取
我们支持Deepin 20 ; Ubuntu 22.04 LTS / Ubuntu 20.04 LTS(将会逐渐停止支持) ; UOS Home 21
*关于OpenKylin和deepin 23*
支持计划将会在对应系统发布正式版之后开始评估和执行
希望看到这里的人也可以加入我们的队伍开发或者投递应用都很欢迎共同构建Linux应用生态
在这里追踪我们的Issue处理情况 https://gitee.com/deepin-community-store/spark-store/board
@@ -49,4 +53,14 @@ dpkg-buildpackage
## 🚀 协作
非常感谢有兴趣的开发者或爱好者参与 `星火应用商店` 项目,分享你的见解与思路。
非常感谢有兴趣的开发者或爱好者参与 `星火应用商店` 项目,分享你的见解与思路。
### 交流平台
https://chat.shenmo.tech/
客户端PWA
spk://store/chat/store.spark-app.feedback
(安装星火商店后在浏览器打开或复制到搜索栏打开)

78
debian/changelog vendored
View File

@@ -1,3 +1,81 @@
spark-store (3.5.1.1) stable; urgency=medium
* fix: aptss shebang 修复
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.5.1) stable; urgency=medium
* fix: 搜索修复在appinfo界面可以正常搜索
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.5) stable; urgency=medium
* feat: 搜索转为使用网页,提高加载速度和用户体验
* 下载软件时指定DNS,修复移动网络问题
* 准备进入LTS阶段
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.4~test1) stable; urgency=medium
* feat: aptss不再尝试安装apt-fast转而自带
* chore: 删除password-check模块
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.3) stable; urgency=medium
* feat: 首页链接调用浏览器打开
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
0spark-store (3.3.3~test5) stable; urgency=medium
* 修复可能的内存泄漏问题
* 修复应用搜索为空但仍显示上一次搜索结果的问题
* 修复动画加载延后的问题
* 修复统计下载量卡主渲染线程的问题
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.3~test4) stable; urgency=medium
* Enable i386 arch support by default
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.3~test3) stable; urgency=medium
* Now use ss-apt-fast instead of apt-fast
* 修复:右上角 更新和安装设置 菜单中进入更新列表失效
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.3~test2) stable; urgency=medium
* bug fix: 更新和检查更新出错时不报错.此更新需要一个推送
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.3~test1) stable; urgency=medium
* 3.3.3将会是修复大部分bug后的最终版本
* 图形环境中所有root权限的组件剥离到cli(可用于deepin 23 daily只保证商店本体正常运作不处理安装依赖不满足)
* 文案更改:更新检查-->检查更新
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.1~test1) stable; urgency=medium
* 安装时不再需要联网
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.0.4) stable; urgency=medium
* 为减轻服务器压力,不再单独更新某一个应用,而是作为整体更新

View File

@@ -3,6 +3,10 @@
case "$1" in
configure)
# Enable i386 arch
echo "Enable i386 arch..."
dpkg --add-architecture i386
# config for aptss
mkdir -p /etc/aptss/sources.list.d
ln -s -f /etc/apt/sources.list /etc/aptss/sources.list
@@ -30,7 +34,7 @@ case "$1" in
gcc /opt/durapps/spark-store/bin/ss-feedback/sender-d.sh.c -o /opt/durapps/spark-store/bin/ss-feedback/sender-d
# Download and install key
# Install key
mkdir -p /tmp/spark-store-install/
cp -f /opt/durapps/spark-store/bin/spark-store.asc /tmp/spark-store-install/spark-store.asc
gpg --dearmor /tmp/spark-store-install/spark-store.asc
@@ -39,8 +43,8 @@ case "$1" in
# Run apt update to avoid users being fucked up by the non-exist dependency problem
aptss ssupdate
# Now abandoned as aptss now run ssupdate everytime
#aptss ssupdate
# Start upgrade detect service

View File

@@ -24,4 +24,5 @@ function network-check()
}
network-check
#network-check
echo "不再检测网络"

View File

@@ -4,15 +4,15 @@
<policyconfig>
<vendor>Spark Store</vendor>
<icon_name>x-package-repository</icon_name>
<action id="store.spark-app.ss-do-upgrade">
<description>运行ss-do-upgrade需要权限</description>
<message>要使用ss-do-upgrade需要权限</message>
<action id="store.spark-app.ss-do-upgrade-worker">
<description>运行ss-do-upgrade-worker需要权限</description>
<message>要使用ss-do-upgrade-worker需要权限</message>
<defaults>
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
</defaults>
<annotate key="org.freedesktop.policykit.exec.path">/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade.sh</annotate>
<annotate key="org.freedesktop.policykit.exec.path">/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh</annotate>
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
</action>
</policyconfig>

View File

@@ -8,7 +8,6 @@ SUBDIRS += \
third-party/QtNetworkService \
src/spark-store.pro
spark-store.depends = third-party/QtNetworkService
# Update translation files
@@ -36,11 +35,9 @@ desktop.path = /usr/share/applications
service.files += pkg/usr/lib/systemd/system/spark-update-notifier.service
service.path = /usr/lib/systemd/system/
polkit-1.files +=pkg/usr/share/polkit-1/actions/store.spark-app.ss-do-upgrade.policy
polkit-1.files +=pkg/usr/share/polkit-1/actions/store.spark-app.ss-do-upgrade-worker.policy
polkit-1.path = /usr/share/polkit-1/actions/
icon.files += pkg/usr/share/icons/hicolor/scalable/apps/spark-store.svg
icon.path = /usr/share/icons/hicolor/scalable/apps
@@ -52,7 +49,8 @@ INSTALLS += \
qm \
desktop \
icon \
preferences \
# preferences \
# sourceslist \
tmp \
service \
bash_completion \

View File

@@ -7,7 +7,8 @@ big_image::big_image(DBlurEffectWidget *parent) :
DBlurEffectWidget(parent),
m_image(new QLabel)
{
setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint); // 设置图片对话框总在最前
// setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint); // 设置图片对话框总在最前
setWindowModality(Qt::ApplicationModal); // 以上无效不如直接使用 模态化对话框
setRadius(0);
setMaskAlpha(60);
setMaskColor(QColor("#000000"));

View File

@@ -109,6 +109,8 @@ void DownloadController::startDownload(const QString &url)
QStringList command;
QString downloadDir = "/tmp/spark-store/";
QString aria2ConnectionPerServer = "--max-connection-per-server=1";
QString aria2ConnectionMax = "--max-concurrent-downloads=16";
QString aria2DNSCommand = "--async-dns-server=119.29.29.29,223.5.5.5";
if (useMetalink){
command.append(metaUrl.toUtf8());
@@ -130,6 +132,8 @@ void DownloadController::startDownload(const QString &url)
command.append(aria2NoConfig.toUtf8());
command.append(aria2SizePerThreads.toUtf8());
command.append(aria2ConnectionPerServer.toUtf8());
command.append(aria2ConnectionMax.toUtf8());
command.append(aria2DNSCommand.toUtf8());
if (useMetalink){
command.append(aria2NoSeeds.toUtf8());
}
@@ -205,7 +209,12 @@ void DownloadController::startDownload(const QString &url)
* https://en.wikipedia.org/wiki/HD_70642
* HD 70642 is a star with an exoplanetary companion in the southern constellation of Puppis.
*/
system(SenderdPath.toUtf8() + " " + metaUrl.toUtf8() + " " + "HD70642");
QProcess mailProcess;
mailProcess.start(SenderdPath.toUtf8() + " " + metaUrl.toUtf8() + " " + "HD70642");
mailProcess.waitForStarted();
mailProcess.waitForFinished(3);
mailProcess.deleteLater();
emit downloadFinished(); });
}

View File

@@ -4,15 +4,27 @@
#include <DAboutDialog>
#include <QVector>
#include <QScreen>
#include <QDir>
#include <QSettings>
//新增dbus
#include <QDBusInterface>
#include <QDBusPendingCall>
// build time
#include <QDate>
#include <QTime>
#include "widget.h"
DWIDGET_USE_NAMESPACE
int main(int argc, char *argv[])
{
// Get build time
static const QString version = "Version 3.5.1.1";
static const QDate buildDate = QLocale( QLocale::English ).toDate( QString(__DATE__).replace(" ", " 0"), "MMM dd yyyy");
static const QTime buildTime = QTime::fromString(__TIME__, "hh:mm:ss");
DApplication::loadDXcbPlugin(); // 已废弃但是对于非deepin桌面可以正常使用标题栏
DApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // 开启 Hidpi 支持
// 程序内强制添加"-platformtheme deepin"参数喂给Qt让Qt正确使用Deepin主题修复各种奇怪样式问题
@@ -32,12 +44,25 @@ int main(int argc, char *argv[])
a.setAttribute(Qt::AA_UseHighDpiPixmaps);
a.loadTranslator(); // 载入翻译
QSettings readConfig(QDir::homePath() + "/.config/spark-store/config.ini", QSettings::IniFormat);
if (readConfig.value("build/version").toString() != version){
qDebug() << "Spark Store has been updated!";
QSettings *setConfig = new QSettings(QDir::homePath() + "/.config/spark-store/config.ini", QSettings::IniFormat);
setConfig->setValue("build/version", version);
setConfig->setValue("build/time", buildDate.toString("yyyy.MM.dd")+"-"+buildTime.toString());
setConfig->deleteLater();
}
//Customized DAboutDialog
DAboutDialog dialog;
a.setAboutDialog(&dialog);
dialog.setLicense(QObject::tr("We publish this program under GPL V3"));
dialog.setVersion(DApplication::buildVersion("Version 3.3.0.4"));
dialog.setVersion(DApplication::buildVersion(readConfig.value("build/version").toString()+"-"+readConfig.value("build/time").toString()));
dialog.setProductIcon(QIcon::fromTheme("spark-store")); // 设置Logo
dialog.setProductName(QLabel::tr("Spark Store"));
dialog.setDescription(
@@ -58,7 +83,7 @@ int main(int argc, char *argv[])
a.setOrganizationName("spark-union");
a.setOrganizationDomain("https://www.deepinos.org/");
a.setApplicationName("Spark Store"); //不需要翻译,否则 ~/.local/share/ 下文件夹名称也被翻译为中文
a.setApplicationVersion(DApplication::buildVersion("3.3.0.4"));
a.setApplicationVersion(DApplication::buildVersion(readConfig.value("build/version").toString()));
a.setApplicationAcknowledgementPage("https://gitee.com/deepin-community-store/spark-store");
a.setApplicationDescription(
QObject::tr(

View File

@@ -4,11 +4,10 @@
#
#-------------------------------------------------
QT += core gui network concurrent webenginewidgets
QT += core gui network concurrent webenginewidgets dbus
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
QT += dbus
TARGET = spark-store
TEMPLATE = app
@@ -43,7 +42,9 @@ SOURCES += \
progressload.cpp \
widget.cpp \
workerthreads.cpp \
dbus/dbussparkstore.cpp
dbus/dbussparkstore.cpp \
webengine/webenginepage.cpp \
webengine/webengineview.cpp
HEADERS += \
appitem.h \
@@ -55,7 +56,9 @@ HEADERS += \
progressload.h \
widget.h \
workerthreads.h \
dbus/dbussparkstore.h
dbus/dbussparkstore.h \
webengine/webenginepage.h \
webengine/webengineview.h
FORMS += \
appitem.ui \

View File

@@ -0,0 +1,44 @@
#include "webenginepage.h"
#include <QDesktopServices>
WebEnginePage::WebEnginePage(QObject *parent)
: QWebEnginePage(parent)
{
}
WebEnginePage::~WebEnginePage()
{
}
void WebEnginePage::setUrl(const QUrl &url)
{
if (m_currentUrl == url) {
return;
}
m_currentUrl = url;
QWebEnginePage::setUrl(url);
}
QWebEnginePage *WebEnginePage::createWindow(QWebEnginePage::WebWindowType type)
{
Q_UNUSED(type)
WebEnginePage *page = new WebEnginePage(parent());
connect(page, &WebEnginePage::urlChanged, this, &WebEnginePage::slotUrlChanged);
return page;
}
void WebEnginePage::slotUrlChanged(const QUrl &url)
{
if (m_currentUrl == url) {
sender()->deleteLater();
return;
}
qDebug() << Q_FUNC_INFO << m_currentUrl << url;
QDesktopServices::openUrl(url);
sender()->deleteLater();
}

View File

@@ -0,0 +1,26 @@
#ifndef WEBENGINEPAGE_H
#define WEBENGINEPAGE_H
#include <QWebEnginePage>
class WebEnginePage : public QWebEnginePage
{
Q_OBJECT
public:
explicit WebEnginePage(QObject *parent = nullptr);
~WebEnginePage() override;
void setUrl(const QUrl &url);
protected:
QWebEnginePage *createWindow(WebWindowType type) override;
private slots:
void slotUrlChanged(const QUrl &url);
private:
QUrl m_currentUrl;
};
#endif // WEBENGINEPAGE_H

View File

@@ -0,0 +1,10 @@
#include "webengineview.h"
#include "webenginepage.h"
#include <QDesktopServices>
WebEngineView::WebEngineView(QWidget *parent)
: QWebEngineView(parent)
{
setPage(new WebEnginePage(this));
}

View File

@@ -0,0 +1,14 @@
#ifndef WEBENGINEVIEW_H
#define WEBENGINEVIEW_H
#include <QWebEngineView>
class WebEngineView : public QWebEngineView
{
Q_OBJECT
public:
explicit WebEngineView(QWidget *parent = nullptr);
};
#endif // WEBENGINEVIEW_H

View File

@@ -160,7 +160,7 @@ void Widget::initUI()
{
// ui初始化
setMaskAlpha(200);
ui->webfoot->setFixedHeight(0);
// ui->webfoot->setFixedHeight(0);
ui->stackedWidget->setCurrentIndex(0);
ui->listWidget->hide();
ui->label_setting1->hide();
@@ -232,12 +232,12 @@ void Widget::initUI()
});
// 载入自定义字体
int loadedFontID = QFontDatabase::addApplicationFont(":/fonts/fonts/hksnzt.ttf");
QStringList loadedFontFamilies = QFontDatabase::applicationFontFamilies(loadedFontID);
if(!loadedFontFamilies.isEmpty())
{
font = loadedFontFamilies.at(0);
}
// int loadedFontID = QFontDatabase::addApplicationFont(":/fonts/fonts/hksnzt.ttf");
// QStringList loadedFontFamilies = QFontDatabase::applicationFontFamilies(loadedFontID);
// if(!loadedFontFamilies.isEmpty())
// {
// font = loadedFontFamilies.at(0);
// }
/* 全局字体设置
* DApplication::setFont(font);
*/
@@ -349,7 +349,7 @@ void Widget::initConfig()
// web控件初始化
// ui->webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); // 用来激活接受 linkClicked 信号
// ui->webView->page()->settings()->setAttribute(QWebSettings::JavascriptEnabled, true);
ui->webfoot->hide();
// ui->webfoot->hide();
// 初始化首页
// ui->webEngineView->setUrl(menuUrl[0]);
@@ -387,7 +387,7 @@ void Widget::setTheme(bool isDark, QColor color)
// 黑色模式
themeIsDark = true;
ui->webEngineView->setStyleSheet("background-color: #252525;");
ui->webfoot->setStyleSheet("background-color: #252525;");
// ui->webfoot->setStyleSheet("background-color: #252525;");
ui->btn_openDir->setStyleSheet("color: #AFAFAF; background-color: #2C2C2C; border: 0px;");
ui->label->setStyleSheet("background-color: #252525;");
// ui->scrollArea->setStyleSheet("background-color: #2C2C2C;");
@@ -400,7 +400,7 @@ void Widget::setTheme(bool isDark, QColor color)
// 亮色模式
themeIsDark = false;
ui->webEngineView->setStyleSheet("background-color: #FFFFFF;");
ui->webfoot->setStyleSheet("background-color: #FFFFFF;");
// ui->webfoot->setStyleSheet("background-color: #FFFFFF;");
ui->btn_openDir->setStyleSheet("color: #505050; background-color: #F8F8F8; border: 0px;");
ui->label->setStyleSheet("background-color: #FFFFFF;");
// ui->scrollArea->setStyleSheet("background-color: #F8F8F8;");
@@ -638,13 +638,15 @@ void Widget::chooseLeftMenu(int index)
ui->stackedWidget->setCurrentIndex(0);
}
else if (index == 13){
QtConcurrent::run([=]{
auto upgradeP = new QProcess();
upgradeP->startDetached("/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade.sh");
upgradeP->waitForStarted();
upgradeP->waitForFinished(-1);
});
QFile upgradeStatus("/tmp/spark-store/upgradeStatus.txt");
if (!upgradeStatus.exists()){
QtConcurrent::run([=]{
auto upgradeP = new QProcess();
upgradeP->startDetached("/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade.sh");
upgradeP->waitForStarted();
upgradeP->waitForFinished(-1);
});
}
ui->stackedWidget->setCurrentIndex(0);
}
else
@@ -658,11 +660,11 @@ void Widget::setfoot(int h)
foot = h;
}
void Widget::updatefoot()
{
int allh = ui->stackedWidget->height();
ui->webfoot->setFixedHeight(allh - foot);
}
//void Widget::updatefoot()
//{
// int allh = ui->stackedWidget->height();
// ui->webfoot->setFixedHeight(allh - foot);
//}
void Widget::on_pushButton_download_clicked()
{
@@ -743,32 +745,57 @@ void Widget::searchApp(QString text)
// 禁止同时进行多次搜索
if (!mutex.tryLock())
{
qDebug() << "Do not repeat searches";
sendNotification(tr("Do not repeat searches!"));
return;
}
// 关键字搜索处理
httpClient->get("https://search.deepinos.org.cn/appinfo/search")
.header("content-type", "application/json")
.queryParam("keyword", text)
.onResponse([this](QByteArray result)
{
auto json = QJsonDocument::fromJson(result).array();
if (json.empty())
{
qDebug() << "相关应用未找到!";
sendNotification(tr("Relative apps Not Found!"));
mutex.unlock();
return;
}
displaySearchApp(json); })
.onError([this](QString errorStr)
{
qDebug() << "请求出错:" << errorStr;
sendNotification(QString(tr("Request Error: %1")).arg(errorStr));
mutex.unlock();
return; })
.timeout(10 * 1000)
.exec();
//加载动画
// spinner->show();
// spinner->start();
// // 关键字搜索处理
// httpClient->get("https://search.deepinos.org.cn/appinfo/search")
// .header("content-type", "application/json")
// .queryParam("keyword", text)
// .onResponse([this](QByteArray result)
// {
// auto json = QJsonDocument::fromJson(result).array();
// if (json.empty())
// {
// qDebug() << "相关应用未找到!";
// sendNotification(tr("Relative apps Not Found!"));
// mutex.unlock();
// clearSearchApp();
// spinner->stop();
// spinner->hide();
// ui->stackedWidget->setCurrentIndex(0);
// ui->webEngineView->setUrl(QUrl("https://wayou.github.io/t-rex-runner"));
// return;
// }
// clearSearchApp();
// displaySearchApp(json); })
// .onError([this](QString errorStr)
// {
// qDebug() << "请求出错:" << errorStr;
// sendNotification(QString(tr("Request Error: %1")).arg(errorStr));
// mutex.unlock();
// return; })
// .timeout(10 * 1000)
// .exec();
if (!themeIsDark){
ui->webEngineView->setUrl(serverUrl + "store/#/search?keywords=" + text);
}else{
ui->webEngineView->setUrl(serverUrl + "store/#/darksearch?keywords=" + text);
}
ui->stackedWidget->setCurrentIndex(0);
// spinner->stop();
// spinner->hide();
ui->stackedWidget->setCurrentIndex(0);
mutex.unlock();
}
}
@@ -779,9 +806,9 @@ void Widget::closeEvent(QCloseEvent *event)
}
/**
* @brief 展示搜索的APP信息
* @brief 清除搜索的APP信息
*/
void Widget::displaySearchApp(QJsonArray array)
void Widget::clearSearchApp()
{
ui->stackedWidget->setCurrentIndex(4);
@@ -796,13 +823,20 @@ void Widget::displaySearchApp(QJsonArray array)
}
main->removeItem(applist_grid);
spinner->show();
spinner->start();
}
/**
* @brief 展示搜索的APP信息
*/
void Widget::displaySearchApp(QJsonArray array)
{
for(int i = 0; i < array.size(); i++)
{
QJsonObject appInfo = array.at(i).toObject();
AppItem *appItem = new AppItem(this);
appItem->setAttribute(Qt::WA_DeleteOnClose);
QString url = QString("spk://store/%1/%2")
.arg(appInfo["category_slug"].toString())
.arg(appInfo["pkgname"].toString());
@@ -1088,6 +1122,7 @@ void Widget::on_comboBox_server_currentIndexChanged(const QString &arg1)
QSettings *setConfig = new QSettings(QDir::homePath() + "/.config/spark-store/config.ini", QSettings::IniFormat);
setConfig->setValue("server/choose", arg1);
setConfig->setValue("server/updated", updatedInfo);
setConfig->deleteLater();
}
}
@@ -1205,10 +1240,15 @@ void Widget::on_pushButton_clearWebCache_clicked()
{
QtConcurrent::run([=]()
{
QString dataLocal = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
QDir cacheDir(dataLocal );
cacheDir.removeRecursively(); });
qDebug() << dataLocal;
QDir dataDir(dataLocal);
dataDir.removeRecursively();
dataLocal = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
qDebug() << dataLocal;
QDir cacheDir(dataLocal);
cacheDir.removeRecursively();
});
}
quint64 Widget::dirFileSize(const QString &path)
@@ -1384,7 +1424,17 @@ void Widget::on_webEngineView_loadFinished(bool arg1)
void Widget::on_pushButton_update_clicked()
{
QDesktopServices::openUrl(QUrl("https://www.deepinos.org/"));
QString feedbackSpk = "spk://store/chat/store.spark-app.feedback";
QFile actionSubmissionClientStatus("/opt/durapps/store.spark-app.feedback");
if (actionSubmissionClientStatus.exists())
{
qDebug() << "反馈器存在";
QProcess::startDetached("sh /opt/durapps/store.spark-app.feedback/launch.sh");
}
else{
qDebug() << "反馈器不存在,跳转页面";
openUrl(feedbackSpk);
}
}
void Widget::onGetUrl(const QString &url)

View File

@@ -82,6 +82,7 @@ private slots:
void sltAppinfoScreenshot(QPixmap *picture, int index);
void sltAppinfoFinish();
void clearSearchApp(); // 清除搜索的APP信息
void displaySearchApp(QJsonArray array); // 展示搜索的APP信息
void downloadIconsFinished(int arraysize); // 当前搜索列表图标是否下载完成
@@ -130,7 +131,7 @@ private:
void initConfig();
void chooseLeftMenu(int index);
void setfoot(int);
void updatefoot();
// void updatefoot();
void updateUI();
void closeEvent(QCloseEvent *event);

View File

@@ -51,298 +51,6 @@
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="DTitlebar" name="titlebar" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>20</height>
</size>
</property>
</widget>
</item>
<item row="0" column="0" rowspan="4">
<widget class="QWidget" name="widget_menuList" native="true">
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<pointsize>11</pointsize>
</font>
</property>
<property name="accessibleDescription">
<string>background-color:#FFFFFF</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<property name="leftMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>5</number>
</property>
<item row="13" column="0" colspan="6">
<widget class="QPushButton" name="menu_theme">
<property name="text">
<string>Beautify</string>
</property>
</widget>
</item>
<item row="4" column="0" colspan="6">
<widget class="QPushButton" name="menu_chat">
<property name="text">
<string>Chat</string>
</property>
</widget>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer_7">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="3" column="0" colspan="6">
<widget class="QPushButton" name="menu_network">
<property name="text">
<string>Network</string>
</property>
</widget>
</item>
<item row="18" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="8" column="0" colspan="6">
<widget class="QPushButton" name="menu_game">
<property name="text">
<string>Games</string>
</property>
</widget>
</item>
<item row="9" column="0" colspan="6">
<widget class="QPushButton" name="menu_office">
<property name="text">
<string>Office</string>
</property>
</widget>
</item>
<item row="17" column="0" colspan="6">
<widget class="QPushButton" name="menu_download">
<property name="text">
<string>Download</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QPushButton" name="pushButton_refresh">
<property name="maximumSize">
<size>
<width>40</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Reload</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../assets/icons.qrc">
<normaloff>:/icons/icons/refresh-page.svg</normaloff>:/icons/icons/refresh-page.svg</iconset>
</property>
</widget>
</item>
<item row="6" column="0" colspan="6">
<widget class="QPushButton" name="menu_video">
<property name="text">
<string>Video</string>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QPushButton" name="pushButton_return">
<property name="maximumSize">
<size>
<width>40</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Back to category</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../assets/icons.qrc">
<normaloff>:/icons/icons/category_active.svg</normaloff>:/icons/icons/category_active.svg</iconset>
</property>
</widget>
</item>
<item row="12" column="0" colspan="6">
<widget class="QPushButton" name="menu_system">
<property name="text">
<string>Tools</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="6">
<widget class="QPushButton" name="menu_main">
<property name="styleSheet">
<string notr="true">font: 11pt &quot;Zeniq&quot;;</string>
</property>
<property name="text">
<string>Home</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
<item row="10" column="0" colspan="6">
<widget class="QPushButton" name="menu_read">
<property name="text">
<string>Reading</string>
</property>
</widget>
</item>
<item row="14" column="0" colspan="6">
<widget class="QPushButton" name="menu_other">
<property name="text">
<string>Others</string>
</property>
</widget>
</item>
<item row="7" column="0" colspan="6">
<widget class="QPushButton" name="menu_photo">
<property name="text">
<string>Graphics</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="icon">
<property name="minimumSize">
<size>
<width>0</width>
<height>36</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>36</height>
</size>
</property>
<property name="text">
<string>icon</string>
</property>
</widget>
</item>
<item row="0" column="2">
<spacer name="horizontalSpacer_9">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="11" column="0" colspan="6">
<widget class="QPushButton" name="menu_dev">
<property name="text">
<string>Development</string>
</property>
</widget>
</item>
<item row="15" column="0" colspan="6">
<widget class="QWidget" name="line1_widget" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>1</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>4</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color:#808080</string>
</property>
</widget>
</item>
<item row="0" column="5">
<spacer name="horizontalSpacer_8">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>3</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="5" column="0" colspan="6">
<widget class="QPushButton" name="menu_music">
<property name="text">
<string>Music</string>
</property>
</widget>
</item>
<item row="16" column="0" colspan="6">
<widget class="QPushButton" name="menu_upgrade">
<property name="text">
<string>Upgrade</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="1">
<widget class="QStackedWidget" name="stackedWidget">
<property name="styleSheet">
@@ -352,7 +60,7 @@
<number>0</number>
</property>
<property name="currentIndex">
<number>2</number>
<number>0</number>
</property>
<widget class="QWidget" name="page">
<layout class="QVBoxLayout" name="verticalLayout_4">
@@ -372,19 +80,14 @@
<number>0</number>
</property>
<item>
<widget class="QWebEngineView" name="webEngineView">
<property name="contextMenuPolicy">
<enum>Qt::DefaultContextMenu</enum>
<layout class="QVBoxLayout" name="page1MainLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="url">
<url>
<string>about:blank</string>
</url>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="webfoot" native="true"/>
<item>
<widget class="WebEngineView" name="webEngineView" native="true"/>
</item>
</layout>
</item>
</layout>
</widget>
@@ -496,8 +199,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>903</width>
<height>848</height>
<width>889</width>
<height>853</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_17">
@@ -1000,8 +703,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>869</width>
<height>326</height>
<width>851</width>
<height>324</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
@@ -1130,8 +833,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>738</width>
<height>833</height>
<width>743</width>
<height>839</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_23">
@@ -1380,7 +1083,7 @@
<item>
<widget class="QLabel" name="label_5">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;We are &lt;span style=&quot; font-weight:600;&quot;&gt;NOT&lt;/span&gt; the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &amp;quot;Spark Store&amp;quot;! &amp;quot;, is to bring the community together to share useful software, or to participate in development together, so that we all use the latest and greatest software. &lt;/p&gt;&lt;p&gt;We don't make a profit from this, all developers and maintainers don't get paid, and we rely on the community's donations to us for most of our expenses, which we are grateful for and which allow us not to spend too much energy worrying about funding. &lt;/p&gt;&lt;p&gt;Our service and software are free for everyone to use, communicate, and learn, but you must comply with local laws and regulations in the process of your use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &amp;lt;jifengshenmo@outlook.com&amp;gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you'd like to get involved with us too, whether you're involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt;&lt;p&gt;QQ group:872690351&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;We are &lt;span style=&quot; font-weight:600;&quot;&gt;NOT&lt;/span&gt; the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &amp;quot;Spark Store&amp;quot;! &amp;quot;, is to bring the community together to share useful software, or to participate in development together, so that we all use the latest and greatest software. &lt;/p&gt;&lt;p&gt;We don't make a profit from this, all developers and maintainers don't get paid, and we rely on the community's donations to us for most of our expenses, which we are grateful for and which allow us not to spend too much energy worrying about funding. &lt;/p&gt;&lt;p&gt;Our service and software are free for everyone to use, communicate, and learn, but you must comply with local laws and regulations in the process of your use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &amp;lt;jifengshenmo@outlook.com&amp;gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you'd like to get involved with us too, whether you're involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt;&lt;p&gt;Connect us on Spark IM: https://chat.shenmo.tech&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
@@ -1453,14 +1156,301 @@
</widget>
</widget>
</item>
<item row="0" column="0" rowspan="4">
<widget class="QWidget" name="widget_menuList" native="true">
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<pointsize>11</pointsize>
</font>
</property>
<property name="accessibleDescription">
<string>background-color:#FFFFFF</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<property name="leftMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>5</number>
</property>
<item row="13" column="0" colspan="6">
<widget class="QPushButton" name="menu_theme">
<property name="text">
<string>Beautify</string>
</property>
</widget>
</item>
<item row="4" column="0" colspan="6">
<widget class="QPushButton" name="menu_chat">
<property name="text">
<string>Chat</string>
</property>
</widget>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer_7">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="3" column="0" colspan="6">
<widget class="QPushButton" name="menu_network">
<property name="text">
<string>Network</string>
</property>
</widget>
</item>
<item row="18" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="8" column="0" colspan="6">
<widget class="QPushButton" name="menu_game">
<property name="text">
<string>Games</string>
</property>
</widget>
</item>
<item row="9" column="0" colspan="6">
<widget class="QPushButton" name="menu_office">
<property name="text">
<string>Office</string>
</property>
</widget>
</item>
<item row="17" column="0" colspan="6">
<widget class="QPushButton" name="menu_download">
<property name="text">
<string>Download</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QPushButton" name="pushButton_refresh">
<property name="maximumSize">
<size>
<width>40</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Reload</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../assets/icons.qrc">
<normaloff>:/icons/icons/refresh-page.svg</normaloff>:/icons/icons/refresh-page.svg</iconset>
</property>
</widget>
</item>
<item row="6" column="0" colspan="6">
<widget class="QPushButton" name="menu_video">
<property name="text">
<string>Video</string>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QPushButton" name="pushButton_return">
<property name="maximumSize">
<size>
<width>40</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Back to category</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../assets/icons.qrc">
<normaloff>:/icons/icons/category_active.svg</normaloff>:/icons/icons/category_active.svg</iconset>
</property>
</widget>
</item>
<item row="12" column="0" colspan="6">
<widget class="QPushButton" name="menu_system">
<property name="text">
<string>Tools</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="6">
<widget class="QPushButton" name="menu_main">
<property name="styleSheet">
<string notr="true">font: 11pt &quot;Zeniq&quot;;</string>
</property>
<property name="text">
<string>Home</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
<item row="10" column="0" colspan="6">
<widget class="QPushButton" name="menu_read">
<property name="text">
<string>Reading</string>
</property>
</widget>
</item>
<item row="14" column="0" colspan="6">
<widget class="QPushButton" name="menu_other">
<property name="text">
<string>Others</string>
</property>
</widget>
</item>
<item row="7" column="0" colspan="6">
<widget class="QPushButton" name="menu_photo">
<property name="text">
<string>Graphics</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="icon">
<property name="minimumSize">
<size>
<width>0</width>
<height>36</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>36</height>
</size>
</property>
<property name="text">
<string>icon</string>
</property>
</widget>
</item>
<item row="0" column="2">
<spacer name="horizontalSpacer_9">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="11" column="0" colspan="6">
<widget class="QPushButton" name="menu_dev">
<property name="text">
<string>Development</string>
</property>
</widget>
</item>
<item row="15" column="0" colspan="6">
<widget class="QWidget" name="line1_widget" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>1</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>4</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color:#808080</string>
</property>
</widget>
</item>
<item row="0" column="5">
<spacer name="horizontalSpacer_8">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>3</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="5" column="0" colspan="6">
<widget class="QPushButton" name="menu_music">
<property name="text">
<string>Music</string>
</property>
</widget>
</item>
<item row="16" column="0" colspan="6">
<widget class="QPushButton" name="menu_upgrade">
<property name="text">
<string>Upgrade</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="1">
<widget class="DTitlebar" name="titlebar" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>20</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>QWebEngineView</class>
<extends>QWidget</extends>
<header location="global">QtWebEngineWidgets/QWebEngineView</header>
</customwidget>
<customwidget>
<class>image_show</class>
<extends>QWidget</extends>
@@ -1479,6 +1469,12 @@
<header location="global">progressload.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>WebEngineView</class>
<extends>QWidget</extends>
<header location="global">webengine/webengineview.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources>
<include location="../assets/icons.qrc"/>

646
tool/apt-fast/ss-apt-fast Executable file
View File

@@ -0,0 +1,646 @@
#!/bin/bash
#
# apt-fast v1.9
# Use this just like aptitude or apt-get for faster package downloading.
#
# Copyright: 2008-2012 Matt Parnell, http://www.mattparnell.com
# Improvements, maintenance, revisions - 2012, 2017-2018 Dominique Lasserre
#
# You may distribute this file under the terms of the GNU General
# Public License as published by the Free Software Foundation; either
# version 3 of the License, or (at your option) any later version.
#
[ -n "$DEBUG" ] && set -xv
# Print colored messages.
# Usage: msg "message text" "message type" "optional: err"
# Message types are 'normal', 'hint' or 'warning'. Warnings and messages with a
# third argument are piped to stderr.
msg(){
msg_options=()
case "$2" in
normal) beginColor="$cGreen";;
hint) beginColor="$cBlue";;
warning) beginColor="$cRed";;
question) beginColor="$cRed"; msg_options=(-n);;
*) beginColor= ;;
esac
if [ -z "$3" ] && [ "$2" != "warning" ]; then
echo -e "${msg_options[@]}" "${aptfast_prefix}${beginColor}$1${endColor}"
else
echo -e "${msg_options[@]}" "${aptfast_prefix}${beginColor}$1${endColor}" >&2
fi
}
# Search for known options and decide if root privileges are needed.
root=1 # default value: we need root privileges
option=
for argument in "$@"; do
case "$argument" in
upgrade | full-upgrade | install | dist-upgrade | build-dep)
option="install"
;;
clean | autoclean)
option="clean"
;;
download)
option="download"
root=0
;;
source)
option="source"
root=0
;;
changelog)
root=0
;;
esac
done
# To handle priority of options correctly (environment over config file vars)
# we need to preserve all interesting env variables. As this wouldn't be
# difficult enough we have to preserve complete env vars (especially if value
# ist set (even empty) or not) when changing context (sudo)...
# Set a 'random' string to all unset variables.
TMP_RANDOM="13979853562951413"
TMP_LCK_FILE="${LCK_FILE-${TMP_RANDOM}}"
TMP_DOWNLOADBEFORE="${DOWNLOADBEFORE-${TMP_RANDOM}}"
TMP__APTMGR="${_APTMGR-${TMP_RANDOM}}"
TMP_APTCACHE="${APTCACHE-${TMP_RANDOM}}"
TMP_DLDIR="${DLDIR-${TMP_RANDOM}}"
TMP_DLLIST="${DLLIST-${TMP_RANDOM}}"
TMP_LISTDIR="${LISTDIR-${TMP_RANDOM}}"
TMP__MAXNUM="${MAXNUM-${TMP_RANDOM}}"
TMP__MAXCONPERSRV="${MAXCONPERSRV-${TMP_RANDOM}}"
TMP__SPLITCON="${SPLITCON-${TMP_RANDOM}}"
TMP__MINSPLITSZ=${MINSPLITSZ-${TMP_RANDOM}}
TMP__PIECEALGO=${PIECEALGO-${TMP_RANDOM}}
TMP_aptfast_prefix="${aptfast_prefix-${TMP_RANDOM}}"
TMP_APT_FAST_TIMEOUT="${APT_FAST_TIMEOUT-${TMP_RANDOM}}"
TMP_VERBOSE_OUTPUT="${VERBOSE_OUTPUT-${TMP_RANDOM}}"
TMP_ftp_proxy="${ftp_proxy-${TMP_RANDOM}}"
TMP_http_proxy="${http_proxy-${TMP_RANDOM}}"
TMP_https_proxy="${https_proxy-${TMP_RANDOM}}"
# Check for proper privileges.
# Call explicitly with environment variables to get them into root conext.
if [ "$root" = 1 ] && [ "$UID" != 0 ]; then
exec sudo DEBUG="$DEBUG" \
LCK_FILE="$TMP_LCK_FILE" \
DOWNLOADBEFORE="$TMP_DOWNLOADBEFORE" \
_APTMGR="$TMP__APTMGR" \
APTCACHE="$TMP_APTCACHE" \
DLDIR="$TMP_DLDIR" \
DLLIST="$TMP_DLLIST" \
LISTDIR="$TMP_LISTDIR" \
_MAXNUM="$TMP__MAXNUM" \
_MAXCONPERSRV="$TMP__MAXCONPERSRV" \
_SPLITCON="$TMP__SPLITCON" \
_MINSPLITSZ="$TMP__MINSPLITSZ" \
_PIECEALGO="$TMP__PIECEALGO" \
aptfast_prefix="$TMP_aptfast_prefix" \
APT_FAST_TIMEOUT="$TMP_APT_FAST_TIMEOUT" \
VERBOSE_OUTPUT="$TMP_VERBOSE_OUTPUT" \
ftp_proxy="$TMP_ftp_proxy" \
http_proxy="$TMP_http_proxy" \
https_proxy="$TMP_https_proxy" \
"$0" "$@"
fi
# Define lockfile.
# Use /tmp as directory because everybody (not only root) has to have write
# permissions.
# We need lock for non-root commands too, because we only have one download
# list file.
LCK_FILE="/tmp/apt-fast"
LCK_FD=99
# Set default package manager, APT cache, temporary download dir,
# temporary download list file, and maximal parallel downloads
_APTMGR=apt-get
eval "$(apt-config shell APTCACHE Dir::Cache::archives/d)"
# 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)"
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)"
else
eval "$(apt-config shell DLDIR Dir::Cache::archives::apt-fast-partial/d)"
fi
# Currently not needed.
eval "$(apt-config shell LISTDIR Dir::State::lists/d)"
DLLIST="/tmp/apt-fast.list"
_MAXNUM=5
_MAXCONPERSRV=10
_SPLITCON=8
_MINSPLITSZ="1M"
_PIECEALGO="default"
# Prefix in front of apt-fast output:
aptfast_prefix=
# aptfast_prefix="$(date '+%b %_d %T.%N') apt-fast: "
# Set color variables.
cGreen='\e[0;32m'
cRed='\e[0;31m'
cBlue='\e[0;34m'
endColor='\e[0m'
# Set timout value for apt-fast download confirmation dialog.
# Value is in seconds.
APT_FAST_TIMEOUT=60
# Ask for download confirmation if unset
DOWNLOADBEFORE=
# Formatted package list in download confirmation if unset
VERBOSE_OUTPUT=
# Download command.
_DOWNLOADER='aria2c --no-conf -c -j ${_MAXNUM} -x ${_MAXCONPERSRV} -s ${_SPLITCON} -i ${DLLIST} --min-split-size=${_MINSPLITSZ} --stream-piece-selector=${_PIECEALGO} --connect-timeout=600 --timeout=600 -m0'
# Load config file.
CONFFILE="/etc/apt-fast.conf"
if [ -e "$CONFFILE" ]; then
source "$CONFFILE"
fi
# no proxy as default
ftp_proxy=
http_proxy=
https_proxy=
# Now overwrite with preserved values if values were set before (compare with
# 'random' string).
[ "$TMP_LCK_FILE" = "$TMP_RANDOM" ] || LCK_FILE="$TMP_LCK_FILE"
[ "$TMP_DOWNLOADBEFORE" = "$TMP_RANDOM" ] || DOWNLOADBEFORE="$TMP_DOWNLOADBEFORE"
[ "$TMP__APTMGR" = "$TMP_RANDOM" ] || _APTMGR="$TMP__APTMGR"
[ "$TMP_APTCACHE" = "$TMP_RANDOM" ] || APTCACHE="$TMP_APTCACHE"
[ "$TMP_DLDIR" = "$TMP_RANDOM" ] || DLDIR="$TMP_DLDIR"
[ "$TMP_DLLIST" = "$TMP_RANDOM" ] || DLLIST="$TMP_DLLIST"
[ "$TMP_LISTDIR" = "$TMP_RANDOM" ] || LISTDIR="$TMP_LISTDIR"
[ "$TMP__MAXNUM" = "$TMP_RANDOM" ] || _MAXNUM="$TMP__MAXNUM"
[ "$TMP__MAXCONPERSRV" = "$TMP_RANDOM" ] || _MAXCONPERSRV="$TMP__MAXCONPERSRV"
[ "$TMP__SPLITCON" = "$TMP_RANDOM" ] || _SPLITCON="$TMP__SPLITCON"
[ "$TMP__MINSPLITSZ" = "$TMP_RANDOM" ] || _MINSPLITSZ="$TMP__MINSPLITSZ"
[ "$TMP__PIECEALGO" = "$TMP_RANDOM" ] || _PIECEALGO="$TMP__PIECEALGO"
[ "$TMP_aptfast_prefix" = "$TMP_RANDOM" ] || aptfast_prefix="$TMP_aptfast_prefix"
[ "$TMP_APT_FAST_TIMEOUT" = "$TMP_RANDOM" ] || APT_FAST_TIMEOUT="$TMP_APT_FAST_TIMEOUT"
[ "$TMP_VERBOSE_OUTPUT" = "$TMP_RANDOM" ] || VERBOSE_OUTPUT="$TMP_VERBOSE_OUTPUT"
[ "$TMP_ftp_proxy" = "$TMP_RANDOM" ] || ftp_proxy="$TMP_ftp_proxy"
[ "$TMP_http_proxy" = "$TMP_RANDOM" ] || http_proxy="$TMP_http_proxy"
[ "$TMP_https_proxy" = "$TMP_RANDOM" ] || https_proxy="$TMP_https_proxy"
# Disable colors if not executed in terminal.
if [ ! -t 1 ]; then
cGreen=
cRed=
cBlue=
endColor=
#FIXME: Time not updated.
[ -z "$aptfast_prefix" ] && aptfast_prefix="[apt-fast $(date +"%T")]"
fi
msg_already_running()
{
msg "apt-fast already running!" "warning"
msg "Verify that all apt-fast processes are finished then remove $LCK_FILE.lock and try again." "hint"
}
# Check if a lock file exists.
if [ -f "$LCK_FILE.lock" ]; then
msg_already_running
exit 1
fi
# create the lock file and lock it, die on failure
_create_lock()
{
eval "exec $LCK_FD>\"$LCK_FILE.lock\""
trap "cleanup_aptfast; exit_cleanup_state" EXIT
trap "cleanup_aptfast; exit 1" INT TERM
flock -n $LCK_FD || { msg_already_running; exit 1; }
}
# unlock and remove the lock file
_remove_lock()
{
flock -u "$LCK_FD" 2>/dev/null
rm -f "$LCK_FILE.lock"
}
# Move download file away so missing permissions won't stop usage.
CLEANUP_STATE=0
cleanup_dllist()
{
if [ -f "$DLLIST" ]
then
if ! mv -- "$DLLIST{,.old}" 2>/dev/null
then
if ! rm -f -- "$DLLIST" 2>/dev/null
then
msg "Could not clean up download list file." "warning"
CLEANUP_STATE=1
fi
fi
fi
}
cleanup_aptfast()
{
[ "$CLEANUP_STATE" -eq 0 ] && CLEANUP_STATE=$?
cleanup_dllist
_remove_lock
}
exit_cleanup_state()
{
exit $CLEANUP_STATE
}
# decode url string
# translates %xx but must not convert '+' in spaces
urldecode()
{
printf '%b' "${1//%/\\x}"
}
# Check if mirrors are available. And if so add all mirrors to download list.
get_mirrors(){
# Check all mirror lists.
for mirrorstr in "${MIRRORS[@]}"; do
# Build mirrors array from comma separated string.
IFS=", " read -r -a mirrors <<< "$mirrorstr"
# Check for all mirrors if URI of $1 is from mirror. If so add all other
# mirrors to (resmirror) list and break all loops.
for mirror in "${mirrors[@]}"; do
# Real expension.
if [[ "$1" == "$mirror"* ]]; then
filepath=${1#${mirror}}
# Build list for aria download list.
list="${mirrors[*]}"
echo -e "${list// /${filepath}\\t}$filepath\n"
return 0
fi
done
done
# No other mirrors found.
echo "$1"
}
# Globals to save package name, version, size and overall size.
DOWNLOAD_DISPLAY=
DOWNLOAD_SIZE=0
# Get the package URLs.
get_uris(){
if [ ! -d "$(dirname "$DLLIST")" ]
then
if ! mkdir -p -- "$(dirname "$DLLIST")"
then
msg "Could not create download file directory." "warning"
exit 1
fi
elif [ -f "$DLLIST" ]; then
if ! rm -f -- "$DLLIST" 2>/dev/null && ! touch -- "$DLLIST" 2>/dev/null
then
msg "Unable to write to download file. Try restarting with root permissions or run 'apt-fast clean' first." "warning"
exit 1
fi
fi
# Add header to overwrite file.
echo "# apt-fast mirror list: $(date)" > "$DLLIST"
#NOTE: aptitude doesn't have this functionality, so we use apt-get to get
# package URIs.
case "$_APTMGR" in
apt|apt-get) uri_mgr=$_APTMGR;;
*) uri_mgr=apt-get;;
esac
uris_full="$("$uri_mgr" "${APT_SCRIPT_WARNING[@]}" -y --print-uris "$@")"
uris_full_ret="$?"
if [ "$uris_full_ret" -ne 0 ]
then
msg "Package manager quit with exit code." "warning"
exit "$uris_full_ret"
fi
while read -r pkg_uri_info
do
[ -z "$pkg_uri_info" ] && continue
## --print-uris format is:
# 'fileurl' filename filesize checksum_hint:filechecksum
uri="$(echo "$pkg_uri_info" | cut -d' ' -f1 | tr -d "'")"
filename="$(echo "$pkg_uri_info" | cut -d' ' -f2)"
filesize="$(echo "$pkg_uri_info" | cut -d' ' -f3)"
checksum_string="$(echo "$pkg_uri_info" | cut -d' ' -f4)"
hash_algo="$(echo "$checksum_string" | cut -d':' -f1)"
checksum="$(echo "$checksum_string" | cut -d':' -f2)"
filename_decoded="$(urldecode "$filename")"
DOWNLOAD_DISPLAY="${DOWNLOAD_DISPLAY}$(echo "$filename_decoded" | cut -d'_' -f1)"
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))
## whole uri comes encoded (urlencoded). Filename must NOT be decoded because
# plain aptitude do not decode it when download and install it. Therefore, we
# will have ugly named packages at /var/cache/apt/archives but is the standard
# behavior.
# But package version must be decoded, otherways package=version calls will
# not work.
if [ -n "$HASH_SUPPORTED" ]; then
case "$hash_algo" in
SHA512) [ -z "$SHA512_SUPPORTED" ] && hash_algo= || hash_algo=sha-512 ;;
SHA256) [ -z "$SHA256_SUPPORTED" ] && hash_algo= || hash_algo=sha-256 ;;
SHA1) [ -z "$SHA1_SUPPORTED" ] && hash_algo= || hash_algo=sha-1 ;;
MD5Sum) [ -z "$MD5sum_SUPPORTED" ] && hash_algo= || hash_algo=md5 ;;
*) hash_algo=
esac
# Using apt-cache show package=version to ensure recover single and
# correct package version.
# Warning: assuming that package naming uses '_' as field separator.
# Therefore, this code expects package-name_version_arch.deb Otherways
# below code will fail resoundingly
if [ -z "$hash_algo" ]; then
pkg_name="$(echo "$filename" | cut -d'_' -f1)"
pkg_version="$(echo "$filename" | cut -d'_' -f2)"
pkg_version="$(urldecode "$pkg_version")"
package_info="$(apt-cache show "$pkg_name=$pkg_version")"
patch_checksum=
if [ -n "$SHA512_SUPPORTED" ]; then
patch_checksum="$(echo "$package_info" | grep SHA512 | head -n 1)"
[ -n "$patch_checksum" ] && hash_algo="sha-512"
fi
if [ -z "$patch_checksum" ] && [ -n "$SHA256_SUPPORTED" ]; then
patch_checksum="$(echo "$package_info" | grep SHA256 | head -n 1)"
[ -n "$patch_checksum" ] && hash_algo="sha-256"
fi
if [ -z "$patch_checksum" ] && [ -n "$SHA1_SUPPORTED" ]; then
patch_checksum="$(echo "$package_info" | grep SHA1 | head -n 1)"
[ -n "$patch_checksum" ] && hash_algo="sha-1"
fi
if [ -z "$patch_checksum" ] && [ -n "$MD5sum_SUPPORTED" ]; then
patch_checksum="$(echo "$package_info" | grep MD5sum | head -n 1)"
[ -n "$patch_checksum" ] && hash_algo="md5"
fi
if [ -n "$patch_checksum" ]; then
checksum="$(echo "$patch_checksum" | cut -d' ' -f2)"
else
msg "Couldn't get supported checksum for $pkg_name ($pkg_version)." "warning"
REMOVE_WORKING_MESSAGE=
fi
fi
else
hash_algo=
fi
{
get_mirrors "$uri"
#echo " dir=$DLDIR"
if [ -n "$hash_algo" ]; then
echo " checksum=$hash_algo=$checksum"
fi
echo " out=$filename"
} >> "$DLLIST"
done <<<"$(echo "$uris_full" | grep -E "^'(http(s|)|(s|)ftp)://")"
#cat "$DLLIST"
#LCK_RM
#exit
}
display_downloadfile(){
if [ -n "$VERBOSE_OUTPUT" ]; then
cat "$DLLIST"
else
DISPLAY_SORT_OPTIONS=(-k 1,1)
# Sort output after package download size (decreasing):
#DISPLAY_SORT_OPTIONS=(-k 3,3 -hr)
while read -r line; do
[ -z "$line" ] && 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"
done <<<"$(echo -e "$DOWNLOAD_DISPLAY" | sort "${DISPLAY_SORT_OPTIONS[@]}")"
fi
msg "Download size: $(echo "$DOWNLOAD_SIZE" | numfmt --to=iec-i --suffix=B)" "normal"
}
# Create and insert a PID number to lockfile.
_create_lock
# Make sure aria2c (in general first parameter from _DOWNLOADER) is available.
CMD="$(echo "$_DOWNLOADER" | sed 's/^\s*\([^ ]\+\).*$/\1/')"
if [ ! "$(command -v "$CMD")" ]; then
msg "Command not found: $CMD" "normal" "err"
msg "You must configure $CONFFILE to use aria2c or another supported download manager" "normal" "err"
exit 1
fi
# Make sure package manager is available.
if [ ! "$(command -v "$_APTMGR")" ]; then
msg "\`$_APTMGR\` command not available." "warning"
msg "You must configure $CONFFILE to use either apt-get or aptitude." "normal" "err"
exit 1
fi
# Disable script warning if apt is used.
APT_SCRIPT_WARNING=()
if [ "$_APTMGR" == "apt" ]; then
APT_SCRIPT_WARNING=(-o "Apt::Cmd::Disable-Script-Warning=true")
fi
# Set supported hash algorithms by aria2c (and also by Debian repository).
SHA512_SUPPORTED=
SHA256_SUPPORTED=
SHA1_SUPPORTED=
MD5sum_SUPPORTED=
HASH_SUPPORTED=
if [ "$CMD" == "aria2c" ]; then
for supported_hash in $(LC_ALL=C aria2c -v | sed '/^Hash Algorithms:/!d; s/\(^Hash Algorithms: \|,\)\+//g'); do
case "$supported_hash" in
sha-512) SHA512_SUPPORTED=y; HASH_SUPPORTED=y ;;
sha-256) SHA256_SUPPORTED=y; HASH_SUPPORTED=y ;;
sha-1) SHA1_SUPPORTED=y; HASH_SUPPORTED=y ;;
md5) MD5sum_SUPPORTED=y; HASH_SUPPORTED=y ;;
esac
done
if [ -z "$HASH_SUPPORTED" ]; then
msg "Couldn't find supported checksum algorithm from aria2c. Checksums disabled." "warning"
fi
fi
# Check if "assume yes" switch is enabled and if yes enable $DOWNLOADBEFORE.
# Also check if "download only" switch is enabled.
#TODO: Get real value over APT items APT::Get::Assume-Yes and
# APT::Get::Assume-No .
# Respectively Aptitude::CmdLine::Download-Only and APT::Get::Download-Only.
DOWNLOAD_ONLY=
while true; do
while getopts ":dy-:" optchar; do
case "${optchar}" in
-)
case "${OPTARG}" in
yes | assume-yes) DOWNLOADBEFORE=true ;;
assume-no) DOWNLOADBEFORE= ;;
download-only) DOWNLOAD_ONLY=true ;;
esac
;;
y)
DOWNLOADBEFORE=true
;;
d)
DOWNLOAD_ONLY=true
;;
esac
done
((OPTIND++))
[ $OPTIND -gt $# ] && break
done
# Configure proxies. Use apt values over environment variables.
# Note: If proxy setting is not set, there is no apt-config output.
# Therefore variable doesn't get overriden, which is intended.
# Export the variables to make them available in subshells (aka the
# downloader command).
eval "$(apt-config shell ftp_proxy Acquire::ftp::proxy)"
export ftp_proxy
eval "$(apt-config shell http_proxy Acquire::http::proxy)"
export http_proxy
eval "$(apt-config shell https_proxy Acquire::https::proxy)"
export https_proxy
# aria2 has no socks support (see https://github.com/aria2/aria2/issues/153)
if echo "$http_proxy" | grep -q "^socks5h://" || echo "$https_proxy" | grep -q "^socks5h://"; then
msg "Socks proxy detected. Falling back to ${_APTMGR}" "hint"
"${_APTMGR}" "${APT_SCRIPT_WARNING[@]}" "$@"
exit 0
fi
# Run actions.
if [ "$option" == "install" ]; then
msg
msg "Working... this may take a while." "normal"
REMOVE_WORKING_MESSAGE=y
get_uris "$@"
[ -t 1 ] && [ -n "$REMOVE_WORKING_MESSAGE" ] && tput cuu 1 && tput el && tput cuu 1
# Test /tmp/apt-fast.list file exists and not just the apt-fast comment line.
# Then download all files from the list.
if [ -f "$DLLIST" ] && [ "$(wc -l "$DLLIST" | cut -d' ' -f1)" -gt 1 ] && [ ! "$DOWNLOADBEFORE" ]; then
display_downloadfile
msg
msg "Do you want to download the packages? [Y/n] " "question"
while ((!updsys)); do
read -r -sn1 -t "$APT_FAST_TIMEOUT" answer || { msg; msg "Timed out." "warning"; exit 1; }
case "$answer" in
[JjYy]) result=1; updsys=1 ;;
[Nn]) result=0; updsys=1 ;;
"") result=1; updsys=1 ;;
*) updsys=0 ;;
esac
done
else
result=1
fi
if ((DOWNLOAD_SIZE)); then
msg
# Continue if answer was right or DOWNLOADBEFORE is enabled.
if ((result)); then
if [ -s "$DLLIST" ]; then
# Test if apt-fast directory is present where we put packages.
if [ ! -d "$DLDIR" ]; then
mkdir -p -- "$DLDIR"
fi
cd "$DLDIR" &>/dev/null || exit 1
eval "${_DOWNLOADER}" # execute downloadhelper command
if [ "$(find "$DLDIR" -printf . | wc -c)" -gt 1 ]; then
# Move all packages to the apt install directory by force to ensure
# already existing debs which may be incomplete are replaced
find . -type f -name "*.deb" -execdir mv -ft "$APTCACHE" {} \+
fi
cd - &>/dev/null || msg "Failed to change back directory" "warning"
fi
else
exit 1
fi
else
[ -t 1 ] && tput el
fi
if [ -z "$DOWNLOAD_ONLY" ] || [ "$_APTMGR" == "aptitude" ]; then
"${_APTMGR}" "${APT_SCRIPT_WARNING[@]}" "$@"
fi
elif [ "$option" == "clean" ]; then
"${_APTMGR}" "${APT_SCRIPT_WARNING[@]}" "$@" && {
find "$DLDIR" -maxdepth 1 -type f -delete
CLEANUP_STATE="$?"
[ -f "$DLLIST" ] && rm -f -- "$DLLIST"* || true
}
elif [ "$option" == "download" ]; then
msg
msg "Working... this may take a while." "normal"
REMOVE_WORKING_MESSAGE=y
get_uris "$@"
[ -t 1 ] && [ -n "$REMOVE_WORKING_MESSAGE" ] && tput cuu 1 && tput el && tput cuu 1
if [ -f "$DLLIST" ] && [ "$(wc -l "$DLLIST" | cut -d' ' -f1)" -gt 1 ]; then
display_downloadfile
eval "${_DOWNLOADER}"
fi
if [ "$_APTMGR" == "aptitude" ]; then
"${_APTMGR}" "$@"
fi
elif [ "$option" == "source" ]; then
msg
msg "Working... this may take a while." "normal"
REMOVE_WORKING_MESSAGE=y
get_uris "$@"
[ -t 1 ] && [ -n "$REMOVE_WORKING_MESSAGE" ] && tput cuu 1 && tput el && tput cuu 1
if [ -f "$DLLIST" ] && [ "$(wc -l "$DLLIST" | cut -d' ' -f1)" -gt 1 ]; then
display_downloadfile
eval "${_DOWNLOADER}"
fi
# We use APT manager here to provide more verbose output. This method is
# slightly slower then extractiong packages manually after download but also
# more hardened (e.g. some options like --compile are available).
"${_APTMGR}" "${APT_SCRIPT_WARNING[@]}" "$@"
# Uncomment following snippet to extract source directly and comment
# both lines before.
#while read srcfile; do
# # extract only .dsc files
# echo "$srcfile" | grep -q '\.dsc$' || continue
# dpkg-source -x "$(basename "$srcfile")"
#done < "$DLLIST"
# Execute package manager directly if unknown options are passed.
else
"${_APTMGR}" "${APT_SCRIPT_WARNING[@]}" "$@"
fi
# After error or all done remove our lockfile (done with EXIT trap)

View File

@@ -1,4 +1,8 @@
#/bin/bash
#!/bin/bash
apt-fast(){
/opt/durapps/spark-store/bin/apt-fast/ss-apt-fast "$@"
}
if [ ! -e "/tmp/aptss-conf/apt-fast.conf" ];then
###刷新apt-fast配置
@@ -14,17 +18,8 @@ fi
if [ "$1" = "install" ] || [ "$1" = "upgrade" ] || [ "$1" = "full-upgrade" ] ; then
DEPEND=`which apt-fast`
if [ "$DEPEND" = "" ] ; then
echo "未安装依赖apt-fast 开始安装"
aptss ssupdate && bwrap --dev-bind / / --bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list apt install apt-fast -y
fi
sudo bwrap --dev-bind / / --bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list apt update -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
@@ -36,11 +31,6 @@ bwrap --dev-bind / / \
elif [ "$1" = "download" ];then
DEPEND=`which apt-fast`
if [ "$DEPEND" = "" ] ; then
echo "未安装依赖apt-fast 开始安装"
aptss ssupdate && bwrap --dev-bind / / --bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list apt install apt-fast -y
fi
###执行
bwrap --dev-bind / / \
@@ -64,11 +54,10 @@ mkdir -p /tmp/aptss-conf/
echo "从服务器获取配置和镜像列表..."
echo "Getting server and mirror lists..."
echo
curl --progress-bar -o /tmp/aptss-conf/apt-fast.conf "https://gitee.com/deepin-community-store/repo_auto_update_script/raw/master/mirror-list-for-apt-fast/apt-fast.conf"
curl --silent -o /tmp/aptss-conf/apt-fast.conf "https://gitee.com/deepin-community-store/repo_auto_update_script/raw/master/mirror-list-for-apt-fast/apt-fast.conf"
chmod -R 755 /tmp/aptss-conf
sudo curl --progress-bar -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://gitee.com/deepin-community-store/repo_auto_update_script/raw/master/mirror-list-for-apt-fast/sources.list.d/sparkstore.list"
### 额外一份拿来给aptss自动补全用
sudo curl --silent -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://gitee.com/deepin-community-store/repo_auto_update_script/raw/master/mirror-list-for-apt-fast/sources.list.d/sparkstore.list"
sudo bwrap --dev-bind / / --bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list apt update -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
#只更新星火源

View File

@@ -1,17 +0,0 @@
#!/bin/bash
uname=`whoami`
echo "Now input the password of $uname"
read upass
passcheck=`echo "$upass" | sudo -S echo "i love amber forever"`
passcheck=`echo "$upass" | sudo -S echo "i love amber forever"`
reset
###UOS魔改的sudo返回了验证成功干扰判断会变成验证成功i love amber forever
### 听我说谢谢你,因为有你,温暖了四季
###fuck♂you 就不能改的不那么坑爹吗???还是我用来捕捉的方法太笨了。。。
if [ "$passcheck" != "i love amber forever" ];then
echo "114514首"
exit 1
else
reset
echo "go go Baron Bunny"
fi

View File

@@ -1,6 +1,10 @@
#!/bin/bash
#将来可能可以换成apt-metalink来直接用种子/链接下载
apt-fast(){
/opt/durapps/spark-store/bin/apt-fast/ss-apt-fast "$@"
}
echo "Spark Store Install script.星火商店安装脚本"
#################检测文件是否存在
@@ -35,50 +39,18 @@ fi
##################apt-fast/metalink测试
DEPEND="这里一定会安装所以放弃处理"
##############判断是否是root运行如果是则正常走如果不是则代输密码
if [ "$(id -u)" != "0" ];then
#############################无root权限时
IS_INSTALLED=`which apt-fast`
if [ "$IS_INSTALLED" = "" ] ; then
echo "未安装依赖apt-fast 开始安装"
echo "$upass" | sudo -S aptss ssupdate && echo "$upass" | sudo -S bwrap --dev-bind / / --bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list apt install apt-fast -y
fi
if [ "$DEPEND" != "" ]; then
echo "检测到apt-fast使用aptss进行多线程下载加速"
echo ----------------------------------------------------------------------------------
----------------------------------------------------------------------------------
echo "$upass" | sudo -S dpkg -i $1 || sudo aptss install -yf
fi
else
###########################有root权限时
IS_INSTALLED=`which apt-fast`
if [ "$IS_INSTALLED" = "" ] ; then
echo "未安装依赖apt-fast 开始安装"
aptss ssupdate && bwrap --dev-bind / / --bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list apt install apt-fast -y
fi
if [ "$DEPEND" != "" ]; then
echo "检测到apt-fast使用aptss进行多线程下载加速"
echo ----------------------------------------------------------------------------------
echo ----------------------------------------------------------------------------------
dpkg -i $1 || aptss install -yf
fi

View File

@@ -0,0 +1,26 @@
#!/bin/bash
if [ "$(id -u)" != "0" ];then
pkexec "$0" "$@"
exit
fi
case $1 in
ssupdate)
aptss ssupdate 2>&1 | tee /tmp/spark-store-app-ssupdate-log.txt
IS_SSUPDATE_ERROR=`cat /tmp/spark-store-app-ssupdate-log.txt | grep "E: "`
echo "$IS_SSUPDATE_ERROR" > /tmp/spark-store-app-ssupdate-status.txt
;;
upgradable-list)
bwrap --dev-bind / / --bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list apt list --upgradable -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0" | awk 'BEGIN {FS="/"} {print $1}' | awk NR\>1
;;
upgrade-app)
aptss install "${@:2}" --only-upgrade 2>&1 | tee /tmp/spark-store-app-upgrade-log.txt
IS_UPGRADE_ERROR=`cat /tmp/spark-store-app-upgrade-log.txt | grep "Package manager quit with exit code."`
echo "$IS_UPGRADE_ERROR" > /tmp/spark-store-app-upgrade-status.txt
;;
clean-log)
rm -f /tmp/spark-store-app-ssupdate-status.txt /tmp/spark-store-app-ssupdate-log.txt /tmp/spark-store-app-upgrade-log.txt /tmp/spark-store-app-upgrade-status.txt
;;
esac

View File

@@ -1,43 +1,58 @@
#!/bin/bash
if [ "$(id -u)" != "0" ];then
pkexec $0
exit
fi
bash aptss ssupdate | zenity --progress --auto-close --no-cancel --pulsate --text=正在更新检查,请稍候... --height 70 --width 400 --title="星火商店更新模块"
PKG_LIST="$(bwrap --dev-bind / / --bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list apt list --upgradable -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0" | awk 'BEGIN {FS="/"} {print $1}' | awk NR\>1)"
touch /tmp/spark-store/upgradeStatus.txt
pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh ssupdate | zenity --progress --auto-close --pulsate --no-cancel --text="正在检查更新,请稍候..." --height 70 --width 400 --title="星火商店更新模块" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
if [ -z `cat /tmp/spark-store-app-ssupdate-status.txt` != "0" ];then
echo "无错误"
else
zenity --error --text "检查更新进程出现错误!按确定查看报错,可用于反馈" --title "星火商店更新检测模块" --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="我已复制了此文本框中的日志,且将会在反馈时附上 。反馈渠道可以在右上角菜单的设置中找到" --title="反馈渠道在商店右上角的设置里" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh clean-log
exit
fi
pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh clean-log
PKG_LIST="$(pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh upgradable-list)"
####如果没更新,就弹出不需要更新
if [ -z "$PKG_LIST" ];then
zenity --info --icon-name=spark-store --text "没有软件需要更新\n但是你并没有站在世界之巅" --title "星火商店更新检测服务" --height 150 --width 300
zenity --info --text "没有软件需要更新\n但是你并没有站在世界之巅" --title "星火商店更新检测模块" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
else
PKG_UPGRADE_LIST=`for PKG_NAME in $PKG_LIST;
do
#### 检测是否是hold状态
if [ "$(dpkg-query -W -f='${Status}' $PKG_NAME | grep hold)" = "" ];then
echo "true"
echo "$PKG_NAME"
echo "$PKG_NAME"
else
echo "false"
echo "$PKG_NAME (无法更新:已被标记为保留)"
echo "$PKG_NAME无法更新:已被标记为保留"
echo "$PKG_NAME"
fi
done | zenity --list --text="选择你想更新的应用" --column=是否更新 --column=应用包名 --separator=" " --checklist --print-column=2 --multiple --height 350 --width 550 `
done | zenity --list --text="选择你想更新的应用" --column=是否更新 --column=应用包名 --column="真的应用包名" --separator=" " --checklist --print-column=3 --multiple --height 350 --width 550 --hide-column=3 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg`
#### 如果没有选择,则直接退出
if [ "$PKG_UPGRADE_LIST" = "" ];then
zenity --info --icon-name=spark-store --text "没有选中任何软件\n但是你并没有站在世界之巅" --title "星火商店更新检测服务" --height 150 --width 300
zenity --info --text "没有选中任何软件\n但是你并没有站在世界之巅" --title "星火商店更新检测服务" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
else
bash aptss install $PKG_UPGRADE_LIST -y | zenity --progress --auto-close --no-cancel --pulsate --text=正在更新已选中的应用,请稍候... --height 70 --width 400 --title="星火商店更新模块"
pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh upgrade-app $PKG_UPGRADE_LIST -y | zenity --progress --auto-close --no-cancel --pulsate --text=正在更新已选中的应用,请稍候... --height 70 --width 400 --title="星火商店更新模块" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
if [ "$?" = "0" ];then
if [ -z "`cat /tmp/spark-store-app-upgrade-status.txt`" ];then
zenity --info --icon-name=spark-store --text "选中的软件已经更新完毕" --title "星火商店更新检测服务" --height 150 --width 300
zenity --info --text "选中的软件已经更新完毕" --title "星火商店更新检测模块" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
else
zenity --error --text "更新出现错误!请手动执行 sudo aptss full-upgrade 查看问题" --title "星火商店更新检测服务" --height 150 --width 300
zenity --error --text "更新出现错误!按确定查看报错,可用于反馈" --title "星火商店更新检测模块" --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="我已复制了此文本框中的日志,且将会在反馈时附上 。反馈渠道可以在右上角菜单的设置中找到" --title="反馈渠道在商店右上角的设置里往下拉" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
fi
fi
fi
####从最开头
rm -f touch /tmp/spark-store/upgradeStatus.txt
####从最开头

View File

@@ -40,7 +40,7 @@ case $option in
;;
2)
pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade.sh
/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade.sh
;;
3)
if [ -f /usr/share/polkit-1/actions/store.spark-app.ssinstall.policy ];then

View File

@@ -19,7 +19,7 @@ function notify-send() {
function network()
{
#超时时间
local timeout=5
local timeout=15
#目标网站
local target=www.baidu.com

View File

@@ -12,9 +12,9 @@
<context>
<name>QLabel</name>
<message>
<location filename="../src/main.cpp" line="42"/>
<location filename="../src/main.cpp" line="50"/>
<location filename="../src/main.cpp" line="56"/>
<location filename="../src/main.cpp" line="67"/>
<location filename="../src/main.cpp" line="75"/>
<location filename="../src/main.cpp" line="81"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
@@ -22,22 +22,22 @@
<context>
<name>QObject</name>
<message>
<location filename="../src/main.cpp" line="39"/>
<location filename="../src/main.cpp" line="64"/>
<source>We publish this program under GPL V3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/main.cpp" line="44"/>
<location filename="../src/main.cpp" line="69"/>
<source>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by community&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;Spark developers&lt;/span&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/main.cpp" line="52"/>
<location filename="../src/main.cpp" line="77"/>
<source>The Spark Project</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/main.cpp" line="64"/>
<location filename="../src/main.cpp" line="89"/>
<source>&lt;span style=&apos;font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by deepin community&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos;font-size:12pt;&apos;&gt;Spark developers&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;Published under GPL V3</source>
<translation type="unfinished"></translation>
</message>
@@ -103,435 +103,436 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="84"/>
<location filename="../src/widget.ui" line="1179"/>
<source>background-color:#FFFFFF</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="184"/>
<location filename="../src/widget.ui" line="1312"/>
<source>Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="265"/>
<location filename="../src/widget.ui" line="1194"/>
<source>Beautify</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="115"/>
<location filename="../src/widget.ui" line="1427"/>
<source>Music</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="198"/>
<location filename="../src/widget.ui" line="1251"/>
<source>Office</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="286"/>
<location filename="../src/widget.ui" line="1339"/>
<source>Others</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="279"/>
<location filename="../src/widget.ui" line="1244"/>
<source>Games</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="560"/>
<location filename="../src/widget.ui" line="270"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="606"/>
<location filename="../src/widget.ui" line="316"/>
<source>ICON</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="547"/>
<location filename="../src/widget.cpp" line="943"/>
<location filename="../src/widget.cpp" line="1152"/>
<location filename="../src/widget.ui" line="257"/>
<location filename="../src/widget.cpp" line="984"/>
<location filename="../src/widget.cpp" line="1194"/>
<source>Install</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="661"/>
<location filename="../src/widget.ui" line="371"/>
<source>Uninstall</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="677"/>
<location filename="../src/widget.ui" line="387"/>
<source>Site</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="750"/>
<location filename="../src/widget.ui" line="753"/>
<location filename="../src/widget.ui" line="460"/>
<location filename="../src/widget.ui" line="463"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This app is developed by community user,we give this tag to honor those who contribute to the Linux Ecology&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="756"/>
<location filename="../src/widget.ui" line="466"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/community-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="775"/>
<location filename="../src/widget.ui" line="485"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/ubuntu-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="813"/>
<location filename="../src/widget.ui" line="523"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/uos-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="788"/>
<location filename="../src/widget.ui" line="791"/>
<location filename="../src/widget.ui" line="498"/>
<location filename="../src/widget.ui" line="501"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Capable to deepin 20&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="313"/>
<location filename="../src/widget.ui" line="1285"/>
<source>Video</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="306"/>
<location filename="../src/widget.ui" line="1258"/>
<source>Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="238"/>
<location filename="../src/widget.ui" line="1298"/>
<source>Back to category</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="191"/>
<location filename="../src/widget.ui" line="1332"/>
<source>Reading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="225"/>
<location filename="../src/widget.ui" line="1201"/>
<source>Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="211"/>
<location filename="../src/widget.ui" line="1271"/>
<source>Reload</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="415"/>
<location filename="../src/widget.ui" line="125"/>
<source>The list is currently empty. Go and download some softwares!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="447"/>
<location filename="../src/widget.ui" line="157"/>
<source>Open download directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="794"/>
<location filename="../src/widget.ui" line="504"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/deepin-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="807"/>
<location filename="../src/widget.ui" line="810"/>
<location filename="../src/widget.ui" line="517"/>
<location filename="../src/widget.ui" line="520"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Capable to UOS home 20&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="826"/>
<location filename="../src/widget.ui" line="829"/>
<location filename="../src/widget.ui" line="536"/>
<location filename="../src/widget.ui" line="539"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This is a DTK5 app,which means it would have better effect on Deepin Desktop Environment&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="832"/>
<location filename="../src/widget.ui" line="542"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/dtk-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="867"/>
<location filename="../src/widget.ui" line="577"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A deepin-wine5 app.If you are using ubuntu or other non-deepin distro,you should deploy deepin-wine5 by your self.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="883"/>
<location filename="../src/widget.ui" line="886"/>
<location filename="../src/widget.ui" line="593"/>
<location filename="../src/widget.ui" line="596"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;An Appimage to deb app.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="889"/>
<location filename="../src/widget.ui" line="599"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/a2d-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="716"/>
<location filename="../src/widget.ui" line="426"/>
<source>Share</source>
<translation type="unfinished">Spk share link</translation>
</message>
<message>
<location filename="../src/widget.ui" line="129"/>
<location filename="../src/widget.ui" line="1385"/>
<source>Development</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="296"/>
<location filename="../src/widget.ui" line="1322"/>
<source>Home</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="122"/>
<location filename="../src/widget.ui" line="1346"/>
<source>Graphics</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="272"/>
<location filename="../src/widget.ui" line="1224"/>
<source>Network</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="769"/>
<location filename="../src/widget.ui" line="772"/>
<location filename="../src/widget.ui" line="479"/>
<location filename="../src/widget.ui" line="482"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Capable to Ubuntu 22.04&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="845"/>
<location filename="../src/widget.ui" line="555"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A deepin-wine2 app. Spark Store will configure the wine environment for you so dont worry.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="848"/>
<location filename="../src/widget.ui" line="558"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A deepin-wine2 app.If you are using ubuntu or other non-deepin distro,you should deploy deepin-wine2 by your self.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="851"/>
<location filename="../src/widget.ui" line="561"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/dwine2-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="864"/>
<location filename="../src/widget.ui" line="574"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A deepin-wine5 app.Spark Store will configure the wine environment for you so dont worry.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="870"/>
<location filename="../src/widget.ui" line="580"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/dwine5-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="930"/>
<location filename="../src/widget.ui" line="640"/>
<source>Info</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="937"/>
<location filename="../src/widget.ui" line="647"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;An app store developed by community enthusiasts&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="979"/>
<location filename="../src/widget.ui" line="689"/>
<source>Screenshots</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1142"/>
<location filename="../src/widget.ui" line="852"/>
<source>Line Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1158"/>
<location filename="../src/widget.ui" line="868"/>
<source>Choose Line:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1181"/>
<location filename="../src/widget.ui" line="891"/>
<source>Refresh</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1233"/>
<location filename="../src/widget.ui" line="943"/>
<source>Update</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1240"/>
<location filename="../src/widget.ui" line="950"/>
<source>Spark Store Update</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1260"/>
<location filename="../src/widget.ui" line="970"/>
<source>Server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1281"/>
<location filename="../src/widget.ui" line="991"/>
<source>Temp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1328"/>
<location filename="../src/widget.ui" line="1038"/>
<source>Clean</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1294"/>
<location filename="../src/widget.ui" line="1004"/>
<source>Since the dictionary is at /tmp,It would be cleaned automatically when system reboot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1341"/>
<location filename="../src/widget.ui" line="1051"/>
<source>Size:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1308"/>
<location filename="../src/widget.ui" line="1018"/>
<source>Location/tmp/spark-store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1348"/>
<location filename="../src/widget.ui" line="1058"/>
<source>Clear Web Cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1369"/>
<location filename="../src/widget.ui" line="1079"/>
<source>About us</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1376"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;We are &lt;span style=&quot; font-weight:600;&quot;&gt;NOT&lt;/span&gt; the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &amp;quot;Spark Store&amp;quot;! &amp;quot;, is to bring the community together to share useful software, or to participate in development together, so that we all use the latest and greatest software. &lt;/p&gt;&lt;p&gt;We don&apos;t make a profit from this, all developers and maintainers don&apos;t get paid, and we rely on the community&apos;s donations to us for most of our expenses, which we are grateful for and which allow us not to spend too much energy worrying about funding. &lt;/p&gt;&lt;p&gt;Our service and software are free for everyone to use, communicate, and learn, but you must comply with local laws and regulations in the process of your use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &amp;lt;jifengshenmo@outlook.com&amp;gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you&apos;d like to get involved with us too, whether you&apos;re involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt;&lt;p&gt;QQ group:872690351&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<location filename="../src/widget.ui" line="1086"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;We are &lt;span style=&quot; font-weight:600;&quot;&gt;NOT&lt;/span&gt; the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &amp;quot;Spark Store&amp;quot;! &amp;quot;, is to bring the community together to share useful software, or to participate in development together, so that we all use the latest and greatest software. &lt;/p&gt;&lt;p&gt;We don&apos;t make a profit from this, all developers and maintainers don&apos;t get paid, and we rely on the community&apos;s donations to us for most of our expenses, which we are grateful for and which allow us not to spend too much energy worrying about funding. &lt;/p&gt;&lt;p&gt;Our service and software are free for everyone to use, communicate, and learn, but you must comply with local laws and regulations in the process of your use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &amp;lt;jifengshenmo@outlook.com&amp;gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you&apos;d like to get involved with us too, whether you&apos;re involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt;&lt;p&gt;Connect us on Spark IM: https://chat.shenmo.tech&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="148"/>
<location filename="../src/widget.ui" line="1365"/>
<source>icon</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="374"/>
<source>about:blank</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="575"/>
<location filename="../src/widget.ui" line="285"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="912"/>
<location filename="../src/widget.ui" line="622"/>
<source>Request Update</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1194"/>
<location filename="../src/widget.ui" line="904"/>
<source>Take effect when restart</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1223"/>
<location filename="../src/widget.ui" line="933"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check update for Spark Store. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1301"/>
<location filename="../src/widget.ui" line="1011"/>
<source>0B</source>
<translation type="unfinished">0B</translation>
</message>
<message>
<location filename="../src/widget.cpp" line="192"/>
<location filename="../src/widget.cpp" line="193"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="193"/>
<location filename="../src/widget.cpp" line="194"/>
<source>Search or enter spk://</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="199"/>
<location filename="../src/widget.cpp" line="200"/>
<source>Submit App</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="200"/>
<location filename="../src/widget.cpp" line="201"/>
<source>Submit App with client(Recommanded)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="201"/>
<location filename="../src/widget.cpp" line="202"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="202"/>
<location filename="../src/widget.cpp" line="203"/>
<source>APP Upgrade and Install Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="371"/>
<location filename="../src/widget.cpp" line="373"/>
<source>Not Exist</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="141"/>
<location filename="../src/widget.cpp" line="433"/>
<location filename="../src/widget.cpp" line="438"/>
<location filename="../src/widget.cpp" line="448"/>
<location filename="../src/widget.cpp" line="453"/>
<location filename="../src/widget.cpp" line="142"/>
<location filename="../src/widget.cpp" line="435"/>
<location filename="../src/widget.cpp" line="440"/>
<location filename="../src/widget.cpp" line="450"/>
<location filename="../src/widget.cpp" line="455"/>
<source>Spark\ Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="692"/>
<location filename="../src/widget.cpp" line="932"/>
<location filename="../src/widget.cpp" line="714"/>
<location filename="../src/widget.cpp" line="973"/>
<source>Reinstall</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="658"/>
<location filename="../src/widget.cpp" line="680"/>
<source>Failed to get the name to the file to be downloaded.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="937"/>
<location filename="../src/widget.ui" line="1434"/>
<location filename="../src/widget.cpp" line="978"/>
<source>Upgrade</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="1124"/>
<location filename="../src/widget.cpp" line="1166"/>
<source>Updating, please wait...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="1156"/>
<location filename="../src/widget.cpp" line="1198"/>
<source>Uninstall succeeded</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="739"/>
<location filename="../src/widget.cpp" line="767"/>
<source>Relative apps Not Found!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="747"/>
<location filename="../src/widget.cpp" line="749"/>
<source>Do not repeat searches!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="781"/>
<source>Request Error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="1178"/>
<location filename="../src/widget.cpp" line="1220"/>
<source>Temporary cache was cleaned</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="1270"/>
<location filename="../src/widget.cpp" line="1312"/>
<source>The URL has been copied to the clipboard</source>
<translation type="unfinished"></translation>
</message>

View File

@@ -12,20 +12,9 @@
<context>
<name>QLabel</name>
<message>
<source>Spark应用商店</source>
<translation type="vanished">Spark Store</translation>
</message>
<message>
<source>
GPL第三版开源</source>
<translation type="vanished">Un app store tier alimenté par la communauté Deepin
Spark Store est publié sous licence GPL V3
Nous sommes nés pour le changement.</translation>
</message>
<message>
<location filename="../src/main.cpp" line="42"/>
<location filename="../src/main.cpp" line="50"/>
<location filename="../src/main.cpp" line="56"/>
<location filename="../src/main.cpp" line="67"/>
<location filename="../src/main.cpp" line="75"/>
<location filename="../src/main.cpp" line="81"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
@@ -33,22 +22,22 @@ Nous sommes nés pour le changement.</translation>
<context>
<name>QObject</name>
<message>
<location filename="../src/main.cpp" line="39"/>
<location filename="../src/main.cpp" line="64"/>
<source>We publish this program under GPL V3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/main.cpp" line="44"/>
<location filename="../src/main.cpp" line="69"/>
<source>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by community&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;Spark developers&lt;/span&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/main.cpp" line="52"/>
<location filename="../src/main.cpp" line="77"/>
<source>The Spark Project</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/main.cpp" line="64"/>
<location filename="../src/main.cpp" line="89"/>
<source>&lt;span style=&apos;font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by deepin community&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos;font-size:12pt;&apos;&gt;Spark developers&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;Published under GPL V3</source>
<translation type="unfinished"></translation>
</message>
@@ -114,597 +103,436 @@ Nous sommes nés pour le changement.</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="84"/>
<location filename="../src/widget.ui" line="1179"/>
<source>background-color:#FFFFFF</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="313"/>
<location filename="../src/widget.ui" line="1285"/>
<source>Video</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="306"/>
<location filename="../src/widget.ui" line="1258"/>
<source>Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="184"/>
<location filename="../src/widget.ui" line="1312"/>
<source>Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="265"/>
<location filename="../src/widget.ui" line="1194"/>
<source>Beautify</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="115"/>
<location filename="../src/widget.ui" line="1427"/>
<source>Music</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="129"/>
<location filename="../src/widget.ui" line="1385"/>
<source>Development</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="198"/>
<location filename="../src/widget.ui" line="1251"/>
<source>Office</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="238"/>
<location filename="../src/widget.ui" line="1298"/>
<source>Back to category</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="191"/>
<location filename="../src/widget.ui" line="1332"/>
<source>Reading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="286"/>
<location filename="../src/widget.ui" line="1339"/>
<source>Others</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="296"/>
<location filename="../src/widget.ui" line="1322"/>
<source>Home</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="122"/>
<location filename="../src/widget.ui" line="1346"/>
<source>Graphics</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="279"/>
<location filename="../src/widget.ui" line="1244"/>
<source>Games</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="225"/>
<location filename="../src/widget.ui" line="1201"/>
<source>Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="272"/>
<location filename="../src/widget.ui" line="1224"/>
<source>Network</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="211"/>
<location filename="../src/widget.ui" line="1271"/>
<source>Reload</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="415"/>
<location filename="../src/widget.ui" line="125"/>
<source>The list is currently empty. Go and download some softwares!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="447"/>
<location filename="../src/widget.ui" line="157"/>
<source>Open download directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="547"/>
<location filename="../src/widget.cpp" line="943"/>
<location filename="../src/widget.cpp" line="1152"/>
<location filename="../src/widget.ui" line="257"/>
<location filename="../src/widget.cpp" line="984"/>
<location filename="../src/widget.cpp" line="1194"/>
<source>Install</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="560"/>
<location filename="../src/widget.ui" line="270"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="606"/>
<location filename="../src/widget.ui" line="316"/>
<source>ICON</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="661"/>
<location filename="../src/widget.ui" line="371"/>
<source>Uninstall</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="677"/>
<location filename="../src/widget.ui" line="387"/>
<source>Site</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="716"/>
<location filename="../src/widget.ui" line="426"/>
<source>Share</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="750"/>
<location filename="../src/widget.ui" line="753"/>
<location filename="../src/widget.ui" line="460"/>
<location filename="../src/widget.ui" line="463"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This app is developed by community user,we give this tag to honor those who contribute to the Linux Ecology&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="756"/>
<location filename="../src/widget.ui" line="466"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/community-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="769"/>
<location filename="../src/widget.ui" line="772"/>
<location filename="../src/widget.ui" line="479"/>
<location filename="../src/widget.ui" line="482"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Capable to Ubuntu 22.04&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="775"/>
<location filename="../src/widget.ui" line="485"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/ubuntu-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="788"/>
<location filename="../src/widget.ui" line="791"/>
<location filename="../src/widget.ui" line="498"/>
<location filename="../src/widget.ui" line="501"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Capable to deepin 20&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="794"/>
<location filename="../src/widget.ui" line="504"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/deepin-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="807"/>
<location filename="../src/widget.ui" line="810"/>
<location filename="../src/widget.ui" line="517"/>
<location filename="../src/widget.ui" line="520"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Capable to UOS home 20&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="813"/>
<location filename="../src/widget.ui" line="523"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/uos-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="826"/>
<location filename="../src/widget.ui" line="829"/>
<location filename="../src/widget.ui" line="536"/>
<location filename="../src/widget.ui" line="539"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This is a DTK5 app,which means it would have better effect on Deepin Desktop Environment&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="832"/>
<location filename="../src/widget.ui" line="542"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/dtk-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="845"/>
<location filename="../src/widget.ui" line="555"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A deepin-wine2 app. Spark Store will configure the wine environment for you so dont worry.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="848"/>
<location filename="../src/widget.ui" line="558"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A deepin-wine2 app.If you are using ubuntu or other non-deepin distro,you should deploy deepin-wine2 by your self.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="851"/>
<location filename="../src/widget.ui" line="561"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/dwine2-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="864"/>
<location filename="../src/widget.ui" line="574"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A deepin-wine5 app.Spark Store will configure the wine environment for you so dont worry.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="867"/>
<location filename="../src/widget.ui" line="577"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A deepin-wine5 app.If you are using ubuntu or other non-deepin distro,you should deploy deepin-wine5 by your self.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="870"/>
<location filename="../src/widget.ui" line="580"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/dwine5-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="883"/>
<location filename="../src/widget.ui" line="886"/>
<location filename="../src/widget.ui" line="593"/>
<location filename="../src/widget.ui" line="596"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;An Appimage to deb app.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="889"/>
<location filename="../src/widget.ui" line="599"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/a2d-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="912"/>
<location filename="../src/widget.ui" line="622"/>
<source>Request Update</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="930"/>
<location filename="../src/widget.ui" line="640"/>
<source>Info</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="937"/>
<location filename="../src/widget.ui" line="647"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;An app store developed by community enthusiasts&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="979"/>
<location filename="../src/widget.ui" line="689"/>
<source>Screenshots</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1142"/>
<location filename="../src/widget.ui" line="852"/>
<source>Line Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1158"/>
<location filename="../src/widget.ui" line="868"/>
<source>Choose Line:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1181"/>
<location filename="../src/widget.ui" line="891"/>
<source>Refresh</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1194"/>
<location filename="../src/widget.ui" line="904"/>
<source>Take effect when restart</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1223"/>
<location filename="../src/widget.ui" line="933"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check update for Spark Store. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1233"/>
<location filename="../src/widget.ui" line="943"/>
<source>Update</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1240"/>
<location filename="../src/widget.ui" line="950"/>
<source>Spark Store Update</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1260"/>
<location filename="../src/widget.ui" line="970"/>
<source>Server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1281"/>
<location filename="../src/widget.ui" line="991"/>
<source>Temp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1328"/>
<location filename="../src/widget.ui" line="1038"/>
<source>Clean</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1294"/>
<location filename="../src/widget.ui" line="1004"/>
<source>Since the dictionary is at /tmp,It would be cleaned automatically when system reboot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1341"/>
<location filename="../src/widget.ui" line="1051"/>
<source>Size:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1308"/>
<location filename="../src/widget.ui" line="1018"/>
<source>Location/tmp/spark-store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1348"/>
<location filename="../src/widget.ui" line="1058"/>
<source>Clear Web Cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1369"/>
<location filename="../src/widget.ui" line="1079"/>
<source>About us</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1376"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;We are &lt;span style=&quot; font-weight:600;&quot;&gt;NOT&lt;/span&gt; the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &amp;quot;Spark Store&amp;quot;! &amp;quot;, is to bring the community together to share useful software, or to participate in development together, so that we all use the latest and greatest software. &lt;/p&gt;&lt;p&gt;We don&apos;t make a profit from this, all developers and maintainers don&apos;t get paid, and we rely on the community&apos;s donations to us for most of our expenses, which we are grateful for and which allow us not to spend too much energy worrying about funding. &lt;/p&gt;&lt;p&gt;Our service and software are free for everyone to use, communicate, and learn, but you must comply with local laws and regulations in the process of your use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &amp;lt;jifengshenmo@outlook.com&amp;gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you&apos;d like to get involved with us too, whether you&apos;re involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt;&lt;p&gt;QQ group:872690351&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<location filename="../src/widget.ui" line="1086"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;We are &lt;span style=&quot; font-weight:600;&quot;&gt;NOT&lt;/span&gt; the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &amp;quot;Spark Store&amp;quot;! &amp;quot;, is to bring the community together to share useful software, or to participate in development together, so that we all use the latest and greatest software. &lt;/p&gt;&lt;p&gt;We don&apos;t make a profit from this, all developers and maintainers don&apos;t get paid, and we rely on the community&apos;s donations to us for most of our expenses, which we are grateful for and which allow us not to spend too much energy worrying about funding. &lt;/p&gt;&lt;p&gt;Our service and software are free for everyone to use, communicate, and learn, but you must comply with local laws and regulations in the process of your use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &amp;lt;jifengshenmo@outlook.com&amp;gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you&apos;d like to get involved with us too, whether you&apos;re involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt;&lt;p&gt;Connect us on Spark IM: https://chat.shenmo.tech&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source></source>
<translatorcomment>Lecteurs vidéo et créateurs vidéo</translatorcomment>
<translation type="vanished">Vidéo</translation>
</message>
<message>
<source></source>
<translation type="vanished">Liste de téléchargement</translation>
</message>
<message>
<source></source>
<translation type="vanished">Outils</translation>
</message>
<message>
<source></source>
<translatorcomment>Thème des icônes et autres </translatorcomment>
<translation type="vanished">Thèmes</translation>
</message>
<message>
<source></source>
<translation type="vanished">Musique</translation>
</message>
<message>
<location filename="../src/widget.ui" line="148"/>
<location filename="../src/widget.ui" line="1365"/>
<source>icon</source>
<translation type="unfinished"></translation>
</message>
<message>
<source></source>
<translation type="vanished">Développement</translation>
</message>
<message>
<source></source>
<translation type="vanished">Bureau</translation>
</message>
<message>
<source></source>
<translation type="vanished">Traduire</translation>
</message>
<message>
<source></source>
<translation type="vanished">Autres</translation>
</message>
<message>
<source></source>
<translation type="vanished">Accueil</translation>
</message>
<message>
<source></source>
<translation type="vanished">Images</translation>
</message>
<message>
<source></source>
<translation type="vanished">Jeux</translation>
</message>
<message>
<source></source>
<translation type="vanished">Chat</translation>
</message>
<message>
<source></source>
<translation type="vanished">Réseau</translation>
</message>
<message>
<location filename="../src/widget.ui" line="374"/>
<source>about:blank</source>
<translation type="unfinished"></translation>
</message>
<message>
<source></source>
<translation type="vanished">La liste de téléchargement est vide</translation>
</message>
<message>
<source></source>
<translation type="vanished">Ouvrir dans le gestionnaire de fichiers</translation>
</message>
<message>
<source></source>
<translation type="vanished">Installer</translation>
</message>
<message>
<source></source>
<translation type="vanished">Supprimer</translation>
</message>
<message>
<source></source>
<translation type="vanished">Site</translation>
</message>
<message>
<source></source>
<translation type="vanished">Nom</translation>
</message>
<message>
<location filename="../src/widget.ui" line="575"/>
<location filename="../src/widget.ui" line="285"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source></source>
<translation type="vanished">Icon</translation>
</message>
<message>
<source></source>
<translation type="vanished">Partager</translation>
</message>
<message>
<source></source>
<translation type="vanished">Détails</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;magasin de logiciels développé par des passionnés de la communauté&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source></source>
<translation type="vanished">Captures d&apos;écran</translation>
</message>
<message>
<source>线</source>
<translation type="vanished">Line Settings</translation>
</message>
<message>
<source>线</source>
<translation type="vanished">Choisissez: </translation>
</message>
<message>
<source></source>
<translation type="vanished">Mise à jour</translation>
</message>
<message>
<source> </source>
<translation type="vanished">Redémarrez pour prendre effet</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Le rôle du serveur source est de s&apos;assurer que le logiciel est mis à jour et prend en charge l&apos;utilisation de l&apos;outil apt pour obtenir le logiciel. Nous préférons généralement que vous utilisiez la première ligne comme source de mise à jour, qui est généralement la plus stable. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source></source>
<translation type="vanished">Mettre à jour la source APT</translation>
</message>
<message>
<source></source>
<translation type="vanished">Source APT: </translation>
</message>
<message>
<source></source>
<translation type="vanished">serveur</translation>
</message>
<message>
<source></source>
<translation type="vanished">Temp</translation>
</message>
<message>
<source></source>
<translation type="vanished">Nettoyer</translation>
</message>
<message>
<source>/tmp下使</source>
<translation type="vanished">Étant donné que ce répertoire se trouve sous /tmp, même si vous ne l&apos;effacez pas manuellement, il sera effacé automatiquement au redémarrage du système.</translation>
</message>
<message>
<source></source>
<translation type="vanished">Taille: </translation>
</message>
<message>
<location filename="../src/widget.ui" line="1301"/>
<location filename="../src/widget.ui" line="1011"/>
<source>0B</source>
<translation type="unfinished">0B</translation>
</message>
<message>
<source>/tmp/spark-store</source>
<translation type="vanished">Emplacement:/tmp/spark-store</translation>
</message>
<message>
<source></source>
<translation type="vanished">À propos de nous</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Linux/deepin系统爱好者和用户之中的一员Spark应用商店&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;使使&lt;/p&gt;&lt;p&gt;&amp;lt;jifengshenmo@outlook.com&amp;gt;&lt;/p&gt;&lt;p&gt;稿&lt;/p&gt;&lt;p&gt;QQ872690351&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Nous ne sommes pas l&apos;équipe officielle, tout comme vous, nous ne sommes qu&apos;un des nombreux passionnés et utilisateurs de systèmes Linux / deepin, nous développons et gérons le &quot;Spark Store&quot;! &quot;, est de rassembler la communauté pour partager des logiciels utiles, ou pour participer au développement ensemble, afin que nous utilisions tous les derniers et meilleurs logiciels. &lt;/p&gt;&lt;p&gt; Nous n&apos;en tirons aucun profit, tous les développeurs et mainteneurs ne sont pas payés, et nous comptons sur les dons de la communauté pour la plupart de nos dépenses, dont nous sommes reconnaissants et qui nous permettent de ne pas dépenser trop d&apos;énergie se soucier du financement. &lt;/p&gt;&lt;p&gt;Notre service et nos logiciels sont gratuits pour tout le monde à utiliser, à communiquer et à apprendre, mais vous devez vous conformer aux lois et réglementations locales dans le processus de votre utilisation, sinon tout problème n&apos;a rien à voir avec nous. &lt;/p&gt;&lt;p&gt;Si une partie du magasin enfreint vos droits, veuillez nous en informer &amp;lt;jifengshenmo@outlook.com&amp;gt; nous retirerons le contenu en infraction dès que possible. &lt;/p&gt;&lt;p&gt;Si vous souhaitez également vous impliquer avec nous, que vous soyez impliqué dans le développement, la conception, le pitching ou la soumission de travaux, nous vous invitons à nous rejoindre. &lt;/p&gt;&lt;p&gt;QQ group:872690351&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/widget.cpp" line="141"/>
<location filename="../src/widget.cpp" line="433"/>
<location filename="../src/widget.cpp" line="438"/>
<location filename="../src/widget.cpp" line="448"/>
<location filename="../src/widget.cpp" line="453"/>
<location filename="../src/widget.cpp" line="142"/>
<location filename="../src/widget.cpp" line="435"/>
<location filename="../src/widget.cpp" line="440"/>
<location filename="../src/widget.cpp" line="450"/>
<location filename="../src/widget.cpp" line="455"/>
<source>Spark\ Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="192"/>
<location filename="../src/widget.cpp" line="193"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="193"/>
<location filename="../src/widget.cpp" line="194"/>
<source>Search or enter spk://</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="199"/>
<location filename="../src/widget.cpp" line="200"/>
<source>Submit App</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="200"/>
<location filename="../src/widget.cpp" line="201"/>
<source>Submit App with client(Recommanded)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="201"/>
<location filename="../src/widget.cpp" line="202"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="202"/>
<location filename="../src/widget.cpp" line="203"/>
<source>APP Upgrade and Install Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="371"/>
<location filename="../src/widget.cpp" line="373"/>
<source>Not Exist</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="692"/>
<location filename="../src/widget.cpp" line="932"/>
<location filename="../src/widget.cpp" line="714"/>
<location filename="../src/widget.cpp" line="973"/>
<source>Reinstall</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="658"/>
<location filename="../src/widget.cpp" line="680"/>
<source>Failed to get the name to the file to be downloaded.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="739"/>
<location filename="../src/widget.cpp" line="749"/>
<source>Do not repeat searches!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="767"/>
<source>Relative apps Not Found!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="747"/>
<location filename="../src/widget.cpp" line="781"/>
<source>Request Error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="937"/>
<location filename="../src/widget.ui" line="1434"/>
<location filename="../src/widget.cpp" line="978"/>
<source>Upgrade</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="1124"/>
<location filename="../src/widget.cpp" line="1166"/>
<source>Updating, please wait...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="1156"/>
<location filename="../src/widget.cpp" line="1198"/>
<source>Uninstall succeeded</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="1178"/>
<location filename="../src/widget.cpp" line="1220"/>
<source>Temporary cache was cleaned</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="1270"/>
<location filename="../src/widget.cpp" line="1312"/>
<source>The URL has been copied to the clipboard</source>
<translation type="unfinished"></translation>
</message>
@@ -751,27 +579,6 @@ Nous sommes nés pour le changement.</translation>
<source>Info</source>
<translation type="unfinished"></translation>
</message>
<message>
<source></source>
<translation type="vanished">Nom</translation>
</message>
<message>
<source></source>
<translatorcomment>Attendez pour téléchargerd</translatorcomment>
<translation type="vanished">Attendez pour télécharger</translation>
</message>
<message>
<source></source>
<translation type="vanished">Installer</translation>
</message>
<message>
<source></source>
<translation type="vanished">Annuler</translation>
</message>
<message>
<source></source>
<translation type="vanished">Détail</translation>
</message>
<message>
<location filename="../src/downloadlist.cpp" line="34"/>
<source>gdebi</source>

View File

@@ -12,9 +12,9 @@
<context>
<name>QLabel</name>
<message>
<location filename="../src/main.cpp" line="42"/>
<location filename="../src/main.cpp" line="50"/>
<location filename="../src/main.cpp" line="56"/>
<location filename="../src/main.cpp" line="67"/>
<location filename="../src/main.cpp" line="75"/>
<location filename="../src/main.cpp" line="81"/>
<source>Spark Store</source>
<translation>Spark </translation>
</message>
@@ -22,34 +22,22 @@
<context>
<name>QObject</name>
<message>
<location filename="../src/main.cpp" line="39"/>
<location filename="../src/main.cpp" line="64"/>
<source>We publish this program under GPL V3</source>
<translation>GPL V3开源</translation>
</message>
<message>
<location filename="../src/main.cpp" line="44"/>
<location filename="../src/main.cpp" line="69"/>
<source>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by community&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;Spark developers&lt;/span&gt;</source>
<translation>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;星火计划开发者&lt;/span&gt;</translation>
</message>
<message>
<source>Version 2.0+2</source>
<translation type="vanished"> 2.0+2</translation>
</message>
<message>
<source>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by deepin community&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;Spark developers&lt;/span&gt;</source>
<translation type="vanished">&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;deepin &lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;Spark developers&lt;/span&gt;</translation>
</message>
<message>
<location filename="../src/main.cpp" line="52"/>
<location filename="../src/main.cpp" line="77"/>
<source>The Spark Project</source>
<translation> The Spark Project</translation>
</message>
<message>
<source>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by deepin community&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;Spark developers&lt;/span&gt;&lt;br/&gt;We publish this program under GPL V3</source>
<translation type="vanished">&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt; &lt;/span&gt;&lt;br/&gt;&quot;&quot;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&quot;&quot;&lt;span style=&apos; font-size:12pt;&apos;&gt;星火开发者联盟&lt;/span&gt;&lt;br/&gt;本程序遵循 GPL V3 协议发布</translation>
</message>
<message>
<location filename="../src/main.cpp" line="64"/>
<location filename="../src/main.cpp" line="89"/>
<source>&lt;span style=&apos;font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by deepin community&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos;font-size:12pt;&apos;&gt;Spark developers&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;Published under GPL V3</source>
<translation>&lt;span style=&apos;font-size:10pt;font-weight:60;&apos;&gt; Deepin &lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos;font-size:12pt;&apos;&gt;星火商店开发组&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;遵循 GPL V3 协议发布</translation>
</message>
@@ -115,582 +103,436 @@
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="84"/>
<location filename="../src/widget.ui" line="1179"/>
<source>background-color:#FFFFFF</source>
<translation></translation>
</message>
<message>
<source>Videos</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Download List</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="184"/>
<location filename="../src/widget.ui" line="1312"/>
<source>Tools</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="265"/>
<location filename="../src/widget.ui" line="1194"/>
<source>Beautify</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="115"/>
<location filename="../src/widget.ui" line="1427"/>
<source>Music</source>
<translation></translation>
</message>
<message>
<source>Coding</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="198"/>
<location filename="../src/widget.ui" line="1251"/>
<source>Office</source>
<translation></translation>
</message>
<message>
<source>Translate</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="286"/>
<location filename="../src/widget.ui" line="1339"/>
<source>Others</source>
<translation></translation>
</message>
<message>
<source>FrontPage</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Images</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="279"/>
<location filename="../src/widget.ui" line="1244"/>
<source>Games</source>
<translation></translation>
</message>
<message>
<source>Chatting</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="272"/>
<location filename="../src/widget.ui" line="1224"/>
<source>Network</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="415"/>
<location filename="../src/widget.ui" line="125"/>
<source>The list is currently empty. Go and download some softwares!</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="447"/>
<location filename="../src/widget.ui" line="157"/>
<source>Open download directory</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="560"/>
<location filename="../src/widget.ui" line="270"/>
<source>Name</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="606"/>
<location filename="../src/widget.ui" line="316"/>
<source>ICON</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="547"/>
<location filename="../src/widget.cpp" line="943"/>
<location filename="../src/widget.cpp" line="1152"/>
<location filename="../src/widget.ui" line="257"/>
<location filename="../src/widget.cpp" line="984"/>
<location filename="../src/widget.cpp" line="1194"/>
<source>Install</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="313"/>
<location filename="../src/widget.ui" line="1285"/>
<source>Video</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="306"/>
<location filename="../src/widget.ui" line="1258"/>
<source>Download</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="191"/>
<location filename="../src/widget.ui" line="1332"/>
<source>Reading</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="225"/>
<location filename="../src/widget.ui" line="1201"/>
<source>Chat</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="661"/>
<location filename="../src/widget.ui" line="371"/>
<source>Uninstall</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="677"/>
<location filename="../src/widget.ui" line="387"/>
<source>Site</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="750"/>
<location filename="../src/widget.ui" line="753"/>
<location filename="../src/widget.ui" line="460"/>
<location filename="../src/widget.ui" line="463"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This app is developed by community user,we give this tag to honor those who contribute to the Linux Ecology&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Linux生态的贡献&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/widget.ui" line="756"/>
<location filename="../src/widget.ui" line="466"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/community-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="769"/>
<location filename="../src/widget.ui" line="772"/>
<location filename="../src/widget.ui" line="479"/>
<location filename="../src/widget.ui" line="482"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Capable to Ubuntu 22.04&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Ubuntu 22.04&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/widget.ui" line="788"/>
<location filename="../src/widget.ui" line="791"/>
<location filename="../src/widget.ui" line="498"/>
<location filename="../src/widget.ui" line="501"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Capable to deepin 20&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;deepin 20&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/widget.ui" line="794"/>
<location filename="../src/widget.ui" line="504"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/deepin-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="807"/>
<location filename="../src/widget.ui" line="810"/>
<location filename="../src/widget.ui" line="517"/>
<location filename="../src/widget.ui" line="520"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Capable to UOS home 20&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;UOS家庭版 20&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/widget.ui" line="826"/>
<location filename="../src/widget.ui" line="829"/>
<location filename="../src/widget.ui" line="536"/>
<location filename="../src/widget.ui" line="539"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This is a DTK5 app,which means it would have better effect on Deepin Desktop Environment&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;DTK5应用使&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/widget.ui" line="832"/>
<location filename="../src/widget.ui" line="542"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/dtk-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="845"/>
<location filename="../src/widget.ui" line="555"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A deepin-wine2 app. Spark Store will configure the wine environment for you so dont worry.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>deepin-wine2应用wine环境</translation>
</message>
<message>
<location filename="../src/widget.ui" line="864"/>
<location filename="../src/widget.ui" line="574"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A deepin-wine5 app.Spark Store will configure the wine environment for you so dont worry.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>deepin-wine5应用wine环境</translation>
</message>
<message>
<location filename="../src/widget.ui" line="867"/>
<location filename="../src/widget.ui" line="577"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A deepin-wine5 app.If you are using ubuntu or other non-deepin distro,you should deploy deepin-wine5 by your self.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;deepin-wine5应用使使ubuntudeepin-wine5环境&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/widget.ui" line="883"/>
<location filename="../src/widget.ui" line="886"/>
<location filename="../src/widget.ui" line="593"/>
<location filename="../src/widget.ui" line="596"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;An Appimage to deb app.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Appimage转制应用.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/widget.ui" line="889"/>
<location filename="../src/widget.ui" line="599"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/a2d-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="716"/>
<location filename="../src/widget.ui" line="426"/>
<source>Share</source>
<translation>Spk分享链接</translation>
</message>
<message>
<location filename="../src/widget.ui" line="129"/>
<location filename="../src/widget.ui" line="1385"/>
<source>Development</source>
<translation></translation>
</message>
<message>
<source>Home </source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="122"/>
<location filename="../src/widget.ui" line="1346"/>
<source>Graphics</source>
<translation></translation>
</message>
<message>
<source>Communication</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widget.ui" line="848"/>
<location filename="../src/widget.ui" line="558"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A deepin-wine2 app.If you are using ubuntu or other non-deepin distro,you should deploy deepin-wine2 by your self.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt; deepin-wine2 使使ubuntu deepin-wine2 &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/widget.ui" line="851"/>
<location filename="../src/widget.ui" line="561"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/dwine2-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="870"/>
<location filename="../src/widget.ui" line="580"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/dwine5-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<source>Contribute translation</source>
<translation type="vanished">/</translation>
</message>
<message>
<location filename="../src/widget.ui" line="930"/>
<location filename="../src/widget.ui" line="640"/>
<source>Info</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="937"/>
<location filename="../src/widget.ui" line="647"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;An app store developed by community enthusiasts&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/widget.ui" line="979"/>
<location filename="../src/widget.ui" line="689"/>
<source>Screenshots</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1142"/>
<location filename="../src/widget.ui" line="852"/>
<source>Line Settings</source>
<translation>线</translation>
</message>
<message>
<location filename="../src/widget.ui" line="1158"/>
<location filename="../src/widget.ui" line="868"/>
<source>Choose Line:</source>
<translation>线</translation>
</message>
<message>
<location filename="../src/widget.ui" line="1181"/>
<location filename="../src/widget.ui" line="891"/>
<source>Refresh</source>
<translation></translation>
</message>
<message>
<source>Take effect when restart </source>
<translation type="vanished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Jump to the Spark app store home page to check for updates. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/widget.ui" line="1233"/>
<location filename="../src/widget.ui" line="943"/>
<source>Update</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1240"/>
<location filename="../src/widget.ui" line="950"/>
<source>Spark Store Update</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1260"/>
<location filename="../src/widget.ui" line="970"/>
<source>Server</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1281"/>
<location filename="../src/widget.ui" line="991"/>
<source>Temp</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1328"/>
<location filename="../src/widget.ui" line="1038"/>
<source>Clean</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1294"/>
<location filename="../src/widget.ui" line="1004"/>
<source>Since the dictionary is at /tmp,It would be cleaned automatically when system reboot.</source>
<translation>/tmp下使</translation>
</message>
<message>
<location filename="../src/widget.ui" line="1341"/>
<location filename="../src/widget.ui" line="1051"/>
<source>Size:</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1308"/>
<location filename="../src/widget.ui" line="1018"/>
<source>Location/tmp/spark-store</source>
<translation>/tmp/spark-store</translation>
</message>
<message>
<location filename="../src/widget.ui" line="1348"/>
<location filename="../src/widget.ui" line="1058"/>
<source>Clear Web Cache</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1369"/>
<location filename="../src/widget.ui" line="1079"/>
<source>About us</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1376"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;We are &lt;span style=&quot; font-weight:600;&quot;&gt;NOT&lt;/span&gt; the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &amp;quot;Spark Store&amp;quot;! &amp;quot;, is to bring the community together to share useful software, or to participate in development together, so that we all use the latest and greatest software. &lt;/p&gt;&lt;p&gt;We don&apos;t make a profit from this, all developers and maintainers don&apos;t get paid, and we rely on the community&apos;s donations to us for most of our expenses, which we are grateful for and which allow us not to spend too much energy worrying about funding. &lt;/p&gt;&lt;p&gt;Our service and software are free for everyone to use, communicate, and learn, but you must comply with local laws and regulations in the process of your use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &amp;lt;jifengshenmo@outlook.com&amp;gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you&apos;d like to get involved with us too, whether you&apos;re involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt;&lt;p&gt;QQ group:872690351&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;&lt;/span&gt;Linux/deepinSpark&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;使使&lt;/p&gt;&lt;p&gt; &amp;lt;jifengshenmo@outlook.com&amp;gt;&lt;/p&gt;&lt;p&gt;稿&lt;/p&gt;&lt;p&gt;QQ 872690351&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
<location filename="../src/widget.ui" line="1086"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;We are &lt;span style=&quot; font-weight:600;&quot;&gt;NOT&lt;/span&gt; the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &amp;quot;Spark Store&amp;quot;! &amp;quot;, is to bring the community together to share useful software, or to participate in development together, so that we all use the latest and greatest software. &lt;/p&gt;&lt;p&gt;We don&apos;t make a profit from this, all developers and maintainers don&apos;t get paid, and we rely on the community&apos;s donations to us for most of our expenses, which we are grateful for and which allow us not to spend too much energy worrying about funding. &lt;/p&gt;&lt;p&gt;Our service and software are free for everyone to use, communicate, and learn, but you must comply with local laws and regulations in the process of your use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &amp;lt;jifengshenmo@outlook.com&amp;gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you&apos;d like to get involved with us too, whether you&apos;re involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt;&lt;p&gt;Connect us on Spark IM: https://chat.shenmo.tech&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;&lt;/span&gt;Linux/deepinSpark&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;使使&lt;/p&gt;&lt;p&gt; &amp;lt;jifengshenmo@outlook.com&amp;gt;&lt;/p&gt;&lt;p&gt;稿&lt;/p&gt;&lt;p&gt; Spark IM : https://chat.shenmo.tech&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/widget.ui" line="148"/>
<location filename="../src/widget.ui" line="1365"/>
<source>icon</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="238"/>
<location filename="../src/widget.ui" line="1298"/>
<source>Back to category</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="296"/>
<location filename="../src/widget.ui" line="1322"/>
<source>Home</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="211"/>
<location filename="../src/widget.ui" line="1271"/>
<source>Reload</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="374"/>
<source>about:blank</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="575"/>
<location filename="../src/widget.ui" line="285"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="775"/>
<location filename="../src/widget.ui" line="485"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/ubuntu-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="813"/>
<location filename="../src/widget.ui" line="523"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/uos-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="912"/>
<location filename="../src/widget.ui" line="622"/>
<source>Request Update</source>
<translation>/</translation>
</message>
<message>
<location filename="../src/widget.ui" line="1194"/>
<location filename="../src/widget.ui" line="904"/>
<source>Take effect when restart</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1223"/>
<location filename="../src/widget.ui" line="933"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check update for Spark Store. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.ui" line="1301"/>
<location filename="../src/widget.ui" line="1011"/>
<source>0B</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="192"/>
<location filename="../src/widget.cpp" line="193"/>
<source>Spark Store</source>
<translation>Spark </translation>
</message>
<message>
<location filename="../src/widget.cpp" line="193"/>
<location filename="../src/widget.cpp" line="194"/>
<source>Search or enter spk://</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="199"/>
<location filename="../src/widget.cpp" line="200"/>
<source>Submit App</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="200"/>
<location filename="../src/widget.cpp" line="201"/>
<source>Submit App with client(Recommanded)</source>
<translation>使稿</translation>
</message>
<message>
<location filename="../src/widget.cpp" line="201"/>
<location filename="../src/widget.cpp" line="202"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="202"/>
<location filename="../src/widget.cpp" line="203"/>
<source>APP Upgrade and Install Settings</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="371"/>
<location filename="../src/widget.cpp" line="373"/>
<source>Not Exist</source>
<translation></translation>
</message>
<message>
<source>Update finished</source>
<translation type="obsolete"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="141"/>
<location filename="../src/widget.cpp" line="433"/>
<location filename="../src/widget.cpp" line="438"/>
<location filename="../src/widget.cpp" line="448"/>
<location filename="../src/widget.cpp" line="453"/>
<location filename="../src/widget.cpp" line="142"/>
<location filename="../src/widget.cpp" line="435"/>
<location filename="../src/widget.cpp" line="440"/>
<location filename="../src/widget.cpp" line="450"/>
<location filename="../src/widget.cpp" line="455"/>
<source>Spark\ Store</source>
<translation></translation>
</message>
<message>
<source>Failed to download app info. Please check internet connection.</source>
<translation type="vanished"></translation>
</message>
<message>
<source>PkgName: </source>
<translation type="vanished"> </translation>
</message>
<message>
<source>Version: </source>
<translation type="vanished"> </translation>
</message>
<message>
<source>Author: </source>
<translation type="vanished"> </translation>
</message>
<message>
<source>Official Site: </source>
<translation type="vanished"> </translation>
</message>
<message>
<source>Contributor: </source>
<translation type="vanished">稿 </translation>
</message>
<message>
<source>Update Time: </source>
<translation type="vanished"> </translation>
</message>
<message>
<source>Installed Size: </source>
<translation type="vanished"> </translation>
</message>
<message>
<location filename="../src/widget.cpp" line="692"/>
<location filename="../src/widget.cpp" line="932"/>
<location filename="../src/widget.cpp" line="714"/>
<location filename="../src/widget.cpp" line="973"/>
<source>Reinstall</source>
<translation></translation>
</message>
<message>
<source>Failed to load application icon.</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="658"/>
<location filename="../src/widget.cpp" line="680"/>
<source>Failed to get the name to the file to be downloaded.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="739"/>
<location filename="../src/widget.cpp" line="749"/>
<source>Do not repeat searches!</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="767"/>
<source>Relative apps Not Found!</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="747"/>
<location filename="../src/widget.cpp" line="781"/>
<source>Request Error: %1</source>
<translation>%1</translation>
</message>
<message>
<source>Spark store could only process spk:// links for now. The search feature is coming soon!</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="937"/>
<location filename="../src/widget.ui" line="1434"/>
<location filename="../src/widget.cpp" line="978"/>
<source>Upgrade</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="1124"/>
<location filename="../src/widget.cpp" line="1166"/>
<source>Updating, please wait...</source>
<translation></translation>
</message>
<message>
<source>Apt has reported an error. Please use apt update in terminal to locate the problem.</source>
<translation type="vanished">使apt update来查看错误原因</translation>
</message>
<message>
<source>Unknown error!</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Yes</source>
<translation type="vanished"></translation>
</message>
<message>
<source>No</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Information for Contributors</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Currently the translation contribution is limited to English,
and you will be redirected to our Gitee repository at which you are
supposed to be creating pull requests to contribute app info
translations.
Tips:You can simply click the file to edit to create a flat pull request without create a full pull request
Tips:You can use github account to login to Gitee
Click yes to continue.</source>
<translation type="vanished">
Gitee
Pull Request
pr
使github账户直接登陆Gitee
</translation>
</message>
<message>
<source>Currently the translation contribution is limited to English,
and you will be redirected to our Gitee repository at which you are
supposed to be creating pull requests to contribute app info
translations.
Click yes to continue.</source>
<translation type="obsolete">
Gitee
Pull Request
pr
使github账户直接登陆Gitee
.</translation>
</message>
<message>
<source>Unknown server error!</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="1156"/>
<location filename="../src/widget.cpp" line="1198"/>
<source>Uninstall succeeded</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="1178"/>
<location filename="../src/widget.cpp" line="1220"/>
<source>Temporary cache was cleaned</source>
<translation></translation>
</message>
<message>
<location filename="../src/widget.cpp" line="1270"/>
<location filename="../src/widget.cpp" line="1312"/>
<source>The URL has been copied to the clipboard</source>
<translation></translation>
</message>
@@ -737,10 +579,6 @@ Click yes to continue.</source>
<source>Info</source>
<translation></translation>
</message>
<message>
<source>dpkg</source>
<translation type="vanished">dpkg</translation>
</message>
<message>
<location filename="../src/downloadlist.cpp" line="32"/>
<source>Spark Store App Installer</source>
@@ -756,18 +594,6 @@ Click yes to continue.</source>
<source>deepin deb installer</source>
<translation></translation>
</message>
<message>
<source>Downloaded, waiting to install</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Failed to download %1</source>
<translation type="vanished"> %1 </translation>
</message>
<message>
<source>Download FailedCheck Your Connection</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/downloadlist.cpp" line="101"/>
<source>Finished downloading %1, awaiting to install</source>
@@ -778,10 +604,6 @@ Click yes to continue.</source>
<source>Installing</source>
<translation></translation>
</message>
<message>
<source>Installing...</source>
<translation type="obsolete"></translation>
</message>
<message>
<location filename="../src/downloadlist.cpp" line="74"/>
<source>Downloaded. Open APP Upgrade and Install Settings to enable password-free installation</source>