Compare commits
34 Commits
4.7.1test1
...
4.8.0
| Author | SHA1 | Date | |
|---|---|---|---|
| 88a157dd45 | |||
| 34b8670a40 | |||
| d5b2d4ddf4 | |||
| 01bb90879b | |||
| 1c64278723 | |||
| 17c90c5d07 | |||
| 539607553d | |||
| 85daec6428 | |||
| e38d23dba0 | |||
| 9593ebb813 | |||
| fd1f13f59d | |||
| c5b5b6d3ba | |||
| ef4b21fb8c | |||
| 72e3d54f8d | |||
| 50fd18fbe4 | |||
| e98def4839 | |||
| da65d3b90e | |||
| 33c892b39d | |||
| ca6e47e9a3 | |||
| 0ca73a2a28 | |||
| 9493f0738a | |||
| 688ed679b5 | |||
| 233b5e8c76 | |||
| 4fc8ef3f48 | |||
| cd4f104e1a | |||
| 9b92894e4f | |||
| 05a5b89464 | |||
| fb6446292c | |||
| 5bc65827b2 | |||
| c0b2edf1b0 | |||
| f08366a3d5 | |||
| 8cb92d9972 | |||
| 6640dc9bba | |||
| 3c2a6ac635 |
2
.gitignore
vendored
@@ -53,4 +53,4 @@ debian/*.substvars
|
||||
debian/spark-store
|
||||
|
||||
.vscode/*
|
||||
src/spark-store
|
||||
obj-*
|
||||
|
||||
6
debian/changelog
vendored
@@ -1,6 +1,8 @@
|
||||
spark-store (4.7.1~test1) UNRELEASED; urgency=medium
|
||||
spark-store (4.8.0) UNRELEASED; urgency=medium
|
||||
|
||||
* ssinstall升级,支持安装到ACE和自动安装到ACE
|
||||
* ssinstall重写,支持安装到ACE和自动安装到ACE,支持只允许安装到本地
|
||||
* 商店支持展示ACE标识,支持识别 native amber-ce-bookworm amber-ce-trixie amber-ce-sid amber-ce-deepin23
|
||||
* 投稿器支持新版spec
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Tue, 24 Sep 2024 11:27:08 +0800
|
||||
|
||||
|
||||
@@ -35,14 +35,13 @@ Application::Application(int &argc, char **argv)
|
||||
setApplicationName("spark-store"); // 影响 ~/.config/spark-union ~/.local/share/spark-union 下文件夹名称
|
||||
setApplicationDisplayName(QObject::tr("Spark Store")); // 设置窗口显示标题 (Wayland 下会显示 Qt 原生标题栏)
|
||||
setProductName(QObject::tr("Spark Store"));
|
||||
setProductIcon(QIcon::fromTheme("spark-store"));
|
||||
setProductIcon(QIcon(":/icon/sparky.png"));
|
||||
setApplicationHomePage("https://gitee.com/spark-store-project");
|
||||
setApplicationDescription(
|
||||
QObject::tr(
|
||||
"<span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/>"
|
||||
"<a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/>"
|
||||
"<span style=' font-size:12pt;'>Spark developers</span>"));
|
||||
setApplicationLicense(" <a href='https://gitee.com/spark-store-project/spark-store/blob/Flamescion/LICENSE'>Spark Opensource License</a> ");
|
||||
"<span style=' font-size:10pt;font-weight:60;'>Sparky is our mascot, designed by <a href='https://tai3.cn/'>Tyson Tan</a></span><br/>"));
|
||||
setApplicationLicense(" <a href='https://gitee.com/spark-store-project/spark-store/blob/Flamescion/LICENSE'>GPL V3</a> ");
|
||||
|
||||
// 检查 ~/.config/spark-union/spark-store 文件夹是否存在
|
||||
checkAppConfigLocation();
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
<file>icon/light/text.svg</file>
|
||||
<file>icon/light/update.svg</file>
|
||||
<file>icon/logo.svg</file>
|
||||
<file>icon/sparky.png</file>
|
||||
<file>json/features.json</file>
|
||||
<file>tags/a2d_full.svg</file>
|
||||
<file>tags/a2d.png</file>
|
||||
@@ -72,6 +73,21 @@
|
||||
<file>tags/uos_full.svg</file>
|
||||
<file>tags/uos.png</file>
|
||||
<file>tags/uos.svg</file>
|
||||
<file>tags/amber-ce-bookworm_full.svg</file>
|
||||
<file>tags/amber-ce-bookworm.png</file>
|
||||
<file>tags/amber-ce-bookworm.svg</file>
|
||||
<file>tags/amber-ce-sid_full.svg</file>
|
||||
<file>tags/amber-ce-sid.png</file>
|
||||
<file>tags/amber-ce-sid.svg</file>
|
||||
<file>tags/amber-ce-trixie_full.svg</file>
|
||||
<file>tags/amber-ce-trixie.png</file>
|
||||
<file>tags/amber-ce-trixie.svg</file>
|
||||
<file>tags/native_full.svg</file>
|
||||
<file>tags/native.png</file>
|
||||
<file>tags/native.svg</file>
|
||||
<file>translations/qtwebengine_zh.qm</file>
|
||||
<file>tags/amber-ce-deepin_full.svg</file>
|
||||
<file>tags/amber-ce-deepin.svg</file>
|
||||
<file>tags/amber-ce-deepin.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
BIN
src/assets/icon/sparky.png
Normal file
|
After Width: | Height: | Size: 401 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 7.3 KiB |
BIN
src/assets/tags/amber-ce-bookworm.png
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
1
src/assets/tags/amber-ce-bookworm.svg
Normal file
|
After Width: | Height: | Size: 22 KiB |
1
src/assets/tags/amber-ce-bookworm_full.svg
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
src/assets/tags/amber-ce-deepin.png
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
1
src/assets/tags/amber-ce-deepin.svg
Normal file
|
After Width: | Height: | Size: 18 KiB |
1
src/assets/tags/amber-ce-deepin_full.svg
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
src/assets/tags/amber-ce-sid.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
1
src/assets/tags/amber-ce-sid.svg
Normal file
|
After Width: | Height: | Size: 18 KiB |
1
src/assets/tags/amber-ce-sid_full.svg
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
src/assets/tags/amber-ce-trixie.png
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
1
src/assets/tags/amber-ce-trixie.svg
Normal file
|
After Width: | Height: | Size: 18 KiB |
1
src/assets/tags/amber-ce-trixie_full.svg
Normal file
|
After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 6.0 KiB |
BIN
src/assets/tags/native.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
1
src/assets/tags/native.svg
Normal file
|
After Width: | Height: | Size: 11 KiB |
1
src/assets/tags/native_full.svg
Normal file
|
After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 6.6 KiB |
@@ -8,6 +8,8 @@
|
||||
#include <QSettings>
|
||||
#include <QProcess>
|
||||
#include <QDebug>
|
||||
#include <QFile>
|
||||
#include <QTextStream>
|
||||
|
||||
DataCollectorAndUploader::DataCollectorAndUploader(QObject *parent) : QObject(parent)
|
||||
{
|
||||
@@ -23,25 +25,26 @@ 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();
|
||||
// Read /etc/os-release file
|
||||
QFile osReleaseFile("/etc/os-release");
|
||||
if (osReleaseFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||
QTextStream in(&osReleaseFile);
|
||||
while (!in.atEnd()) {
|
||||
QString line = in.readLine();
|
||||
if (line.startsWith("ID=")) {
|
||||
distributor_id = line.mid(3).remove('"').trimmed();
|
||||
} else if (line.startsWith("VERSION_ID=")) {
|
||||
release = line.mid(11).remove('"').trimmed();
|
||||
}
|
||||
}
|
||||
osReleaseFile.close();
|
||||
} else {
|
||||
qWarning() << "Could not open /etc/os-release file";
|
||||
}
|
||||
|
||||
// Execute uname -m to get the architecture
|
||||
@@ -58,8 +61,6 @@ void DataCollectorAndUploader::collectData()
|
||||
json.insert("Store_Version", version);
|
||||
json.insert("UUID", uuid);
|
||||
|
||||
|
||||
|
||||
// Convert to byte array
|
||||
QJsonDocument doc(json);
|
||||
QByteArray jsonData = doc.toJson();
|
||||
|
||||
@@ -151,24 +151,25 @@ void AppIntoPage::openUrl(const QUrl &url)
|
||||
{
|
||||
isInstalled = true;
|
||||
|
||||
QProcess isUpdate;
|
||||
isUpdate.start("dpkg-query", QStringList() << "--showformat='${Version}'"
|
||||
<< "--show" << info["Pkgname"].toString());
|
||||
isUpdate.waitForFinished(180 * 1000); // 默认超时 3 分钟
|
||||
QString localVersion = isUpdate.readAllStandardOutput();
|
||||
localVersion.replace("'", "");
|
||||
// QProcess isUpdate;
|
||||
// isUpdate.start("dpkg-query", QStringList() << "--showformat='${Version}'"
|
||||
// << "--show" << info["Pkgname"].toString());
|
||||
// isUpdate.waitForFinished(180 * 1000); // 默认超时 3 分钟
|
||||
// QString localVersion = isUpdate.readAllStandardOutput();
|
||||
// localVersion.replace("'", "");
|
||||
|
||||
isUpdate.start("dpkg", QStringList() << "--compare-versions" << localVersion << "ge" << info["Version"].toString());
|
||||
isUpdate.waitForFinished(180 * 1000); // 默认超时 3 分钟
|
||||
if (isUpdate.exitCode() == 0 && isUpdate.exitStatus() == QProcess::NormalExit)
|
||||
{
|
||||
isUpdated = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
isUpdated = false;
|
||||
}
|
||||
isUpdate.close();
|
||||
// isUpdate.start("dpkg", QStringList() << "--compare-versions" << localVersion << "ge" << info["Version"].toString());
|
||||
// isUpdate.waitForFinished(180 * 1000); // 默认超时 3 分钟
|
||||
// if (isUpdate.exitCode() == 0 && isUpdate.exitStatus() == QProcess::NormalExit)
|
||||
// {
|
||||
// isUpdated = true;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// isUpdated = false;
|
||||
// }
|
||||
// isUpdate.close();
|
||||
isUpdated = true; //去掉直接点击升级的功能
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -234,6 +235,12 @@ void AppIntoPage::clear()
|
||||
ui->tag_debian->hide();
|
||||
ui->tag_ubuntu->hide();
|
||||
ui->tag_community->hide();
|
||||
ui->tag_native->hide();
|
||||
ui->tag_amber_ce_bookworm->hide();
|
||||
ui->tag_amber_ce_trixie->hide();
|
||||
ui->tag_amber_ce_sid->hide();
|
||||
ui->tag_amber_ce_deepin23->hide();
|
||||
|
||||
ui->icon->clear();
|
||||
ui->title->clear();
|
||||
ui->version->clear();
|
||||
@@ -404,53 +411,87 @@ void AppIntoPage::setAppinfoTags(const QStringList &tagList)
|
||||
bool deepinSupport = false;
|
||||
bool uosSupport = false;
|
||||
bool debianSupport = false;
|
||||
bool hasAmberTag = false;
|
||||
|
||||
// First pass: Check if any Amber tags exist
|
||||
foreach (const QString &tag, tagList)
|
||||
{
|
||||
if (tag == "community")
|
||||
if (tag.startsWith("amber-ce-"))
|
||||
{
|
||||
ui->tag_community->show();
|
||||
}
|
||||
else if (tag == "debian")
|
||||
{
|
||||
ui->tag_debian->show();
|
||||
debianSupport = true;
|
||||
}
|
||||
else if (tag == "ubuntu")
|
||||
{
|
||||
ui->tag_ubuntu->show();
|
||||
ubuntuSupport = true;
|
||||
}
|
||||
else if (tag == "deepin")
|
||||
{
|
||||
ui->tag_deepin->show();
|
||||
deepinSupport = true;
|
||||
}
|
||||
else if (tag == "uos")
|
||||
{
|
||||
ui->tag_uos->show();
|
||||
uosSupport = true;
|
||||
|
||||
}
|
||||
else if (tag == "dtk5")
|
||||
{
|
||||
ui->tag_dtk5->show();
|
||||
}
|
||||
else if (tag == "dwine2")
|
||||
{
|
||||
ui->tag_dwine2->show();
|
||||
}
|
||||
else if (tag == "dwine5")
|
||||
{
|
||||
ui->tag_dwine5->show();
|
||||
}
|
||||
else if (tag == "a2d")
|
||||
{
|
||||
ui->tag_a2d->show();
|
||||
hasAmberTag = true;
|
||||
break; // No need to continue checking
|
||||
}
|
||||
}
|
||||
notifyUserUnsupportedTags(ubuntuSupport, deepinSupport, uosSupport ,debianSupport);
|
||||
|
||||
|
||||
// Second pass: Apply tags based on whether we have Amber tags
|
||||
foreach (const QString &tag, tagList)
|
||||
{
|
||||
if (tag.isEmpty())
|
||||
continue;
|
||||
|
||||
if (tag == "native")
|
||||
ui->tag_native->show();
|
||||
|
||||
else if (tag == "community")
|
||||
ui->tag_community->show();
|
||||
|
||||
else if (tag == "dtk5")
|
||||
ui->tag_dtk5->show();
|
||||
|
||||
else if (tag == "dwine2")
|
||||
ui->tag_dwine2->show();
|
||||
|
||||
else if (tag == "dwine5")
|
||||
ui->tag_dwine5->show();
|
||||
|
||||
else if (tag == "a2d")
|
||||
ui->tag_a2d->show();
|
||||
|
||||
else if (tag == "amber-ce-bookworm")
|
||||
ui->tag_amber_ce_bookworm->show();
|
||||
|
||||
else if (tag == "amber-ce-trixie")
|
||||
ui->tag_amber_ce_trixie->show();
|
||||
|
||||
else if (tag == "amber-ce-deepin23")
|
||||
ui->tag_amber_ce_deepin23->show();
|
||||
|
||||
else if (tag == "amber-ce-sid")
|
||||
ui->tag_amber_ce_sid->show();
|
||||
|
||||
// Only process distro tags if there are no Amber tags
|
||||
else if (!hasAmberTag)
|
||||
{
|
||||
if (tag == "debian")
|
||||
{
|
||||
ui->tag_debian->show();
|
||||
debianSupport = true;
|
||||
}
|
||||
else if (tag == "ubuntu")
|
||||
{
|
||||
ui->tag_ubuntu->show();
|
||||
ubuntuSupport = true;
|
||||
}
|
||||
else if (tag == "deepin")
|
||||
{
|
||||
ui->tag_deepin->show();
|
||||
deepinSupport = true;
|
||||
}
|
||||
else if (tag == "uos")
|
||||
{
|
||||
ui->tag_uos->show();
|
||||
uosSupport = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasAmberTag)
|
||||
notifyUserUnsupportedTags(ubuntuSupport, deepinSupport, uosSupport, debianSupport);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AppIntoPage::notifyUserUnsupportedTags(bool ubuntuSupport, bool deepinSupport, bool uosSupport, bool debianSupport)
|
||||
{
|
||||
if (!SettingsPage::needUncompatibleNotification) {
|
||||
@@ -536,7 +577,27 @@ void AppIntoPage::on_downloadButton_clicked()
|
||||
|
||||
emit clickedDownloadBtn();
|
||||
|
||||
DownloadItem *item = dw->addItem(info["Name"].toString(), info["Filename"].toString(), info["Pkgname"].toString(), iconpixmap, downloadUrl);
|
||||
// 处理 tags,设置 installExtraArg
|
||||
QString installExtraArg;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
|
||||
QStringList taglist = info["Tags"].toString().split(";", Qt::SkipEmptyParts);
|
||||
#else
|
||||
QStringList taglist = info["Tags"].toString().split(";", QString::SkipEmptyParts);
|
||||
#endif
|
||||
if (taglist.contains("native")) {
|
||||
installExtraArg = "--native";
|
||||
} else if (taglist.contains("amber-ce-bookworm")) {
|
||||
installExtraArg = "--amber-ce-bookworm";
|
||||
} else if (taglist.contains("amber-ce-trixie")) {
|
||||
installExtraArg = "--amber-ce-trixie";
|
||||
} else if (taglist.contains("amber-ce-sid")) {
|
||||
installExtraArg = "--amber-ce-sid";
|
||||
} else if (taglist.contains("amber-ce-deepin23")) {
|
||||
installExtraArg = "--amber-ce-deepin23";
|
||||
}
|
||||
|
||||
DownloadItem *item = dw->addItem(info["Name"].toString(), info["Filename"].toString(), info["Pkgname"].toString(),
|
||||
iconpixmap, downloadUrl, installExtraArg);
|
||||
if (item == nullptr)
|
||||
{
|
||||
return;
|
||||
@@ -566,11 +627,11 @@ void AppIntoPage::on_pushButton_3_clicked()
|
||||
uninstall.waitForFinished(-1);
|
||||
uninstall.close();
|
||||
|
||||
QProcess check;
|
||||
check.start("dpkg", QStringList() << "-s" << info["Pkgname"].toString().toLower());
|
||||
check.waitForFinished(-1);
|
||||
// QProcess check;
|
||||
// check.start("dpkg", QStringList() << "-s" << info["Pkgname"].toString().toLower());
|
||||
// check.waitForFinished(-1);
|
||||
|
||||
if (check.exitCode() != 0 || check.exitStatus() != QProcess::NormalExit)
|
||||
if (uninstall.exitCode() != 0 || uninstall.exitStatus() != QProcess::NormalExit)
|
||||
{
|
||||
ui->downloadButton->setText(tr("Download and Install"));
|
||||
ui->pushButton_3->hide();
|
||||
@@ -581,7 +642,7 @@ void AppIntoPage::on_pushButton_3_clicked()
|
||||
ui->downloadButton->setEnabled(true);
|
||||
ui->pushButton_3->setEnabled(true);
|
||||
|
||||
check.close();
|
||||
// check.close();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -597,4 +658,4 @@ void AppIntoPage::on_updateButton_clicked()
|
||||
{
|
||||
QString feedbackURL = "https://bbs.spark-app.store/";
|
||||
QProcess::startDetached("xdg-open", QStringList{feedbackURL});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -385,14 +385,20 @@
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>184</width>
|
||||
<height>20</height>
|
||||
<width>13</width>
|
||||
<height>37</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="tag_ubuntu">
|
||||
<widget class="CustomLabel" name="tag_ubuntu">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
@@ -411,7 +417,13 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="tag_uos">
|
||||
<widget class="CustomLabel" name="tag_uos">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
@@ -430,7 +442,13 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="tag_deepin">
|
||||
<widget class="CustomLabel" name="tag_deepin">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
@@ -449,7 +467,13 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="tag_debian">
|
||||
<widget class="CustomLabel" name="tag_debian">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
@@ -467,6 +491,131 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CustomLabel" name="tag_native">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>This app can only be installed natively</p></body></html></string>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string><html><head/><body><p>This app can only be installed natively</p></body></html></string>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="../assets/assets.qrc">:/tags/native.png</pixmap>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CustomLabel" name="tag_amber_ce_bookworm">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>This app will be installed to debian12 ACE</p></body></html></string>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string><html><head/><body><p>This app will be installed to debian12 ACE</p></body></html></string>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="../assets/assets.qrc">:/tags/amber-ce-bookworm.png</pixmap>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CustomLabel" name="tag_amber_ce_trixie">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>This app will be installed to debian13 ACE</p></body></html></string>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string><html><head/><body><p>This app will be installed to debian13 ACE</p></body></html></string>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="../assets/assets.qrc">:/tags/amber-ce-trixie.png</pixmap>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CustomLabel" name="tag_amber_ce_sid">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>This app will be installed to debian SID ACE</p></body></html></string>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string><html><head/><body><p>This app will be installed to debian SID ACE</p></body></html></string>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="../assets/assets.qrc">:/tags/amber-ce-sid.png</pixmap>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CustomLabel" name="tag_amber_ce_deepin23">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>This app will be installed to deepin23 ACE</p></body></html></string>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string><html><head/><body><p>This app will be installed to deepin23 ACE</p></body></html></string>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="../assets/assets.qrc">:/tags/amber-ce-deepin.png</pixmap>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_5">
|
||||
<property name="orientation">
|
||||
@@ -474,8 +623,8 @@
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>184</width>
|
||||
<height>20</height>
|
||||
<width>18</width>
|
||||
<height>37</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
@@ -498,7 +647,13 @@
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="tag_a2d">
|
||||
<widget class="CustomLabel" name="tag_a2d">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
@@ -517,7 +672,13 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="tag_community">
|
||||
<widget class="CustomLabel" name="tag_community">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
@@ -536,7 +697,13 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="tag_dtk5">
|
||||
<widget class="CustomLabel" name="tag_dtk5">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
@@ -555,7 +722,13 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="tag_dwine2">
|
||||
<widget class="CustomLabel" name="tag_dwine2">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
@@ -574,7 +747,13 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="tag_dwine5">
|
||||
<widget class="CustomLabel" name="tag_dwine5">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
@@ -718,7 +897,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>524</width>
|
||||
<width>482</width>
|
||||
<height>601</height>
|
||||
</rect>
|
||||
</property>
|
||||
@@ -1452,6 +1631,13 @@ QListWidget::item::selected
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>CustomLabel</class>
|
||||
<extends>QLabel</extends>
|
||||
<header>widgets/common/customlabel.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources>
|
||||
<include location="../assets/assets.qrc"/>
|
||||
</resources>
|
||||
|
||||
@@ -47,6 +47,7 @@ SOURCES += \
|
||||
utils/utils.cpp \
|
||||
utils/widgetanimation.cpp \
|
||||
widgets/base/basewidgetopacity.cpp \
|
||||
widgets/common/customlabel.cpp \
|
||||
widgets/common/downloaditem.cpp \
|
||||
widgets/common/progressbutton.cpp \
|
||||
widgets/common/smoothlistwidget.cpp \
|
||||
@@ -73,6 +74,7 @@ HEADERS += \
|
||||
utils/utils.h \
|
||||
utils/widgetanimation.h \
|
||||
widgets/base/basewidgetopacity.h \
|
||||
widgets/common/customlabel.h \
|
||||
widgets/common/downloaditem.h \
|
||||
widgets/common/progressbutton.h \
|
||||
widgets/common/smoothlistwidget.h \
|
||||
|
||||
24
src/widgets/common/customlabel.cpp
Normal file
@@ -0,0 +1,24 @@
|
||||
#include "customlabel.h"
|
||||
#include <QGuiApplication>
|
||||
|
||||
CustomLabel::CustomLabel(QWidget *parent, Qt::WindowFlags f)
|
||||
: QLabel(parent, f)
|
||||
{
|
||||
}
|
||||
|
||||
QPixmap CustomLabel::pixmap() const
|
||||
{
|
||||
const QPixmap *p = QLabel::pixmap();
|
||||
return p ? *p : QPixmap();
|
||||
}
|
||||
|
||||
void CustomLabel::setPixmap(const QPixmap &pixmap)
|
||||
{
|
||||
QPixmap _pixmap = pixmap;
|
||||
_pixmap.setDevicePixelRatio(qApp->devicePixelRatio());
|
||||
_pixmap = _pixmap.scaled(size() * _pixmap.devicePixelRatio(),
|
||||
Qt::KeepAspectRatio,
|
||||
Qt::SmoothTransformation);
|
||||
|
||||
QLabel::setPixmap(_pixmap);
|
||||
}
|
||||
19
src/widgets/common/customlabel.h
Normal file
@@ -0,0 +1,19 @@
|
||||
#ifndef CUSTOMLABEL_H
|
||||
#define CUSTOMLABEL_H
|
||||
|
||||
#include <QLabel>
|
||||
|
||||
class CustomLabel : public QLabel
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap)
|
||||
|
||||
public:
|
||||
explicit CustomLabel(QWidget *parent = nullptr,
|
||||
Qt::WindowFlags f = Qt::WindowFlags());
|
||||
|
||||
virtual QPixmap pixmap() const;
|
||||
virtual void setPixmap(const QPixmap &pixmap);
|
||||
};
|
||||
|
||||
#endif // CUSTOMLABEL_H
|
||||
@@ -175,8 +175,16 @@ void DownloadItem::slotAsyncInstall(int t)
|
||||
switch (t)
|
||||
{
|
||||
case 0:
|
||||
installer.start("pkexec", QStringList() << "/usr/local/bin/ssinstall"
|
||||
<< "/tmp/spark-store/" + ui->label_filename->text().toUtf8() << "--delete-after-install");
|
||||
{
|
||||
QStringList args;
|
||||
args << "/usr/local/bin/ssinstall"
|
||||
<< "/tmp/spark-store/" + ui->label_filename->text().toUtf8();
|
||||
if (!installExtraArg.isEmpty()) {
|
||||
args << installExtraArg;
|
||||
}
|
||||
args << "--delete-after-install";
|
||||
installer.start("pkexec", args);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
installer.start("deepin-deb-installer", QStringList() << "/tmp/spark-store/" + ui->label_filename->text().toUtf8());
|
||||
@@ -208,11 +216,11 @@ void DownloadItem::slotAsyncInstall(int t)
|
||||
}
|
||||
}
|
||||
|
||||
QProcess isInstall;
|
||||
isInstall.start("dpkg", QStringList() << "-s" << pkgName);
|
||||
isInstall.waitForFinished(180 * 1000); // 默认超时 3 分钟
|
||||
int error = QString::fromStdString(isInstall.readAllStandardError().toStdString()).length();
|
||||
if (error == 0 && !haveError)
|
||||
// QProcess isInstall;
|
||||
// isInstall.start("dpkg", QStringList() << "-s" << pkgName);
|
||||
// isInstall.waitForFinished(180 * 1000); // 默认超时 3 分钟
|
||||
// int error = QString::fromStdString(isInstall.readAllStandardError().toStdString()).length();
|
||||
if ( !haveError)
|
||||
{
|
||||
ui->pushButton_install->hide();
|
||||
Utils::sendNotification("spark-store", tr("Spark Store"), ui->label->text() + " " + tr("Installation complete."));
|
||||
@@ -244,8 +252,5 @@ void DownloadItem::slotAsyncInstall(int t)
|
||||
ui->widget_spinner->hide();
|
||||
DownloadItem::isInstall = false;
|
||||
|
||||
installer.deleteLater();
|
||||
isInstall.deleteLater();
|
||||
|
||||
emit finished(error == 0 && !haveError && !notRoot);
|
||||
emit finished(!haveError && !notRoot);
|
||||
}
|
||||
|
||||
@@ -43,6 +43,9 @@ public:
|
||||
|
||||
void install(int);
|
||||
|
||||
// 新增:安装时额外参数
|
||||
QString installExtraArg;
|
||||
|
||||
private:
|
||||
Ui::DownloadItem *ui;
|
||||
|
||||
|
||||
@@ -85,7 +85,9 @@ void DownloadListWidget::clearItem()
|
||||
ui->listWidget->clear();
|
||||
}
|
||||
|
||||
DownloadItem* DownloadListWidget::addItem(QString name, QString fileName, QString pkgName, const QPixmap icon, QString downloadurl)
|
||||
DownloadItem* DownloadListWidget::addItem(QString name, QString fileName, QString pkgName,
|
||||
const QPixmap icon, QString downloadurl,
|
||||
const QString &installExtraArg)
|
||||
{
|
||||
if (fileName.isEmpty())
|
||||
{
|
||||
@@ -104,6 +106,7 @@ DownloadItem* DownloadListWidget::addItem(QString name, QString fileName, QStrin
|
||||
di->setName(name);
|
||||
di->setFileName(fileName);
|
||||
di->pkgName = pkgName;
|
||||
di->installExtraArg = installExtraArg;
|
||||
di->seticon(icon);
|
||||
QListWidgetItem *pItem = new QListWidgetItem();
|
||||
pItem->setSizeHint(QSize(240, 56)); // ui 中单个 downloaditem 高度固定 56px(上下 margin 8px,图片固定 48x48)
|
||||
|
||||
@@ -19,7 +19,9 @@ class DownloadListWidget : public DBlurEffectWidget
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DownloadItem *addItem(QString name, QString fileName, QString pkgName, const QPixmap icon, QString downloadurl);
|
||||
DownloadItem *addItem(QString name, QString fileName, QString pkgName,
|
||||
const QPixmap icon, QString downloadurl,
|
||||
const QString &installExtraArg);
|
||||
int nowDownload = 0;
|
||||
int allDownload = 0;
|
||||
int toDownload = 0;
|
||||
|
||||
282
tool/ssaudit
@@ -2,7 +2,7 @@
|
||||
# 初始化常量和全局变量
|
||||
readonly SPARK_DOWNLOAD_SERVER_URL="https://d.spark-app.store/"
|
||||
readonly SPARK_DOWNLOAD_SERVER_URL_NO_PROTOCOL="d.spark-app.store"
|
||||
# ACE环境配置 - 修改此数组即可添加或删除支持的环境
|
||||
# ACE环境配置 - 修改此数组即可添加或删除支持的环境——记得修改 store-helper 里的 uninstaller check-is-installed 和 ss-launcher
|
||||
readonly ACE_ENVIRONMENTS=(
|
||||
"bookworm-run:amber-ce-bookworm"
|
||||
"trixie-run:amber-ce-trixie"
|
||||
@@ -13,6 +13,30 @@ readonly ACE_ENVIRONMENTS_FOR_AUTOINSTALL=(
|
||||
"bookworm-run:amber-ce-bookworm"
|
||||
"trixie-run:amber-ce-trixie"
|
||||
)
|
||||
function get_current_user() {
|
||||
# 优先通过 who 命令获取用户
|
||||
local user
|
||||
user=$(who | awk '{print $1}' | head -n 1 2>/dev/null)
|
||||
|
||||
# 如果 who 无输出,则通过 loginctl 获取
|
||||
if [[ -z "$user" ]]; then
|
||||
user=$(loginctl list-sessions --no-legend 2>/dev/null | awk '{print $3}' | head -n 1)
|
||||
fi
|
||||
|
||||
# 返回最终结果(可能为空)
|
||||
echo "${user}"
|
||||
}
|
||||
|
||||
function zenity() {
|
||||
local user=$(get_current_user)
|
||||
local uid=$(id -u "$user")
|
||||
sudo -u "$user" DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/"$uid"/bus zenity "$@"
|
||||
}
|
||||
|
||||
|
||||
# 全局变量初始化(位于 parse_args 前)
|
||||
ACE_PARAMS=()
|
||||
|
||||
# 生成ACE环境参数帮助信息
|
||||
function generate_ace_help() {
|
||||
local help_text=""
|
||||
@@ -42,7 +66,7 @@ case $(arch) in
|
||||
esac
|
||||
# 帮助函数
|
||||
function show_help() {
|
||||
echo "Spark Store Audit script. 星火商店审核脚本"
|
||||
echo "Spark Store Anstall script. 星火商店审核脚本"
|
||||
echo "用法: $0 [选项] <deb路径>"
|
||||
echo "选项:"
|
||||
echo " -h, --help 显示帮助信息"
|
||||
@@ -54,51 +78,53 @@ function show_help() {
|
||||
}
|
||||
# 参数解析
|
||||
function parse_args() {
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
--delete-after-install)
|
||||
DELETE_AFTER_INSTALL="1"
|
||||
shift
|
||||
;;
|
||||
--native)
|
||||
FORCE_NATIVE="1"
|
||||
shift
|
||||
;;
|
||||
--no-create-desktop-entry)
|
||||
NO_CREATE_DESKTOP="1"
|
||||
shift
|
||||
;;
|
||||
--force-create-desktop-entry)
|
||||
FORCE_CREATE_DESKTOP="1"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
# 检查是否为ACE环境参数
|
||||
local is_ace_param=0
|
||||
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
|
||||
local ace_param="--${ace_entry#*:}"
|
||||
if [ "$1" = "$ace_param" ]; then
|
||||
FORCE_ACE_ENV="${ace_entry%%:*}"
|
||||
is_ace_param=1
|
||||
shift
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# 如果不是ACE参数,则视为DEB路径
|
||||
if [ "$is_ace_param" -eq 0 ]; then
|
||||
DEBPATH="$1"
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
--delete-after-install)
|
||||
DELETE_AFTER_INSTALL="1"
|
||||
shift
|
||||
;;
|
||||
--native)
|
||||
FORCE_NATIVE="1"
|
||||
shift
|
||||
;;
|
||||
--no-create-desktop-entry)
|
||||
NO_CREATE_DESKTOP="1"
|
||||
shift
|
||||
;;
|
||||
--force-create-desktop-entry)
|
||||
FORCE_CREATE_DESKTOP="1"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
# 检查是否为ACE环境参数
|
||||
local is_ace_param=0
|
||||
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
|
||||
local ace_param="--${ace_entry#*:}"
|
||||
if [ "$1" = "$ace_param" ]; then
|
||||
# 将ACE环境命令名加入数组
|
||||
ACE_PARAMS+=("${ace_entry%%:*}")
|
||||
is_ace_param=1
|
||||
shift
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# 如果不是ACE环境参数,则视为DEB路径
|
||||
if [ "$is_ace_param" -eq 0 ]; then
|
||||
DEBPATH="$1"
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
# 验证当前用户
|
||||
function validate_user() {
|
||||
if [ "$(id -u)" != "0" ]; then
|
||||
@@ -253,6 +279,10 @@ function install_in_ace_env() {
|
||||
local deb_path="$2"
|
||||
local ace_env_pkg="${3#*:}"
|
||||
|
||||
if [ "$IS_ACE_ENV" != "" ] || command -v termux-chroot; then
|
||||
echo "无法在ACE/termux/小小电脑中安装ACE包"
|
||||
return 1
|
||||
fi
|
||||
if ! ensure_ace_env "$ace_env_pkg"; then
|
||||
return 1
|
||||
fi
|
||||
@@ -260,37 +290,47 @@ function install_in_ace_env() {
|
||||
echo "----------------------------------------"
|
||||
echo "正在尝试使用 $ace_cmd 环境安装..."
|
||||
echo "----------------------------------------"
|
||||
|
||||
# 在ACE环境中执行安装
|
||||
if $ace_cmd "ensure_aptss_exist && { dpkg -i '$deb_path' || aptss install '$deb_path' -yfq; }"; then
|
||||
return 0
|
||||
else
|
||||
# 如果第一次安装失败,执行aptss update后再试一次
|
||||
echo "第一次安装失败,正在更新仓库信息后重试..."
|
||||
$ace_cmd "ensure_aptss_exist"
|
||||
|
||||
# 首先尝试dry-run测试
|
||||
if ! $ace_cmd "aptss install --dry-run '$deb_path'"; then
|
||||
echo "初始dry-run测试失败,尝试更新后重试..."
|
||||
$ace_cmd "aptss update"
|
||||
if $ace_cmd "dpkg -i '$deb_path' || aptss install '$deb_path' -yfq"; then
|
||||
return 0
|
||||
else
|
||||
if ! $ace_cmd "aptss install --dry-run '$deb_path'"; then
|
||||
echo "dry-run测试仍然失败,放弃安装"
|
||||
echo "OMG_IT_GOES_WRONG"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# dry-run成功后执行实际安装
|
||||
$ace_cmd "aptss install store.spark-app.app-runtime-base --no-install-recommends -yfq"
|
||||
if $ace_cmd "dpkg -i '$deb_path' || aptss install '$deb_path' -yfq"; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 在主机安装
|
||||
function install_in_host() {
|
||||
local deb_path="$1"
|
||||
|
||||
# 首先尝试dry-run测试
|
||||
if ! aptss install --dry-run "$deb_path"; then
|
||||
echo "初始dry-run测试失败,尝试更新后重试..."
|
||||
aptss update
|
||||
if ! aptss install --dry-run "$deb_path"; then
|
||||
echo "dry-run测试仍然失败,放弃安装"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# dry-run成功后执行实际安装
|
||||
if dpkg -i "$deb_path" || aptss install "$deb_path" -yfq; then
|
||||
return 0
|
||||
else
|
||||
# 如果第一次安装失败,执行aptss update后再试一次
|
||||
echo "第一次安装失败,正在更新仓库信息后重试..."
|
||||
aptss update
|
||||
if dpkg -i "$deb_path" || aptss install "$deb_path" -yfq; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -300,11 +340,12 @@ function auto_try_install() {
|
||||
|
||||
# 首先尝试在主机安装
|
||||
if install_in_host "$deb_path"; then
|
||||
create_desktop_file
|
||||
return 0
|
||||
fi
|
||||
|
||||
# 如果主机安装失败且不在强制本地模式,尝试ACE环境
|
||||
if [ "$FORCE_NATIVE" -eq 0 ]; then
|
||||
# 如果主机安装失败,并非在ACE内运行且不在强制本地模式,尝试ACE环境
|
||||
if [ "$FORCE_NATIVE" -eq 0 ] && [ "$IS_ACE_ENV" = "" ] && ! command -v termux-chroot; then
|
||||
for ace_entry in "${ACE_ENVIRONMENTS_FOR_AUTOINSTALL[@]}"; do
|
||||
local ace_cmd=${ace_entry%%:*}
|
||||
local ace_env_pkg=${ace_entry#*:}
|
||||
@@ -322,7 +363,6 @@ function auto_try_install() {
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
# 清理安装后的文件
|
||||
function post_install_cleanup() {
|
||||
local success=$1
|
||||
@@ -380,7 +420,9 @@ function lock_file() {
|
||||
}
|
||||
|
||||
function unlock_file() {
|
||||
if [ -e "$1" ];then
|
||||
chattr -i "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
# 主安装流程
|
||||
@@ -402,52 +444,76 @@ function main_install() {
|
||||
DEBPATH=$(realpath "$DEBPATH")
|
||||
lock_file "$DEBPATH"
|
||||
|
||||
# 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
|
||||
|
||||
|
||||
package_name=$(dpkg-deb -f "$DEBPATH" Package)
|
||||
local install_success=1
|
||||
|
||||
if [ -n "$FORCE_ACE_ENV" ]; then
|
||||
# 查找对应的ACE环境包名
|
||||
local ace_env_pkg=""
|
||||
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
|
||||
if [ "${ace_entry%%:*}" = "$FORCE_ACE_ENV" ]; then
|
||||
ace_env_pkg="${ace_entry#*:}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# 强制使用指定的ACE环境安装
|
||||
if command -v "$FORCE_ACE_ENV" >/dev/null 2>&1; then
|
||||
install_in_ace_env "$FORCE_ACE_ENV" "$DEBPATH" "$ace_env_pkg"
|
||||
install_success=$?
|
||||
if [ "$install_success" -eq 0 ]; then
|
||||
create_desktop_in_ace "$FORCE_ACE_ENV" "$package_name"
|
||||
fi
|
||||
else
|
||||
echo "指定的ACE环境 $FORCE_ACE_ENV 不可用"
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
# 自动选择安装方式
|
||||
auto_try_install "$DEBPATH"
|
||||
install_success=$?
|
||||
if [ "$FORCE_NATIVE" -eq 1 ] || [ "$IS_ACE_ENV" = "1" ]; then
|
||||
# 优先使用主机安装,忽略所有ACE参数
|
||||
echo "忽略ACE,使用主机安装 $package_name"
|
||||
install_in_host "$DEBPATH"
|
||||
install_success=$?
|
||||
# 安装成功后在主机创建桌面快捷方式
|
||||
if [ "$install_success" -eq 0 ]; then
|
||||
create_desktop_file
|
||||
fi
|
||||
|
||||
post_install_cleanup "$install_success" "$DEBPATH" "$package_name"
|
||||
|
||||
elif [ ${#ACE_PARAMS[@]} -gt 0 ] && [ "$IS_ACE_ENV" = "" ]; then
|
||||
# 用户指定了一个或多个ACE环境,且未要求原生安装
|
||||
echo "使用ACE环境安装,已指定环境: ${ACE_PARAMS[*]}"
|
||||
|
||||
# 查找第一个已安装的ACE环境
|
||||
chosen_env=""
|
||||
for env_cmd in "${ACE_PARAMS[@]}"; do
|
||||
if command -v "$env_cmd" >/dev/null 2>&1; then
|
||||
chosen_env="$env_cmd"
|
||||
break
|
||||
fi
|
||||
done
|
||||
# 如果没有安装任何环境,则使用第一个指定的环境
|
||||
if [ -z "$chosen_env" ]; then
|
||||
chosen_env="${ACE_PARAMS[0]}"
|
||||
echo "未发现已安装的ACE环境,准备安装 $chosen_env..."
|
||||
# 查找对应的ACE环境软件包名
|
||||
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
|
||||
if [ "${ace_entry%%:*}" = "$chosen_env" ]; then
|
||||
ace_pkg="${ace_entry#*:}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
# 安装ACE环境(示例使用aptss工具,可根据实际情况调整)
|
||||
ensure_ace_env "$ace_pkg" -y
|
||||
fi
|
||||
|
||||
# 再次确认ACE环境命令是否可用
|
||||
if command -v "$chosen_env" >/dev/null 2>&1; then
|
||||
# 查找软件包名(仅首次查找即可)
|
||||
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
|
||||
if [ "${ace_entry%%:*}" = "$chosen_env" ]; then
|
||||
ace_pkg="${ace_entry#*:}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
echo "在 ACE 环境 $chosen_env 中安装 $package_name"
|
||||
install_in_ace_env "$chosen_env" "$DEBPATH" "$ace_pkg"
|
||||
install_success=$?
|
||||
if [ "$install_success" -eq 0 ]; then
|
||||
create_desktop_in_ace "$chosen_env" "$package_name"
|
||||
fi
|
||||
else
|
||||
echo "指定的ACE环境 $chosen_env 不可用"
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
else
|
||||
# 未指定ACE环境和--native,使用自动安装逻辑(先主机再ACE)
|
||||
echo "自动选择安装方式"
|
||||
auto_try_install "$DEBPATH"
|
||||
install_success=$?
|
||||
fi
|
||||
|
||||
post_install_cleanup "$install_success" "$DEBPATH" "$package_name"
|
||||
}
|
||||
|
||||
# 执行主函数
|
||||
|
||||
266
tool/ssinstall
@@ -2,7 +2,7 @@
|
||||
# 初始化常量和全局变量
|
||||
readonly SPARK_DOWNLOAD_SERVER_URL="https://d.spark-app.store/"
|
||||
readonly SPARK_DOWNLOAD_SERVER_URL_NO_PROTOCOL="d.spark-app.store"
|
||||
# ACE环境配置 - 修改此数组即可添加或删除支持的环境
|
||||
# ACE环境配置 - 修改此数组即可添加或删除支持的环境——记得修改 store-helper 里的 uninstaller check-is-installed 和 ss-launcher
|
||||
readonly ACE_ENVIRONMENTS=(
|
||||
"bookworm-run:amber-ce-bookworm"
|
||||
"trixie-run:amber-ce-trixie"
|
||||
@@ -13,6 +13,30 @@ readonly ACE_ENVIRONMENTS_FOR_AUTOINSTALL=(
|
||||
"bookworm-run:amber-ce-bookworm"
|
||||
"trixie-run:amber-ce-trixie"
|
||||
)
|
||||
function get_current_user() {
|
||||
# 优先通过 who 命令获取用户
|
||||
local user
|
||||
user=$(who | awk '{print $1}' | head -n 1 2>/dev/null)
|
||||
|
||||
# 如果 who 无输出,则通过 loginctl 获取
|
||||
if [[ -z "$user" ]]; then
|
||||
user=$(loginctl list-sessions --no-legend 2>/dev/null | awk '{print $3}' | head -n 1)
|
||||
fi
|
||||
|
||||
# 返回最终结果(可能为空)
|
||||
echo "${user}"
|
||||
}
|
||||
|
||||
function zenity() {
|
||||
local user=$(get_current_user)
|
||||
local uid=$(id -u "$user")
|
||||
sudo -u "$user" DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/"$uid"/bus zenity "$@"
|
||||
}
|
||||
|
||||
|
||||
# 全局变量初始化(位于 parse_args 前)
|
||||
ACE_PARAMS=()
|
||||
|
||||
# 生成ACE环境参数帮助信息
|
||||
function generate_ace_help() {
|
||||
local help_text=""
|
||||
@@ -54,51 +78,53 @@ function show_help() {
|
||||
}
|
||||
# 参数解析
|
||||
function parse_args() {
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
--delete-after-install)
|
||||
DELETE_AFTER_INSTALL="1"
|
||||
shift
|
||||
;;
|
||||
--native)
|
||||
FORCE_NATIVE="1"
|
||||
shift
|
||||
;;
|
||||
--no-create-desktop-entry)
|
||||
NO_CREATE_DESKTOP="1"
|
||||
shift
|
||||
;;
|
||||
--force-create-desktop-entry)
|
||||
FORCE_CREATE_DESKTOP="1"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
# 检查是否为ACE环境参数
|
||||
local is_ace_param=0
|
||||
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
|
||||
local ace_param="--${ace_entry#*:}"
|
||||
if [ "$1" = "$ace_param" ]; then
|
||||
FORCE_ACE_ENV="${ace_entry%%:*}"
|
||||
is_ace_param=1
|
||||
shift
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# 如果不是ACE参数,则视为DEB路径
|
||||
if [ "$is_ace_param" -eq 0 ]; then
|
||||
DEBPATH="$1"
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
--delete-after-install)
|
||||
DELETE_AFTER_INSTALL="1"
|
||||
shift
|
||||
;;
|
||||
--native)
|
||||
FORCE_NATIVE="1"
|
||||
shift
|
||||
;;
|
||||
--no-create-desktop-entry)
|
||||
NO_CREATE_DESKTOP="1"
|
||||
shift
|
||||
;;
|
||||
--force-create-desktop-entry)
|
||||
FORCE_CREATE_DESKTOP="1"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
# 检查是否为ACE环境参数
|
||||
local is_ace_param=0
|
||||
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
|
||||
local ace_param="--${ace_entry#*:}"
|
||||
if [ "$1" = "$ace_param" ]; then
|
||||
# 将ACE环境命令名加入数组
|
||||
ACE_PARAMS+=("${ace_entry%%:*}")
|
||||
is_ace_param=1
|
||||
shift
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# 如果不是ACE环境参数,则视为DEB路径
|
||||
if [ "$is_ace_param" -eq 0 ]; then
|
||||
DEBPATH="$1"
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
# 验证当前用户
|
||||
function validate_user() {
|
||||
if [ "$(id -u)" != "0" ]; then
|
||||
@@ -253,6 +279,10 @@ function install_in_ace_env() {
|
||||
local deb_path="$2"
|
||||
local ace_env_pkg="${3#*:}"
|
||||
|
||||
if [ "$IS_ACE_ENV" != "" ] || command -v termux-chroot; then
|
||||
echo "无法在ACE/termux/小小电脑中安装ACE包"
|
||||
return 1
|
||||
fi
|
||||
if ! ensure_ace_env "$ace_env_pkg"; then
|
||||
return 1
|
||||
fi
|
||||
@@ -260,37 +290,47 @@ function install_in_ace_env() {
|
||||
echo "----------------------------------------"
|
||||
echo "正在尝试使用 $ace_cmd 环境安装..."
|
||||
echo "----------------------------------------"
|
||||
|
||||
# 在ACE环境中执行安装
|
||||
if $ace_cmd "ensure_aptss_exist && { dpkg -i '$deb_path' || aptss install '$deb_path' -yfq; }"; then
|
||||
return 0
|
||||
else
|
||||
# 如果第一次安装失败,执行aptss update后再试一次
|
||||
echo "第一次安装失败,正在更新仓库信息后重试..."
|
||||
$ace_cmd "ensure_aptss_exist"
|
||||
|
||||
# 首先尝试dry-run测试
|
||||
if ! $ace_cmd "aptss install --dry-run '$deb_path'"; then
|
||||
echo "初始dry-run测试失败,尝试更新后重试..."
|
||||
$ace_cmd "aptss update"
|
||||
if $ace_cmd "dpkg -i '$deb_path' || aptss install '$deb_path' -yfq"; then
|
||||
return 0
|
||||
else
|
||||
if ! $ace_cmd "aptss install --dry-run '$deb_path'"; then
|
||||
echo "dry-run测试仍然失败,放弃安装"
|
||||
echo "OMG_IT_GOES_WRONG"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# dry-run成功后执行实际安装
|
||||
$ace_cmd "aptss install store.spark-app.app-runtime-base --no-install-recommends -yfq"
|
||||
if $ace_cmd "dpkg -i '$deb_path' || aptss install '$deb_path' -yfq"; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 在主机安装
|
||||
function install_in_host() {
|
||||
local deb_path="$1"
|
||||
|
||||
# 首先尝试dry-run测试
|
||||
if ! aptss install --dry-run "$deb_path"; then
|
||||
echo "初始dry-run测试失败,尝试更新后重试..."
|
||||
aptss update
|
||||
if ! aptss install --dry-run "$deb_path"; then
|
||||
echo "dry-run测试仍然失败,放弃安装"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# dry-run成功后执行实际安装
|
||||
if dpkg -i "$deb_path" || aptss install "$deb_path" -yfq; then
|
||||
return 0
|
||||
else
|
||||
# 如果第一次安装失败,执行aptss update后再试一次
|
||||
echo "第一次安装失败,正在更新仓库信息后重试..."
|
||||
aptss update
|
||||
if dpkg -i "$deb_path" || aptss install "$deb_path" -yfq; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -300,11 +340,12 @@ function auto_try_install() {
|
||||
|
||||
# 首先尝试在主机安装
|
||||
if install_in_host "$deb_path"; then
|
||||
create_desktop_file
|
||||
return 0
|
||||
fi
|
||||
|
||||
# 如果主机安装失败且不在强制本地模式,尝试ACE环境
|
||||
if [ "$FORCE_NATIVE" -eq 0 ]; then
|
||||
# 如果主机安装失败,并非在ACE内运行且不在强制本地模式,尝试ACE环境
|
||||
if [ "$FORCE_NATIVE" -eq 0 ] && [ "$IS_ACE_ENV" = "" ] && ! command -v termux-chroot; then
|
||||
for ace_entry in "${ACE_ENVIRONMENTS_FOR_AUTOINSTALL[@]}"; do
|
||||
local ace_cmd=${ace_entry%%:*}
|
||||
local ace_env_pkg=${ace_entry#*:}
|
||||
@@ -322,7 +363,6 @@ function auto_try_install() {
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
# 清理安装后的文件
|
||||
function post_install_cleanup() {
|
||||
local success=$1
|
||||
@@ -380,7 +420,9 @@ function lock_file() {
|
||||
}
|
||||
|
||||
function unlock_file() {
|
||||
if [ -e "$1" ];then
|
||||
chattr -i "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
# 主安装流程
|
||||
@@ -418,36 +460,72 @@ function main_install() {
|
||||
|
||||
package_name=$(dpkg-deb -f "$DEBPATH" Package)
|
||||
local install_success=1
|
||||
|
||||
if [ -n "$FORCE_ACE_ENV" ]; then
|
||||
# 查找对应的ACE环境包名
|
||||
local ace_env_pkg=""
|
||||
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
|
||||
if [ "${ace_entry%%:*}" = "$FORCE_ACE_ENV" ]; then
|
||||
ace_env_pkg="${ace_entry#*:}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# 强制使用指定的ACE环境安装
|
||||
if command -v "$FORCE_ACE_ENV" >/dev/null 2>&1; then
|
||||
install_in_ace_env "$FORCE_ACE_ENV" "$DEBPATH" "$ace_env_pkg"
|
||||
install_success=$?
|
||||
if [ "$install_success" -eq 0 ]; then
|
||||
create_desktop_in_ace "$FORCE_ACE_ENV" "$package_name"
|
||||
fi
|
||||
else
|
||||
echo "指定的ACE环境 $FORCE_ACE_ENV 不可用"
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
# 自动选择安装方式
|
||||
auto_try_install "$DEBPATH"
|
||||
install_success=$?
|
||||
if [ "$FORCE_NATIVE" -eq 1 ] || [ "$IS_ACE_ENV" = "1" ]; then
|
||||
# 优先使用主机安装,忽略所有ACE参数
|
||||
echo "忽略ACE,使用主机安装 $package_name"
|
||||
install_in_host "$DEBPATH"
|
||||
install_success=$?
|
||||
# 安装成功后在主机创建桌面快捷方式
|
||||
if [ "$install_success" -eq 0 ]; then
|
||||
create_desktop_file
|
||||
fi
|
||||
|
||||
post_install_cleanup "$install_success" "$DEBPATH" "$package_name"
|
||||
|
||||
elif [ ${#ACE_PARAMS[@]} -gt 0 ] && [ "$IS_ACE_ENV" = "" ]; then
|
||||
# 用户指定了一个或多个ACE环境,且未要求原生安装
|
||||
echo "使用ACE环境安装,已指定环境: ${ACE_PARAMS[*]}"
|
||||
|
||||
# 查找第一个已安装的ACE环境
|
||||
chosen_env=""
|
||||
for env_cmd in "${ACE_PARAMS[@]}"; do
|
||||
if command -v "$env_cmd" >/dev/null 2>&1; then
|
||||
chosen_env="$env_cmd"
|
||||
break
|
||||
fi
|
||||
done
|
||||
# 如果没有安装任何环境,则使用第一个指定的环境
|
||||
if [ -z "$chosen_env" ]; then
|
||||
chosen_env="${ACE_PARAMS[0]}"
|
||||
echo "未发现已安装的ACE环境,准备安装 $chosen_env..."
|
||||
# 查找对应的ACE环境软件包名
|
||||
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
|
||||
if [ "${ace_entry%%:*}" = "$chosen_env" ]; then
|
||||
ace_pkg="${ace_entry#*:}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
# 安装ACE环境(示例使用aptss工具,可根据实际情况调整)
|
||||
ensure_ace_env "$ace_pkg" -y
|
||||
fi
|
||||
|
||||
# 再次确认ACE环境命令是否可用
|
||||
if command -v "$chosen_env" >/dev/null 2>&1; then
|
||||
# 查找软件包名(仅首次查找即可)
|
||||
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
|
||||
if [ "${ace_entry%%:*}" = "$chosen_env" ]; then
|
||||
ace_pkg="${ace_entry#*:}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
echo "在 ACE 环境 $chosen_env 中安装 $package_name"
|
||||
install_in_ace_env "$chosen_env" "$DEBPATH" "$ace_pkg"
|
||||
install_success=$?
|
||||
if [ "$install_success" -eq 0 ]; then
|
||||
create_desktop_in_ace "$chosen_env" "$package_name"
|
||||
fi
|
||||
else
|
||||
echo "指定的ACE环境 $chosen_env 不可用"
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
else
|
||||
# 未指定ACE环境和--native,使用自动安装逻辑(先主机再ACE)
|
||||
echo "自动选择安装方式"
|
||||
auto_try_install "$DEBPATH"
|
||||
install_success=$?
|
||||
fi
|
||||
|
||||
post_install_cleanup "$install_success" "$DEBPATH" "$package_name"
|
||||
}
|
||||
|
||||
# 执行主函数
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
#!/bin/bash
|
||||
readonly ACE_ENVIRONMENTS=(
|
||||
"bookworm-run:amber-ce-bookworm"
|
||||
"trixie-run:amber-ce-trixie"
|
||||
"deepin23-run:amber-ce-deepin23"
|
||||
"sid-run:amber-ce-sid"
|
||||
)
|
||||
dpkg -s "$1" > /dev/null
|
||||
RET="$?"
|
||||
if [[ "$RET" != "0" ]] &&[[ "$IS_ACE_ENV" == "" ]];then ## 如果未在ACE环境中
|
||||
# 定义按顺序尝试的ACE环境(命令:推荐安装包)
|
||||
declare -a ace_commands_order=(
|
||||
"bookworm-run:amber-ce-bookworm"
|
||||
"trixie-run:amber-ce-trixie"
|
||||
"deepin23-run:amber-ce-deepin23"
|
||||
)
|
||||
for ace_entry in "${ace_commands_order[@]}"; do
|
||||
if [[ "$RET" != "0" ]] &&[[ "$IS_ACE_ENV" == "" ]];then ## 如果未在ACE环境中
|
||||
|
||||
|
||||
|
||||
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
|
||||
ace_cmd=${ace_entry%%:*}
|
||||
if command -v "$ace_cmd" >/dev/null 2>&1; then
|
||||
echo "----------------------------------------"
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ===== ACE环境配置 =====
|
||||
declare -a ace_commands_order=(
|
||||
readonly ACE_ENVIRONMENTS=(
|
||||
"bookworm-run:amber-ce-bookworm"
|
||||
"trixie-run:amber-ce-trixie"
|
||||
"deepin23-run:amber-ce-deepin23"
|
||||
"sid-run:amber-ce-sid"
|
||||
)
|
||||
|
||||
# ===== 日志和函数 =====
|
||||
@@ -24,7 +25,7 @@ function scan_desktop_file_log() {
|
||||
while IFS= read -r path; do
|
||||
[ -z "$(grep 'NoDisplay=true' "$path")" ] && {
|
||||
log.info "Found valid desktop file: $path"
|
||||
desktop_file_path="$path"
|
||||
export desktop_file_path="$path"
|
||||
return 0
|
||||
}
|
||||
done < <(dpkg -L "$package_name" 2>/dev/null | grep -E '/usr/share/applications/.*\.desktop$|/opt/apps/.*/entries/applications/.*\.desktop$')
|
||||
@@ -33,7 +34,7 @@ function scan_desktop_file_log() {
|
||||
while IFS= read -r path; do
|
||||
[ -z "$(grep 'NoDisplay=true' "$path")" ] && {
|
||||
log.info "Found deepin desktop file: $path"
|
||||
desktop_file_path="$path"
|
||||
export desktop_file_path="$path"
|
||||
return 0
|
||||
}
|
||||
done < <(find /opt/apps/$package_name -path '*/entries/applications/*.desktop' 2>/dev/null)
|
||||
@@ -60,28 +61,59 @@ function launch_app() {
|
||||
# 提取并净化Exec命令
|
||||
exec_command=$(grep -m1 '^Exec=' "$DESKTOP_FILE_PATH" | cut -d= -f2- | sed 's/%.//g')
|
||||
[ -z "$exec_command" ] && return 1
|
||||
[ ! -z "$IS_ACE_ENV" ] && HOST_PREFIX="host-spawn"
|
||||
exec_command="${HOST_PREFIX} $exec_command"
|
||||
log.info "Launching: $exec_command"
|
||||
# 图形环境启动优化
|
||||
if [ -n "$DISPLAY" ]; then
|
||||
nohup env DISPLAY=$DISPLAY XAUTHORITY=${XAUTHORITY:-~/.Xauthority} ${SHELL:-bash} -c "$exec_command" >/dev/null 2>&1 &
|
||||
else
|
||||
nohup ${SHELL:-bash} -c "$exec_command" >/dev/null 2>&1 &
|
||||
fi
|
||||
${SHELL:-bash} -c " $exec_command" &
|
||||
|
||||
}
|
||||
|
||||
# 导出函数以便在ACE环境中使用
|
||||
export -f launch_app scan_desktop_file scan_desktop_file_log log.info log.warn log.debug log.error
|
||||
|
||||
# ===== ACE环境执行器 =====
|
||||
function ace_runner() {
|
||||
local command_type=$1 package_name=$2
|
||||
for ace_entry in "${ace_commands_order[@]}"; do
|
||||
local action=$1
|
||||
local target=$2
|
||||
|
||||
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
|
||||
local ace_cmd=${ace_entry%%:*}
|
||||
command -v "$ace_cmd" >/dev/null || continue
|
||||
local ace_env=${ace_entry#*:}
|
||||
|
||||
log.info "Checking in $ace_cmd environment..."
|
||||
if output=$($ace_cmd "$0" "$command_type" "$package_name" 2>/dev/null); then
|
||||
[ "$command_type" = "list" ] && echo "$output"
|
||||
exit 0
|
||||
if ! command -v "$ace_cmd" >/dev/null; then
|
||||
log.debug "$ace_cmd not found, skipping..."
|
||||
continue
|
||||
fi
|
||||
|
||||
log.info "Attempting in $ace_env environment..."
|
||||
|
||||
case "$action" in
|
||||
check)
|
||||
if "$ace_cmd" scan_desktop_file_log "$target"; then
|
||||
log.info "Found desktop file in $ace_env"
|
||||
return 0
|
||||
fi
|
||||
;;
|
||||
list)
|
||||
local result
|
||||
if result=$("$ace_cmd" scan_desktop_file "$target"); then
|
||||
echo "$result"
|
||||
return 0
|
||||
fi
|
||||
;;
|
||||
launch|start)
|
||||
"$ace_cmd" scan_desktop_file_log "$target"
|
||||
if desktop_path=$("$ace_cmd" scan_desktop_file_log "$target"); then
|
||||
log.info "Launching from $ace_env..."
|
||||
"$ace_cmd" launch_app $("$ace_cmd" scan_desktop_file "$target")
|
||||
return 0
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
log.debug "Attempt in $ace_env failed"
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
@@ -99,7 +131,7 @@ check)
|
||||
else
|
||||
# 非ACE环境下执行ACE环境扫描
|
||||
[ -z "$IS_ACE_ENV" ] && ace_runner check "$2"
|
||||
exit 1
|
||||
exit $?
|
||||
fi
|
||||
;;
|
||||
|
||||
@@ -111,7 +143,7 @@ list)
|
||||
else
|
||||
# 非ACE环境下执行ACE环境扫描
|
||||
[ -z "$IS_ACE_ENV" ] && ace_runner list "$2"
|
||||
exit 1
|
||||
exit $?
|
||||
fi
|
||||
;;
|
||||
|
||||
@@ -122,7 +154,7 @@ launch|start)
|
||||
else
|
||||
# 非ACE环境下通过ACE环境启动
|
||||
[ -z "$IS_ACE_ENV" ] && ace_runner launch "$2"
|
||||
exit 1
|
||||
exit $?
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
|
||||
@@ -1,10 +1,82 @@
|
||||
#!/bin/bash
|
||||
# ===== ACE环境配置 =====
|
||||
declare -a ace_commands_order=(
|
||||
|
||||
readonly ACE_ENVIRONMENTS=(
|
||||
"bookworm-run:amber-ce-bookworm"
|
||||
"trixie-run:amber-ce-trixie"
|
||||
"deepin23-run:amber-ce-deepin23"
|
||||
"sid-run:amber-ce-sid"
|
||||
)
|
||||
# 生成ACE环境参数帮助信息
|
||||
function generate_ace_help() {
|
||||
local help_text=""
|
||||
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
|
||||
local ace_param="--${ace_entry#*:}"
|
||||
help_text+=" $ace_param 使用${ace_entry%%:*} ACE容器卸载\n"
|
||||
done
|
||||
echo -e "$help_text"
|
||||
}
|
||||
# 帮助函数
|
||||
function show_help() {
|
||||
echo "Spark Store Uninstall script. 星火商店卸载脚本"
|
||||
echo "用法: $0 [选项] 包名"
|
||||
echo "选项:"
|
||||
echo " -h, --help 显示帮助信息"
|
||||
echo " --delete-after-install 安装成功后删除软件包"
|
||||
echo " --no-create-desktop-entry 不创建桌面快捷方式"
|
||||
echo " --force-create-desktop-entry 强制创建桌面快捷方式"
|
||||
echo "$(generate_ace_help)"
|
||||
echo " --native 只在主机卸载,不使用ACE容器"
|
||||
}
|
||||
|
||||
|
||||
# 参数解析
|
||||
function parse_args() {
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
--delete-after-install)
|
||||
DELETE_AFTER_INSTALL="1"
|
||||
shift
|
||||
;;
|
||||
--native)
|
||||
FORCE_NATIVE="1"
|
||||
shift
|
||||
;;
|
||||
--no-create-desktop-entry)
|
||||
NO_CREATE_DESKTOP="1"
|
||||
shift
|
||||
;;
|
||||
--force-create-desktop-entry)
|
||||
FORCE_CREATE_DESKTOP="1"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
# 检查是否为ACE环境参数
|
||||
local is_ace_param=0
|
||||
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
|
||||
local ace_param="--${ace_entry#*:}"
|
||||
if [ "$1" = "$ace_param" ]; then
|
||||
# 将ACE环境命令名加入数组
|
||||
ACE_PARAMS+=("${ace_entry%%:*}")
|
||||
is_ace_param=1
|
||||
shift
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# 如果不是ACE环境参数,则视为包名
|
||||
if [ "$is_ace_param" -eq 0 ]; then
|
||||
PACKAGE_NAME="$1"
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
# ===== 日志和函数 =====
|
||||
[ -f /opt/durapps/spark-store/bin/bashimport/log.amber ] && \
|
||||
@@ -15,40 +87,104 @@ declare -a ace_commands_order=(
|
||||
log.debug() { echo "DEBUG: $*"; }
|
||||
}
|
||||
|
||||
dpkg -s "$1" > /dev/null
|
||||
RET="$?"
|
||||
if [[ "$RET" == "0" ]] ;then
|
||||
apt autopurge $1 -y
|
||||
# 初始化变量
|
||||
FORCE_NATIVE=0
|
||||
ACE_PARAMS=()
|
||||
PACKAGE_NAME=""
|
||||
uninstall_success=0
|
||||
|
||||
# 解析参数
|
||||
parse_args "$@"
|
||||
|
||||
if [ -z "$PACKAGE_NAME" ]; then
|
||||
log.error "请指定要卸载的包名"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 尝试在本地卸载
|
||||
try_native_uninstall() {
|
||||
if [ "$FORCE_NATIVE" -eq 1 ] || [ ${#ACE_PARAMS[@]} -eq 0 ]; then
|
||||
echo "----------------------------------------"
|
||||
echo "正在检查本地环境中的安装..."
|
||||
echo "----------------------------------------"
|
||||
|
||||
dpkg -s "$PACKAGE_NAME" > /dev/null
|
||||
RET="$?"
|
||||
if [[ "$RET" == "0" ]]; then
|
||||
echo "----------------------------------------"
|
||||
echo "在本地环境中找到了安装"
|
||||
echo "----------------------------------------"
|
||||
apt autopurge "$PACKAGE_NAME" -y
|
||||
uninstall_success=1
|
||||
return 0
|
||||
else
|
||||
echo "----------------------------------------"
|
||||
echo "在本地环境中未能找到安装"
|
||||
echo "----------------------------------------"
|
||||
fi
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# 尝试在ACE环境中卸载
|
||||
try_ace_uninstall() {
|
||||
local ace_cmd="$1"
|
||||
if command -v "$ace_cmd" >/dev/null 2>&1; then
|
||||
echo "----------------------------------------"
|
||||
echo "正在检查 $ace_cmd 环境的安装..."
|
||||
echo "----------------------------------------"
|
||||
|
||||
$ace_cmd dpkg -l | grep "^ii $PACKAGE_NAME " > /dev/null
|
||||
try_run_ret="$?"
|
||||
|
||||
if [ "$try_run_ret" -eq 0 ]; then
|
||||
echo "----------------------------------------"
|
||||
echo "在 $ace_cmd 环境中找到了安装"
|
||||
echo "----------------------------------------"
|
||||
$ace_cmd apt autopurge "$PACKAGE_NAME" -y
|
||||
uninstall_success=1
|
||||
return 0
|
||||
else
|
||||
echo "----------------------------------------"
|
||||
echo "在 $ace_cmd 环境中未能找到安装"
|
||||
echo "----------------------------------------"
|
||||
fi
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# 主卸载逻辑
|
||||
if [ $FORCE_NATIVE -eq 1 ] && [ ${#ACE_PARAMS[@]} -eq 0 ]; then
|
||||
# 只有 --native 参数时,只尝试本地卸载
|
||||
try_native_uninstall || exit $?
|
||||
elif [ $FORCE_NATIVE -eq 0 ] && [ ${#ACE_PARAMS[@]} -gt 0 ]; then
|
||||
# 只有 ACE 参数时,只尝试指定的 ACE 环境卸载
|
||||
for ace_param in "${ACE_PARAMS[@]}"; do
|
||||
try_ace_uninstall "$ace_param"
|
||||
done
|
||||
elif [ $FORCE_NATIVE -eq 1 ] && [ ${#ACE_PARAMS[@]} -gt 0 ]; then
|
||||
# 同时有 --native 和 ACE 参数时,先尝试本地卸载,再尝试 ACE 环境卸载
|
||||
try_native_uninstall
|
||||
for ace_param in "${ACE_PARAMS[@]}"; do
|
||||
try_ace_uninstall "$ace_param"
|
||||
done
|
||||
else
|
||||
# 无参数时,先尝试本地卸载,再尝试所有 ACE 环境卸载
|
||||
try_native_uninstall
|
||||
|
||||
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
|
||||
ace_cmd=${ace_entry%%:*}
|
||||
if command -v "$ace_cmd" >/dev/null 2>&1; then
|
||||
try_ace_uninstall "$ace_cmd"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
for ace_entry in "${ace_commands_order[@]}"; do
|
||||
ace_cmd=${ace_entry%%:*}
|
||||
if command -v "$ace_cmd" >/dev/null 2>&1; then
|
||||
echo "----------------------------------------"
|
||||
echo "正在检查 $ace_cmd 环境的安装..."
|
||||
echo "----------------------------------------"
|
||||
|
||||
# 在ACE环境中执行安装检测
|
||||
$ace_cmd dpkg -l | grep "^ii $1 " > /dev/null
|
||||
try_run_ret="$?"
|
||||
|
||||
if [ $uninstall_success -eq 0 ]; then
|
||||
echo "----------------------------------------"
|
||||
echo "在所有指定的环境中未能找到安装,退出"
|
||||
echo "----------------------------------------"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 最终检测结果处理
|
||||
if [ "$try_run_ret" -eq 0 ]; then
|
||||
echo "----------------------------------------"
|
||||
echo "在 $ace_cmd 环境中找到了安装"
|
||||
echo "----------------------------------------"
|
||||
$ace_cmd apt autopurge $1 -y
|
||||
else
|
||||
echo "----------------------------------------"
|
||||
echo "在 $ace_cmd 环境中未能找到安装,继续查找"
|
||||
echo "----------------------------------------"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
echo "----------------------------------------"
|
||||
echo "所有已安装的 ACE 环境中未能找到安装,退出"
|
||||
echo "----------------------------------------"
|
||||
exit "$RET"
|
||||
fi
|
||||
exit "$RET"
|
||||
exit 0
|
||||
|
||||
@@ -37,6 +37,8 @@ if [ "$(id -u)" != "0" ] ; then
|
||||
fi
|
||||
|
||||
aptss install "${@:2}" --only-upgrade 2>&1 | tee /tmp/spark-store-app-upgrade-log.txt
|
||||
sed -i '1i--------------------------------------------------------------' /tmp/spark-store-app-upgrade-log.txt
|
||||
sed -i '1i更新失败可能是由于系统版本过低,您可先【卸载】此应用后再在商店【安装】此应用来尝试修复此问题,商店会在安装时尝试自动解决问题。若仍无法解决,请按照指引进行反馈' /tmp/spark-store-app-upgrade-log.txt
|
||||
chmod 777 /tmp/spark-store-app-upgrade-log.txt
|
||||
IS_UPGRADE_ERROR=`cat /tmp/spark-store-app-upgrade-log.txt | grep "Package manager quit with exit code."`
|
||||
echo "$IS_UPGRADE_ERROR" > /tmp/spark-store-app-upgrade-status.txt
|
||||
|
||||
@@ -24,68 +24,63 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="409"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="412"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="441"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="444"/>
|
||||
<source><html><head/><body><p>Capable to deepin 23</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="528"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="531"/>
|
||||
<source><html><head/><body><p>This app is developed by community user,we give this tag to honor those who contribute to the Linux Ecology</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="447"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="450"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="422"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="425"/>
|
||||
<source><html><head/><body><p>Capable to UOS home 20</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="466"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="469"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="566"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="569"/>
|
||||
<source><html><head/><body><p>A deepin-wine2 app. Spark Store will automatically configure the wine kit for you.</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="472"/>
|
||||
<source><html><head/><body><p><img src=":/tags/dwine2-small.png"/></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="485"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="488"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="547"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="550"/>
|
||||
<source><html><head/><body><p>This is a DTK5 app,which means it would have better effect on Deepin Desktop Environment</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="504"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="507"/>
|
||||
<source><html><head/><body><p>Capable to deepin 20</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="523"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="526"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="509"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="512"/>
|
||||
<source><html><head/><body><p>An Appimage to deb app.</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="611"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="644"/>
|
||||
<source>Share</source>
|
||||
<translation type="unfinished">Spk share link</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="618"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="651"/>
|
||||
<source>APP Feedback</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="773"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="806"/>
|
||||
<source>Introduction</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1074"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1107"/>
|
||||
<source>Description</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="910"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="943"/>
|
||||
<source>Screen capture</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -94,94 +89,55 @@
|
||||
<location filename="../src/pages/appintopage.cpp" line="210"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="351"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="396"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="575"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="590"/>
|
||||
<source>Download and Install</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="415"/>
|
||||
<source><html><head/><body><p><img src=":/tags/community.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="428"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="431"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="403"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="406"/>
|
||||
<source><html><head/><body><p>Capable to Ubuntu 22.04</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="434"/>
|
||||
<source><html><head/><body><p><img src=":/tags/ubuntu.png" width=30 height=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="453"/>
|
||||
<source><html><head/><body><p><img src=":/tags/uos-authorize.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="491"/>
|
||||
<source><html><head/><body><p><img src=":/tags/logo_icon.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="510"/>
|
||||
<source><html><head/><body><p><img src=":/tags/deepin.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="529"/>
|
||||
<source><html><head/><body><p><img src=":/tags/a2d.png"height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="542"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="545"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="585"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="588"/>
|
||||
<source><html><head/><body><p>A Wine app.Spark Store will automatically configure the wine kit for you</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="548"/>
|
||||
<source><html><head/><body><p><img src=":/tags/dwine5.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="555"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="460"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="463"/>
|
||||
<source><html><head/><body><p>Capable to Debian Stable</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="558"/>
|
||||
<source><html><head/><body><p><img src=":/tags/debian.svg" height="30" width="30"/></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1167"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1200"/>
|
||||
<source>Update</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1196"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1229"/>
|
||||
<source>Contributor</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1203"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1236"/>
|
||||
<source>Pkgname</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1309"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1342"/>
|
||||
<source>Author</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1345"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1378"/>
|
||||
<source>Size</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1381"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1414"/>
|
||||
<source>Website</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -260,18 +216,18 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="578"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="593"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="608"/>
|
||||
<source>Spark Store</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="578"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="593"/>
|
||||
<source>Uninstall succeeded</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="593"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="608"/>
|
||||
<source>The URL has been copied to the clipboard</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -359,9 +315,9 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="218"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="229"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="226"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="237"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="245"/>
|
||||
<source>Spark Store</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -372,32 +328,32 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="218"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="226"/>
|
||||
<source>Installation complete.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="219"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="220"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="227"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="228"/>
|
||||
<source>Finish</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="227"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="235"/>
|
||||
<source>Retry</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="229"/>
|
||||
<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 type="unfinished"></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>Error happened in dpkg progress , please check the install info or try to reinstall.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="245"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="246"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="247"/>
|
||||
<source>dpkg progress had been aborted, please check the install info or try to reinstall.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
||||
@@ -24,68 +24,63 @@
|
||||
<translation>Número de descargas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="409"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="412"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="441"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="444"/>
|
||||
<source><html><head/><body><p>Capable to deepin 23</p></body></html></source>
|
||||
<translation type="unfinished"><html><head/><body><p>Capaz de deepin 20</p></body></html> {23<?}</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="528"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="531"/>
|
||||
<source><html><head/><body><p>This app is developed by community user,we give this tag to honor those who contribute to the Linux Ecology</p></body></html></source>
|
||||
<translation><html><head/><body><p>Esta aplicación fue desarrollada por usuarios de la comunidad y la Etiquetamos en honor a aquellos que contribuyeron a la ecología de linux.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="447"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="450"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="422"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="425"/>
|
||||
<source><html><head/><body><p>Capable to UOS home 20</p></body></html></source>
|
||||
<translation><html><head/><body><p>Capaz de UOS home 20</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="466"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="469"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="566"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="569"/>
|
||||
<source><html><head/><body><p>A deepin-wine2 app. Spark Store will automatically configure the wine kit for you.</p></body></html></source>
|
||||
<translation><html><head/><body><p>A deepin-wine2 app. La tienda Spark le configurará automáticamente un traje de vino.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="472"/>
|
||||
<source><html><head/><body><p><img src=":/tags/dwine2-small.png"/></p></body></html></source>
|
||||
<translation><html><head/><body><p><img src=":/tags/dwine2-small.png"/></p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="485"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="488"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="547"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="550"/>
|
||||
<source><html><head/><body><p>This is a DTK5 app,which means it would have better effect on Deepin Desktop Environment</p></body></html></source>
|
||||
<translation><html><head/><body><p>Esta es una aplicación dtk5, lo que significa que funcionará mejor en un entorno de escritorio profundo.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="504"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="507"/>
|
||||
<source><html><head/><body><p>Capable to deepin 20</p></body></html></source>
|
||||
<translation><html><head/><body><p>Capaz de deepin 20</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="523"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="526"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="509"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="512"/>
|
||||
<source><html><head/><body><p>An Appimage to deb app.</p></body></html></source>
|
||||
<translation><html><head/><body><p>Appimage de la aplicación deb.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="611"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="644"/>
|
||||
<source>Share</source>
|
||||
<translation>Comunión</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="618"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="651"/>
|
||||
<source>APP Feedback</source>
|
||||
<translation>Comentarios de la app</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="773"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="806"/>
|
||||
<source>Introduction</source>
|
||||
<translation>Introducción</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1074"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1107"/>
|
||||
<source>Description</source>
|
||||
<translation>Descripción</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="910"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="943"/>
|
||||
<source>Screen capture</source>
|
||||
<translation>Captura de pantalla</translation>
|
||||
</message>
|
||||
@@ -94,94 +89,55 @@
|
||||
<location filename="../src/pages/appintopage.cpp" line="210"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="351"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="396"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="575"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="590"/>
|
||||
<source>Download and Install</source>
|
||||
<translation>Descargar e instalar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="415"/>
|
||||
<source><html><head/><body><p><img src=":/tags/community.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="428"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="431"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="403"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="406"/>
|
||||
<source><html><head/><body><p>Capable to Ubuntu 22.04</p></body></html></source>
|
||||
<translation><html><head/><body><p>Capaz de Ubuntu 22.04</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="434"/>
|
||||
<source><html><head/><body><p><img src=":/tags/ubuntu.png" width=30 height=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="453"/>
|
||||
<source><html><head/><body><p><img src=":/tags/uos-authorize.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="491"/>
|
||||
<source><html><head/><body><p><img src=":/tags/logo_icon.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="510"/>
|
||||
<source><html><head/><body><p><img src=":/tags/deepin.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="529"/>
|
||||
<source><html><head/><body><p><img src=":/tags/a2d.png"height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="542"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="545"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="585"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="588"/>
|
||||
<source><html><head/><body><p>A Wine app.Spark Store will automatically configure the wine kit for you</p></body></html></source>
|
||||
<translation><html><head/><body><p>La aplicación wine. Spark Store configurará automáticamente el kit Wine para usted</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="548"/>
|
||||
<source><html><head/><body><p><img src=":/tags/dwine5.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="555"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="460"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="463"/>
|
||||
<source><html><head/><body><p>Capable to Debian Stable</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="558"/>
|
||||
<source><html><head/><body><p><img src=":/tags/debian.svg" height="30" width="30"/></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1167"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1200"/>
|
||||
<source>Update</source>
|
||||
<translation>Modernizar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1196"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1229"/>
|
||||
<source>Contributor</source>
|
||||
<translation>Contribuyentes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1203"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1236"/>
|
||||
<source>Pkgname</source>
|
||||
<translation>Nombre del embalaje</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1309"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1342"/>
|
||||
<source>Author</source>
|
||||
<translation>Autor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1345"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1378"/>
|
||||
<source>Size</source>
|
||||
<translation>Tamaño</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1381"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1414"/>
|
||||
<source>Website</source>
|
||||
<translation>Sitio web</translation>
|
||||
</message>
|
||||
@@ -260,18 +216,18 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="578"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="593"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="608"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>SPARK Store</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="578"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="593"/>
|
||||
<source>Uninstall succeeded</source>
|
||||
<translation>Desinstalación exitosa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="593"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="608"/>
|
||||
<source>The URL has been copied to the clipboard</source>
|
||||
<translation>La URL ha sido copiada al portapapeles</translation>
|
||||
</message>
|
||||
@@ -359,9 +315,9 @@
|
||||
<translation>Descarga completada.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="218"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="229"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="226"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="237"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="245"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>SPARK Store</translation>
|
||||
</message>
|
||||
@@ -372,32 +328,32 @@
|
||||
<translation>Se está instalando</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="218"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="226"/>
|
||||
<source>Installation complete.</source>
|
||||
<translation>La instalación está completa.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="219"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="220"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="227"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="228"/>
|
||||
<source>Finish</source>
|
||||
<translation>Completado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="227"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="235"/>
|
||||
<source>Retry</source>
|
||||
<translation>Reinterpretar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="229"/>
|
||||
<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>Se produjo un error durante el proceso dpkg, verifique la información de instalación o intente reinstalar.</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>Error happened in dpkg progress , please check the install info or try to reinstall.</source>
|
||||
<translation>Se produjo un error durante el proceso dpkg, verifique la información de instalación o intente reinstalar.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="245"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="246"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="247"/>
|
||||
<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>
|
||||
|
||||
@@ -24,68 +24,63 @@
|
||||
<translation>Nombre de téléchargements</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="409"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="412"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="441"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="444"/>
|
||||
<source><html><head/><body><p>Capable to deepin 23</p></body></html></source>
|
||||
<translation type="unfinished"><html><head/><body><p>Capable de la deepin 20</p></body></html> {23<?}</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="528"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="531"/>
|
||||
<source><html><head/><body><p>This app is developed by community user,we give this tag to honor those who contribute to the Linux Ecology</p></body></html></source>
|
||||
<translation><html><head/><body><p>Cette application a été développée par des utilisateurs de la communauté et nous avons donné ce label à ceux qui ont contribué à l'écologie de Linux</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="447"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="450"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="422"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="425"/>
|
||||
<source><html><head/><body><p>Capable to UOS home 20</p></body></html></source>
|
||||
<translation><html><head/><body><p>Capable de la home UOS 20</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="466"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="469"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="566"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="569"/>
|
||||
<source><html><head/><body><p>A deepin-wine2 app. Spark Store will automatically configure the wine kit for you.</p></body></html></source>
|
||||
<translation><html><head/><body><p>Une application deepin-wine2. Le Spark Store configure automatiquement votre pack de vins.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="472"/>
|
||||
<source><html><head/><body><p><img src=":/tags/dwine2-small.png"/></p></body></html></source>
|
||||
<translation><html><head/><body><p><img src=":/tags/dwine2-small.png"/></p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="485"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="488"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="547"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="550"/>
|
||||
<source><html><head/><body><p>This is a DTK5 app,which means it would have better effect on Deepin Desktop Environment</p></body></html></source>
|
||||
<translation><html><head/><body><p>C'est une application dtk5, ce qui signifie qu'elle fonctionnera mieux dans un environnement de bureau profond.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="504"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="507"/>
|
||||
<source><html><head/><body><p>Capable to deepin 20</p></body></html></source>
|
||||
<translation><html><head/><body><p>Capable de la deepin 20</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="523"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="526"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="509"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="512"/>
|
||||
<source><html><head/><body><p>An Appimage to deb app.</p></body></html></source>
|
||||
<translation><html><head/><body><p>Appimage pour l'application DEB</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="611"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="644"/>
|
||||
<source>Share</source>
|
||||
<translation>Au total</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="618"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="651"/>
|
||||
<source>APP Feedback</source>
|
||||
<translation>App feedback</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="773"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="806"/>
|
||||
<source>Introduction</source>
|
||||
<translation>Présentation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1074"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1107"/>
|
||||
<source>Description</source>
|
||||
<translation>Description</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="910"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="943"/>
|
||||
<source>Screen capture</source>
|
||||
<translation>Captures d'écran</translation>
|
||||
</message>
|
||||
@@ -94,94 +89,55 @@
|
||||
<location filename="../src/pages/appintopage.cpp" line="210"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="351"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="396"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="575"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="590"/>
|
||||
<source>Download and Install</source>
|
||||
<translation>Télécharger et installer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="415"/>
|
||||
<source><html><head/><body><p><img src=":/tags/community.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="428"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="431"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="403"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="406"/>
|
||||
<source><html><head/><body><p>Capable to Ubuntu 22.04</p></body></html></source>
|
||||
<translation><html><head/><body><p>Capable de la Ubuntu 22.04</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="434"/>
|
||||
<source><html><head/><body><p><img src=":/tags/ubuntu.png" width=30 height=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="453"/>
|
||||
<source><html><head/><body><p><img src=":/tags/uos-authorize.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="491"/>
|
||||
<source><html><head/><body><p><img src=":/tags/logo_icon.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="510"/>
|
||||
<source><html><head/><body><p><img src=":/tags/deepin.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="529"/>
|
||||
<source><html><head/><body><p><img src=":/tags/a2d.png"height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="542"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="545"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="585"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="588"/>
|
||||
<source><html><head/><body><p>A Wine app.Spark Store will automatically configure the wine kit for you</p></body></html></source>
|
||||
<translation><html><head/><body><p>L'application wine. Spark Store configure automatiquement le kit Wine pour vous</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="548"/>
|
||||
<source><html><head/><body><p><img src=":/tags/dwine5.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="555"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="460"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="463"/>
|
||||
<source><html><head/><body><p>Capable to Debian Stable</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="558"/>
|
||||
<source><html><head/><body><p><img src=":/tags/debian.svg" height="30" width="30"/></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1167"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1200"/>
|
||||
<source>Update</source>
|
||||
<translation>Moderniser</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1196"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1229"/>
|
||||
<source>Contributor</source>
|
||||
<translation>Contributeurs</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1203"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1236"/>
|
||||
<source>Pkgname</source>
|
||||
<translation>Nom de l'emballage</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1309"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1342"/>
|
||||
<source>Author</source>
|
||||
<translation>Auteur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1345"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1378"/>
|
||||
<source>Size</source>
|
||||
<translation>Taille</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1381"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1414"/>
|
||||
<source>Website</source>
|
||||
<translation>Site Web</translation>
|
||||
</message>
|
||||
@@ -260,18 +216,18 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="578"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="593"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="608"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>Le Spark store</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="578"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="593"/>
|
||||
<source>Uninstall succeeded</source>
|
||||
<translation>Désinstallation réussie</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="593"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="608"/>
|
||||
<source>The URL has been copied to the clipboard</source>
|
||||
<translation>L'URL a été copiée dans le presse - papiers</translation>
|
||||
</message>
|
||||
@@ -359,9 +315,9 @@
|
||||
<translation>Le téléchargement est terminé.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="218"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="229"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="226"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="237"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="245"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>Le Spark store</translation>
|
||||
</message>
|
||||
@@ -372,32 +328,32 @@
|
||||
<translation>Installation en cours</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="218"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="226"/>
|
||||
<source>Installation complete.</source>
|
||||
<translation>L'installation est terminée.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="219"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="220"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="227"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="228"/>
|
||||
<source>Finish</source>
|
||||
<translation>Terminé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="227"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="235"/>
|
||||
<source>Retry</source>
|
||||
<translation>Essayez à nouveau</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="229"/>
|
||||
<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>Une erreur s'est produite dans le processus dpkg, vérifiez les informations d'installation ou essayez de réinstaller.</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>Error happened in dpkg progress , please check the install info or try to reinstall.</source>
|
||||
<translation>Une erreur s'est produite dans le processus dpkg, vérifiez les informations d'installation ou essayez de réinstaller.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="245"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="246"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="247"/>
|
||||
<source>dpkg progress had been aborted, please check the install info or try to reinstall.</source>
|
||||
<translation>La progression de DPKG a été interrompue, veuillez vérifier les informations d’installation ou essayer de réinstaller.</translation>
|
||||
</message>
|
||||
|
||||
@@ -24,63 +24,58 @@
|
||||
<translation>下载量</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="409"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="412"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="441"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="444"/>
|
||||
<source><html><head/><body><p>Capable to deepin 23</p></body></html></source>
|
||||
<translation type="unfinished"><html><head/><body><p>支持deepin 20</p></body></html> {23<?}</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="528"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="531"/>
|
||||
<source><html><head/><body><p>This app is developed by community user,we give this tag to honor those who contribute to the Linux Ecology</p></body></html></source>
|
||||
<translation><html><head/><body><p>这款应用是社区开发者开发的,我们为社区开发者颁发这款勋章以表彰他们对Linux生态的贡献</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="447"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="450"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="422"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="425"/>
|
||||
<source><html><head/><body><p>Capable to UOS home 20</p></body></html></source>
|
||||
<translation><html><head/><body><p>支持UOS家庭版 20</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="466"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="469"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="566"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="569"/>
|
||||
<source><html><head/><body><p>A deepin-wine2 app. Spark Store will automatically configure the wine kit for you.</p></body></html></source>
|
||||
<translation>这是一款 deepin-wine2 应用。星火商店会为你自动配置wine环境</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="472"/>
|
||||
<source><html><head/><body><p><img src=":/tags/dwine2-small.png"/></p></body></html></source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="485"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="488"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="547"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="550"/>
|
||||
<source><html><head/><body><p>This is a DTK5 app,which means it would have better effect on Deepin Desktop Environment</p></body></html></source>
|
||||
<translation><html><head/><body><p>这是一款DTK5应用,请使用深度桌面环境来获得最完美的体验</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="504"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="507"/>
|
||||
<source><html><head/><body><p>Capable to deepin 20</p></body></html></source>
|
||||
<translation><html><head/><body><p>支持deepin 20</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="523"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="526"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="509"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="512"/>
|
||||
<source><html><head/><body><p>An Appimage to deb app.</p></body></html></source>
|
||||
<translation><html><head/><body><p>这是一款Appimage转制应用.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="611"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="644"/>
|
||||
<source>Share</source>
|
||||
<translation>Spk分享链接</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="618"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="651"/>
|
||||
<source>APP Feedback</source>
|
||||
<translation>应用反馈</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1074"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1107"/>
|
||||
<source>Description</source>
|
||||
<translation>描述</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="910"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="943"/>
|
||||
<source>Screen capture</source>
|
||||
<translation>屏幕截图</translation>
|
||||
</message>
|
||||
@@ -89,99 +84,60 @@
|
||||
<location filename="../src/pages/appintopage.cpp" line="210"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="351"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="396"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="575"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="590"/>
|
||||
<source>Download and Install</source>
|
||||
<translation>下载并安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="415"/>
|
||||
<source><html><head/><body><p><img src=":/tags/community.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="428"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="431"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="403"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="406"/>
|
||||
<source><html><head/><body><p>Capable to Ubuntu 22.04</p></body></html></source>
|
||||
<translation><html><head/><body><p>支持Ubuntu 22.04</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="434"/>
|
||||
<source><html><head/><body><p><img src=":/tags/ubuntu.png" width=30 height=30 /></p></body></html></source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="453"/>
|
||||
<source><html><head/><body><p><img src=":/tags/uos-authorize.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="491"/>
|
||||
<source><html><head/><body><p><img src=":/tags/logo_icon.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="510"/>
|
||||
<source><html><head/><body><p><img src=":/tags/deepin.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="529"/>
|
||||
<source><html><head/><body><p><img src=":/tags/a2d.png"height=30 width=30 /></p></body></html></source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="542"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="545"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="585"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="588"/>
|
||||
<source><html><head/><body><p>A Wine app.Spark Store will automatically configure the wine kit for you</p></body></html></source>
|
||||
<translation>这是一款 Wine 应用。星火商店会为你自动配置wine环境</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="548"/>
|
||||
<source><html><head/><body><p><img src=":/tags/dwine5.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="555"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="460"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="463"/>
|
||||
<source><html><head/><body><p>Capable to Debian Stable</p></body></html></source>
|
||||
<translation><html><head/><body><p>支持Debian Stable</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="558"/>
|
||||
<source><html><head/><body><p><img src=":/tags/debian.svg" height="30" width="30"/></p></body></html></source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="773"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="806"/>
|
||||
<source>Introduction</source>
|
||||
<translation>介绍</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1167"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1200"/>
|
||||
<source>Update</source>
|
||||
<translation>更新时间</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1196"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1229"/>
|
||||
<source>Contributor</source>
|
||||
<translation>投稿用户</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1203"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1236"/>
|
||||
<source>Pkgname</source>
|
||||
<translation>软件包名</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1309"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1342"/>
|
||||
<source>Author</source>
|
||||
<translation>软件作者</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1345"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1378"/>
|
||||
<source>Size</source>
|
||||
<translation>软件大小</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1381"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1414"/>
|
||||
<source>Website</source>
|
||||
<translation>软件官网</translation>
|
||||
</message>
|
||||
@@ -260,18 +216,18 @@
|
||||
<translation>当前应用不支持或未在您的平台上测试过,安装后可能会出现问题</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="578"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="593"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="608"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>星火应用商店</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="578"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="593"/>
|
||||
<source>Uninstall succeeded</source>
|
||||
<translation>卸载成功</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="593"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="608"/>
|
||||
<source>The URL has been copied to the clipboard</source>
|
||||
<translation>链接已复制到剪贴板</translation>
|
||||
</message>
|
||||
@@ -359,9 +315,9 @@
|
||||
<translation>下载完成.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="218"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="229"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="226"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="237"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="245"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>星火应用商店</translation>
|
||||
</message>
|
||||
@@ -372,32 +328,32 @@
|
||||
<translation>正在安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="218"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="226"/>
|
||||
<source>Installation complete.</source>
|
||||
<translation>安装完成.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="219"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="220"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="227"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="228"/>
|
||||
<source>Finish</source>
|
||||
<translation>完成</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="227"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="235"/>
|
||||
<source>Retry</source>
|
||||
<translation>重试</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="229"/>
|
||||
<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>
|
||||
</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>Error happened in dpkg progress , please check the install info or try to reinstall.</source>
|
||||
<translation>安装出现错误,请检查安装详情或尝试重新安装。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="245"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="246"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="247"/>
|
||||
<source>dpkg progress had been aborted, please check the install info or try to reinstall.</source>
|
||||
<translation>安装被中止,请检查安装详情或尝试重新安装。</translation>
|
||||
</message>
|
||||
|
||||
@@ -24,63 +24,58 @@
|
||||
<translation>下載次數</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="409"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="412"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="441"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="444"/>
|
||||
<source><html><head/><body><p>Capable to deepin 23</p></body></html></source>
|
||||
<translation type="unfinished"><html><head/><body><p>支持deepin 20</p></body></html> {23<?}</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="528"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="531"/>
|
||||
<source><html><head/><body><p>This app is developed by community user,we give this tag to honor those who contribute to the Linux Ecology</p></body></html></source>
|
||||
<translation><html><head/><body><p>这款应用是社区开发者开发的,我们为社区开发者颁发这款勋章以表彰他们对Linux生态的贡献</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="447"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="450"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="422"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="425"/>
|
||||
<source><html><head/><body><p>Capable to UOS home 20</p></body></html></source>
|
||||
<translation><html><head/><body><p>支持UOS家庭版 20</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="466"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="469"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="566"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="569"/>
|
||||
<source><html><head/><body><p>A deepin-wine2 app. Spark Store will automatically configure the wine kit for you.</p></body></html></source>
|
||||
<translation>这是一款 deepin-wine2 应用。星火商店会为你自动配置wine环境</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="472"/>
|
||||
<source><html><head/><body><p><img src=":/tags/dwine2-small.png"/></p></body></html></source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="485"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="488"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="547"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="550"/>
|
||||
<source><html><head/><body><p>This is a DTK5 app,which means it would have better effect on Deepin Desktop Environment</p></body></html></source>
|
||||
<translation><html><head/><body><p>这是一款DTK5应用,请使用深度桌面环境来获得最完美的体验</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="504"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="507"/>
|
||||
<source><html><head/><body><p>Capable to deepin 20</p></body></html></source>
|
||||
<translation><html><head/><body><p>支持deepin 20</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="523"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="526"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="509"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="512"/>
|
||||
<source><html><head/><body><p>An Appimage to deb app.</p></body></html></source>
|
||||
<translation><html><head/><body><p>这是一款Appimage转制应用.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="611"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="644"/>
|
||||
<source>Share</source>
|
||||
<translation>Spk共享链接</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="618"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="651"/>
|
||||
<source>APP Feedback</source>
|
||||
<translation>軟件錯誤回報</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1074"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1107"/>
|
||||
<source>Description</source>
|
||||
<translation>軟體詳細資料</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="910"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="943"/>
|
||||
<source>Screen capture</source>
|
||||
<translation>軟體演示</translation>
|
||||
</message>
|
||||
@@ -89,99 +84,60 @@
|
||||
<location filename="../src/pages/appintopage.cpp" line="210"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="351"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="396"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="575"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="590"/>
|
||||
<source>Download and Install</source>
|
||||
<translation>下載並安裝</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="415"/>
|
||||
<source><html><head/><body><p><img src=":/tags/community.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="428"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="431"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="403"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="406"/>
|
||||
<source><html><head/><body><p>Capable to Ubuntu 22.04</p></body></html></source>
|
||||
<translation><html><head/><body><p>支持Ubuntu 22.04</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="434"/>
|
||||
<source><html><head/><body><p><img src=":/tags/ubuntu.png" width=30 height=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="453"/>
|
||||
<source><html><head/><body><p><img src=":/tags/uos-authorize.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="491"/>
|
||||
<source><html><head/><body><p><img src=":/tags/logo_icon.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="510"/>
|
||||
<source><html><head/><body><p><img src=":/tags/deepin.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="529"/>
|
||||
<source><html><head/><body><p><img src=":/tags/a2d.png"height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="542"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="545"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="585"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="588"/>
|
||||
<source><html><head/><body><p>A Wine app.Spark Store will automatically configure the wine kit for you</p></body></html></source>
|
||||
<translation>这是一款 Wine 应用。星火商店会为你自动配置wine环境</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="548"/>
|
||||
<source><html><head/><body><p><img src=":/tags/dwine5.svg" height=30 width=30 /></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="555"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="460"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="463"/>
|
||||
<source><html><head/><body><p>Capable to Debian Stable</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="558"/>
|
||||
<source><html><head/><body><p><img src=":/tags/debian.svg" height="30" width="30"/></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="773"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="806"/>
|
||||
<source>Introduction</source>
|
||||
<translation>軟體介紹</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1167"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1200"/>
|
||||
<source>Update</source>
|
||||
<translation>更新时间</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1196"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1229"/>
|
||||
<source>Contributor</source>
|
||||
<translation>投稿用户</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1203"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1236"/>
|
||||
<source>Pkgname</source>
|
||||
<translation>软件包名</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1309"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1342"/>
|
||||
<source>Author</source>
|
||||
<translation>软件作者</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1345"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1378"/>
|
||||
<source>Size</source>
|
||||
<translation>软件大小</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1381"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="1414"/>
|
||||
<source>Website</source>
|
||||
<translation>软件官网</translation>
|
||||
</message>
|
||||
@@ -260,18 +216,18 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="578"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="593"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="608"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>星火应用商店</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="578"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="593"/>
|
||||
<source>Uninstall succeeded</source>
|
||||
<translation>卸载成功</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="593"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="608"/>
|
||||
<source>The URL has been copied to the clipboard</source>
|
||||
<translation>链接已复制到剪贴板</translation>
|
||||
</message>
|
||||
@@ -359,9 +315,9 @@
|
||||
<translation>下載完成.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="218"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="229"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="226"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="237"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="245"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>星火应用商店</translation>
|
||||
</message>
|
||||
@@ -372,32 +328,32 @@
|
||||
<translation>正在安裝</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="218"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="226"/>
|
||||
<source>Installation complete.</source>
|
||||
<translation>安裝完成.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="219"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="220"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="227"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="228"/>
|
||||
<source>Finish</source>
|
||||
<translation>完成</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="227"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="235"/>
|
||||
<source>Retry</source>
|
||||
<translation>重试</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="229"/>
|
||||
<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>
|
||||
</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>Error happened in dpkg progress , please check the install info or try to reinstall.</source>
|
||||
<translation>安裝出現錯誤,請檢查安裝詳情或嘗試重新安裝。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="245"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="246"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="247"/>
|
||||
<source>dpkg progress had been aborted, please check the install info or try to reinstall.</source>
|
||||
<translation>安裝被中止,請檢查安裝詳情或嘗試重新安裝。</translation>
|
||||
</message>
|
||||
|
||||