!243 428理之律者

Merge pull request !243 from shenmo/dev
This commit is contained in:
shenmo 2023-10-31 14:36:15 +00:00 committed by Gitee
commit 8b436170d1
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
39 changed files with 1612 additions and 503 deletions

1
.gitignore vendored
View File

@ -53,3 +53,4 @@ debian/*.substvars
debian/spark-store
.vscode/*
src/spark-store

91
FAQ.md Normal file
View File

@ -0,0 +1,91 @@
# FAQ
## Spark App Store FAQ and Support Guide
### Introduction
The Spark App Store is an application store aimed at Linux users and supports multiple Linux distributions. Below are some commonly asked questions and solutions. Please note that this document is primarily intended for ordinary users who are not familiar with Linux and the APT package management system.
---
### Communication and Feedback
**Q: Where can I join the community group?**
**A:** You can click [here](https://www.deepinos.org/) to enter the main communication platform of the Spark Store.
> ⚠️ If the above link doesn't work, you can also join our QQ groups as an alternative. The group numbers are 872690351 and 865927727. We also offer forums for communication.
#### Differences Between arm64 and amd64
arm64
* Full Name: Advanced RISC Machine 64-bit
* Main Use: Primarily used in mobile devices, embedded systems, and some new servers and desktop computers.
* Advantages: Low power consumption, high efficiency, suitable for battery-driven and heat-sensitive devices.
* Main Manufacturers: Apple, Qualcomm, HiSilicon, Phytium, etc.
amd64
* Full Name: AMD 64-bit, also known as x86_64
* Main Use: Primarily used in desktop computers, laptops, and servers.
* Advantages: High performance, suitable for computation-intensive applications.
* Main Manufacturers: Intel and AMD.
* The main differences between the two are in the instruction sets and application scenarios. amd64 is usually used for high-performance computers and servers, while arm64 is more commonly used in power-sensitive settings.
#### How to Check:
Linux:
- Open the terminal.
- Type `uname -m` or `arch` and press Enter.
- You will see your processor architecture (possibly x86_64, aarch64, etc.).
---
### Domestic Architecture Support
**Q: I use a domestic chip architecture, how can I get applications?**
**A:** Currently, Spark Store supports **arm** architecture for domestic chips. You can download deb packages suitable for arm64 architecture.
> ⚠️ Please note that this is experimental support. If you encounter any issues, please provide feedback via Spark's communication platform, QQ group, or forums.
---
### Dependency Issues
**Q: I get errors when installing dependencies**
**A:** If you are using UOS or deepin, please do not install the dependency packages. For Kali Linux/Kdeneon etc., temporary support is not available, please compile and install yourself.
> 💡 If errors occur, try running `sudo apt update` before attempting the installation again. If the issue persists, refer to the first question and seek help on the community platform.
---
### Submission and App Updates
**Q: Where can I submit applications?**
**A:** You can find the "Submit Application" option in the upper-right corner menu of the app store interface.
---
### Support for Non-deepin/UOS Users
**Q: I'm not a deepin/UOS user; can I use the Spark App Store?**
**A:** Yes, you can directly install if you're using Ubuntu 22.04. For Ubuntu 20.04/Debian10/Debian11, please install the dependencies first.
---
### Installation Methods
**Q: Can I use dpkg -i for installation?**
**A:** No! Use `sudo apt install ./xxxx.deb` to install, or use graphical installers like gdebi.
> ⚠️ Using dpkg directly will not handle software dependencies, which is a common mistake.
---
### System Updates
**Q: Will the Spark Store affect normal system updates?**
**A:** No, the Spark Store has separated its application sources from system sources and will not affect regular system updates.
---
### Reporting Issues and Removing Apps
**Q: Some apps are outdated or inactive, and I want them removed**
**A:** You can report issues [here](https://gitee.com/deepin-community-store/software_-issue).
---
### Installing Spark App Store
If you wish to install the Spark App Store, please visit the [Release page](https://gitee.com/deepin-community-store/spark-store/releases), find the latest version, and choose the package suitable for your current system.
> ⚠️ Special Note: If you are using Debian10/Debian11 or Ubuntu 20.04, you may need to download additional dependency packages. After downloading, unzip multiple times until you see the software user guide. For operating systems later than Ubuntu 22.04, you do not need to install dependency packages. Just follow the steps above to install the main program directly.
---

90
FAQ.zh.md Normal file
View File

@ -0,0 +1,90 @@
# FAQ
## 星火应用商店FAQ与支持指南
### 简介
星火应用商店是一个面向 Linux 用户的应用商店,支持多种不同的 Linux 发行版。以下是一些常见问题及解决方案。请注意,该文档主要面向对 Linux 和 APT 软件包管理系统不熟悉的普通用户。
---
### 交流与反馈
**Q: 在哪进交流群?**
**A:** 你可以点击[这里](https://www.deepinos.org/)进入星火商店的主交流平台。
> ⚠️ 如果上面的链接无法使用,你还可以加入我们的 QQ 群作为备选方案,群号是 872690351 和 865927727。我们还提供论坛作为交流平台。
arm64与amd64的区别
arm64
* 全称: Advanced RISC Machine 64-bit
* 主要用途: 主要应用于移动设备、嵌入式系统以及一些新型的服务器和桌面计算机。
* 优势: 低功耗、高效率,适合用在电池驱动和热敏感的设备。
* 主要生产商: 苹果、高通、海思、飞腾等。
amd64
* 全称: AMD 64-bit, 也被称为 x86_64
* 主要用途: 主要应用于桌面计算机、笔记本以及服务器。
* 优势: 高性能,适用于计算密集型应用。
* 主要生产商: Intel和AMD。
* 两者最主要的不同在于指令集和应用场景。amd64通常用于高性能需求的计算机和服务器而arm64则更多应用于功耗要求更严格的场合。
查看方法:
Linux
- 打开终端。
- 输入 uname -m 或 arch 并按回车。
- 你将看到你的处理器架构(可能是 x86_64, aarch64 等)。
---
### 国产架构支持
**Q: 我是国产架构,怎么获取应用?**
**A:** 目前,星火商店支持**arm**架构的国产芯片。你可以下载适用于 arm64 架构的deb包软件安装包
> ⚠️ 请注意这是实验性的支持。如果遇到问题请在星火交流平台、QQ群或论坛向我们反馈。
---
### 安装依赖问题
**Q: 安装依赖包出现错误**
**A:** 如果你使用UOS或deepin请不要安装依赖包。对于Kali Linux/Kdeneon等暂时不支持请自行编译安装。
> 💡 出现错误时,尝试运行 `sudo apt update` 后再尝试安装。如果问题仍然存在,请参考第一条,进入交流平台寻求帮助。
---
### 投稿与应用更新
**Q: 在哪里投稿?**
**A:** 你可以在应用商店界面的右上角菜单找到“投递应用”的选项。
---
### 非deepin/UOS用户支持
**Q: 我不是deepin/UOS用户可以使用星火应用商店吗**
**A:** 可以,如果你是使用 Ubuntu 22.04,请直接安装。对于 Ubuntu 20.04/Debian10/Debian11请先安装依赖包。
---
### 安装方法
**Q: 我可以用dpkg -i安装吗**
**A:** 不可以!使用 `sudo apt install ./xxxx.deb` 来安装或者使用gdebi等图形化的安装器。
> ⚠️ 直接使用dpkg是不会处理软件依赖的这是一个常见的错误。
---
### 系统更新
**Q: 星火商店会影响系统正常更新吗?**
**A:** 不会,星火商店已经将应用源与系统源分开,不会影响系统的正常更新。
---
### 报告问题和应用下架
**Q: 有些应用已经过时或者失效了,我想让他下架**
**A:** 你可以前往 [这里](https://gitee.com/deepin-community-store/software_-issue) 报告问题。
---
### 安装星火应用商店
如果你想安装星火应用商店,请打开[Release页面](https://gitee.com/deepin-community-store/spark-store/releases),找到最新版本,并选择适用于当前系统的安装包下载。
> ⚠️ 特别提示: 如果你在使用 Debian10/Debian11 或 Ubuntu 20.04,你可能额外下载依赖补充包。您需要在下载完依赖包后,解压多次一直到看到内部的软件使用说明,对于 Ubuntu22.04 以后的操作系统版本,您无需安装依赖包,您需要按照上面的操作直接安装本体程序。
---

169
README.md
View File

@ -1,83 +1,160 @@
# Spark App Store
[![star](https://gitee.com/deepin-community-store/spark-store/badge/star.svg?theme=gvp)](https://gitee.com/deepin-community-store/spark-store/stargazers) [![fork](https://gitee.com/deepin-community-store/spark-store/badge/fork.svg?theme=gvp)](https://gitee.com/deepin-community-store/spark-store/members)
## Introduction
Welcome to the Spark App Store! This is an app store designed for Linux users, aiming to solve the problem of dispersed and difficult-to-obtain applications in the Linux ecosystem. No matter what type of Linux distribution you are using, you may find suitable software packages here.
Spark Store aims to collect Linux apps for the convieniece of Linux new comers
The number of Linux applications is relatively limited, and the availability of Wine software is also quite challenging. Excellent development and tool resources are scattered across various communities and forums, making it difficult for the entire ecosystem to improve comprehensively.
The collecting process needs everyone's help
The construction of the ecosystem is not dependent on the isolated efforts of individuals but requires the participation of the entire community. Only when everyone's "sparks" gather together can they ignite a "prairie fire."
We set up this APP Store and collect APPs/tools that everyone need widely. Also we pack Windows apps with wine.
To improve this situation, we have launched this app store. We have broadly included various user-demand software packages, gathered high-quality tools, and actively adapted Wine applications, all stored in our software library for easy user access.
All packages will be shared in our repository for users to get freely.
**Currently supported Linux distributions include:**
Distrobution supported
- **amd64 architecture:** deepin 20 / deepin 23 / Ubuntu 20.04 / Ubuntu 22.04 / UOS Home Edition 20
- **arm64 architecture:** UOS Professional Edition 1060 / Ubuntu 22.04 / deepin 23
* amd64: deepin 20 / deepin 23 / Ubuntu 22.04 LTS / UniontechOS Home 21
* arm64: UniontechOS Professional 1060 / Ubuntu 22.04 LTS / deepin 23
> Special Note: We also support all versions of Ubuntu operating systems higher than Ubuntu 22.04, such as Ubuntu 22.10, 23.04, 23.10, etc.
**Important Notice:** This software does not provide any form of warranty. If you plan to use it on UOS Professional Edition, please make sure to understand and enable Developer Mode. Make sure you have basic troubleshooting capabilities. It should be clear that we have not conducted extensive testing on the UOS operating system. Therefore, using the Spark client may lead to a series of issues like failed system updates, data loss, etc., all risks to be borne by the user.
You can track our Issue resoving progress here https://gitee.com/deepin-community-store/spark-store/board
## Team Collaboration: For detailed documentation related to branch management, please see [this link](https://deepin-community-store.gitee.io/spark-wiki/#/Dev/Spark-Store-Git-Repo).
We warmly welcome you to join our development team. Whether you want to participate in development or submit applications, you can find your place here to jointly promote the development of the Linux application ecosystem.
We hope people who see here can also join our teamdevelopment help or submit applications are welcomed
You can track our Issue handling status in real-time through the following link: [Gitee Issue Board](https://gitee.com/deepin-community-store/spark-store/board).
If you want to submit an APP to share with othersPlease [Click here](https://upload.deepinos.org/index)
If you have a software package you'd like to submit, please [click here to submit](https://upload.deepinos.org/index).
## Contents
## 🙌 A simple start
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://zunyun01.store.deepinos.org.cn/spark-store-dependencies-kylin.zip)
- [Determine your system architecture](#determine-your-system-architecture)
- [System support and installation guide](#system-support-and-installation-guide)
- [For Deepin / UOS Users](#for-deepin-users)
- [For Ubuntu Users](#for-ubuntu-users)
- [For Debian Users](#for-debian-users)
- [Frequently Asked Questions (FAQ)](#frequently-asked-questions-faq)
- [Contact and Feedback](#contact-and-feedback)
---
#### Compile and developement
**dev branch is for development, Flamescion branch is for amd64 and Reason branch is for arrch64.** Although, for the most of the time, Flamescion branch is same as Reason.
## Determine your system architecture
For Deepin V20/UOS 21/ Debian 11
Before installing any software, you need to know what architecture your computer runs on (such as x86_64/amd64 or aarch64/arm64).
```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 fakeroot qtwayland5 qtwayland5-dev-tools dde-qt5wayland-plugin libqt5svg5*
**How to check:**
```
1. Open a Linux terminal.
2. Type `uname -m` or `arch` and press Enter.
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 qtwayland5 qtwayland5-dev-tools libqt5svg5*
You will see an output, and that's your system architecture.
```
- If you see `x86_64`, your system is AMD64 architecture.
- If you see `aarch64`, your system is ARM64 architecture.
Then
---
```shell
git clone https://gitee.com/deepin-community-store/spark-store.git
cd spark-store
dpkg-buildpackage -j
```
## System support and installation guide
Or:
```shell
git clone https://gitee.com/deepin-community-store/spark-store.git
cd spark-store
./build_and_install.sh
```
## EULA
### For Deepin Users
This is our [EULA](https://genshin-impact.fandom.com/wiki/Eula)
#### For Deepin Users
1. **Download and Install**
## 🚀 Coorperation
You can directly search for Spark App Store in the Deepin Store to install, or copy this link to open and install in your browser:
We use Gitee as our code hosting platform. Please click here to contact us.
> appstore://deepin-home-appstore-client?app_detail_info/spark-store
https://gitee.com/deepin-community-store/spark-store
To use the latest version, please visit the [Spark App Store Release page](https://gitee.com/deepin-community-store/spark-store/releases) and download the latest version suitable for Deepin. Install to use.
### Forum
Assuming you've downloaded to the `Downloads` folder in your user directory, we recommend you use the APT tool to install:
https://www.deepinos.org/
```shell
cd ~/Downloads
sudo apt install ./spark-store*.deb
```
#### QQ Group
### For Ubuntu Users
https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/
#### For Ubuntu 20.04 Users
1. **Download Dependencies**
* Please visit the [Spark App Store Dependency Download page](https://spark-app.store/download_dependencies_latest) and download the latest dependency package.
* Unzip the dependency package multiple times until you see multiple installation packages ending with `.deb`.
* Follow the instructions in the dependency package to install all the dependencies at once.
2. **Download and Install**
Visit the [Spark App Store Release page](https://gitee.com/deepin-community-store/spark-store/releases), download the installation package that matches your computer's architecture, and install it.
Assuming you've downloaded to the `Downloads` folder in your user directory, we recommend you use the APT tool to install:
```shell
cd ~/Downloads
sudo apt install ./spark-store*.deb
```
#### For Ubuntu 22.04 and Higher Version Users
1. **No Need to Install Dependencies**
2. **Download and Install**
Visit the [Spark App Store Release page](https://gitee.com/deepin-community-store/spark-store/releases), download the installation package that matches your computer's architecture, and install it.
Assuming you've downloaded to the `Downloads` folder in your user directory, we recommend you use the APT tool to install:
```shell
cd ~/Downloads
sudo apt install ./spark-store*.deb
```
### For Debian Users
#### For Debian 11 Users
1. **Download Dependencies**
* Please visit the [Spark App Store Dependency Download page](https://spark-app.store/download_dependencies_latest) and download the latest dependency package.
* Unzip the dependency package multiple times until you see multiple installation packages ending with `.deb`.
* Follow the instructions in the dependency package to install all the dependencies at once.
2. **Download and Install**
Please visit the [Spark App Store Release page](https://gitee.com/deepin-community-store/spark-store/releases) and download. Install to use.
#### For Debian 12+ Users
1. **No Need to Install Dependencies**
2. **Download and Install**
Please visit the [Spark App Store Release page](https://gitee.com/deepin-community-store/spark-store/releases), download the installation package that matches your computer's architecture, and install it.
Assuming you've downloaded to the `Downloads` folder in your user directory, we recommend you use the APT tool to install:
```shell
cd ~/Downloads
sudo apt install ./spark-store*.deb
```
---
## Frequently Asked Questions (FAQ)
Please refer to the [Spark App Store FAQ and Support Guide](https://gitee.com/deepin-community-store/spark-store/blob/dev/FAQ.md).
You can also check the [Chinese version](https://gitee.com/deepin-community-store/spark-store/blob/dev/FAQ.zh.md) here.
---
## Contact and Feedback
- If you have any questions or suggestions, please submit them via email or on our [Gitee page](https://gitee.com/deepin-community-store/spark-store/issues).
- If you want to follow our development progress, you can go to the [Spark App Store Board](https://gitee.com/deepin-community-store/spark-store/board) for more information.
- Our [Forum](https://www.deepinos.org/)
- Our [QQ Group](https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/)
---

View File

@ -2,81 +2,172 @@
[![star](https://gitee.com/deepin-community-store/spark-store/badge/star.svg?theme=gvp)](https://gitee.com/deepin-community-store/spark-store/stargazers) [![fork](https://gitee.com/deepin-community-store/spark-store/badge/fork.svg?theme=gvp)](https://gitee.com/deepin-community-store/spark-store/members)
## 简介
国内的Linux应用比较少wine应用难以获取优质工具分散在民间各大论坛无法形成合力难以改善生态
生态构建需要的不是某一方的单打独斗,而是人人行动起来,汇聚星火,产生燎原之势
我们创建了这个应用商店广泛收录大家需要的软件包搜集优质小工具主动适配wine应用存放到储存库供大家获取
发行版支持:
* amd64: deepin 20 / deepin 23 / Ubuntu 22.04 / UOS家庭版20
* arm64: UOS专业版1060 / Ubuntu 22.04 / deepin 23
**请注意本程序不包含任何保证若你要在UOS专业版上使用请确保你打开了开发者模式且拥有排查错误的能力风险自负**
## 关于协作:分支相关的文档见 [这里](https://deepin-community-store.gitee.io/spark-wiki/#/Dev/Spark-Store-Git-Repo)
欢迎来到星火应用商店这是一个为Linux用户设计的应用商店旨在解决Linux生态下应用分散、难以获取的问题。无论你是使用什么类型的Linux发行版这里都有可能找到适合你的软件包。
希望看到这里的人也可以加入我们的队伍,开发或者投递应用都很欢迎,共同构建Linux应用生态
Linux 应用的数量相对有限Wine 软件的可获得性也颇为困难。优秀的开发和工具资源散布在各大社区和论坛之间,这种分散化让整个生态系统难以得到全面的提升。
在这里追踪我们的Issue处理情况 https://gitee.com/deepin-community-store/spark-store/board
生态系统的构建并非依赖个体的孤立努力,而需要全社区共同参与。只有当大家的“星火”聚集一处,方可引发“燎原之势”。
如果有想要提交的软件包,请 [在这里投稿](https://upload.deepinos.org/index)
为了改善这一现状,我们推出了这个应用商店。我们广泛地收录了各种用户需求的软件包,汇集了高质量的小工具,并主动对 Wine 应用进行了适配,一切都储存在我们的软件库中,以便用户方便地获取。
**当前支持的Linux发行版包括**
- **amd64架构** deepin 20 / deepin 23 / Ubuntu 20.04 / Ubuntu 22.04 / UOS家庭版20
- **arm64架构** UOS专业版1060 / Ubuntu 22.04 / deepin 23
> 特别说明我们还支持所有版本高于Ubuntu 22.04的Ubuntu操作系统例如Ubuntu 22.10、23.04、23.10等。
**重要须知:** 本软件不提供任何形式的保证。若您计划在UOS专业版上使用请务必了解并启用开发者模式。请确保您具备基础的故障排查能力。需要明确的是我们没有在UOS操作系统上进行广泛的测试。因此使用星火客户端可能会导致一系列问题如系统更新失败、数据丢失等所有风险需由用户自行承担。
## 🙌 简单的开始
如果想安装 `星火应用商店` ,请打开右侧的 [Release] 页面,找到最新版本,并选择适用于当前系统的安装包下载。
## 关于团队协作:分支管理相关的详细文档可参见 [此链接](https://deepin-community-store.gitee.io/spark-wiki/#/Dev/Spark-Store-Git-Repo)
如果你在使用 `Debian 11/Ubuntu 20.04`,你需要额外下载[依赖补充包](https://zunyun01.store.deepinos.org.cn/spark-store-dependencies-kylin.zip)
我们热忱欢迎您加入我们的开发团队。无论您是想参与开发还是想提交应用都能在这里找到属于您的一席之地共同推动Linux应用生态的发展。
您可以通过以下链接实时跟踪我们的Issue处理状态[Gitee Issue看板](https://gitee.com/deepin-community-store/spark-store/board)。
若您有软件包想要提交,敬请 [点击此处进行投稿](https://deepin-community-store.gitee.io/spark-wiki/#/Submit/Submit)。
## 目录
- [确定你的系统架构](#确定你的系统架构)
- [系统支持与安装指引](#系统支持与安装指引)
- [对于 Deepin / UOS 用户](#对于deepin用户)
- [对于 Ubuntu 用户](#对于ubuntu用户)
- [对于 Debian 用户](#对于debian用户)
- [常见问题FAQ](#常见问题faq)
- [联系与反馈](#联系与反馈)
---
#### 编译安装
**dev分支用于开发Flamescion分支是amd64,Reason分支是aarch64**。然而绝大多数情况下Flamescion和Reason的内容是一致的
## 确定你的系统架构
Deepin V20/UOS 21 系统下, 安装依赖
在安装任何软件之前你需要知道你的计算机运行的是哪种架构如x86_64/amd64或aarch64/arm64
```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 fakeroot qtwayland5 qtwayland5-dev-tools dde-qt5wayland-plugin libqt5svg5*
**如何检查:**
```
1. 打开Linux终端。
2. 输入 `uname -m``arch` 并按回车。
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 qtwayland5 qtwayland5-dev-tools libqt5svg5*
你会看到一个输出,这就是你的系统架构。
```
- 如果看到 `x86_64`你的系统是AMD64架构。
- 如果看到 `aarch64`你的系统是ARM64架构。
然后
```shell
git clone https://gitee.com/deepin-community-store/spark-store.git
cd spark-store
dpkg-buildpackage -j
```
---
或者: 编译并安装
```shell
git clone https://gitee.com/deepin-community-store/spark-store.git
cd spark-store
./build_and_install.sh
```
## 系统支持与安装指引
## EULA
根据你的Linux发行版和系统架构以下是安装星火应用商店的详细步骤。
这里是我们的[EULA](https://mzh.moegirl.org.cn/%E4%BC%98%E8%8F%88%C2%B7%E5%8A%B3%E4%BC%A6%E6%96%AF)
### 对于 Deepin 用户
#### 对于 Deepin 用户
1. **下载并安装**
您可直接在深度商店搜索 星火应用商店 安装,或复制此链接到浏览器打开安装
> appstore://deepin-home-appstore-client?app_detail_info/spark-store
## 🚀 协作
若要使用最新版本,请访问[星火应用商店的Release页面](https://gitee.com/deepin-community-store/spark-store/releases)并下载适用于Deepin的最新版本。安装后即可使用。
非常感谢有兴趣的开发者或爱好者参与 `星火应用商店` 项目,分享你的见解与思路。
假设您下载到用户目录下的 Downloads 文件夹, 我们推荐您使用 APT 工具安装:
### 论坛
```shell
cd ~/Downloads
sudo apt install ./spark-store*.deb
```
https://www.deepinos.org/
### 对于 Ubuntu 用户
#### QQ群
#### 对于 Ubuntu 20.04 用户
https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/
1. **下载依赖包**
* 请访问[星火应用商店依赖包下载页面](https://spark-app.store/download_dependencies_latest) 下载最新的依赖包。
* 请多次解压依赖包,直到你可以看到诸多以 deb 结尾的安装包。
* 依据依赖包内的说明,一次性安装所有的依赖包。
2. **下载并安装**
请访问[星火应用商店的Release页面](https://gitee.com/deepin-community-store/spark-store/releases),下载和您电脑相同架构的安装包并安装。
假设您下载到用户目录下的 Downloads 文件夹, 我们推荐您使用 APT 工具安装:
```shell
cd ~/Downloads
sudo apt install ./spark-store*.deb
```
#### 对于 Ubuntu 22.04 及更高版本的 Ubuntu 用户
1. **无需安装依赖包**
2. **下载并安装**
请访问[星火应用商店的Release页面](https://gitee.com/deepin-community-store/spark-store/releases),下载和您电脑相同架构的安装包并安装。
假设您下载到用户目录下的 Downloads 文件夹, 我们推荐您使用 APT 工具安装:
```shell
cd ~/Downloads
sudo apt install ./spark-store*.deb
```
### 对于 Debian 用户
#### 对于 Debian 11 用户
1. **下载依赖包**
* 请访问[星火应用商店依赖包下载页面](https://spark-app.store/download_dependencies_latest) 下载最新的依赖包。
* 请多次解压依赖包,直到你可以看到诸多以 deb 结尾的安装包。
* 依据依赖包内的说明,一次性安装所有的依赖包。
2. **下载并安装**
请访问[星火应用商店的Release页面](https://gitee.com/deepin-community-store/spark-store/releases)并下载,安装后即可使用。
#### 对于 Debian 12+ 用户
1. **无需安装依赖包**
2. **下载并安装**
请访问[星火应用商店的Release页面](https://gitee.com/deepin-community-store/spark-store/releases),下载和您电脑相同架构的安装包并安装。
假设您下载到用户目录下的 Downloads 文件夹, 我们推荐您使用 APT 工具安装:
```shell
cd ~/Downloads
sudo apt install ./spark-store*.deb
```
---
## 常见问题FAQ
请参见[星火应用商店FAQ与支持指南](https://gitee.com/deepin-community-store/spark-store/blob/dev/FAQ.md)。
在这里可以查阅[中文版本](https://gitee.com/deepin-community-store/spark-store/blob/dev/FAQ.zh.md)。
---
## 联系与反馈
- 如果您有任何问题或建议,请通过邮件或在[Gitee页面](https://gitee.com/deepin-community-store/spark-store/issues)上提交问题。
- 如果你想关注我们的开发进度,可以跳转[星火应用商店Board](https://gitee.com/deepin-community-store/spark-store/board)获取更多信息。
- 我们的[论坛](https://www.deepinos.org/)
- 我们的[QQ群](https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/)
---

9
debian/changelog vendored
View File

@ -1,3 +1,12 @@
spark-store (4.2.8) stable; urgency=medium
* 修复在aptss上锁时支持等待释放锁而不是直接报错退出
* 调整:下载安装按钮文案修改
* 优化 KDE 深色模式支持实现方式
* 新增ssinstall现在会自动创建desktop文件
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
spark-store (4.2.7.3) stable; urgency=medium
* 修复aptss现在会正确地透传错误码而不是exit 0

View File

@ -93,7 +93,7 @@ void Application::setBuildDateTime(const QString &buildDateTime)
qDebug() << "Spark Store has been updated!";
config.setValue("build/version", QString(APP_VERSION));
config.setValue("build/branch",QString(APP_BRANCH));
config.setValue("build/branch", QString(APP_BRANCH));
config.setValue("build/time", buildDateTime);
config.sync();
}
@ -158,6 +158,17 @@ void Application::initAboutDialog()
dialog->hide();
}
void Application::loadTranslator()
{
DApplication::loadTranslator();
if (QLocale::system().language() == QLocale::Chinese) {
QTranslator *webengineTranslator = new QTranslator(this);
webengineTranslator->load(QLocale(QLocale::Chinese), "qtwebengine", "_", ":/translations");
installTranslator(webengineTranslator);
}
}
#if (DTK_VERSION >= DTK_VERSION_CHECK(5, 6, 4, 0))
/**
* @brief Application::initFeatureDisplayDialog

View File

@ -30,6 +30,8 @@ private:
void initFeatureDisplayDialog();
#endif
void loadTranslator();
private:
QJsonObject m_featuresJsonObj;

View File

@ -62,5 +62,6 @@
<file>tags/uos-authorize.svg</file>
<file>tags/uos-small.png</file>
<file>tags/uos.svg</file>
<file>translations/qtwebengine_zh.qm</file>
</qresource>
</RCC>

Binary file not shown.

View File

@ -0,0 +1,305 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN" sourcelanguage="es">
<context>
<name>QWebEnginePage</name>
<message>
<source>Cut</source>
<translation></translation>
</message>
<message>
<source>Back</source>
<translation>退</translation>
</message>
<message>
<source>Copy</source>
<translation></translation>
</message>
<message>
<source>Redo</source>
<translation></translation>
</message>
<message>
<source>Stop</source>
<translation></translation>
</message>
<message>
<source>Undo</source>
<translation></translation>
</message>
<message>
<source>&amp;Back</source>
<translation>&amp;退</translation>
</message>
<message>
<source>Paste</source>
<translation></translation>
</message>
<message>
<source>Copy Image URL</source>
<translation></translation>
</message>
<message>
<source>Open Link in This Window</source>
<translation></translation>
</message>
<message>
<source>Toggle Mute</source>
<translation></translation>
</message>
<message>
<source>Inspect Element</source>
<translation></translation>
</message>
<message>
<source>Toggle Media Controls</source>
<translation></translation>
</message>
<message>
<source>Reload</source>
<translation></translation>
</message>
<message>
<source>Copy Link URL</source>
<translation></translation>
</message>
<message>
<source>Exit Full Screen Mode</source>
<translation>退</translation>
</message>
<message>
<source>Paste and Match Style</source>
<translation>Pegar y coincidir estilo</translation>
</message>
<message>
<source>Follow Link</source>
<translation>Seguir vínculo</translation>
</message>
<message>
<source>Open Link in New Tab</source>
<translation></translation>
</message>
<message>
<source>Reload and Bypass Cache</source>
<translation></translation>
</message>
<message>
<source>Select folder to upload</source>
<translation>Seleccionar una carpeta para subir</translation>
</message>
<message>
<source>Save Image</source>
<translation></translation>
</message>
<message>
<source>Save Media</source>
<translation></translation>
</message>
<message>
<source>Toggle Looping</source>
<translation></translation>
</message>
<message>
<source>Close Page</source>
<translation></translation>
</message>
<message>
<source>Toggle Play/Pause</source>
<translation>/</translation>
</message>
<message>
<source>Copy Image</source>
<translation></translation>
</message>
<message>
<source>&amp;Reload</source>
<translation>&amp;</translation>
</message>
<message>
<source>Select All</source>
<translation></translation>
</message>
<message>
<source>Save Link</source>
<translation>Guardar enlace</translation>
</message>
<message>
<source>Copy Media URL</source>
<translation></translation>
</message>
<message>
<source>Forward</source>
<translation></translation>
</message>
<message>
<source>&amp;Forward</source>
<translation>&amp;</translation>
</message>
<message>
<source>Open Link in New Window</source>
<translation></translation>
</message>
<message>
<source>Are you sure you want to leave this page?</source>
<translation></translation>
</message>
</context>
<context>
<name>QQuickWebEngineView</name>
<message>
<source>Back</source>
<translation>退</translation>
</message>
<message>
<source>Copy</source>
<translation></translation>
</message>
<message>
<source>Copy Image URL</source>
<translation></translation>
</message>
<message>
<source>Toggle Mute</source>
<translation></translation>
</message>
<message>
<source>Inspect Element</source>
<translation></translation>
</message>
<message>
<source>Toggle Media Controls</source>
<translation></translation>
</message>
<message>
<source>Reload</source>
<translation></translation>
</message>
<message>
<source>Copy Link URL</source>
<translation></translation>
</message>
<message>
<source>Exit Full Screen Mode</source>
<translation>退</translation>
</message>
<message>
<source>Follow Link</source>
<translation></translation>
</message>
<message>
<source>Save Image</source>
<translation></translation>
</message>
<message>
<source>Save Media</source>
<translation></translation>
</message>
<message>
<source>Toggle Looping</source>
<translation></translation>
</message>
<message>
<source>Toggle Play/Pause</source>
<translation>/</translation>
</message>
<message>
<source>Copy Image</source>
<translation></translation>
</message>
<message>
<source>Save Link</source>
<translation></translation>
</message>
<message>
<source>Copy Media URL</source>
<translation></translation>
</message>
<message>
<source>Forward</source>
<translation></translation>
</message>
</context>
<context>
<name>QtWebEngineCore</name>
<message>
<source>Javascript Alert - %1</source>
<translation>Javascript - %1</translation>
</message>
<message>
<source>Javascript Confirm - %1</source>
<translation>Javascript - %1</translation>
</message>
<message>
<source>Javascript Prompt - %1</source>
<translation>Javascript - %1</translation>
</message>
<message>
<source>Are you sure you want to leave this page?</source>
<translation></translation>
</message>
</context>
<context>
<name>QtWebEnginePlugin</name>
<message>
<source>Cannot create a separate instance of WebEngineDownloadItem</source>
<translation> WebEngineDownloadItem </translation>
</message>
<message>
<source>Cannot create separate instance of WebEngineLoadRequest</source>
<translation> WebEngineLoadRequest </translation>
</message>
<message>
<source>Cannot create a separate instance of WebEngineSettings</source>
<translation> WebEngineSettings </translation>
</message>
<message>
<source>Cannot create separate instance of WebEngineNavigationRequest</source>
<translation> WebEngineNavigationRequest </translation>
</message>
<message>
<source>Cannot create separate instance of WebEngineNewViewRequest</source>
<translation> WebEngineNewViewRequest </translation>
</message>
<message>
<source>Cannot create separate instance of WebEngineCertificateError</source>
<translation> WebEngineCertificateError </translation>
</message>
<message>
<source>Cannot create a separate instance of FullScreenRequest</source>
<translation> FullScreenRequest </translation>
</message>
<message>
<source>Cannot create a separate instance of NavigationHistory</source>
<translation> NavigationHistory </translation>
</message>
</context>
<context>
<name>QtWebEngineExperimentalPlugin</name>
<message>
<source>Cannot create a separate instance of WebEngineViewExperimental</source>
<translation> WebEngineViewExperimental </translation>
</message>
<message>
<source>Cannot create a separate instance of WebEngineViewport</source>
<translation> WebEngineViewport </translation>
</message>
</context>
<context>
<name>UIDelegatesManager</name>
<message>
<source>Enter username and password for &quot;%1&quot; at %2://%3</source>
<translation> %2://%3 的“%1”输入用户名和密码</translation>
</message>
<message>
<source>Connect to proxy &quot;%1&quot; using:</source>
<translation>使%1</translation>
</message>
</context>
<context>
<name>QtWebEngineTestSupportPlugin</name>
<message>
<source>Cannot create a separate instance of WebEngineErrorPage</source>
<translation> WebEngineErrorPage </translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,85 @@
#include "DataCollectorAndUploader.h"
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QStandardPaths>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
#include <QSettings>
#include <QProcess>
#include <QDebug>
DataCollectorAndUploader::DataCollectorAndUploader(QObject *parent) : QObject(parent)
{
}
void DataCollectorAndUploader::collectAndUploadData()
{
collectData();
}
void DataCollectorAndUploader::collectData()
{
QString distributor_id;
QString release;
QString architecture;
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
QString version = config.value("build/version").toString();
QString uuid = config.value("info/uuid").toString();
// Execute lsb_release --all and capture the output
QProcess lsbProcess;
lsbProcess.start("lsb_release", QStringList() << "--all");
lsbProcess.waitForFinished();
QString lsbOutput = lsbProcess.readAllStandardOutput();
QStringList lines = lsbOutput.split('\n');
for (const QString &line : lines) {
if (line.contains("Distributor ID:")) {
distributor_id = line.split(":").last().trimmed();
} else if (line.contains("Release:")) {
release = line.split(":").last().trimmed();
}
}
// Execute uname -m to get the architecture
QProcess unameProcess;
unameProcess.start("uname", QStringList() << "-m");
unameProcess.waitForFinished();
architecture = unameProcess.readAllStandardOutput().trimmed();
// Create a JSON object
QJsonObject json;
json.insert("Distributor ID", distributor_id);
json.insert("Release", release);
json.insert("Architecture", architecture);
json.insert("Store_Version", version);
json.insert("UUID", uuid);
// Convert to byte array
QJsonDocument doc(json);
QByteArray jsonData = doc.toJson();
// Initialize a network request
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QUrl url("http://zunyun01.store.deepinos.org.cn:12345");
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
// Send the POST request
QNetworkReply *reply = manager->post(request, jsonData);
connect(reply, &QNetworkReply::finished, [=]() {
if (reply->error() == QNetworkReply::NoError) {
emit uploadSuccessful();
} else {
emit uploadFailed(reply->errorString());
}
reply->deleteLater();
});
}

View File

@ -0,0 +1,21 @@
#ifndef DATACOLLECTORANDUPLOADER_H
#define DATACOLLECTORANDUPLOADER_H
#include <QObject>
class DataCollectorAndUploader : public QObject
{
Q_OBJECT
public:
explicit DataCollectorAndUploader(QObject *parent = nullptr);
void collectAndUploadData();
signals:
void uploadSuccessful();
void uploadFailed(QString errorString);
private:
void collectData();
};
#endif // DATACOLLECTORANDUPLOADER_H

147
src/backend/ThemeChecker.cpp Executable file
View File

@ -0,0 +1,147 @@
#include "ThemeChecker.h"
#include <QDBusConnection>
#include <QDebug>
Q_GLOBAL_STATIC(ThemeChecker, m_instance)
constexpr char kFreedesktopPortalServiceName[] = "org.freedesktop.portal.Desktop";
constexpr char kFreedesktopPortalServicePath[] = "/org/freedesktop/portal/desktop";
constexpr char kFreedesktopPortalSettingsInterface[] = "org.freedesktop.portal.Settings";
ThemeChecker::ThemeChecker(QObject *parent)
: QObject(parent)
, m_paletteType(Dtk::Gui::DGuiApplicationHelper::instance()->paletteType())
{
m_interface = new QDBusInterface(kFreedesktopPortalServiceName,
kFreedesktopPortalServicePath,
kFreedesktopPortalSettingsInterface,
QDBusConnection::sessionBus(),
this);
initThemeType();
initConnections();
}
ThemeChecker *ThemeChecker::instance()
{
return m_instance;
}
bool ThemeChecker::useDarkTheme()
{
if (m_paletteType == Dtk::Gui::DGuiApplicationHelper::ColorType::UnknownType) {
return m_themeType == Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType;
} else {
return m_paletteType == Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType;
}
}
void ThemeChecker::initThemeType()
{
QVariantList args { "org.freedesktop.appearance", "color-scheme" };
QDBusMessage msg = m_interface->callWithArgumentList(QDBus::Block, "Read", args);
if (msg.type() != QDBusMessage::MessageType::ReplyMessage || msg.arguments().size() < 1) {
qWarning().noquote() << "Init color-scheme from D-Bus failed:" << msg.errorName() << msg.errorMessage();
m_themeType = Dtk::Gui::DGuiApplicationHelper::toColorType(Dtk::Gui::DGuiApplicationHelper::fetchPalette(Dtk::Gui::DGuiApplicationHelper::instance()->applicationTheme()));
return;
}
quint32 colorScheme = qvariant_cast<QDBusVariant>(qvariant_cast<QDBusVariant>(msg.arguments().first()).variant()).variant().toUInt();
switch (colorScheme) {
case 1:
m_themeType = Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType;
break;
case 2:
m_themeType = Dtk::Gui::DGuiApplicationHelper::ColorType::LightType;
break;
default:
qInfo().noquote() << QString("color-scheme: %1, fetching themeType according to QPalette::Window").arg(colorScheme);
m_themeType = Dtk::Gui::DGuiApplicationHelper::toColorType(Dtk::Gui::DGuiApplicationHelper::fetchPalette(Dtk::Gui::DGuiApplicationHelper::instance()->applicationTheme()));
break;
}
if (m_paletteType == Dtk::Gui::DGuiApplicationHelper::ColorType::UnknownType) {
Dtk::Gui::DGuiApplicationHelper::instance()->setApplicationPalette(Dtk::Gui::DGuiApplicationHelper::standardPalette(m_themeType));
}
}
void ThemeChecker::initConnections()
{
QDBusConnection::sessionBus().connect(kFreedesktopPortalServiceName,
kFreedesktopPortalServicePath,
kFreedesktopPortalSettingsInterface,
"SettingChanged",
this,
SLOT(slotSettingChanged(const QString &, const QString &, const QDBusVariant &)));
connect(Dtk::Gui::DGuiApplicationHelper::instance()->applicationTheme(), &Dtk::Gui::DPlatformTheme::themeNameChanged, this, &ThemeChecker::slotThemeNameChanged);
connect(Dtk::Gui::DGuiApplicationHelper::instance(), &Dtk::Gui::DGuiApplicationHelper::paletteTypeChanged, this, &ThemeChecker::slotPaletteTypeChanged);
}
void ThemeChecker::slotSettingChanged(const QString &_namespace, const QString &key, const QDBusVariant &variant)
{
if (_namespace != "org.freedesktop.appearance" || key != "color-scheme") {
return;
}
Dtk::Gui::DGuiApplicationHelper::ColorType colorType = Dtk::Gui::DGuiApplicationHelper::ColorType::UnknownType;
quint32 colorScheme = variant.variant().toUInt();
switch (colorScheme) {
case 1:
colorType = Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType;
break;
case 2:
colorType = Dtk::Gui::DGuiApplicationHelper::ColorType::LightType;
break;
default:
qInfo().noquote() << QString("color-scheme: %1, fetching themeType according to QPalette::Window").arg(colorScheme);
colorType = Dtk::Gui::DGuiApplicationHelper::toColorType(Dtk::Gui::DGuiApplicationHelper::fetchPalette(Dtk::Gui::DGuiApplicationHelper::instance()->applicationTheme()));
break;
}
if (m_paletteType != Dtk::Gui::DGuiApplicationHelper::ColorType::UnknownType) {
m_themeType = colorType;
return;
}
if (m_themeType != colorType) {
Dtk::Gui::DGuiApplicationHelper::instance()->setApplicationPalette(Dtk::Gui::DGuiApplicationHelper::standardPalette(colorType));
emit themeChanged(colorType == Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType);
m_themeType = colorType;
}
}
void ThemeChecker::slotThemeNameChanged(const QByteArray &theme)
{
Dtk::Gui::DGuiApplicationHelper::ColorType themeType = Dtk::Gui::DGuiApplicationHelper::ColorType::LightType;
if (theme.endsWith("dark")) {
themeType = Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType;
}
if (m_paletteType != Dtk::Gui::DGuiApplicationHelper::ColorType::UnknownType) {
m_themeType = themeType;
return;
}
if (m_themeType != themeType) {
Dtk::Gui::DGuiApplicationHelper::instance()->setApplicationPalette(Dtk::Gui::DGuiApplicationHelper::standardPalette(themeType));
emit themeChanged(themeType == Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType);
m_themeType = themeType;
}
}
void ThemeChecker::slotPaletteTypeChanged(Dtk::Gui::DGuiApplicationHelper::ColorType paletteType)
{
m_paletteType = paletteType;
if (m_paletteType != Dtk::Gui::DGuiApplicationHelper::ColorType::UnknownType) {
Dtk::Gui::DGuiApplicationHelper::instance()->setApplicationPalette(Dtk::Gui::DGuiApplicationHelper::standardPalette(m_paletteType));
emit themeChanged(m_paletteType == Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType);
return;
}
Dtk::Gui::DGuiApplicationHelper::instance()->setApplicationPalette(Dtk::Gui::DGuiApplicationHelper::standardPalette(m_themeType));
emit themeChanged(m_themeType == Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType);
}

40
src/backend/ThemeChecker.h Executable file
View File

@ -0,0 +1,40 @@
#ifndef THEMECHECKER_H
#define THEMECHECKER_H
#include <QObject>
#include <QDBusVariant>
#include <QDBusInterface>
#include <DPlatformTheme>
#include <DGuiApplicationHelper>
class ThemeChecker : public QObject
{
Q_OBJECT
public:
explicit ThemeChecker(QObject *parent = nullptr);
static ThemeChecker *instance();
bool useDarkTheme();
private:
void initThemeType();
void initConnections();
signals:
void themeChanged(bool isDark);
private slots:
void slotSettingChanged(const QString &_namespace, const QString &key, const QDBusVariant &variant);
void slotThemeNameChanged(const QByteArray &theme);
void slotPaletteTypeChanged(Dtk::Gui::DGuiApplicationHelper::ColorType paletteType);
private:
QDBusInterface *m_interface = nullptr;
Dtk::Gui::DGuiApplicationHelper::ColorType m_paletteType;
Dtk::Gui::DGuiApplicationHelper::ColorType m_themeType;
};
#endif // THEMECHECKER_H

View File

@ -9,6 +9,7 @@
#include <stdlib.h>
#include <time.h>
#include <fstream>
#include <execinfo.h>
#include <DSysInfo>
#include <DApplicationSettings>
@ -21,12 +22,29 @@
#include <QStandardPaths>
#include <QSurfaceFormat>
#include <backend/DataCollectorAndUploader.h>
DCORE_USE_NAMESPACE
DWIDGET_USE_NAMESPACE
static QString buildDateTime;
void gatherInfo(FILE *fp, std::ofstream& logFile, const char* description) {
if (fp) {
char buffer[512];
logFile << description << ":\n";
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
buffer[strcspn(buffer, "\n")] = 0;
logFile << buffer << "\n";
}
pclose(fp);
} else {
logFile << "Failed to gather " << description << " info.\n";
}
}
void crashHandler(int sig) {
void *array[50];
size_t size = backtrace(array, 50);
@ -42,42 +60,26 @@ void crashHandler(int sig) {
tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
std::ofstream logFile(filename, std::ios::out);
if (!logFile.is_open()) {
perror("ofstream");
exit(1);
}
logFile << "Please send this log to the developer. QQ Group: 872690351\n";
logFile << "Gitee: https://gitee.com/deepin-community-store/spark-store/issues\n";
logFile << "Gihub: https://github.com/spark-store-project/spark-store/issues\n";
logFile << "Build Date and Time: " << buildDateTime.toStdString() << "\n";
gatherInfo(popen("cat ~/.config/spark-union/spark-store/config.ini", "r"), logFile, "User Config File");
FILE *fp = popen("uname -m", "r");
if (fp) {
char buffer[256];
if (fgets(buffer, sizeof(buffer), fp) != NULL) {
// 移除换行符
buffer[strcspn(buffer, "\n")] = 0;
logFile << "CPU Architecture: " << buffer << "\n";
}
pclose(fp);
} else {
logFile << "Failed to gather CPU architecture info.\n";
}
// Collecting System Information
gatherInfo(popen("LANG=en_US.UTF-8 uname -m", "r"), logFile, "CPU Architecture");
gatherInfo(popen("LANG=en_US.UTF-8 lsb_release -a", "r"), logFile, "Distribution info");
gatherInfo(popen("LANG=en_US.UTF-8 lscpu", "r"), logFile, "All CPU Info");
gatherInfo(popen("LANG=en_US.UTF-8 free -h | grep Mem | awk '{print $2}'", "r"), logFile, "Memory Size");
FILE *fp2 = popen("lsb_release -a", "r");
if (fp2) {
char buffer[256];
while (fgets(buffer, sizeof(buffer), fp2) != NULL) {
logFile << buffer;
}
pclose(fp2);
} else {
logFile << "Failed to gather distribution info.\n";
}
logFile << "Error: signal " << sig << ":\n";
for (size_t i = 0; i < size; i++) {
char **strings = backtrace_symbols(&array[i], 1);
@ -124,6 +126,17 @@ int main(int argc, char *argv[])
// 初始化 config.ini 配置文件
Utils::initConfig();
// 回传版本信息,不涉及个人隐私
DataCollectorAndUploader uploader;
QObject::connect(&uploader, &DataCollectorAndUploader::uploadSuccessful, [](){
qDebug() << "Data uploaded successfully";
});
QObject::connect(&uploader, &DataCollectorAndUploader::uploadFailed, [](QString error){
qDebug() << "Upload failed with error: " << error;
});
uploader.collectAndUploadData();
// Set display backend
Utils::setQPAPlatform();

29
src/mainwindow-dtk.cpp Normal file → Executable file
View File

@ -16,6 +16,8 @@
#include <QtConcurrent>
#include <unistd.h>
#include <backend/ThemeChecker.h>
#define AppPageApplist 0
#define AppPageSearchlist 1
#define AppPageAppdetail 2
@ -39,8 +41,6 @@ MainWindow::MainWindow(QWidget *parent)
initTmpDir();
ui->appintopage->setDownloadWidget(downloadlistwidget);
emit DGuiApplicationHelper::instance()->themeTypeChanged(DGuiApplicationHelper::instance()->themeType());
}
MainWindow::~MainWindow()
@ -133,13 +133,14 @@ void MainWindow::initUI()
updateUi(0);
initTrayIcon();
refreshTheme(ThemeChecker::instance()->useDarkTheme());
}
void MainWindow::initTitleBar()
{
ui->titlebar->setIcon(QIcon::fromTheme("spark-store"));
ui->titlebar->setBackgroundTransparent(true);
// ui->titlebar->setSwitchThemeMenuVisible(false); // 去除 dtk 标题栏主题切换菜单
// 初始化标题栏控件
DLabel *title = new DLabel(ui->titlebar);
@ -267,12 +268,10 @@ void MainWindow::initTrayIcon()
trayIcon->show();
}
void MainWindow::initConnections()
void MainWindow::refreshTheme(bool isDarkMode)
{
// 主题切换
connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, [=](DGuiApplicationHelper::ColorType themeType)
{
if (themeType == DGuiApplicationHelper::DarkType) {
// 使用isDarkMode变量来判断是否是深色模式
if (isDarkMode) {
//深色模式
setMaskColor(QColor("#2a2b2b"));
backButton->setIcon(QIcon(":/icon/dark/back.svg"));
@ -314,10 +313,16 @@ void MainWindow::initConnections()
}
}
ui->pushButton_14->setStyleSheet(ui->pushButton_4->styleSheet());
ui->applistpage->setTheme(themeType == DGuiApplicationHelper::DarkType);
ui->applistpage_1->setTheme(themeType == DGuiApplicationHelper::DarkType);
ui->appintopage->setTheme(themeType == DGuiApplicationHelper::DarkType);
ui->settingspage->setTheme(themeType == DGuiApplicationHelper::DarkType); });
ui->applistpage->setTheme(isDarkMode);
ui->applistpage_1->setTheme(isDarkMode);
ui->appintopage->setTheme(isDarkMode);
ui->settingspage->setTheme(isDarkMode);
}
void MainWindow::initConnections()
{
// 主题切换
connect(ThemeChecker::instance(), &ThemeChecker::themeChanged, this, &MainWindow::refreshTheme);
// appintopage按下下载按钮时标题栏下载列表按钮抖动
connect(ui->appintopage, &AppIntoPage::clickedDownloadBtn, [=]()

1
src/mainwindow-dtk.h Normal file → Executable file
View File

@ -30,6 +30,7 @@ public:
void openUrl(const QString &url);
bool isCloseWindowAnimation();
Q_INVOKABLE void refreshTheme(bool isDarkMode);
protected:
void closeEvent(QCloseEvent *event) override;

View File

@ -172,7 +172,7 @@ void AppIntoPage::openUrl(const QUrl &url)
}
else
{
ui->downloadButton->setText(tr("Download"));
ui->downloadButton->setText(tr("Download and Install"));
ui->downloadButton->setEnabled(true);
ui->downloadButton->show();
}
@ -310,7 +310,7 @@ void AppIntoPage::isDownloading(const QUrl &url)
if (item->download == 2)
{
ui->downloadButton->setEnabled(true);
ui->downloadButton->setText(tr("Download"));
ui->downloadButton->setText(tr("Download and Install"));
}
if (item->download == 1)
{
@ -480,7 +480,7 @@ void AppIntoPage::on_pushButton_3_clicked()
if (check.readAllStandardOutput().isEmpty())
{
ui->downloadButton->setText(tr("Download"));
ui->downloadButton->setText(tr("Download and Install"));
ui->pushButton_3->hide();
updatesEnabled();

View File

@ -241,7 +241,7 @@
</sizepolicy>
</property>
<property name="text">
<string>Download</string>
<string>Download and Install</string>
</property>
</widget>
</item>

View File

@ -34,6 +34,8 @@ CONFIG += c++11 link_pkgconfig
PKGCONFIG += dtkcore dtkgui dtkwidget
SOURCES += \
backend/DataCollectorAndUploader.cpp \
backend/ThemeChecker.cpp \
backend/downloadworker.cpp \
backend/image_show.cpp \
backend/sparkapi.cpp \
@ -58,6 +60,8 @@ SOURCES += \
mainwindow-dtk.cpp
HEADERS += \
backend/DataCollectorAndUploader.h \
backend/ThemeChecker.h \
backend/downloadworker.h \
backend/image_show.h \
backend/sparkapi.h \
@ -93,6 +97,7 @@ RESOURCES += \
TRANSLATIONS += \
../translations/spark-store_en.ts \
../translations/spark-store_es.ts \
../translations/spark-store_fr.ts \
../translations/spark-store_zh_CN.ts \
../translations/spark-store_zh_TW.ts

View File

@ -8,6 +8,7 @@
#include <QSettings>
#include <QStandardPaths>
#include <QFile>
#include <QUuid>
#include <QJsonDocument>
#define UOSDeveloperModeFile "/var/lib/deepin/developer-mode/enabled"
@ -96,6 +97,11 @@ void Utils::initConfig()
{
config.setValue("runtime/useWayland", useWayland);
}
// check uuid
if (!config.contains("info/uuid")){
config.setValue("info/uuid", initUUID());
}
config.sync(); // 写入更改至 config.ini并同步最新内容
checkUOSDeveloperMode(); // Check UOS developer mode
@ -126,6 +132,14 @@ bool Utils::isUOS()
return isUOS;
}
/**
* @brief Utils::initUUID UUID
*/
QString Utils::initUUID(){
QUuid uuid = QUuid::createUuid();
return uuid.toString();
}
/**
* @brief Utils::setQPAPlatform Set display backend
*/

View File

@ -12,6 +12,7 @@ public:
static bool isWayland();
static void initConfig();
static bool isUOS();
static QString initUUID();
static void setQPAPlatform();
static void checkUOSDeveloperMode();
static QJsonObject parseFeatureJsonFile();

View File

@ -234,9 +234,9 @@ void DownloadItem::slotAsyncInstall(int t)
if (notRoot)
{
Utils::sendNotification("spark-store", tr("Spark Store"), tr("dpkg progress had been abortedplease check the install info or try to reinstall."));
ui->label_2->setText(tr("dpkg progress had been abortedplease check the install info or try to reinstall."));
ui->label_2->setToolTip(tr("dpkg progress had been abortedplease check the install info or try to reinstall."));
Utils::sendNotification("spark-store", tr("Spark Store"), tr("dpkg progress had been aborted, please check the install info or try to reinstall."));
ui->label_2->setText(tr("dpkg progress had been aborted, please check the install info or try to reinstall."));
ui->label_2->setToolTip(tr("dpkg progress had been aborted, please check the install info or try to reinstall."));
ui->pushButton_install->show();
ui->pushButton_3->hide();
}

View File

@ -7,20 +7,7 @@
WebEnginePage::WebEnginePage(QObject *parent)
: QWebEnginePage(parent)
{
QLocale ql;
switch (ql.language())
{
case QLocale::Chinese:
{
// 系统语言是中文,获取网页为中文 @momen @uniartisan
QWebEngineProfile *profile = QWebEngineProfile::defaultProfile();
qDebug() << profile->httpAcceptLanguage();
profile->setHttpAcceptLanguage("zh-CN,zh;q=0.8,en;q=0.6");
}
break;
default:
break;
}
initHttpAcceptLanguage();
}
WebEnginePage::~WebEnginePage()
@ -47,6 +34,18 @@ QWebEnginePage *WebEnginePage::createWindow(QWebEnginePage::WebWindowType type)
return page;
}
void WebEnginePage::initHttpAcceptLanguage()
{
switch (QLocale::system().language()) {
case QLocale::Chinese: {
// 系统语言是中文,获取网页为中文 @momen @uniartisan
profile()->setHttpAcceptLanguage("zh-CN,zh;q=0.8,en;q=0.6");
} break;
default:
break;
}
}
void WebEnginePage::slotUrlChanged(const QUrl &url)
{
if (m_currentUrl == url)

View File

@ -16,6 +16,9 @@ public:
protected:
QWebEnginePage *createWindow(WebWindowType type) override;
private:
void initHttpAcceptLanguage();
private slots:
void slotUrlChanged(const QUrl &url);

View File

@ -1,8 +1,6 @@
#include "webengineview.h"
#include "webenginepage.h"
#include <QDesktopServices>
WebEngineView::WebEngineView(QWidget *parent)
: QWebEngineView(parent)
{

View File

@ -158,7 +158,7 @@ DOWNLOADBEFORE=
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'
_DOWNLOADER='aria2c --no-conf -c -j ${_MAXNUM} -x ${_MAXCONPERSRV} -s ${_SPLITCON} -i ${DLLIST} --min-split-size=${_MINSPLITSZ} --stream-piece-selector=${_PIECEALGO} --connect-timeout=60 --timeout=600 -m0'
# Load config file.
CONFFILE="/tmp/aptss-conf/apt-fast.conf"
@ -207,17 +207,15 @@ fi
msg_already_running()
{
msg "apt-fast already running!" "warning"
msg "apt-fast 已经在运行了" "warning"
msg "Verify that all apt-fast processes are finished then remove $LCK_FILE.lock and try again." "hint"
msg "请确认所有的apt-fast进程已经结束然后删除 $LCK_FILE.lock 后重试." "hint"
msg "Other aptss is running. Waited $timer senconds..." "normal"
msg "有其他的aptss正在运行。已经等待了$timer秒" "normal"
}
# Check if a lock file exists.
if [ -f "$LCK_FILE.lock" ]; then
msg_already_running
exit 1
fi
#if [ -f "$LCK_FILE.lock" ]; then
# msg_already_running
# exit 1
#fi
# create the lock file and lock it, die on failure
@ -229,8 +227,13 @@ _create_lock()
# This will hide the exit code
trap "cleanup_aptfast" EXIT
trap "cleanup_aptfast; exit 1" INT TERM
flock -n $LCK_FD || { msg_already_running; exit 1; }
timer=0
until $(flock -xn $LCK_FD);do
msg_already_running
sleep 1
let timer+=1
done
unset timer
}
# unlock and remove the lock file

View File

@ -1,50 +1,133 @@
#!/bin/bash
echo "Spark Store Audit script.星火商店审核脚本"
source /opt/durapps/spark-store/bin/bashimport/transhell.amber
load_transhell_debug
case $(arch) in
x86_64)
STORE_URL="store"
;;
aarch64)
STORE_URL="aarch64-store"
;;
esac
echo "Spark Store Install script. 星火商店审核脚本"
function pkexec_as_current_user() {
local user=$(who | awk '{print $1}' | head -n 1)
local uid=$(id -u "$user")
sudo -u "$user" DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/"$uid"/bus pkexec "$@"
}
function create_desktop_file() {
local user=$(who | awk '{print $1}' | head -n 1)
if [ -e $(sudo -u "$user" xdg-user-dir)/.config/spark-union/spark-store/ssshell-config-do-not-create-desktop ];then
echo "It is configured that do not create desktop file. Give up"
else
exec_create_desktop_file
fi
}
function exec_create_desktop_file() {
local user=$(who | awk '{print $1}' | head -n 1)
for desktop_file_path in $(dpkg -L "$package_name" | grep .desktop); do
if [ "$(cat $desktop_file_path | grep NoDisplay=true)" = "" ];then
echo $desktop_file_path is checked and will be installed to desktop
sudo -u "$user" cp "$desktop_file_path" "$(sudo -u "$user" xdg-user-dir DESKTOP)/"
fi
done
}
function zenity() {
local user=$(who | awk '{print $1}' | head -n 1)
local uid=$(id -u "$user")
sudo -u "$user" DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/"$uid"/bus zenity "$@"
}
function hash_check() {
if [ ! -e "/var/lib/aptss/lists/cdn.d.store.deepinos.org.cn_${STORE_URL}_Packages" ] && \
[ ! -e "/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" ] && \
[ ! -e "/var/lib/aptss/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages" ]; then
echo "接收星火仓库软件信息中..."
aptss ssupdate
fi
if [ -e "/var/lib/aptss/lists/cdn.d.store.deepinos.org.cn_${STORE_URL}_Packages" ]; then
PACKAGES_DATA_PATH="/var/lib/aptss/lists/cdn.d.store.deepinos.org.cn_${STORE_URL}_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是星火域名单目录仓库配置"
elif [ -e "/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" ]; then
PACKAGES_DATA_PATH="/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是星火域名单目录仓库配置"
else
PACKAGES_DATA_PATH="/var/lib/aptss/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是SDU镜像仓库配置"
fi
echo "正在运行包验证..."
echo "Running Spark Package Verify..."
DEB_SHA512SUM=$(sha512sum "$1" | cut -d ' ' -f 1)
IS_SHA512SUM_CHECKED=$(cat "$PACKAGES_DATA_PATH" | grep "$DEB_SHA512SUM")
}
#################检测文件是否存在
if [ $# -eq 0 ];then
echo "没有接收到参数,退出"
echo "用法:$0 deb路径"
exit
####################################
if [ $# -eq 0 ]; then
echo "没有接收到参数,退出"
echo "用法:$0 deb路径"
echo "OMG-IT-GOES-WRONG"
exit
fi
if [ ! -f "$1" ]
then
echo "文件不存在"
if [ ! -f "$1" ]; then
echo "${TRANSHELL_CONTENT_FILE_NOT_EXIST}"
echo "OMG-IT-GOES-WRONG"
exit 1
fi
if [ "$(id -u)" != "0" ];then
#############################无root权限时
echo "请使用root启动ssaudit"
exit 1
if [ "$(id -u)" != "0" ]; then
echo "${TRANSHELL_CONTENT_PLEASE_RUN_AS_ROOT}"
echo "OMG-IT-GOES-WRONG"
exit 1
fi
###
DEBPATH=$(realpath "$1")
DEBPATH=`realpath $1`
echo ------------------------------------------------------------
try_run_output=$(/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh test-install-app "$DEBPATH")
try_run_ret="$?"
if [ "$try_run_ret" -ne 0 ]
then
package_name=$(dpkg-deb -f "$DEBPATH" Package)
echo "Package name is $package_name"
try_run_output=$(/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh test-install-app "$DEBPATH")
try_run_ret="$?"
if [ "$try_run_ret" -ne 0 ]; then
echo "OMG-IT-GOES-WRONG"
echo -e "${try_run_output}"
exit "$try_run_ret"
fi
dpkg -i "$DEBPATH" || aptss install -yf
dpkg -i "$DEBPATH" || aptss install -yf
install_ret="$?"
if [ "$install_ret" -ne 0 ]
then
if [ "$?" = "0" ] && [ "$2" = "--delete-after-install" ]; then
if dpkg -s "$package_name" >/dev/null 2>&1; then
echo "软件包已安装:$package_name"
create_desktop_file
rm "$DEBPATH"
echo "${TRANSHELL_CONTENT_DEB_IS_DELETED}"
else
echo "软件包未安装:$package_name"
echo "安装异常!抛出错误"
echo "OMG-IT-GOES-WRONG"
exit "$install_ret"
fi
echo ---------------安装结束---------------
else
echo "${TRANSHELL_CONTENT_WILL_NOT_DELETE_DEB}"
if dpkg -s "$package_name" >/dev/null 2>&1; then
echo "软件包已安装:$package_name"
create_desktop_file
else
echo "软件包未安装:$package_name"
echo "安装异常!抛出错误"
echo "OMG-IT-GOES-WRONG"
fi
fi

View File

@ -3,7 +3,7 @@
source /opt/durapps/spark-store/bin/bashimport/transhell.amber
load_transhell_debug
case `arch` in
case $(arch) in
x86_64)
STORE_URL="store"
;;
@ -12,156 +12,139 @@ case `arch` in
;;
esac
echo "Spark Store Install script.星火商店安装脚本"
echo "Spark Store Install script. 星火商店安装脚本"
function pkexec_as_current_user() {
#Detect the user using such display
local user=$(who | awk '{print $1}' | head -n 1)
#Detect the id of the user
local uid=$(id -u $user)
sudo -u $user DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus pkexec "$@"
local uid=$(id -u "$user")
sudo -u "$user" DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/"$uid"/bus pkexec "$@"
}
function zenity()
{
#Detect the user using such display
function create_desktop_file() {
local user=$(who | awk '{print $1}' | head -n 1)
#Detect the id of the user
local uid=$(id -u $user)
sudo -u $user DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus zenity "$@"
if [ -e $(sudo -u "$user" xdg-user-dir)/.config/spark-union/spark-store/ssshell-config-do-not-create-desktop ];then
echo "It is configured that do not create desktop file. Give up"
else
exec_create_desktop_file
fi
}
function exec_create_desktop_file() {
local user=$(who | awk '{print $1}' | head -n 1)
for desktop_file_path in $(dpkg -L "$package_name" | grep .desktop); do
if [ "$(cat $desktop_file_path | grep NoDisplay=true)" = "" ];then
echo $desktop_file_path is checked and will be installed to desktop
sudo -u "$user" cp "$desktop_file_path" "$(sudo -u "$user" xdg-user-dir DESKTOP)/"
fi
done
}
function hash_check()
{
if [ ! -e "/var/lib/aptss/lists/cdn.d.store.deepinos.org.cn_${STORE_URL}_Packages" ] && [ ! -e "/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" ] && [ ! -e "/var/lib/aptss/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages" ];then
echo "接收星火仓库软件信息中..."
aptss ssupdate
fi
### 选择包信息位置
if [ -e "/var/lib/aptss/lists/cdn.d.store.deepinos.org.cn_${STORE_URL}_Packages" ];then
PACKAGES_DATA_PATH="/var/lib/aptss/lists/cdn.d.store.deepinos.org.cn_${STORE_URL}_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是星火域名单目录仓库配置"
elif [ -e "/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" ];then
PACKAGES_DATA_PATH="/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是星火域名单目录仓库配置"
else
PACKAGES_DATA_PATH="/var/lib/aptss/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是SDU镜像仓库配置"
fi
echo "正在运行包验证..."
echo "Running Spark Package Verify..."
DEB_SHA512SUM=$(sha512sum "$1" | cut -d ' ' -f 1)
IS_SHA512SUM_CHECKD=`cat $PACKAGES_DATA_PATH | grep $DEB_SHA512SUM`
function zenity() {
local user=$(who | awk '{print $1}' | head -n 1)
local uid=$(id -u "$user")
sudo -u "$user" DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/"$uid"/bus zenity "$@"
}
##########################################################################
function hash_check() {
if [ ! -e "/var/lib/aptss/lists/cdn.d.store.deepinos.org.cn_${STORE_URL}_Packages" ] && \
[ ! -e "/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" ] && \
[ ! -e "/var/lib/aptss/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages" ]; then
echo "接收星火仓库软件信息中..."
aptss ssupdate
fi
#################检测文件是否存在
if [ $# -eq 0 ];then
echo "没有接收到参数,退出"
echo "用法:$0 deb路径"
echo "OMG-IT-GOES-WRONG"
exit
if [ -e "/var/lib/aptss/lists/cdn.d.store.deepinos.org.cn_${STORE_URL}_Packages" ]; then
PACKAGES_DATA_PATH="/var/lib/aptss/lists/cdn.d.store.deepinos.org.cn_${STORE_URL}_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是星火域名单目录仓库配置"
elif [ -e "/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" ]; then
PACKAGES_DATA_PATH="/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是星火域名单目录仓库配置"
else
PACKAGES_DATA_PATH="/var/lib/aptss/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是SDU镜像仓库配置"
fi
echo "正在运行包验证..."
echo "Running Spark Package Verify..."
DEB_SHA512SUM=$(sha512sum "$1" | cut -d ' ' -f 1)
IS_SHA512SUM_CHECKED=$(cat "$PACKAGES_DATA_PATH" | grep "$DEB_SHA512SUM")
}
####################################
if [ $# -eq 0 ]; then
echo "没有接收到参数,退出"
echo "用法:$0 deb路径"
echo "OMG-IT-GOES-WRONG"
exit
fi
if [ ! -f "$1" ]
then
if [ ! -f "$1" ]; then
echo "${TRANSHELL_CONTENT_FILE_NOT_EXIST}"
echo "OMG-IT-GOES-WRONG"
exit 1
fi
if [ "$(id -u)" != "0" ];then
#############################无root权限时
echo "${TRANSHELL_CONTENT_PLEASE_RUN_AS_ROOT}"
echo "OMG-IT-GOES-WRONG"
exit 1
if [ "$(id -u)" != "0" ]; then
echo "${TRANSHELL_CONTENT_PLEASE_RUN_AS_ROOT}"
echo "OMG-IT-GOES-WRONG"
exit 1
fi
###
DEBPATH=`realpath $1`
DEBPATH=$(realpath "$1")
hash_check "$DEBPATH"
if [ -z "$IS_SHA512SUM_CHECKD" ];then
echo "尝试更新仓库信息重新校验"
aptss ssupdate
hash_check "$DEBPATH"
if [ -z "$IS_SHA512SUM_CHECKED" ]; then
echo "尝试更新仓库信息重新校验"
aptss ssupdate
hash_check "$DEBPATH"
if [ -z "$IS_SHA512SUM_CHECKED" ]; then
echo -e "$TRANSHELL_CONTENT_HASH_CHECK_FAILED"
zenity --info --icon-name=spark-store --height 270 --width 500 --text "$TRANSHELL_CONTENT_HASH_CHECK_FAILED"
echo "OMG-IT-GOES-WRONG"
exit 1
fi
fi
if [ ! -z "$IS_SHA512SUM_CHECKD" ];then
if [ ! -z "$IS_SHA512SUM_CHECKED" ]; then
echo "校验成功,开始安装"
echo "----------------------------------------------------------------------------------"
package_name=$(dpkg-deb -f "$DEBPATH" Package)
echo "Package name is $package_name"
try_run_output=$(/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh test-install-app "$DEBPATH")
try_run_ret="$?"
echo "校验成功,开始安装"
echo ----------------------------------------------------------------------------------
package_name=$(dpkg-deb -f "$DEBPATH" Package)
echo "Package name is $package_name"
try_run_output=$(/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh test-install-app "$DEBPATH")
try_run_ret="$?"
if [ "$try_run_ret" -ne 0 ]
then
if [ "$try_run_ret" -ne 0 ]; then
echo "OMG-IT-GOES-WRONG"
echo -e "${try_run_output}"
exit "$try_run_ret"
fi
dpkg -i "$DEBPATH" || aptss install -yf
dpkg -i "$DEBPATH" || aptss install -yf
#### --delete
if [ "$?" = "0" ] && [ "$2" = "--delete-after-install" ];then
##check if is installed yet
if dpkg -s "$package_name" >/dev/null 2>&1; then
if [ "$?" = "0" ] && [ "$2" = "--delete-after-install" ]; then
if dpkg -s "$package_name" >/dev/null 2>&1; then
echo "软件包已安装:$package_name"
create_desktop_file
rm "$DEBPATH"
echo "${TRANSHELL_CONTENT_DEB_IS_DELETED}"
else
echo "${TRANSHELL_CONTENT_DEB_IS_DELETED}"
else
echo "软件包未安装:$package_name"
echo "安装异常!抛出错误"
echo "OMG-IT-GOES-WRONG"
fi
else
echo "${TRANSHELL_CONTENT_WILL_NOT_DELETE_DEB}"
if dpkg -s "$package_name" >/dev/null 2>&1; then
echo "OMG-IT-GOES-WRONG"
fi
else
echo "${TRANSHELL_CONTENT_WILL_NOT_DELETE_DEB}"
if dpkg -s "$package_name" >/dev/null 2>&1; then
echo "软件包已安装:$package_name"
else
create_desktop_file
else
echo "软件包未安装:$package_name"
echo "安装异常!抛出错误"
echo "OMG-IT-GOES-WRONG"
echo "OMG-IT-GOES-WRONG"
fi
fi
fi
fi
else
zenity --info --icon-name=spark-store --height 270 --width 500 --text "${TRANSHELL_CONTENT_HASH_CHECK_FAILED}"
echo -e ${TRANSHELL_CONTENT_HASH_CHECK_FAILED}
echo "OMG-IT-GOES-WRONG"
fi

View File

@ -15,9 +15,16 @@ else
text_update_open="${TRANSHELL_CONTENT_OPEN}"
fi
if [ ! -e $HOME/.config/spark-union/spark-store/ssshell-config-do-not-create-desktop ];then
CONTENT_SET_CREATE_DESKTOP="${TRANSHELL_CONTENT_CLOSE_CREATE_DESKTOP}"
#已经开启了就显示关闭
else
CONTENT_SET_CREATE_DESKTOP="${TRANSHELL_CONTENT_OPEN_CREATE_DESKTOP}"
fi
update_transhell
option=`zenity --list --text="${TRANSHELL_CONTENT_WELCOME_AND_CHOOSE_ONE_TO_RUN}" --column 数字 --column=${TRANSHELL_CONTENT_OPTIONS} --print-column=2 --height 350 --width 760 0 "${TRANSHELL_CONTENT_OPEN_OR_CLOSE_UPGRADE_CHECK}" 1 "${TRANSHELL_CONTENT_CHECK_FOR_UPDATE}" 2 "${TRANSHELL_CONTENT_EXIT}" --hide-column=1 --print-column=1`
option=$(zenity --list --text="${TRANSHELL_CONTENT_WELCOME_AND_CHOOSE_ONE_TO_RUN}" --column 数字 --column=${TRANSHELL_CONTENT_OPTIONS} --print-column=2 --height 350 --width 760 0 "${TRANSHELL_CONTENT_OPEN_OR_CLOSE_UPGRADE_CHECK}" 1 "${CONTENT_SET_CREATE_DESKTOP}" 2 "${TRANSHELL_CONTENT_CHECK_FOR_UPDATE}" 3 "${TRANSHELL_CONTENT_EXIT}" --hide-column=1 --print-column=1)
case $option in
0)
@ -30,12 +37,21 @@ case $option in
zenity --info --icon-name=spark-store --height 150 --width 200 --text "${TRANSHELL_CONTENT_OPENED}" --timeout=2
fi
;;
1)
if [ ! -e $HOME/.config/spark-union/spark-store/ssshell-config-do-not-create-desktop ];then
mkdir -p $HOME/.config/spark-union/spark-store/
touch $HOME/.config/spark-union/spark-store/ssshell-config-do-not-create-desktop
zenity --info --icon-name=spark-store --height 150 --width 200 --text "${TRANSHELL_CONTENT_CLOSED}" --timeout=2
else
rm -f $HOME/.config/spark-union/spark-store/ssshell-config-do-not-create-desktop
zenity --info --icon-name=spark-store --height 150 --width 200 --text "${TRANSHELL_CONTENT_OPENED}" --timeout=2
fi
;;
2)
/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade.sh
;;
2)
3)
exit 0
;;
*)

View File

@ -1,12 +1,14 @@
#!/bin/bash
TRANSHELL_CONTENT_CLOSE="Close"
TRANSHELL_CONTENT_OPEN="Open"
TRANSHELL_CONTENT_CLOSE="Disable"
TRANSHELL_CONTENT_OPEN="Enable"
TRANSHELL_CONTENT_WELCOME_AND_CHOOSE_ONE_TO_RUN="Welcome to Spark Store APP Upgrade Settings\nPlease choose one option to run"
TRANSHELL_CONTENT_OPTIONS="Options"
TRANSHELL_CONTENT_OPEN_OR_CLOSE_UPGRADE_CHECK="$text_update_open Spark Store APP upgrade check. (Will notify APP upgrade at start up if opened.)"
TRANSHELL_CONTENT_CHECK_FOR_UPDATE="Check Upgradable app list."
TRANSHELL_CONTENT_EXIT="Exit"
TRANSHELL_CONTENT_CLOSING_UPGRADE_CHECK="Please authorize to close APP upgrade check"
TRANSHELL_CONTENT_CLOSED="Closed"
TRANSHELL_CONTENT_CLOSED="Disabled"
TRANSHELL_CONTENT_OPENING_UPGRADE_CHECK="Please authorize to open APP upgrade check"
TRANSHELL_CONTENT_OPENED="Opened"
TRANSHELL_CONTENT_OPENED="Enabled"
TRANSHELL_CONTENT_CLOSE_CREATE_DESKTOP="Disable auto create desktop shortcut"
TRANSHELL_CONTENT_OPEN_CREATE_DESKTOP="Enable auto create desktop shortcut"

View File

@ -10,3 +10,5 @@ TRANSHELL_CONTENT_CLOSING_UPGRADE_CHECK="执行关闭自动更新检测,请授
TRANSHELL_CONTENT_CLOSED="已关闭"
TRANSHELL_CONTENT_OPENING_UPGRADE_CHECK="执行启动自动更新检测,请授权"
TRANSHELL_CONTENT_OPENED="已开启"
TRANSHELL_CONTENT_CLOSE_CREATE_DESKTOP="关闭自动创建桌面启动器"
TRANSHELL_CONTENT_OPEN_CREATE_DESKTOP="开启自动创建桌面启动器"

View File

@ -10,3 +10,5 @@ TRANSHELL_CONTENT_CLOSING_UPGRADE_CHECK="执行关闭自动更新检测,请授
TRANSHELL_CONTENT_CLOSED="已关闭"
TRANSHELL_CONTENT_OPENING_UPGRADE_CHECK="执行启动自动更新检测,请授权"
TRANSHELL_CONTENT_OPENED="已开启"
TRANSHELL_CONTENT_CLOSE_CREATE_DESKTOP="关闭自动创建桌面启动器"
TRANSHELL_CONTENT_OPEN_CREATE_DESKTOP="开启自动创建桌面启动器"

View File

@ -8,14 +8,6 @@
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="244"/>
<location filename="../src/pages/appintopage.cpp" line="175"/>
<location filename="../src/pages/appintopage.cpp" line="313"/>
<location filename="../src/pages/appintopage.cpp" line="483"/>
<source>Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="290"/>
<source>Uninstall</source>
@ -132,6 +124,14 @@
<source>Screen capture</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="244"/>
<location filename="../src/pages/appintopage.cpp" line="175"/>
<location filename="../src/pages/appintopage.cpp" line="313"/>
<location filename="../src/pages/appintopage.cpp" line="483"/>
<source>Download and Install</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="429"/>
<location filename="../src/pages/appintopage.ui" line="432"/>
@ -374,7 +374,7 @@
<location filename="../src/widgets/common/downloaditem.cpp" line="237"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="238"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="239"/>
<source>dpkg progress had been abortedplease check the install info or try to reinstall.</source>
<source>dpkg progress had been aborted, please check the install info or try to reinstall.</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -480,33 +480,33 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="187"/>
<location filename="../src/mainwindow-dtk.cpp" line="188"/>
<source>Submit App</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="188"/>
<location filename="../src/mainwindow-dtk.cpp" line="189"/>
<source>Submit App with client(Recommanded)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="189"/>
<location filename="../src/mainwindow-dtk.cpp" line="190"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="190"/>
<location filename="../src/mainwindow-dtk.cpp" line="191"/>
<source>APP Upgrade and Install Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="146"/>
<location filename="../src/mainwindow-dtk.cpp" line="241"/>
<location filename="../src/mainwindow-dtk.cpp" line="147"/>
<location filename="../src/mainwindow-dtk.cpp" line="242"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="151"/>
<location filename="../src/mainwindow-dtk.cpp" line="152"/>
<source>Search or enter spk://</source>
<translation type="unfinished"></translation>
</message>
@ -536,7 +536,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="244"/>
<location filename="../src/mainwindow-dtk.cpp" line="245"/>
<source>Show MainWindow</source>
<translation type="unfinished"></translation>
</message>
@ -658,12 +658,12 @@
<context>
<name>TitleBarMenu</name>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="245"/>
<location filename="../src/mainwindow-dtk.cpp" line="246"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="246"/>
<location filename="../src/mainwindow-dtk.cpp" line="247"/>
<source>Exit</source>
<translation type="unfinished"></translation>
</message>

View File

@ -8,14 +8,6 @@
<source>Form</source>
<translation>Tipo</translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="244"/>
<location filename="../src/pages/appintopage.cpp" line="175"/>
<location filename="../src/pages/appintopage.cpp" line="313"/>
<location filename="../src/pages/appintopage.cpp" line="483"/>
<source>Download</source>
<translation>Descargar</translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="290"/>
<source>Uninstall</source>
@ -132,6 +124,14 @@
<source>Screen capture</source>
<translation>Captura de pantalla</translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="244"/>
<location filename="../src/pages/appintopage.cpp" line="175"/>
<location filename="../src/pages/appintopage.cpp" line="313"/>
<location filename="../src/pages/appintopage.cpp" line="483"/>
<source>Download and Install</source>
<translation>Descargar e instalar</translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="429"/>
<location filename="../src/pages/appintopage.ui" line="432"/>
@ -268,16 +268,24 @@
<context>
<name>DAboutDialog</name>
<message>
<location filename="../src/application.cpp" line="139"/>
<location filename="../src/application.cpp" line="141"/>
<source>Version: %1</source>
<translation>Versión %1</translation>
</message>
<message>
<location filename="../src/application.cpp" line="149"/>
<location filename="../src/application.cpp" line="151"/>
<source>%1 is released under %2</source>
<translation>%1 publicado bajo %2</translation>
</message>
</context>
<context>
<name>DownloadController</name>
<message>
<location filename="../src/backend/downloadworker.cpp" line="176"/>
<source>Download Failed, please retry :(</source>
<translation>Descarga fall, por favor vuelva a intentarlo</translation>
</message>
</context>
<context>
<name>DownloadItem</name>
<message>
@ -366,8 +374,8 @@
<location filename="../src/widgets/common/downloaditem.cpp" line="237"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="238"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="239"/>
<source>dpkg progress had been abortedplease check the install info or try to reinstall.</source>
<translation>El proceso dpkg ha sido abortado, verifique la información de instalación o intente reinstalarlo.</translation>
<source>dpkg progress had been aborted, please check the install info or try to reinstall.</source>
<translation>El proceso de DPKG ha sido interrumpido, compruebe la información de instalación o intente reinstalar.</translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="144"/>
@ -472,33 +480,33 @@
<translation>Actualización de app</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="187"/>
<location filename="../src/mainwindow-dtk.cpp" line="188"/>
<source>Submit App</source>
<translation>Presentación de la aplicación</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="188"/>
<location filename="../src/mainwindow-dtk.cpp" line="189"/>
<source>Submit App with client(Recommanded)</source>
<translation>Enviar la aplicación al cliente (recomendación)</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="189"/>
<location filename="../src/mainwindow-dtk.cpp" line="190"/>
<source>Settings</source>
<translation>Configuración</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="190"/>
<location filename="../src/mainwindow-dtk.cpp" line="191"/>
<source>APP Upgrade and Install Settings</source>
<translation>Actualización e instalación de app</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="146"/>
<location filename="../src/mainwindow-dtk.cpp" line="241"/>
<location filename="../src/mainwindow-dtk.cpp" line="147"/>
<location filename="../src/mainwindow-dtk.cpp" line="242"/>
<source>Spark Store</source>
<translation>SPARK Store</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="151"/>
<location filename="../src/mainwindow-dtk.cpp" line="152"/>
<source>Search or enter spk://</source>
<translation>Buscar o introducir spk: /%</translation>
</message>
@ -506,19 +514,19 @@
<context>
<name>QObject</name>
<message>
<location filename="../src/application.cpp" line="33"/>
<location filename="../src/application.cpp" line="34"/>
<location filename="../src/application.cpp" line="35"/>
<location filename="../src/application.cpp" line="36"/>
<location filename="../src/mainwindow-dtk.cpp" line="126"/>
<source>Spark Store</source>
<translation>SPARK Store</translation>
</message>
<message>
<location filename="../src/application.cpp" line="38"/>
<location filename="../src/application.cpp" line="40"/>
<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;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;</translation>
</message>
<message>
<location filename="../src/application.cpp" line="146"/>
<location filename="../src/application.cpp" line="148"/>
<source>Spark Project</source>
<translation>Proyecto spark</translation>
</message>
@ -528,7 +536,7 @@
<translation>Descargar lista</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="244"/>
<location filename="../src/mainwindow-dtk.cpp" line="245"/>
<source>Show MainWindow</source>
<translation>Mostrar la ventana principal</translation>
</message>
@ -650,12 +658,12 @@
<context>
<name>TitleBarMenu</name>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="245"/>
<location filename="../src/mainwindow-dtk.cpp" line="246"/>
<source>About</source>
<translation>Sobre</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="246"/>
<location filename="../src/mainwindow-dtk.cpp" line="247"/>
<source>Exit</source>
<translation>Exportaciones</translation>
</message>

View File

@ -8,14 +8,6 @@
<source>Form</source>
<translation>Type</translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="244"/>
<location filename="../src/pages/appintopage.cpp" line="175"/>
<location filename="../src/pages/appintopage.cpp" line="313"/>
<location filename="../src/pages/appintopage.cpp" line="483"/>
<source>Download</source>
<translation>Télécharger</translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="290"/>
<source>Uninstall</source>
@ -132,6 +124,14 @@
<source>Screen capture</source>
<translation>Captures d&apos;écran</translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="244"/>
<location filename="../src/pages/appintopage.cpp" line="175"/>
<location filename="../src/pages/appintopage.cpp" line="313"/>
<location filename="../src/pages/appintopage.cpp" line="483"/>
<source>Download and Install</source>
<translation>Télécharger et installer</translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="429"/>
<location filename="../src/pages/appintopage.ui" line="432"/>
@ -283,7 +283,7 @@
<message>
<location filename="../src/backend/downloadworker.cpp" line="176"/>
<source>Download Failed, please retry :(</source>
<translation type="unfinished"></translation>
<translation>Le téléchargement a échoué, veuillez réessayer</translation>
</message>
</context>
<context>
@ -374,8 +374,8 @@
<location filename="../src/widgets/common/downloaditem.cpp" line="237"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="238"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="239"/>
<source>dpkg progress had been abortedplease check the install info or try to reinstall.</source>
<translation>Le processus dpkg a é abandonné, vérifiez les informations d&apos;installation ou essayez de le réinstaller.</translation>
<source>dpkg progress had been aborted, please check the install info or try to reinstall.</source>
<translation>La progression de DPKG a é interrompue, veuillez vérifier les informations dinstallation ou essayer de réinstaller.</translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="144"/>
@ -480,33 +480,33 @@
<translation>Mise à niveau app</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="187"/>
<location filename="../src/mainwindow-dtk.cpp" line="188"/>
<source>Submit App</source>
<translation>Soumettre une application</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="188"/>
<location filename="../src/mainwindow-dtk.cpp" line="189"/>
<source>Submit App with client(Recommanded)</source>
<translation>Soumettre une demande au client (recommandé)</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="189"/>
<location filename="../src/mainwindow-dtk.cpp" line="190"/>
<source>Settings</source>
<translation>Paramètres</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="190"/>
<location filename="../src/mainwindow-dtk.cpp" line="191"/>
<source>APP Upgrade and Install Settings</source>
<translation>Paramètres de mise à niveau et d&apos;installation de l&apos;app</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="146"/>
<location filename="../src/mainwindow-dtk.cpp" line="241"/>
<location filename="../src/mainwindow-dtk.cpp" line="147"/>
<location filename="../src/mainwindow-dtk.cpp" line="242"/>
<source>Spark Store</source>
<translation>Le Spark store</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="151"/>
<location filename="../src/mainwindow-dtk.cpp" line="152"/>
<source>Search or enter spk://</source>
<translation>Rechercher ou entrer SPK /</translation>
</message>
@ -536,7 +536,7 @@
<translation>Télécharger la Liste</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="244"/>
<location filename="../src/mainwindow-dtk.cpp" line="245"/>
<source>Show MainWindow</source>
<translation>Afficher la fenêtre principale</translation>
</message>
@ -658,12 +658,12 @@
<context>
<name>TitleBarMenu</name>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="245"/>
<location filename="../src/mainwindow-dtk.cpp" line="246"/>
<source>About</source>
<translation>À propos</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="246"/>
<location filename="../src/mainwindow-dtk.cpp" line="247"/>
<source>Exit</source>
<translation>Exportations</translation>
</message>

View File

@ -8,14 +8,6 @@
<source>Form</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="244"/>
<location filename="../src/pages/appintopage.cpp" line="175"/>
<location filename="../src/pages/appintopage.cpp" line="313"/>
<location filename="../src/pages/appintopage.cpp" line="483"/>
<source>Download</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="290"/>
<source>Uninstall</source>
@ -127,6 +119,14 @@
<source>Screen capture</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="244"/>
<location filename="../src/pages/appintopage.cpp" line="175"/>
<location filename="../src/pages/appintopage.cpp" line="313"/>
<location filename="../src/pages/appintopage.cpp" line="483"/>
<source>Download and Install</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="429"/>
<location filename="../src/pages/appintopage.ui" line="432"/>
@ -283,7 +283,7 @@
<message>
<location filename="../src/backend/downloadworker.cpp" line="176"/>
<source>Download Failed, please retry :(</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>
@ -368,14 +368,14 @@
<location filename="../src/widgets/common/downloaditem.cpp" line="230"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="231"/>
<source>Error happened in dpkg progress , please check the install info or try to reinstall.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="237"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="238"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="239"/>
<source>dpkg progress had been abortedplease check the install info or try to reinstall.</source>
<translation>dpkg出现错误</translation>
<source>dpkg progress had been aborted, please check the install info or try to reinstall.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="144"/>
@ -480,33 +480,33 @@
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="187"/>
<location filename="../src/mainwindow-dtk.cpp" line="188"/>
<source>Submit App</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="188"/>
<location filename="../src/mainwindow-dtk.cpp" line="189"/>
<source>Submit App with client(Recommanded)</source>
<translation>使稿</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="189"/>
<location filename="../src/mainwindow-dtk.cpp" line="190"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="190"/>
<location filename="../src/mainwindow-dtk.cpp" line="191"/>
<source>APP Upgrade and Install Settings</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="146"/>
<location filename="../src/mainwindow-dtk.cpp" line="241"/>
<location filename="../src/mainwindow-dtk.cpp" line="147"/>
<location filename="../src/mainwindow-dtk.cpp" line="242"/>
<source>Spark Store</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="151"/>
<location filename="../src/mainwindow-dtk.cpp" line="152"/>
<source>Search or enter spk://</source>
<translation></translation>
</message>
@ -536,7 +536,7 @@
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="244"/>
<location filename="../src/mainwindow-dtk.cpp" line="245"/>
<source>Show MainWindow</source>
<translation></translation>
</message>
@ -658,12 +658,12 @@
<context>
<name>TitleBarMenu</name>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="245"/>
<location filename="../src/mainwindow-dtk.cpp" line="246"/>
<source>About</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="246"/>
<location filename="../src/mainwindow-dtk.cpp" line="247"/>
<source>Exit</source>
<translation>退</translation>
</message>

View File

@ -8,14 +8,6 @@
<source>Form</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="244"/>
<location filename="../src/pages/appintopage.cpp" line="175"/>
<location filename="../src/pages/appintopage.cpp" line="313"/>
<location filename="../src/pages/appintopage.cpp" line="483"/>
<source>Download</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="290"/>
<source>Uninstall</source>
@ -127,6 +119,14 @@
<source>Screen capture</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="244"/>
<location filename="../src/pages/appintopage.cpp" line="175"/>
<location filename="../src/pages/appintopage.cpp" line="313"/>
<location filename="../src/pages/appintopage.cpp" line="483"/>
<source>Download and Install</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="429"/>
<location filename="../src/pages/appintopage.ui" line="432"/>
@ -283,7 +283,7 @@
<message>
<location filename="../src/backend/downloadworker.cpp" line="176"/>
<source>Download Failed, please retry :(</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>
@ -368,14 +368,14 @@
<location filename="../src/widgets/common/downloaditem.cpp" line="230"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="231"/>
<source>Error happened in dpkg progress , please check the install info or try to reinstall.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="237"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="238"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="239"/>
<source>dpkg progress had been abortedplease check the install info or try to reinstall.</source>
<translation>dpkg出現錯誤</translation>
<source>dpkg progress had been aborted, please check the install info or try to reinstall.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="144"/>
@ -480,33 +480,33 @@
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="187"/>
<location filename="../src/mainwindow-dtk.cpp" line="188"/>
<source>Submit App</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="188"/>
<location filename="../src/mainwindow-dtk.cpp" line="189"/>
<source>Submit App with client(Recommanded)</source>
<translation>()</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="189"/>
<location filename="../src/mainwindow-dtk.cpp" line="190"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="190"/>
<location filename="../src/mainwindow-dtk.cpp" line="191"/>
<source>APP Upgrade and Install Settings</source>
<translation> </translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="146"/>
<location filename="../src/mainwindow-dtk.cpp" line="241"/>
<location filename="../src/mainwindow-dtk.cpp" line="147"/>
<location filename="../src/mainwindow-dtk.cpp" line="242"/>
<source>Spark Store</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="151"/>
<location filename="../src/mainwindow-dtk.cpp" line="152"/>
<source>Search or enter spk://</source>
<translation></translation>
</message>
@ -536,7 +536,7 @@
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="244"/>
<location filename="../src/mainwindow-dtk.cpp" line="245"/>
<source>Show MainWindow</source>
<translation></translation>
</message>
@ -658,12 +658,12 @@
<context>
<name>TitleBarMenu</name>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="245"/>
<location filename="../src/mainwindow-dtk.cpp" line="246"/>
<source>About</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="246"/>
<location filename="../src/mainwindow-dtk.cpp" line="247"/>
<source>Exit</source>
<translation>退</translation>
</message>