Compare commits

...

51 Commits

Author SHA1 Message Date
9a74368ef5 !97 3.1.5-5 版本号确认
* 3155
* update debian/changelog.
2022-08-24 08:41:17 +00:00
cf5e1cae76 !96 feat: 从所有镜像源中选取最快镜像源高速下载
* feat: 从所有镜像源中选取最快镜像源高速下载
* Merge remote-tracking branch 'upstream/master' into dev
* fix: 不再使用http头请求文件大小
* Merge remote-tracking branch 'upstream/master' into dev
* feature: metalink backhend
* Merge remote-tracking branch 'upstream/master' into dev
* Merge remote-tracking branch 'upstream/master' into dev
* fix: 忽略系统原有aria2配置文件
* fix: waitforfinished
2022-08-24 06:43:40 +00:00
4c7d50d117 !95 改为commit自动构建为Pr自动构建测试/更新readme中的依赖包下载地址
* update dtk-build-commit-20220425.yml
* update README.md.
* 更新依赖包链接
2022-08-23 05:26:12 +00:00
6318b5f51d 删除文件 .workflow/dtk-build-release-tag.yml 2022-08-22 09:05:27 +00:00
2f94e78c32 !94 发tag自动触发构建
* update dtk-build-release-tag-20220425.yml
* create dtk-build-commit-20220425.yml
2022-08-22 09:03:45 +00:00
fecda52294 !93 重新以commit为触发条件走ci,gitee go无法从pr获取
* create dtk-build-commit-20220425.yml
2022-08-22 08:57:58 +00:00
8cefdbaca0 !92 ci release
* 	new file:   .workflow/dtk-build-release-tag.yml
2022-08-22 08:48:55 +00:00
0da714b35a !90 modified: .workflow/dtk-build-commit-20220425.yml
* 	modified:   .workflow/dtk-build-commit-20220425.yml
2022-08-22 08:43:47 +00:00
379c5a857d !88 修改ci策略:自动触发
* update dtk-build-commit-20220425.yml
2022-08-22 03:08:46 +00:00
3b349d43ad !87 流水线
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
* create dtk-build-commit-20220425.yml
* 删除文件 .workflow/master-pipeline.yml
* 删除文件 .workflow/dtk-build-commit-20220425.yml
* update .workflow/dtk-build-commit-20220425.yml.
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
2022-08-22 02:38:28 +00:00
b856734843 !86 修改文案 tool/update-upgrade/ss-do-upgrade.sh
* 	修改文案     tool/update-upgrade/ss-do-upgrade.sh
2022-08-19 11:41:10 +00:00
238c43b79e !85 修改: debian/spark-store.postinst 重命名: tool/ss-apt-fast -> tool/aptss
* 删除文件 spark-wine7-devel_7.14~spark-1_amd64.deb
* final
* 	修改:     debian/spark-store.postinst
* 	修改:     tool/update-upgrade/ss-update-controler.sh
* 	修改:     debian/spark-store.postinst
* 只额外生成一份给aptss
* 	修改:     debian/spark-store.postinst
*  要提交的变更:
* 	修改:     tool/aptss
* 	修改:     debian/changelog
* 	修改:     pkg/usr/share/bash-completion/completions/aptss
* 	修改:     pkg/usr/share/bash-completion/completions/aptss
* 	修改:     debian/spark-store.postinst
* aa
* Merge branch 'master' of https://gitee.com/deepin-community-store/spark-store
* 	修改:     src/main.cpp
* Merge branch 'master' of https://gitee.com/deepin-community-store/spark-store
* 	修改:     debian/spark-store.postinst
2022-08-19 07:28:10 +00:00
855b18cfa6 !84 修改: src/main.cpp
* 	修改:     src/main.cpp
* Merge branch 'master' of https://gitee.com/deepin-community-store/spark-store
* 	修改:     debian/spark-store.postinst
2022-08-18 09:41:14 +00:00
bc897969f8 !83 修改: debian/spark-store.postinst
* 	修改:     debian/spark-store.postinst
2022-08-18 09:37:11 +00:00
52af8a8229 !82 modified: debian/changelog modified: debian/spark-store.postinst new file: tool/spark-store.asc
* 	modified:   debian/changelog
2022-08-18 09:31:33 +00:00
5220b886de !81 重新发布3152
* update debian/changelog.
* update debian/spark-store.postinst.
2022-08-18 08:44:13 +00:00
5be7923e60 !80 http2下curl容易报错导致pubkey错误
* update debian/spark-store.postinst.
2022-08-18 08:39:36 +00:00
6ca6f63b1f !79 changelog和版本号
Merge pull request !79 from shenmo/auto-4915358-master-ca4f1682
2022-08-18 01:12:49 +00:00
bda0426a3b changelog和版本号 2022-08-18 09:12:10 +08:00
a75b7b1e57 Merge branch 'master' of https://gitee.com/deepin-community-store/spark-store 2022-08-18 09:10:51 +08:00
8054f85ada !78 fix: 不再使用http头请求文件大小
Merge pull request !78 from Pluto/dev
2022-08-17 15:15:19 +00:00
bc6584eacc Merge branch 'master' of https://gitee.com/deepin-community-store/spark-store 2022-08-17 19:41:50 +08:00
c9e01d10fe !77 修改uos的更新策略,先下载到/var/cache/apt/archives再更新
* 修改uos的更新策略,先下载到/var/cache/apt/archives再更新
2022-08-17 02:59:05 +00:00
c3b9763aa8 Merge branch 'master' of https://gitee.com/deepin-community-store/spark-store 2022-08-15 22:59:12 +08:00
398cd512d7 !76 * 改变更新策略,现在支持应用在更新时引入新依赖 * ss-apt-fast现在默认允许降级,以与apt使用体验一致
*   * 改变更新策略,现在支持应用在更新时引入新依赖
2022-08-15 14:54:03 +00:00
0c0ff452ae !74 修改: debian/spark-store.prerm 新文件: tool/apt-fast-conf/sources.list.d/.keep 删除: tool/apt-fast-conf/sources.list.d/sparkstore.list
* 	修改:     debian/spark-store.prerm
2022-08-09 11:27:38 +00:00
e6d3b035db 修改: debian/spark-store.prerm
新文件:   tool/apt-fast-conf/sources.list.d/.keep
	删除:     tool/apt-fast-conf/sources.list.d/sparkstore.list
2022-08-09 19:26:59 +08:00
5e88f7c1eb !73 3142版本号
* 3142版本号
2022-08-09 11:08:02 +00:00
b639a9d726 !72 * 修复使用更新和安装设置更新商店本体时出错
* * 修复使用更新和安装设置更新商店本体时出错
2022-08-09 10:35:33 +00:00
e2f6a2b3c2 !71 3142准备测试
* 3142版本
2022-08-08 04:50:47 +00:00
c826a3927c !69 metalink 功能
* feature: metalink backhend
* Merge remote-tracking branch 'upstream/master' into dev
* Merge remote-tracking branch 'upstream/master' into dev
* fix: 忽略系统原有aria2配置文件
* fix: waitforfinished
2022-08-08 04:49:17 +00:00
0c367799b7 !70 修复:ssinstall在没有安装apt-fast的情况下首次安装需要依赖的软件时安装失败
* 	修改:     debian/changelog
* 修复:ssinstall在没有安装apt-fast的情况下首次安装需要依赖的软件时安装失败
2022-08-08 04:35:58 +00:00
114b5cdfe5 !68 安装脚本和检测更新脚本检查网络时间超时时间延长至5s
* 安装脚本和检测更新脚本检查网络时间超时时间延长至5s
* ss-update-notify-placer.sh. 更新服务验证网络的超时时间增加到5s
* update debian/changelog.
* update debian/changelog.
* 版本号更新 3141
2022-08-07 02:50:40 +00:00
a563d99bc4 !67 修复: ss-apt-fast full-upgrade未用apt-fast加速
* 修复: ss-apt-fast full-upgrade未用apt-fast加速
2022-08-06 04:50:14 +00:00
b1cb765b6e !66 * 屏蔽了ssinstall之外的安装方式
* 屏蔽了ssinstall之外的安装方式
* 调整了报错框的形式 
* 修复pkexec下ssinstall不处理依赖
2022-08-06 03:13:57 +00:00
49c5583ea9 !65 修复安装时使用wget的问题
修复安装时使用wget但是依赖未写明的问题(改用curl)
准备发布3.1.4
2022-08-06 02:24:00 +00:00
b0dfd6a3da !63 修复UOS未处理模拟软件源,新增ss-apt-fast ssupdate,杂项调整
修复UOS未处理模拟软件源
    删除ssinstall的apt-fast安装功能(转移到ss-apt-fast,并且不会再对UOS安装apt-fast)
    ss-apt-fast除了下载,安装和更新,全部走apt;
    ss-apt-fast现在只会在安装/下载/更新时检测是否有apt-fast并处理
    ss-apt-fast ssupdate 从服务器获取源链接后只更新星火源;
    和 ss-apt-fast ssupdate 功能重复的内容转为调用
2022-08-05 01:34:27 +00:00
a63c1202bd !62 除自动外,手动检查更新前也重新获取list和update
* update tool/update-upgrade/ss-update-controler.sh.
* update tool/update-upgrade/ss-upgrade-list.sh.
* update tool/update-upgrade/ss-upgrade-list.sh.
2022-08-04 02:09:44 +00:00
dfe30f9d6d !59 * 调整 现在与系统更新分开,不再导致更新失败 * 支持直接更新软件源文件,不再让d.吃全部更新流量 * ss-apt-fast不再强制root权限
* !61 $1为policy时,apt-fast换成apt
* 手动更新时也重新获取源文件
* 	修改:     tool/ss-apt-fast
*   * 调整 现在与系统更新分开,不再导致更新失败
2022-08-04 02:00:38 +00:00
b00f3fa501 !58 Change version number
Merge pull request !58 from shenmo/auto-4915358-master-1658494943452
2022-07-22 13:02:38 +00:00
03f35782c6 Change version number 2022-07-22 21:02:10 +08:00
8f192d17ec !57 fix: aria2 配置文件错误
* Merge remote-tracking branch 'upstream/master' into dev
* fix: 忽略系统原有aria2配置文件
* fix: waitforfinished
2022-07-22 13:01:05 +00:00
0dc594b3f1 !56 修复下载提前退出
* 	修改:     src/main.cpp
* 	修改:     debian/changelog
* fix: waitforfinished
2022-07-08 09:37:36 +00:00
198384c552 !46 fix !44
* readme: 修正 ubuntu 的编译说明
* download: 检查软件源的有效性
2022-07-02 23:25:35 +08:00
958988d93c !54 download: 在有cdn工作前提下,不使用主域名
* download: 在有cdn工作前提下,不使用主域名
* merge: upstream
* README: 英文修正 ubuntu22 的依赖问题
* Merge remote-tracking branch 'upstream/master'
* widget: 检查cdn状况在下载开始前检测,不堵塞ui线程
* Merge remote-tracking branch 'upstream/master'
* readme: 修正 ubuntu 的编译说明
* download: 检查软件源的有效性
2022-07-02 23:25:35 +08:00
5f9599c47d !52 使用aria2替换原本的多线程下载
* update debian/control.
* fix: readme
* change: 切换到 aria2
* Download: 初步完成对 axel 的适配工作
* README: 英文修正 ubuntu22 的依赖问题
* Merge remote-tracking branch 'upstream/master'
* widget: 检查cdn状况在下载开始前检测,不堵塞ui线程
* Merge remote-tracking branch 'upstream/master'
* readme: 修正 ubuntu 的编译说明
* download: 检查软件源的有效性
2022-07-02 23:25:35 +08:00
766dc8b88a !51 read -e
* update tool/update-upgrade/ss-update-controler.sh.
* update tool/ussinstall.
* update tool/ssinstall.
2022-07-02 23:25:35 +08:00
20d34a7369 !49 ss-apt-fast需要加入sudo
* update tool/ssinstall.
2022-07-02 23:25:35 +08:00
a0c14e7397 !48 widget: 检查cdn状况在下载开始前检测,不堵塞ui线程
* widget: 检查cdn状况在下载开始前检测,不堵塞ui线程
* Merge remote-tracking branch 'upstream/master'
* readme: 修正 ubuntu 的编译说明
* download: 检查软件源的有效性
2022-07-02 23:25:35 +08:00
f24565804d !47 文案和显示效果修改
* update tool/ss-apt-fast.
* update tool/ss-apt-fast.
2022-07-02 23:25:35 +08:00
244176098c !46 fix !44
* readme: 修正 ubuntu 的编译说明
* download: 检查软件源的有效性
2022-07-02 23:25:35 +08:00
37 changed files with 926 additions and 774 deletions

1
.gitignore vendored
View File

@@ -51,3 +51,4 @@ debian/*.debhelper*
debian/files
debian/*.substvars
debian/spark-store

View File

@@ -0,0 +1,39 @@
version: '1.0'
name: dtk-build-commit-20220425
displayName: dtk-build-commit
triggers:
trigger: auto
pr:
branches:
prefix:
- ''
stages:
- name: stage-4e566164
displayName: build
strategy: naturally
trigger: auto
executor: []
steps:
- step: execute@docker
name: execute_by_docker
displayName: 基于镜像的脚本执行
certificate: ''
image: docker.io/debian:buster-slim
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 ..."
- apt install git devscripts equivs curl -y >/dev/null 2>&1
- 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
strategy: {}

View File

@@ -0,0 +1,63 @@
version: '1.0'
name: dtk-build-release-tag-20220425
displayName: dtk-build-release-tag
triggers:
trigger: auto
push:
tags:
prefix:
- ''
stages:
- name: stage-4e566164
displayName: build
strategy: naturally
trigger: auto
executor: []
steps:
- step: build@gcc
name: build_gcc
displayName: GCC 构建
gccVersion: '9.4'
commands:
- sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
- '# 换源'
- apt update
- echo "正在准备Debian 10环境..."
- apt install git -y >/dev/null 2>&1
- git clone https://gitlink.org.cn/shenmo7192/debian-10-container.git
- mv debian-10-container/Debian-10.tar.xz /mnt
- 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
- echo "进入Debian 10环境"
- chroot /mnt/Debian-10 /bin/bash /spark-build.sh
- cd /mnt/Debian-10/build-spark
- '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: []
notify: []
strategy:
retry: '0'
- name: stage-29f3ffbb
displayName: 上传
strategy: naturally
trigger: auto
executor: []
steps:
- step: publish@general_artifacts
name: publish_general_artifacts
displayName: 上传制品
dependArtifact: BUILD_ARTIFACT
artifactName: output
notify: []
strategy:
retry: '0'

View File

@@ -1,35 +0,0 @@
version: '1.0'
name: dtk-build-commit-20220425
displayName: dtk-build-commit
triggers:
trigger: manual
push:
branches:
prefix:
- master
tags:
prefix:
- ''
stages:
- name: stage-4e566164
displayName: build
strategy: naturally
trigger: auto
executor: []
steps:
- step: execute@docker
name: execute_by_docker
displayName: 基于镜像的脚本执行
certificate: d3a72e50-a6b5-013a-3031-5e77c3ac149e
image: hub.docker.com/r/shenmo7192/uos-21-dtk5.4
command:
- git clone https://gitee.com/deepin-community-store/spark-store
- mkdir debs
- cd spark-store
- dpkg-buildpackage
- mv *.deb ../debs
- cd ../debs
- curl -s --url "smtp://smtp.163.com" --mail-from "sparkstorefeedback@163.com" --mail-rcpt "shenmo@spark-app.store" --upload-file ./*.deb --user "sparkstorefeedback@163.com:YWYGLQNOPLWNNJJY"
permissions:
- role: admin
members: []

View File

@@ -22,18 +22,25 @@ If you want to submit an APP to share with othersPlease [Click here](https://
If you simply want to install the Spark Store,just enter the [Release] page, find the version you want and install.
If you are using Debian11/Ubuntu 20.04, you will need extra dependency package. Available [here](https://d.store.deepinos.org.cn/spark-store-dependencies-kylin.zip)
If you are using Debian11/Ubuntu 20.04, you will need extra dependency package. Available [here](https://code.gitlink.org.cn/shenmo7192/spark-store-dependencies/raw/branch/master/spark-store-dependencies-kylin.zip)
---
#### Compile and developement
For Deepin V20/UOS 21/ Ubuntu 22.04/ Debian 11
For Deepin V20/UOS 21/ Debian 11
```shell
sudo apt install git qt5-default debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev
```
Ubuntu 22.04
```shell
sudo apt install git qtbase5-dev debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev
```
Then
```shell

View File

@@ -17,7 +17,7 @@
如果想安装 `星火应用商店` ,请打开右侧的 [Release] 页面,找到最新版本,并选择适用于当前系统的安装包下载。
如果你在使用 `Debian 11/Ubuntu 20.04`,你需要额外下载[依赖补充包](https://d.store.deepinos.org.cn/spark-store-dependencies-kylin.zip)
如果你在使用 `Debian 11/Ubuntu 20.04`,你需要额外下载[依赖补充包](https://code.gitlink.org.cn/shenmo7192/spark-store-dependencies/raw/branch/master/spark-store-dependencies-kylin.zip)
---
#### 编译安装

101
debian/changelog vendored
View File

@@ -1,18 +1,105 @@
spark-store (3.2) stable; urgency=medium
spark-store (3.1.5-5) stable; urgency=medium
* 从所有镜像源中选取最快镜像源高速下载
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.5-4) stable; urgency=medium
* 更改ss-apt-fast策略现在只会在updatessupdate和没有检测到配置文件的时候更新配置文件
* 新增ss-apt-fast别名aptss
* 更新检测服务优化:从分体改为一体
* aptss 支持自动补全
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.5-3) stable; urgency=medium
* 包内自带密钥
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.5-2) stable; urgency=medium
* 下载软件时跳过获取大小,修复部分软件无法下载的问题
* 修复 获取key时出错指定使用http1.1
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.5-1) stable; urgency=medium
* 改变更新策略UOS也下载加速但是安装不加速
新增ssinstall现在会在没有apt-fast的时候自动安装
新增ss-apt-fast现在会在没有apt-fast的时候自动安装
修改删除ssinstall中无用的 || dpkg -P $1
新增ss-apt-fast会先下载云上的conf以确保mirror是最新的
修复去除wget指令
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.5) stable; urgency=medium
* 改变更新策略,现在支持应用在更新时引入新依赖
* ss-apt-fast现在默认允许降级以与apt使用体验一致
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
spark-store (3.1.4-2) stable; urgency=medium
* 客户端下载使用metalink来支持bt下载加速
* 修复使用更新和安装设置更新商店本体时出错
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.4-1) stable; urgency=medium
* 安装脚本和检测更新脚本检查网络时间超时时间延长至5s
* 修复ssinstall在没有安装apt-fast的情况下首次安装需要依赖的软件时安装失败
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.4) stable; urgency=medium
* 发布正式版,同步到官网
* 修复安装时使用wget的问题
* 合并3.1.3-1和3.1.3-2的更改
* 屏蔽了ssinstall之外的安装方式
* 调整了报错框的形式
* 修复pkexec下ssinstall不处理依赖
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.3-2) stable; urgency=medium
* 调整 现在与系统更新分开,不再导致更新失败
* 支持直接更新软件源文件不再让d.吃全部更新流量
* ss-apt-fast不再强制root权限
* 修改ss-apt-fast的策略现在除了安装下载和更新都改用apt
* ssinstall 现在也会在不适用ss-apt-fast的时候模拟源了针对UOS
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.3-1) stable; urgency=medium
* 修复 下载提前退出
* 移除 下载量显示
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.3) stable; urgency=medium
* Now uses aria2 to download softwares form all mirrors
* 新增ssinstall现在会在没有apt-fast的时候自动安装
* 新增ss-apt-fast现在会在没有apt-fast的时候自动安装
* 修改删除ssinstall中无用的 || dpkg -P $1
* 新增ss-apt-fast会先下载云上的conf以确保mirror是最新的
* 修复去除wget指令
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.2) stable; urgency=medium

3
debian/control vendored
View File

@@ -35,7 +35,8 @@ Depends:${shlibs:Depends}, ${misc:Depends},
libnotify4,
curl,
dde-qt5integration,
bubblewrap
bubblewrap,
aria2
Description: Spark Store
A community powered app store, based on DTK.
Recommends: apt-fast

4
debian/rules vendored
View File

@@ -17,11 +17,12 @@ override_dh_auto_clean:
override_dh_auto_configure:
mkdir -p $(CURDIR)/build
dh_auto_configure MAKEFLAGS=-j$(JOBS) -- spark-store-project.pro \
-spec linux-g++ CONFIG+=qtquickcompiler \
-o $(CURDIR)/build/
override_dh_auto_build:
make -C $(CURDIR)/build -j$(JOBS)
@@ -29,6 +30,7 @@ override_dh_auto_install:
make -C $(CURDIR)/build install \
INSTALL_ROOT=$(CURDIR)/debian/spark-store
# Ignore the dpkg-shlibdeps: warning (it uses none of the library's symbols)
# Qt Mutidedia lib will ref to network libraray.
override_dh_shlibdeps:

View File

@@ -2,6 +2,12 @@
case "$1" in
configure)
# config for aptss
mkdir -p /etc/aptss/sources.list.d
ln -s -f /etc/apt/sources.list /etc/aptss/sources.list
# Check if /usr/local/bin existed
mkdir -p /usr/local/bin
@@ -11,20 +17,24 @@ case "$1" in
ln -s -f /opt/durapps/spark-store/bin/spark-store /usr/local/bin/spark-store
ln -s -f /opt/durapps/spark-store/bin/ssinstall /usr/local/bin/ssinstall
ln -s -f /opt/durapps/spark-store/bin/spark-dstore-patch /usr/local/bin/spark-dstore-patch
ln -s -f /opt/durapps/spark-store/bin/ss-apt-fast /usr/local/bin/ss-apt-fast
ln -s -f /opt/durapps/spark-store/bin/aptss /usr/local/bin/ss-apt-fast
ln -s -f /opt/durapps/spark-store/bin/aptss /usr/bin/aptss
# Download and install key
wget -O /tmp/spark-store-install/spark-store.asc https://d.store.deepinos.org.cn/dcs-repo.gpg-key.asc
gpg --dearmor /tmp/spark-store-install/spark-store.asc
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
cp -f /tmp/spark-store-install/spark-store.asc.gpg /etc/apt/trusted.gpg.d/spark-store.gpg
# Run apt update to avoid users being fucked up by the non-exist dependency problem
apt update -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
# Create symbo links to start upgrade detect
ln -s /opt/durapps/spark-store/bin/update-upgrade/autostart/spark-update-notifier.desktop /etc/xdg/autostart/spark-update-notifier.desktop
# Run apt update to avoid users being fucked up by the non-exist dependency problem
aptss ssupdate
# Start upgrade detect service
systemctl enable spark-update-notifier
@@ -42,6 +52,8 @@ case "$1" in
# Remove temp dir
rm -rf /tmp/spark-store-install
;;
triggered)

View File

@@ -3,7 +3,7 @@
function network-check()
{
#超时时间
local timeout=1
local timeout=5
#目标网站
local target=www.baidu.com

View File

@@ -7,9 +7,12 @@ rm /usr/local/bin/spark-dstore-patch
rm /usr/local/bin/ussinstall
rm /usr/local/bin/ussremove
rm /usr/local/bin/ss-apt-fast
rm /usr/bin/aptss
rm -rf /etc/aptss/
# Remove residual symbol links to stop upgrade detect if exist
if [ -f /etc/xdg/autostart/spark-update-notifier.desktop ];then
if [ -e /etc/xdg/autostart/spark-update-notifier.desktop ];then
rm /etc/xdg/autostart/spark-update-notifier.desktop
fi
@@ -21,11 +24,6 @@ systemctl disable spark-update-notifier
# Clean the update-number service place file if exist
if [ -d "/tmp/spark-store-updatenum/" ] ; then
rm -rf /tmp/spark-store-updatenum/
fi
# Clean the auto install polkit file if exist
if [ -f "/usr/share/polkit-1/actions/store.spark-app.ssinstall.policy" ] ; then
rm /usr/share/polkit-1/actions/store.spark-app.ssinstall.policy

View File

@@ -1,3 +0,0 @@
Package: *
Pin: origin *.deepinos.org.cn
Pin-Priority: 400

View File

@@ -6,7 +6,7 @@ After=apt-daily.service network.target network-online.target systemd-networkd.se
[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/opt/durapps/spark-store/bin/update-upgrade/ss-update-notify-placer.sh
ExecStart=/opt/durapps/spark-store/bin/update-upgrade/ss-update-notifier.sh
Restart=on-failure
RestartSec=10

View File

@@ -0,0 +1,228 @@
# Debian apt(8) completion -*- shell-script -*-
_aptss()
{
local sourcesdir="/etc/apt/sources.list.d"
local cur prev words cword
_init_completion || return
local GENERIC_APT_GET_OPTIONS='
-d --download-only
-y --assume-yes
--assume-no
-u --show-upgraded
-m --ignore-missing
-t --target-release
--download
--fix-missing
--ignore-hold
--upgrade
--only-upgrade
--allow-change-held-packages
--allow-remove-essential
--allow-downgrades
--print-uris
--trivial-only
--remove
--arch-only
--allow-unauthenticated
--allow-insecure-repositories
--install-recommends
--install-suggests
--no-install-recommends
--no-install-suggests
--fix-policy
'
# see if the user selected a command already
local COMMANDS=(
"ssupdate"
"list"
"search"
"show" "showsrc"
"install" "remove" "purge" "autoremove"
"update"
"upgrade" "full-upgrade" "dist-upgrade"
"edit-sources"
"help"
"source" "build-dep"
"clean" "autoclean"
"download" "changelog"
"moo"
"depends" "rdepends"
"policy")
local command i
for (( i=0; i < ${#words[@]}-1; i++ )); do
if [[ ${COMMANDS[@]} =~ ${words[i]} ]]; then
command=${words[i]}
break
fi
done
# Complete a -t<SPACE><TAB>
case $prev in
-t|--target-release)
COMPREPLY=( $( compgen -W "$( apt-cache policy -o Dir::Cache="/etc/aptss/" | egrep -o 'a=[^,]*|n=[^,]*' | cut -f2- -d= | sort -u)" -- "$cur" ) )
return 0
;;
esac
# supported options per command
if [[ "$cur" == -* ]]; then
case $command in
install|remove|purge|upgrade|dist-upgrade|full-upgrade|autoremove)
COMPREPLY=( $( compgen -W '--show-progress
--fix-broken --purge --verbose-versions --auto-remove
-s --simulate --dry-run
--download
--fix-missing
--fix-policy
--ignore-hold
--force-yes
--trivial-only
--reinstall --solver
-t --target-release'"$GENERIC_APT_GET_OPTIONS" -- "$cur" ) )
return 0
;;
update)
COMPREPLY=( $( compgen -W '--list-cleanup
--print-uris
--allow-insecure-repositories
' -- "$cur" ) )
return 0
;;
list)
COMPREPLY=( $( compgen -W '--installed --upgradable
--manual-installed
-v --verbose
-a --all-versions
-t --target-release
' -- "$cur" ) )
return 0
;;
show)
COMPREPLY=( $( compgen -W '-a --all-versions
' -- "$cur" ) )
return 0
;;
depends|rdepends)
COMPREPLY=( $( compgen -W '-i
--important
--installed
--pre-depends
--depends
--recommends
--suggests
--replaces
--breaks
--conflicts
--enhances
--recurse
--implicit' -- "$cur" ) )
return 0
;;
search)
COMPREPLY=( $( compgen -W '
-n --names-only
-f --full' -- "$cur" ) )
return 0
;;
showsrc)
COMPREPLY=( $( compgen -W '
--only-source' -- "$cur" ) )
return 0
;;
source)
COMPREPLY=( $( compgen -W '
-s --simulate --dry-run
-b --compile --build
-P --build-profiles
--diff-only --debian-only
--tar-only
--dsc-only
-t --target-release
'"$GENERIC_APT_GET_OPTIONS" -- "$cur" ) )
return 0
;;
build-dep)
COMPREPLY=( $( compgen -W '
-a --host-architecture
-s --simulate --dry-run
-P --build-profiles
-t --target-release
--purge --solver
'"$GENERIC_APT_GET_OPTIONS" -- "$cur" ) )
return 0
;;
moo)
COMPREPLY=( $( compgen -W '
--color
' -- "$cur" ) )
return 0
;;
clean|autoclean)
COMPREPLY=( $( compgen -W '
-s --simulate --dry-run
' -- "$cur" ) )
return 0
;;
esac
fi
# specific command arguments
if [[ -n $command ]]; then
case $command in
remove|purge|autoremove)
if [[ -f /etc/debian_version ]]; then
# Debian system
COMPREPLY=( $( \
_xfunc dpkg _comp_dpkg_installed_packages $cur ) )
else
# assume RPM based
_xfunc rpm _rpm_installed_packages
fi
return 0
;;
show|list|download|changelog|depends|rdepends)
COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" -o Dir::Cache="/etc/aptss/" \
2> /dev/null ) )
return 0
;;
install)
COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" -o Dir::Cache="/etc/aptss/" \
2> /dev/null ) )
if [[ "$cur" == ./* || "$cur" == /* ]]; then
_filedir "deb"
fi
return 0
;;
source|build-dep|showsrc|policy)
COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" -o Dir::Cache="/etc/aptss/" \
2> /dev/null ) $( apt-cache dumpavail -o Dir::Cache="/etc/aptss/" | \
command grep "^Source: $cur" | sort -u | cut -f2 -d" " ) )
return 0
;;
edit-sources)
COMPREPLY=( $( compgen -W '$( command ls $sourcesdir )' \
-- "$cur" ) )
return 0
;;
moo)
COMPREPLY=( $( compgen -W 'moo' \
-- "$cur" ) )
return 0
;;
esac
fi
# no command yet, show what commands we have
if [ "$command" = "" ]; then
COMPREPLY=( $( compgen -W '${COMMANDS[@]}' -- "$cur" ) )
fi
return 0
} &&
complete -F _aptss aptss
# ex: ts=4 sw=4 et filetype=sh

View File

@@ -21,11 +21,14 @@ tool.path = /opt/durapps/$${TARGET}/bin
qm.files += translations/*.qm
qm.path = /usr/share/spark-store/translations
preferences.files += pkg/etc/apt/preferences.d/sparkstore
preferences.path = /etc/apt/preferences.d
#preferences.files += pkg/etc/apt/preferences.d/sparkstore
#preferences.path = /etc/apt/preferences.d
sourceslist.files += pkg/etc/apt/sources.list.d/sparkstore.list
sourceslist.path = /etc/apt/sources.list.d
#sourceslist.files += pkg/etc/apt/sources.list.d/sparkstore.list
#sourceslist.path = /etc/apt/sources.list.d
bash_completion.files += pkg/usr/share/bash-completion/completions/aptss
bash_completion.path = /usr/share/bash-completion/completions
desktop.files += pkg/usr/share/applications/spark-store.desktop
desktop.path = /usr/share/applications
@@ -49,9 +52,9 @@ INSTALLS += \
qm \
desktop \
icon \
sourceslist \
preferences \
tmp \
service
service \
bash_completion
# polkit-1
# 暂时不添加

View File

@@ -45,18 +45,18 @@ downloadlist::downloadlist(QWidget *parent) :
menu_install->addAction(action_dpkg);
}
QFile deepin("/usr/bin/deepin-deb-installer");
deepin.open(QIODevice::ReadOnly);
if(deepin.isOpen())
{
menu_install->addAction(action_deepin);
}
QFile gdebi("/usr/bin/gdebi");
gdebi.open(QIODevice::ReadOnly);
if(gdebi.isOpen())
{
menu_install->addAction(action_gdebi);
}
// QFile deepin("/usr/bin/deepin-deb-installer");
// deepin.open(QIODevice::ReadOnly);
// if(deepin.isOpen())
// {
// menu_install->addAction(action_deepin);
// }
// QFile gdebi("/usr/bin/gdebi");
// gdebi.open(QIODevice::ReadOnly);
// if(gdebi.isOpen())
// {
// menu_install->addAction(action_gdebi);
// }
}
@@ -92,19 +92,6 @@ QString downloadlist::getName()
void downloadlist::readyInstall()
{
if(ui->progressBar->value() != ui->progressBar->maximum() && !close)
{
ui->progressBar->hide();
ui->pushButton_install->show();
ui->pushButton_2->hide();
Widget::sendNotification(tr("Failed to download %1").arg(ui->label->text()), 5000,
"/tmp/spark-store/icon_" + QString::number(num).toUtf8() + ".png");
ui->label_2->setText(tr("Download FailedCheck Your Connection"));
ui->pushButton_install->setEnabled(false);
return;
}
if(!close)
{
ui->progressBar->hide();
@@ -232,6 +219,7 @@ void downloadlist::on_pushButton_3_clicked()
{
textbrowser->setLineWidth(0);
textbrowser->setText(out);
textbrowser->setMinimumHeight(500);
output_w->setMinimumHeight(600);
output_w->setAttribute(Qt::WA_TranslucentBackground);

View File

@@ -1,93 +1,9 @@
#include "downloadworker.h"
#include <QEventLoop>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QThread>
#include <QProcess>
#include <QRegularExpression>
#include <QFileInfo>
#include <QDir>
DownloadWorker::DownloadWorker(QObject *parent)
{
Q_UNUSED(parent)
}
void DownloadWorker::setIdentifier(int identifier)
{
this->identifier = identifier;
}
void DownloadWorker::setParamter(const QString &url, QPair<qint64, qint64> range, QFile *file)
{
this->url = url;
this->startPos = range.first;
this->endPos = range.second;
this->file = file;
}
qint64 DownloadWorker::getReceivedPos()
{
return receivedPos;
}
void DownloadWorker::doWork()
{
mgr = new QNetworkAccessManager(this);
QNetworkRequest request;
request.setUrl(url);
request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
request.setRawHeader("Range", QString("bytes=%1-%2").arg(startPos).arg(endPos).toLocal8Bit());
reply = mgr->get(request);
qDebug() << "开始下载数据:" << QString(" %1~%2 -> writePos Start %3").arg(startPos).arg(endPos).arg(receivedPos);
connect(reply, static_cast<void(QNetworkReply::*)(QNetworkReply::NetworkError) > (&QNetworkReply::error),
[this](QNetworkReply::NetworkError error)
{
if(error != QNetworkReply::NoError)
{
qDebug() << "出错了:" << reply->errorString();
}
});
connect(reply, &QNetworkReply::finished, mgr, &QNetworkAccessManager::deleteLater);
connect(reply, &QNetworkReply::readyRead, this, &DownloadWorker::dataReady);
connect(reply, &QNetworkReply::finished, this, &DownloadWorker::slotFinish);
connect(reply, &QNetworkReply::downloadProgress, this, &DownloadWorker::handleProcess);
// connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
connect(reply, &QNetworkReply::finished, this, &DownloadWorker::doStop);
}
void DownloadWorker::doStop()
{
if (reply) {
reply->disconnect();
reply->aboutToClose();
reply->deleteLater();
reply = nullptr;
}
}
void DownloadWorker::dataReady()
{
QByteArray data = reply->readAll();
file->seek(startPos + receivedPos);
file->write(data);
receivedPos += data.size();
}
void DownloadWorker::slotFinish()
{
file->flush();
qDebug() << "数据块下载完毕:" << QString(" %1~%2 -> writePos Start %3").arg(startPos).arg(endPos).arg(receivedPos);
emit workFinished();
}
void DownloadWorker::handleProcess(qint64, qint64)
{
emit this->downloadProcess();
}
#include <QtConcurrent>
DownloadController::DownloadController(QObject *parent)
{
@@ -97,29 +13,6 @@ DownloadController::DownloadController(QObject *parent)
domains.clear();
domains.append("d.store.deepinos.org.cn");
QFile serverList(QDir::homePath().toUtf8() + "/.config/spark-store/server.list");
if(serverList.open(QFile::ReadOnly))
{
QStringList list = QString(serverList.readAll()).trimmed().split("\n");
qDebug() << list << list.size();
for (int i = 0; i < list.size(); i++) {
if (list.at(i).contains("镜像源 Download only") && i + 1 < list.size()) {
for (int j = i + 1; j < list.size(); j++) {
system("curl -I -s --connect-timeout 5 " + list.at(j).toUtf8()
+ "/dcs-repo.gpg-key.asc -w %{http_code} |tail -n1 > /tmp/spark-store/cdnStatus.txt");
QFile cdnStatus("/tmp/spark-store/cdnStatus.txt");
if(cdnStatus.open(QFile::ReadOnly) && QString(cdnStatus.readAll()).toUtf8()=="200"){
qDebug() << list.at(j);
domains.append(list.at(j));
}
}
break;
}
}
}
qDebug() << domains << domains.size();
/*
domains = {
"d1.store.deepinos.org.cn",
@@ -132,28 +25,53 @@ DownloadController::DownloadController(QObject *parent)
this->threadNum = domains.size();
}
DownloadController::~DownloadController()
{
if(workers.size() > 0)
{
for(int i = 0; i < workers.size(); i++)
{
workers.at(i)->doStop();
workers.at(i)->disconnect();
workers.at(i)->deleteLater();
}
workers.clear();
}
}
void DownloadController::setFilename(QString filename)
{
this->filename = filename;
}
void DownloadController::setThreadNum(int threadNum)
bool checkMeatlink(QString metaUrl)
{
this->threadNum = threadNum;
QFile metaStatus("/tmp/spark-store/metaStatus.txt");
if (metaStatus.exists())
{
metaStatus.remove();
}
system("curl -I -s --connect-timeout 5 " + metaUrl.toUtf8() + " -w %{http_code} |tail -n1 > /tmp/spark-store/metaStatus.txt");
if (metaStatus.open(QFile::ReadOnly) && QString(metaStatus.readAll()).toUtf8() == "200")
{
metaStatus.remove();
return true;
}
return false;
}
void gennerateDomain(QVector<QString> &domains)
{
QFile serverList(QDir::homePath().toUtf8() + "/.config/spark-store/server.list");
if (serverList.open(QFile::ReadOnly))
{
QStringList list = QString(serverList.readAll()).trimmed().split("\n");
qDebug() << list << list.size();
domains.clear();
for (int i = 0; i < list.size(); i++)
{
if (list.at(i).contains("镜像源 Download only") && i + 1 < list.size())
{
for (int j = i + 1; j < list.size(); j++)
{
domains.append(list.at(j));
}
break;
}
}
if (domains.size() == 0)
{
domains.append("d.store.deepinos.org.cn");
}
}
}
/**
@@ -161,65 +79,130 @@ void DownloadController::setThreadNum(int threadNum)
*/
void DownloadController::startDownload(const QString &url)
{
finish = 0;
// 下载任务等分,计算每个线程的下载数据
// 获取下载任务信息
fileSize = getFileSize(url);
if(fileSize == 0)
if (fileSize == 0)
{
emit errorOccur("文件大小获取失败");
return;
}
qint64 segmentSize = fileSize / threadNum;
ranges.resize(threadNum);
QVector<qint64> receivedBytes;
receivedBytes.resize(threadNum);
for(int i = 0; i < threadNum; i++)
{
ranges[i].first = i * segmentSize;
ranges[i].second = i * segmentSize + segmentSize - 1;
receivedBytes[i] = 0;
}
ranges[threadNum - 1].second = fileSize; // 余数部分加入最后一个
// 打开文件
QDir tmpdir("/tmp/spark-store");
file = new QFile;
file->setFileName(tmpdir.absoluteFilePath(filename));
if(file->exists())
{
file->remove();
}
if(!file->open(QIODevice::WriteOnly))
{
delete file;
file = nullptr;
emit errorOccur(file->errorString());
return;
}
file->resize(fileSize);
QtConcurrent::run([=]()
{
QString metaUrl = url + ".metalink";
qDebug() << "metalink" << metaUrl;
bool useMetalink = false;
if (checkMeatlink(metaUrl)){
useMetalink = true;
qDebug() << "useMetalink:" << useMetalink;
}else{
gennerateDomain(domains);
// qDebug() << domains << domains.size();
}
// 创建下载线程
workers.clear();
for(int i = 0; i < ranges.size(); i++)
{
qDebug() << QString("第%1个下载请求%2-%3").arg(i).arg(ranges.at(i).first).arg(ranges.at(i).second);
auto worker = new DownloadWorker(this);
auto range = ranges.at(i);
QString chunkUrl = replaceDomain(url, domains.at(i));
worker->setIdentifier(i);
worker->setParamter(chunkUrl, range, file);
workers.append(worker);
QString aria2Command = "-d";
QString aria2Urls = "";
QString aria2Verbose = "--summary-interval=1";
QString aria2Threads = "--split=2"; // 仅使用最快的两个镜像源
QString aria2NoConfig = "--no-conf";
QString aria2NoSeeds = "--seed-time=0";
QStringList command;
QString downloadDir = "/tmp/spark-store/";
QString aira2URLSelector = "--uri-selector=adaptive";
QString aria2StreamPiece = "--stream-piece-selector=default";
QString aria2ConnectionPerServer = "--max-connection-per-server=4";
connect(worker, &DownloadWorker::downloadProcess, this, &DownloadController::handleProcess);
connect(worker, &DownloadWorker::workFinished, this, &DownloadController::chunkDownloadFinish);
if (useMetalink){
command.append(metaUrl.toUtf8());
}
else{
for (int i = 0; i < domains.size(); i++)
{
command.append(replaceDomain(url, domains.at(i)).toUtf8());
}
}
worker->doWork();
}
qint64 downloadSizeRecord = 0;
QString speedInfo = "";
QString percentInfo = "";
command.append(aria2Command.toUtf8());
command.append(downloadDir.toUtf8());
command.append(aria2Verbose.toUtf8());
command.append(aria2NoConfig.toUtf8());
command.append(aria2Threads.toUtf8());
command.append(aira2URLSelector.toUtf8());
command.append(aria2StreamPiece.toUtf8());
command.append(aria2ConnectionPerServer.toUtf8());
if (useMetalink){
command.append(aria2NoSeeds.toUtf8());
}
qDebug() << command;
auto cmd = new QProcess();
cmd->setProcessChannelMode(QProcess::MergedChannels);
cmd->setProgram("aria2c");
cmd->setArguments(command);
cmd->start();
cmd->waitForStarted(); //等待启动完成
QObject::connect(cmd, &QProcess::readyReadStandardOutput,
[&]()
{
//通过读取输出计算下载速度
QString message = cmd->readAllStandardOutput().data();
// qDebug() << message;
message = message.replace(" ", "");
QStringList list;
qint64 downloadSize = 0;
int downloadSizePlace1 = message.indexOf("(");
int downloadSizePlace2 = message.indexOf(")");
int speedPlace1 = message.indexOf("DL:");
int speedPlace2 = message.indexOf("ETA");
if (downloadSizePlace1 != -1 && downloadSizePlace2 != -1)
{
percentInfo = message.mid(downloadSizePlace1 + 1, downloadSizePlace2 - downloadSizePlace1 - 1).replace("%", "");
if (percentInfo != "s")
{
int percentInfoNumber = percentInfo.toUInt();
downloadSize = percentInfoNumber * fileSize / 100;
}
}
if (speedPlace1 != -1 && speedPlace2 != -1 && speedPlace2 - speedPlace1 <= 15)
{
speedInfo = message.mid(speedPlace1 + 3, speedPlace2 - speedPlace1 - 3);
speedInfo += "/s";
}
// qDebug() << percentInfo << speedInfo;
if (downloadSize >= downloadSizeRecord)
{
downloadSizeRecord = downloadSize;
}
if (percentInfo == "OK")
{
finished = true;
emit downloadProcess("", fileSize, fileSize);
qDebug() << "finished:" << finished;
}
else
{
emit downloadProcess(speedInfo, downloadSizeRecord, fileSize);
}
});
QObject::connect(cmd, &QProcess::readyReadStandardError,
[&]()
{
emit errorOccur(cmd->readAllStandardError().data());
return;
});
auto pidNumber = cmd->processId();
this->pidNumber = pidNumber;
while (cmd->waitForFinished(-1))
{
continue;
}
emit downloadFinished(); });
}
/**
@@ -227,78 +210,23 @@ void DownloadController::startDownload(const QString &url)
*/
void DownloadController::stopDownload()
{
for(int i = 0; i < workers.size(); i++)
{
workers.at(i)->doStop();
workers.at(i)->disconnect();
workers.at(i)->deleteLater();
}
workers.clear();
qDebug() << "文件下载路径:" << QFileInfo(file->fileName()).absoluteFilePath();
file->flush();
file->close();
delete file;
file = nullptr;
// 实现下载进程退出
QString killCmd = QString("kill -9 %1").arg(pidNumber);
system(killCmd.toUtf8());
qDebug() << "kill aria2!";
}
void DownloadController::handleProcess()
qint64 DownloadController::getFileSize(const QString &url)
{
qint64 bytesReceived = 0;
for(int i = 0; i < workers.size(); i++)
{
bytesReceived += workers.at(i)->getReceivedPos();
}
qDebug() << QString("下载进度 %1-%2").arg(bytesReceived).arg(fileSize);
emit downloadProcess(bytesReceived, fileSize);
}
void DownloadController::chunkDownloadFinish()
{
finish++;
qDebug() << QString("已下载了%1块共%2块").arg(finish).arg(threadNum);
if(finish == threadNum)
{
stopDownload();
emit downloadFinished();
}
}
qint64 DownloadController::getFileSize(const QString& url)
{
QEventLoop event;
QNetworkAccessManager requestManager;
QNetworkRequest request;
request.setUrl(QUrl(url));
request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
QNetworkReply *reply = requestManager.head(request);
connect(reply, static_cast<void(QNetworkReply::*)(QNetworkReply::NetworkError) > (&QNetworkReply::error),
[this, reply](QNetworkReply::NetworkError error)
{
if(error != QNetworkReply::NoError)
{
emit errorOccur(reply->errorString());
}
});
connect(reply, &QNetworkReply::finished, &event, &QEventLoop::quit);
event.exec();
qint64 fileSize = 0;
if(reply->rawHeader("Accept-Ranges") == QByteArrayLiteral("bytes")
&& reply->hasRawHeader(QString("Content-Length").toLocal8Bit()))
{
fileSize = reply->header(QNetworkRequest::ContentLengthHeader).toUInt();
}
qDebug() << "文件大小为:" << fileSize;
reply->deleteLater();
// 已经无需使用 qtnetwork 再获取 filesize完全交给 aria2 来计算进度。 为保证兼容性,故保留此函数。
qint64 fileSize = 10000;
return fileSize;
}
QString DownloadController::replaceDomain(const QString& url, const QString domain)
QString DownloadController::replaceDomain(const QString &url, const QString domain)
{
QRegularExpression regex(R"((?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9])");
if(regex.match(url).hasMatch())
if (regex.match(url).hasMatch())
{
return QString(url).replace(regex.match(url).captured(), domain);
}

View File

@@ -6,52 +6,14 @@
#include <QFile>
#include <QNetworkReply>
class DownloadWorker : public QObject
{
Q_OBJECT
public:
explicit DownloadWorker(QObject *parent = nullptr);
void setIdentifier(int identifier);
void setParamter(const QString &url, QPair<qint64, qint64> range, QFile *flle);
qint64 getReceivedPos();
public slots:
void doWork();
void doStop();
void dataReady();
void slotFinish();
void handleProcess(qint64, qint64);
private:
int identifier;
QString url;
qint64 startPos;
qint64 endPos;
qint64 receivedPos = 0;
QNetworkReply *reply;
QNetworkAccessManager *mgr;
QFile *file;
signals:
void resultReady(int identifier, QByteArray data);
void testSignals();
void workFinished();
void downloadProcess();
};
class DownloadController : public QObject
{
Q_OBJECT
public:
explicit DownloadController(QObject *parent = nullptr);
~DownloadController();
void setFilename(QString filename);
void setThreadNum(int threadNum);
void startDownload(const QString &url);
void stopDownload();
qint64 getFileSize(const QString& url);
@@ -59,21 +21,19 @@ public:
private:
int threadNum;
int pidNumber;
QString filename;
qint64 fileSize;
QVector<QPair<qint64, qint64>> ranges;
QFile *file;
QList<DownloadWorker*> workers;
int finish = 0;
bool finished = false;
QVector<QString> domains;
public slots:
void handleProcess();
void chunkDownloadFinish();
signals:
void errorOccur(const QString& msg);
void downloadProcess(qint64, qint64);
void downloadProcess(QString, qint64, qint64);
void downloadFinished();
};

View File

@@ -30,7 +30,7 @@ int main(int argc, char *argv[])
DAboutDialog dialog;
a.setAboutDialog(&dialog);
dialog.setLicense(QObject::tr("We publish this program under GPL V3"));
dialog.setVersion(DApplication::buildVersion("Version 3.2"));
dialog.setVersion(DApplication::buildVersion("Version 3.1.5-5"));
dialog.setProductIcon(QIcon::fromTheme("spark-store")); // 设置Logo
dialog.setProductName(QLabel::tr("Spark Store"));
dialog.setDescription(
@@ -51,7 +51,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.2"));
a.setApplicationVersion(DApplication::buildVersion("3.1.5-5"));
a.setApplicationAcknowledgementPage("https://gitee.com/deepin-community-store/spark-store");
a.setApplicationDescription(
QObject::tr(

View File

@@ -47,11 +47,6 @@ Widget::Widget(DBlurEffectWidget *parent) :
httpClient = new AeaQt::HttpClient;
QtConcurrent::run([=]()
{
downloadController = new DownloadController(this); // 并发下载
});
connect(ui->menu_main, &QPushButton::clicked, this, [=](){Widget::chooseLeftMenu(0);});
connect(ui->menu_network, &QPushButton::clicked, this, [=](){Widget::chooseLeftMenu(1);});
@@ -113,10 +108,9 @@ Widget::Widget(DBlurEffectWidget *parent) :
download_speed.start();
connect(&download_speed,&QTimer::timeout,[=]()
{
if(isdownload)
if(isdownload && theSpeed == "")
{
size1 = download_size;
QString theSpeed;
double bspeed;
bspeed = size1 - size2;
if(bspeed < 1024)
@@ -134,10 +128,12 @@ Widget::Widget(DBlurEffectWidget *parent) :
else
{
theSpeed = QString::number(0.01 * int(100 * (bspeed / (1024 * 1024 * 1024)))) + "GB/s";
}
download_list[nowDownload - 1].setSpeed(theSpeed);
}
size2 = download_size;
}
if(isdownload){
download_list[nowDownload - 1].setSpeed(theSpeed);
}
});
notify_init(tr("Spark\\ Store").toLocal8Bit());
@@ -672,6 +668,7 @@ void Widget::startRequest(QUrl url, QString fileName)
isdownload = true;
download_list[allDownload - 1].free = false;
downloadController = new DownloadController(this); // 并发下载,在点击下载按钮的时候才会初始化
connect(downloadController, &DownloadController::downloadProcess, this, &Widget::updateDataReadProgress);
connect(downloadController, &DownloadController::downloadFinished, this, &Widget::httpFinished);
connect(downloadController, &DownloadController::errorOccur, this, [=](QString msg){this->sendNotification(msg);});
@@ -792,15 +789,15 @@ void Widget::httpReadyRead()
}
}
void Widget::updateDataReadProgress(qint64 bytesRead, qint64 totalBytes)
void Widget::updateDataReadProgress(QString speedInfo, qint64 bytesRead, qint64 totalBytes)
{
if(totalBytes <= 0)
{
return;
}
theSpeed = speedInfo;
download_list[nowDownload - 1].setMax(10000); // 最大值
download_list[nowDownload - 1].setValue((bytesRead * 10000) / totalBytes); // 当前值
download_list[nowDownload - 1].setValue(int(bytesRead * 100 / totalBytes) * 100); // 当前值
download_size = bytesRead;
if(download_list[nowDownload - 1].close)
{
@@ -959,7 +956,9 @@ void Widget::httpFinished() // 完成下载
download_list[nowDownload - 1].free = true;
if(nowDownload < allDownload)
{
// 如果有排队则下载下一个
qDebug() << "切换下一个下载...";
nowDownload += 1;
while(download_list[nowDownload - 1].close)
{
@@ -1043,7 +1042,7 @@ void Widget::on_pushButton_updateServer_clicked()
ui->comboBox_server->clear();
QFile::remove(QDir::homePath().toUtf8() + "/.config/spark-store/server.list");
system("curl -o " + QDir::homePath().toUtf8() + "/.config/spark-store/server.list https://d.store.deepinos.org.cn/store/server.list");
system("curl -o " + QDir::homePath().toUtf8() + "/.config/spark-store/server.list https://d.store.deepinos.org.cn/store/server-and-mirror.list");
std::fstream server;
server.open(QDir::homePath().toUtf8() + "/.config/spark-store/server.list", std::ios::in);
std::string lineTmp;
@@ -1329,7 +1328,7 @@ void Widget::on_webEngineView_urlChanged(const QUrl &arg1)
ui->label_appname->clear();
ui->pushButton_download->setEnabled(false);
ui->stackedWidget->setCurrentIndex(2);
qDebug() << "https://demo-one-vert.vercel.app/" + type_name + "/" + pname;
qDebug() << "https://d.store.deepinos.org.cn/" + type_name + "/" + pname;
qDebug() << "链接地址:" << arg1;
/*

View File

@@ -69,7 +69,7 @@ private slots:
void httpFinished();
void httpReadyRead();
void updateDataReadProgress(qint64,qint64);
void updateDataReadProgress(QString, qint64, qint64);
// SpkAppInfoLoaderThread的槽函数
void sltAppinfoResetUi();
@@ -147,6 +147,7 @@ private:
QFuture<void> load;
QFutureWatcher<void> watchScreenshotLoad;
QTimer download_speed;
QString theSpeed;
QString type_name;
QColor main_color;
int foot;

View File

73
tool/aptss Executable file
View File

@@ -0,0 +1,73 @@
#/bin/bash
if [ "$1" = "install" ] || [ "$1" = "upgrade" ] || [ "$1" = "full-upgrade" ] || [ "$1" = "download" ] ; then
if [ ! -e "/tmp/aptss-conf/apt-fast.conf" ];then
###刷新apt-fast配置
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"
chmod -R 755 /tmp/aptss-conf
fi
DEPEND=`which apt-fast`
if [ "$DEPEND" = "" ] ; then
echo "未安装依赖apt-fast 开始安装"
sudo aptss ssupdate && 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 install apt-fast -y
fi
###执行
bwrap --dev-bind / / \
--bind '/tmp/aptss-conf/apt-fast.conf' /etc/apt-fast.conf \
--bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list \
apt-fast "$@" --allow-downgrades
elif [ "$1" = "ssupdate" ];then
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"
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 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"
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 Dir::Cache="/etc/aptss/" -o APT::Get::List-Cleanup="0"
#只更新星火源
elif [ "$1" = "update" ];then
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"
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"
chmod -R 755 /tmp/aptss-conf
### 额外一份拿来给aptss自动补全用
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 "$@" -o APT::Get::List-Cleanup="0"
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 "$@" -o APT::Get::List-Cleanup="0" -o Dir::Cache="/etc/aptss/"
else
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 "$@"
fi

41
tool/spark-store.asc Normal file
View File

@@ -0,0 +1,41 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQGNBF7sGtgBDADKux63RQqGjbilEBErDjbGH+/sya9VjNBZdge1G/kK+8SEU7x9
QFkSoprS7MN9qEtLhdN4+jqKDwwwlB0kjOK/L3BTsSjeP1fonY+Foprnc5sBBNDq
2g4SQr1joafJq/d/E1GzCFCtUeo1/g8siEB9O2A8LFAqKB0ti6cXFQBc7QrRKNqb
mUQYYkva5TeyYXwg8dV/jlQ1HkRftHO+mDOlxhSZxjH8o/3cHpVB/Ef7LUbUfzTL
jT4Lxu5k6jFYeNI9EmIl36Nfz6o4T+iG19PQjv0d9aZe+4ceFeRQNPPqeubGJO9Z
STNhHBFisgr/NdCKDVimR9wR7NSDceO+NswgMZzzo2xIFCsTB+JrMpTkDEBF1eFC
F2RHwi6T4vJmFdt1rHhBfufgHrGNekZytgZw6tL9WDvDCiCKKZSGetfuBfaNYy63
QNVszRVT5IOf6Rg2vtBIWM/iiAI6E9RsNhElRQj/cQLriIzuwHfgdHx8gPsRSgVx
ZgizW0/2u4ZkrHUAEQEAAbQiRENTdG9yZSA8amlmZW5nc2hlbm1vQG91dGxvb2su
Y29tPokBzgQTAQoAOAIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBJ2aqFn3
UCSxoezhbg5B01SimkQMBQJirsYKAAoJEA5B01SimkQMCx0L/2OvTYmOr4y4wC7i
oC/uCZpWt9eCMEkC1kB2a9xjPX2GbxTnzvrdkiqHDD8uR2gfO7NkHyoGies+zeCT
LcHH1Li+8KnGy3wye1KWgGTpxS3OV1gHawXi2w6OVhoQvod0y3cbGAOtOWpnbg1n
SiJdDy3cjC+BNYSNPuF3qoY6YEdIfE9SaXANxe/57TUbN0TaiQFYdRd7GyyevjtC
KNW8R06QKQ/zNqJSaoMHVVtDICXDCR4yvzmqXJppfMJKwHW9sPLC2c1xVx3pmyXc
yFzIPOyeu3CDvdbXlh1gfoMTnUfWQyB7oIZxmCfFJGdodZwoxA+pkAcyhx87JYpE
L4gy3SERvAog+/dD47gCb5alGYvyk9t7PQAAvwY8yr/6gf7f1U7DzxuT386LefW7
6p5ET/R7xcuNLwRH0ZOp/eQECj72A7KXhQ5IL47Rfdh7VzCkf0MGKBFEIET9OV0G
zv1q/z281pt08wHPGM3CetPWUFWUD9/H/UvBUSmpoSLgBsMhdbkBjQRe7BrYAQwA
mAKDNHieo2P1WGNBMi4pPuhhgv8JyBzk8yrSOU+8s1ZTI4mI82iBEy5zAnAx3W1k
unXVlDyq1/LfzL2Nt8Apr5aQdyEqSu4zN/6JBETB0LIkdrwdwBciAHzAKPfJWCR8
t+Ox76I2MNeVsVQFAjGeb/7QR1Ge6Sx/sgSG7NTWYD6PmQtqmH0xKJsfXYfgayRG
RF1rfu6CV0b2rPFfXOwB+3qQ8YInrPlI/9dswZiVElGGmbQTo3fGqk3T5iShqSnZ
wCYDj2ODDknoPrfE1uUkF7CoYEkGrPbrUMwFK/SHvvG6cUz0EFUENPg7nECPmHGm
GPWByBx/Yo0Jg68JavIeX7q9mnnlTP/3sp1JFLAQpR8q4S9lFOv6uYKJNUxQeBF+
lBUkiafHzeHxJNP3ymDkrRRi640TubEZfVGjp5cskLY+U6KIpAXK/kCp42uPY7ob
cuc3vAZ+5EcYCOY+LI80urQ5a+iMqo2ZTxL7C0BAX79QLgTDmH/FW4ejkSbrXH8v
ABEBAAGJAbYEGAEKACACGwwWIQSdmqhZ91AksaHs4W4OQdNUoppEDAUCYq7GEwAK
CRAOQdNUoppEDOm8C/9w3/Qtd14531O+ZsrQkfQ+ByIvGFKrnz4BIqD/99lR7UXj
3Z2/bN7IGbwNUrBpgFqzlWAzpX9tiGhnwDphwSVeYNsvwepKmtmMAaPkP+ujR95E
62UKpdVVrHH/VOCT4ZsSddwEVOLeI9LltO6RmPr54e3bpBXv6bijGnjhgRyJU2Jg
DVE+UOU3m26fTQZZf3G9W55TBNdtpA1gggppJ7SgbwmuWcFjeF1gaEOeW2P5jaYe
+Nx4Xpc4uf341elTfym8NQ/CfEfgAn3zs0ZOmnCX3JlmFh7gPW8fOSIDTC0NkJtU
6LlguuprKhAUCSPKDlod7f7SmiwMsqvaAH+6Hi402tFnIwA1zjQk4BoCsUAVXVQx
l2LC2UD3zBZw9WO6Y/YDgzM6Q2TlI9l1IjmkMHBWHalZ2afA7Uutv4JeNm0joT1D
O5TmDYkkjjfu/+t+QnmBt5KgN2+HwF83ceJOqbPETvEviG5Wh+RXIT5kSgqgRPuV
44jA/CTiR2VibEJ22D0=
=mGFM
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -1,18 +0,0 @@
#/bin/bash
if [ "$(id -u)" != "0" ]
then
echo "ss-apt-fast需要在root下运行"
exit
fi
DEPEND=`which apt-fast`
if [ "$DEPEND" = "" ] ; then
echo "未安装依赖apt-fast 开始安装"
apt install apt-fast -y
fi
rm /opt/durapps/spark-store/bin/apt-fast-conf/apt-fast.conf
curl -o /opt/durapps/spark-store/bin/apt-fast-conf/apt-fast.conf "https://gitee.com/deepin-community-store/repo_auto_update_script/raw/master/mirror-list-for-apt-fast/apt-fast.conf"
bwrap --dev-bind / / --bind '/opt/durapps/spark-store/bin/apt-fast-conf/apt-fast.conf' /etc/apt-fast.conf apt-fast "$@"

View File

@@ -21,7 +21,7 @@ then
echo "ssinstall需要在root下运行";
uname=`whoami`
echo "Now input the password of $uname"
read upass
read -e upass
################检查密码对不对
echo "$upass" | sudo -S echo "i love amber forever"
passcheck=`echo "$upass" | sudo -S echo "i love amber forever"`
@@ -46,61 +46,53 @@ isuos=`cat /etc/os-release | grep UnionTech`
##############判断是否是root运行如果是则正常走如果不是则代输密码
if [ "$(id -u)" != "0" ];then
#############################无root权限时
#临时提升星火源的优先级
echo "$upass" | sudo -S sed -i 's/400/500/g' /etc/apt/preferences.d/sparkstore
IS_INSTALLED=`which apt-fast`
if [ "$IS_INSTALLED" = "" ] ; then
echo "未安装依赖apt-fast 开始安装"
echo "$upass" | sudo -S apt install apt-fast -y
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" != "" ] && [ "$isuos" != "" ]; then
echo "UOS中系统依赖无法使用第三方下载工具放弃使用apt-fast"
echo ----------------------------------------------------------------------------------
echo "$upass" | sudo -S dpkg -i $1 || apt install -yf
echo "$upass" | sudo -S dpkg -i $1 || sudo aptss ssupdate && 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 install -yf
fi
if [ "$DEPEND" != "" ] && [ "$isuos" = "" ]; then
echo "检测到apt-fast使用ss-apt-fast进行多线程下载加速"
echo "检测到apt-fast使用aptss进行多线程下载加速"
echo ----------------------------------------------------------------------------------
echo "$upass" | sudo -S dpkg -i $1 || ss-apt-fast install -yf
echo "$upass" | sudo -S dpkg -i $1 || sudo aptss ssupdate && sudo aptss install -yf
fi
echo "$upass" | sudo -S sed -i 's/500/400/g' /etc/apt/preferences.d/sparkstore
#恢复优先级
else
###########################有root权限时
#临时提升星火源的优先级
sed -i 's/400/500/g' /etc/apt/preferences.d/sparkstore
IS_INSTALLED=`which apt-fast`
IS_INSTALLED=`which apt-fast`
if [ "$IS_INSTALLED" = "" ] ; then
echo "未安装依赖apt-fast 开始安装"
apt install apt-fast -y
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" != "" ] && [ "$isuos" != "" ]; then
echo "UOS中系统依赖无法使用第三方下载工具放弃使用apt-fast"
echo ----------------------------------------------------------------------------------
dpkg -i $1 || apt install -yf
dpkg -i $1 || aptss ssupdate && 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 install -yf
fi
if [ "$DEPEND" != "" ] && [ "$isuos" = "" ]; then
echo "检测到apt-fast使用ss-apt-fast进行多线程下载加速"
echo "检测到apt-fast使用aptss进行多线程下载加速"
echo ----------------------------------------------------------------------------------
dpkg -i $1 || ss-apt-fast install -yf
dpkg -i $1 || aptss ssupdate && aptss install -yf
fi
sed -i 's/500/400/g' /etc/apt/preferences.d/sparkstore
#恢复优先级

View File

@@ -1,5 +0,0 @@
[Desktop Entry]
Encoding=UTF-8
Type=Application
Exec=/opt/durapps/spark-store/bin/update-upgrade/ss-update-notify.sh
Name=spark-update-notifier

View File

@@ -2,8 +2,51 @@
echo "以上可升级,是否升级?[y/n]"
read yes_or_no
if [ "$yes_or_no" = "y" ];then
sudo ss-apt-fast upgrade -y -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
else
exit
fi
if [ "$yes_or_no" = "y" ];then ###这是确定是否同意
echo "获取更新列表..."
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)"
isuos=`cat /etc/os-release | grep UnionTech`
if [ "$isuos" != "" ]; then ###这是确定是否为UOS 如果是
echo "UOS中系统依赖无法使用第三方下载工具使用apt-fast下载本体"
cd /var/cache/apt/archives
for PKG_NAME in $PKG_LIST;
do
echo "$PKG_NAME 正在下载..."
sudo aptss download "$PKG_NAME" -y >/dev/null 2>&1;
done
echo "----开始安装"
for PKG_NAME in $PKG_LIST;
do
echo "$PKG_NAME 正在更新..."
if 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 install "$PKG_NAME" -y >/dev/null 2>&1;
then
echo "$PKG_NAME 已更新"
else
echo "WARNING: $PKG_NAME 无法更新"
fi
done
else ###这是确定是否为UOS,如果不是
for PKG_NAME in $PKG_LIST;
do
echo "$PKG_NAME 正在更新..."
if sudo aptss install "$PKG_NAME" -y >/dev/null 2>&1;
then
echo "$PKG_NAME 已更新"
else
echo "WARNING: $PKG_NAME 无法更新"
fi
done
fi ###这是确定是否为UOS
fi ###这是确定是否同意

View File

@@ -30,7 +30,7 @@ echo "输入2 查看可更新软件包列表并决定是否更新"
echo "输入3 $text_auto_install_open点击安装免输入密码功能"
echo "输入4 退出脚本"
echo
read option
read -e option
case $option in
0)
@@ -51,29 +51,24 @@ case $option in
;;
1)
echo "执行以下操作需要授权..."
if [ -f /etc/xdg/autostart/spark-update-notifier.desktop ];then
if [ -e /etc/systemd/system/multi-user.target.wants/spark-update-notifier.service ];then
echo "---检测到已经启动了自动更新检测,执行关闭"
sudo systemctl disable spark-update-notifier
sudo rm /etc/xdg/autostart/spark-update-notifier.desktop
sleep 3
reset
else
echo "---未检测到自动更新检测,执行启动"
sudo systemctl enable spark-update-notifier
sudo service spark-update-notifier start
# ln -s /opt/durapps/spark-store/bin/update-upgrade/autostart/spark-update-notifier.desktop $XDG_CONFIG_HOME/autostart
#
sudo ln -s /opt/durapps/spark-store/bin/update-upgrade/autostart/spark-update-notifier.desktop /etc/xdg/autostart
/opt/durapps/spark-store/bin/update-upgrade/ss-update-notify.sh now
sleep 3
reset
fi
;;
2)
echo "请注意:如果有些更新需要从系统获取更多依赖,你将需要手动操作 sudo ss-apt-fast upgrade"
echo "执行以下操作需要授权..."
/opt/durapps/spark-store/bin/update-upgrade/ss-upgrade-list.sh
sudo aptss ssupdate
/opt/durapps/spark-store/bin/update-upgrade/ss-upgrade-list.sh
/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade.sh
echo "---请按回车返回"
read

View File

@@ -0,0 +1,70 @@
#!/bin/bash
set -e
LANG=en.US
function notify-send() {
#Detect the name of the display in use
local display=":$(ls /tmp/.X11-unix/* | sed 's#/tmp/.X11-unix/X##' | head -n 1)"
#Detect the user using such display
local user=$(who | grep '('$display')' | awk '{print $1}' | head -n 1)
#Detect the id of the user
local uid=$(id -u $user)
sudo -u $user DISPLAY=$display DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus notify-send "$@"
}
#检测网络链接畅通
function network()
{
#超时时间
local timeout=5
#目标网站
local target=www.baidu.com
#获取响应状态码
local ret_code=`curl -I -s --connect-timeout ${timeout} ${target} -w %{http_code} | tail -n1`
if [ "x$ret_code" = "x200" ]; then
#网络畅通
return 0
else
#网络不畅通
return 1
fi
return 0
}
network
if [ $? -eq 1 ];then
echo "Network fail. Stop to avoid bother dpkg"
exit -1
fi
#The code above is modified from https://blog.csdn.net/yaxuan88521/article/details/120516298
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"
# 每日更新星火源文件
updatetext=`aptss ssupdate`
mkdir -p /tmp/spark-store-updatenum/
isupdate=`echo ${updatetext: -5}`
if [ "$isupdate" = "date." ];then
exit 0
fi
update_app_number=`echo ${updatetext%package*} #从右向左截取第一个 src 后的字符串`
update_app_number=`echo ${update_app_number##*information...}`
notify-send -i spark-store "星火更新提醒" "星火商店仓库中有$update_app_number个软件包可以更新啦!请到星火商店的菜单处理"

View File

@@ -1,57 +0,0 @@
#!/bin/bash
set -e
rm -rf /tmp/spark-store-updatenum/number
LANG=en.US
#!/bin/bash
#检测网络链接畅通
function network()
{
#超时时间
local timeout=1
#目标网站
local target=www.baidu.com
#获取响应状态码
local ret_code=`curl -I -s --connect-timeout ${timeout} ${target} -w %{http_code} | tail -n1`
if [ "x$ret_code" = "x200" ]; then
#网络畅通
return 0
else
#网络不畅通
return 1
fi
return 0
}
network
if [ $? -eq 1 ];then
echo "Network fail. Stop to avoid bother dpkg"
exit -1
fi
#The code above is modified from https://blog.csdn.net/yaxuan88521/article/details/120516298
updatetext=`sudo apt update -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"`
mkdir -p /tmp/spark-store-updatenum/
isupdate=`echo ${updatetext: -5}`
if [ "$isupdate" = "date." ];then
sudo echo "0" > /tmp/spark-store-updatenum/number
exit 0
fi
update_app_number=`echo ${updatetext%package*} #从右向左截取第一个 src 后的字符串`
update_app_number=`echo ${update_app_number##*information...}`
sudo echo "$update_app_number" > /tmp/spark-store-updatenum/number

View File

@@ -1,28 +0,0 @@
#!/bin/bash
set -e
isexistnumber=0
if [ "$1" = "now" ];then
if [ -f /tmp/spark-store-updatenum/number ];then
update_app_number=`cat /tmp/spark-store-updatenum/number`
echo "$update_app_number"
if [ "$update_app_number" = "0" ];then
exit 0
fi
notify-send -i spark-store "星火更新提醒" "星火商店仓库中有$update_app_number个软件包可以更新啦!请到星火商店的菜单处理"
fi
exit 0
fi
until [ $isexistnumber -eq 1 ];do
if [ -f /tmp/spark-store-updatenum/number ];then
sleep 10
update_app_number=`cat /tmp/spark-store-updatenum/number`
echo "$update_app_number"
if [ "$update_app_number" = "0" ];then
exit 0
fi
notify-send -i spark-store "星火更新提醒" "星火商店仓库中有$update_app_number个软件包可以更新啦!请到星火商店的菜单处理"
isexistnumber=1
fi
sleep 10
done

View File

@@ -3,4 +3,4 @@ set -e
echo "---可更新的应用有:"
sudo apt list --upgradable -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
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"

View File

@@ -1,91 +0,0 @@
#!/bin/bash
reset
echo "Copyright (c) 2019-2021 The Spark Project"
if [ -x "/usr/bin/deepin-deb-installer" ] ; then
echo "深度软件包安装器已安装,开始检测证书"
else
echo "未安装深度软件包安装器,拒绝执行"
echo "UOS需要深度软件包安装器来认证签名"
echo "如果你用的是UOS你能卸载这玩意说明你已经开了开发者模式......悄悄告诉你,放屁是不用脱裤子的!"
echo "如果你用的不是统信系发行版......所以你为什么要打开这个脚本?"
exit 1
fi
if [ -f "/usr/share/ca-certificates/deepin/private/priv.crt" ] ; then
echo "检测到已经生成过证书,直接跳过询问"
else
until [ -f "/usr/bin/cert-tool" ] ; do
#强制未安装证书工具的不通过
echo "该工具的原理是利用UOS的自签名安装包免开发者的特性需要您的UOS ID账号和密码请在使用工具前确保在应用商店中已安装过“证书工具”这个应用"
echo "如果没有安装,则无法使用。请确认安装后再进行下一步操作"
sleep 3
echo "如果你确认已经安装了该应用,请按回车"
read renyijian
#检测是否在说谎签名文件
if [ -f "/usr/bin/cert-tool" ] ; then
echo "成功检测到cert-tool存在开始检测证书\n"
else
echo "没有检测到该应用,请您再次确认“证书工具”已经安装!"
sleep 3
clear
fi
done
until [ -f "/usr/share/ca-certificates/deepin/private/priv.crt" ] ; do
echo "没有检测到证书准备调用证书工具生成证书请输入您的UOS账号/密码。本脚本不会上传任何信息"
echo "请在此行输入您的UOS账号用户名/电话号/邮箱"
read account
echo "请在此行输入您的UOS账号密码"
read passwd
echo "即将安装证书,请在弹出的窗口安装"
cert-tool -username="$account" -password="$passwd"
done
echo "检测到已经生成过证书,准备签名"
fi
#这个if是判断是否已经有证书
unset account
unset passwd
unset renyijian
debpath=""
cd /tmp
until [ -f "$debpath" ] ; do
if [ ! $1 ] ; then
echo "没有检测到参数,以交互式安装运行"
echo "请输入deb文件的绝对路径或直接拖入deb文件(仅限支持的文件管理器,比如深度文管),结束后回车"
echo "生成的签名过的deb将保存在/tmp/signed_deb"
read debpath
else
echo "参数存在,直接开始签名\n生成的签名过的deb保存在/tmp/signed_deb"
debpath="$1"
echo "读取到的deb路径为$debpath"
fi
debpath=`echo "$debpath" | sed $'s/\'//g'`
echo "去除可能的单引号后得到:$debpath"
if [ -f $debpath ] ; then
echo "文件有效,开始签名"
echo "------------以下为签名工具输出------------"
deepin-elf-sign-deb "$debpath"
echo "------------签名工具输出已结束------------"
echo "签名结束,启动深度软件包管理器"
else
echo "路径出错,请确认你输入了正确的路径!"
sleep 3
clear
fi
done
file_name=$(basename "$debpath")
echo "--------以下为深度软件包安装器输出--------"
deepin-deb-installer "/tmp/signed_deb/$file_name"
echo "--------深度软件包安装器输出已结束--------"
echo "删除临时文件"
rm /tmp/signed_deb/$file_name

View File

@@ -1,142 +0,0 @@
#!/bin/bash
reset
echo "Copyright (c) 2019-2021 The Spark Project"
if [ -x "/usr/bin/deepin-deb-installer" ] ; then
echo "深度软件包安装器已安装,开始检测证书"
else
echo "未安装深度软件包安装器,拒绝执行"
echo "UOS需要深度软件包安装器来认证签名"
echo "如果你用的是UOS你能卸载这玩意说明你已经开了开发者模式......悄悄告诉你,放屁是不用脱裤子的!"
echo "如果你用的不是统信系发行版......所以你为什么要打开这个脚本?"
exit 1
fi
if [ -f "/usr/share/ca-certificates/deepin/private/priv.crt" ] ; then
echo "检测到已经生成过证书,直接跳过询问"
else
until [ -f "/usr/bin/cert-tool" ] ; do
#强制未安装证书工具的不通过
echo "该工具的原理是利用UOS的自签名安装包免开发者的特性需要您的UOS ID账号和密码请在使用工具前确保在应用商店中已安装过“证书工具”这个应用"
echo "如果没有安装,则无法使用。请确认安装后再进行下一步操作"
echo "如果你确认已经安装了该应用,请按回车"
read renyijian
#检测是否在说谎签名文件
if [ -f "/usr/bin/cert-tool" ] ; then
echo "成功检测到cert-tool存在开始检测证书\n"
else
echo "没有检测到该应用,请您再次确认“证书工具”已经安装!"
sleep 3
clear
fi
done
until [ -f "/usr/share/ca-certificates/deepin/private/priv.crt" ] ; do
echo "没有检测到证书准备调用证书工具生成证书请输入您的UOS账号/密码。本脚本不会上传任何信息"
echo "请在此行输入您的UOS账号用户名/电话号/邮箱"
read account
echo "请在此行输入您的UOS账号密码"
read passwd
echo "即将安装证书,请在弹出的窗口安装"
cert-tool -username="$account" -password="$passwd"
done
echo "检测到已经生成过证书,准备签名"
fi
#这个if是判断是否已经有证书
unset account
unset passwd
unset renyijian
mkdir -p /tmp/spark-store-appremover
cd /tmp/spark-store-appremover
#工作目录应当为 /tmp/spark-store-appremover
while [ ! $pkgname ] ; do
if [ ! $1 ] ; then
echo "没有检测到包名,以交互式模式运行"
echo "请输入你要卸载的软件包名,输入结束后回车"
read pkgname
else
echo "检测到包名,跳过获取"
pkgname="$1"
echo "读取到的包名为:$pkgname"
fi
if [ ! $pkgname ] ; then
echo "没有检测到包名,请重新输入!"
sleep 3
clear
else
echo "包名读取成功,进入下一步"
fi
done
#while [ ! $version ] ; do
# if [ ! $2 ] ; then
# echo "没有检测到版本号,以交互式模式运行"
# echo "请输入你要卸载的软件包版本号,输入结束后回车"
# read version
# else
# echo "检测到包名,跳过获取"
# version="$2"
# echo "读取到的版本号为:$version"
# fi
#
# if [ ! $version ] ; then
# echo "没有检测到版本号,请重新输入!"
# sleep 3
# clear
# else
# echo "版本号读取成功,进入下一步"
# fi
#done
#发现版本号不一定一致也可以卸载
version="1.0"
echo "开始生成deb包"
echo "输出的control文件为"
echo ""
echo "Package: $pkgname"
echo "Version: $version"
echo "Depends: "
echo "Maintainer: spark-store"
echo "Description: 这是一个假软件包,请点击卸载"
echo "Architecture: $(arch)"
echo "-----------------------开始生成-----------------------"
workdir=$(pwd)
echo "工作目录为$workdir"
mkdir DEBIAN
cd DEBIAN
touch control
echo "Package: $pkgname" >> ./control
echo "Version: $version" >> ./control
echo "Depends: " >> ./control
echo "Maintainer: spark-store" >> ./control
echo "Description: 这是一个假软件包,请点击卸载" >> ./control
echo "Architecture: $(arch)" >> ./control
echo "-----------------------开始打包-----------------------"
cd ..
workdir=$(pwd)
echo "回退到工作目录,当前目录位于$workdir"
fakeroot dpkg -b . ./uninstall.deb
echo "-----------------------打包结束-----------------------"
cd /tmp
echo "-----------------------开始签名-----------------------"
deepin-elf-sign-deb "/tmp/spark-store-appremover/uninstall.deb"
echo "-----------------------签名结束-----------------------"
echo "-----------------启动深度软件包管理器-------------------"
deepin-deb-installer "/tmp/signed_deb/uninstall.deb"
file_name=$(basename "/tmp/signed_deb/uninstall.deb")
echo "---------------以上为深度软件包管理器输出----------------"
echo "删除临时包"
rm "/tmp/signed_deb/$file_name"
rm -r /tmp/spark-store-appremover