mirror of
https://gitee.com/spark-store-project/spark-store
synced 2025-09-03 01:42:20 +08:00
修复下载软件失败导致的崩溃,更改APT源更新逻辑
下载失败会导致发射的progress信号已接受数和总数均为0,导致计算进度时被零除; APT源更新逻辑代码重构,将需要复用的值单独创建变量,重新格式化代码,以及加入了已经废弃的星火源降低优先级代码
This commit is contained in:
parent
f0bf0e5aec
commit
eff8878e8b
87
widget.cpp
87
widget.cpp
@ -574,7 +574,8 @@ int Widget::loadappinfo(QUrl arg1)
|
|||||||
label_screen[3]=ui->screen_3;
|
label_screen[3]=ui->screen_3;
|
||||||
label_screen[4]=ui->screen_4;
|
label_screen[4]=ui->screen_4;
|
||||||
for (int i=0;i<5;i++) {
|
for (int i=0;i<5;i++) {
|
||||||
get_json.start("curl -o screen_"+QString::number(i+1)+".png "+urladdress+"screen_"+QString::number(i+1)+".png");
|
QString cmd = "curl -o screen_"+QString::number(i+1)+".png "+urladdress+"screen_"+QString::number(i+1)+".png";
|
||||||
|
get_json.start(cmd);
|
||||||
get_json.waitForFinished();
|
get_json.waitForFinished();
|
||||||
if(screen[i].load("screen_"+QString::number(i+1)+".png")){
|
if(screen[i].load("screen_"+QString::number(i+1)+".png")){
|
||||||
label_screen[i]->setImage(screen[i]);
|
label_screen[i]->setImage(screen[i]);
|
||||||
@ -673,6 +674,7 @@ void Widget::httpReadyRead()
|
|||||||
|
|
||||||
void Widget::updateDataReadProgress(qint64 bytesRead, qint64 totalBytes)
|
void Widget::updateDataReadProgress(qint64 bytesRead, qint64 totalBytes)
|
||||||
{
|
{
|
||||||
|
if(totalBytes <= 0) return;
|
||||||
download_list[nowDownload-1].setMax(10000); // 最大值
|
download_list[nowDownload-1].setMax(10000); // 最大值
|
||||||
download_list[nowDownload-1].setValue((bytesRead*10000)/totalBytes); // 当前值
|
download_list[nowDownload-1].setValue((bytesRead*10000)/totalBytes); // 当前值
|
||||||
download_size=bytesRead;
|
download_size=bytesRead;
|
||||||
@ -778,38 +780,65 @@ void Widget::on_pushButton_updateApt_clicked()
|
|||||||
QtConcurrent::run([=](){
|
QtConcurrent::run([=](){
|
||||||
ui->pushButton_updateApt->setEnabled(false);
|
ui->pushButton_updateApt->setEnabled(false);
|
||||||
ui->label_aptserver->setText(tr("Updating, please wait..."));
|
ui->label_aptserver->setText(tr("Updating, please wait..."));
|
||||||
std::fstream sourcesList;
|
|
||||||
|
std::fstream sourcesList, policy, update;
|
||||||
QDir tmpdir("/tmp");
|
QDir tmpdir("/tmp");
|
||||||
|
auto tmpPath = QString::fromUtf8(TMP_PATH).toStdString();
|
||||||
|
bool unknownError = true;
|
||||||
|
|
||||||
tmpdir.mkpath("spark-store");
|
tmpdir.mkpath("spark-store");
|
||||||
sourcesList.open(QString::fromUtf8(TMP_PATH).toStdString()+"/sparkstore.list",std::ios::out);
|
sourcesList.open(tmpPath + "/sparkstore.list", std::ios::out);
|
||||||
if(sourcesList){
|
//policy.open(tmpPath + "/sparkstore", std::ios::out);
|
||||||
sourcesList<<"deb [by-hash=force] ";
|
// 商店已经下架会替换系统库的包,优先级policy弃用
|
||||||
sourcesList<<QString::fromUtf8(ui->comboBox_server->currentText().toUtf8()).toStdString();
|
|
||||||
sourcesList<<" /";
|
if(sourcesList /*&& policy*/) {
|
||||||
std::fstream update;
|
auto serverAddr = ui->comboBox_server->currentText();
|
||||||
update.open(QString::fromUtf8(TMP_PATH).toStdString()+"/update.sh",std::ios::out);
|
|
||||||
update<<"#!/bin/sh\n";
|
sourcesList << "deb [by-hash=force] ";
|
||||||
update<<"mv "+QString::fromUtf8(TMP_PATH).toStdString()+"/sparkstore.list /etc/apt/sources.list.d/sparkstore.list && apt update";
|
sourcesList << serverAddr.toUtf8().toStdString();
|
||||||
update.close();
|
sourcesList << " /";
|
||||||
system("chmod +x "+QString::fromUtf8(TMP_PATH).toUtf8()+"/update.sh");
|
sourcesList.close();
|
||||||
QProcess runupdate;
|
|
||||||
runupdate.start("pkexec "+QString::fromUtf8(TMP_PATH)+"/update.sh");
|
/*
|
||||||
runupdate.waitForFinished();
|
policy << "Package: *\n"
|
||||||
QString error=QString::fromStdString(runupdate.readAllStandardError().toStdString());
|
"Pin: origin *" << serverAddr.mid(serverAddr.indexOf('.')).toUtf8().toStdString() << "\n"
|
||||||
QStringList everyError=error.split("\n");
|
"Pin-Priority: 90"; // 降低星火源的优先级,防止从星火安装已存在的系统包,破坏依赖
|
||||||
bool haveError=false;
|
policy.close();
|
||||||
for (int i=0;i<everyError.size();i++) {
|
*/
|
||||||
if(everyError[i].left(2)=="E:"){
|
|
||||||
haveError=true;
|
update.open(tmpPath + "/update.sh",std::ios::out);
|
||||||
|
if(update) {
|
||||||
|
unknownError = false;
|
||||||
|
update << "#!/bin/sh\n"
|
||||||
|
"mv " + tmpPath + "/sparkstore.list /etc/apt/sources.list.d/sparkstore.list && "
|
||||||
|
// "mv " + tmpPath + "/sparkstore /etc/apt/preferences.d/sparkstore && "
|
||||||
|
"apt update";
|
||||||
|
update.close();
|
||||||
|
|
||||||
|
system(("chmod +x " + tmpPath + "/update.sh").c_str());
|
||||||
|
QProcess runupdate;
|
||||||
|
runupdate.start(QString::fromStdString("pkexec " + tmpPath + "/update.sh"));
|
||||||
|
runupdate.waitForFinished();
|
||||||
|
QString error = runupdate.readAllStandardError();
|
||||||
|
|
||||||
|
QStringList everyError = error.split("\n");
|
||||||
|
bool haveError = false;
|
||||||
|
for (int i=0; i < everyError.size(); i++) {
|
||||||
|
if(everyError[i].left(2) == "E:") {
|
||||||
|
haveError = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!haveError) {
|
||||||
|
ui->label_aptserver->setText("deb [by-hash=force] " + ui->comboBox_server->currentText().toUtf8() + " /");
|
||||||
|
} else {
|
||||||
|
ui->label_aptserver->setText(tr("Apt has reported an error. Please use apt update in terminal to locate the problem."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!haveError){
|
}
|
||||||
ui->label_aptserver->setText("deb [by-hash=force] "+ui->comboBox_server->currentText().toUtf8()+" /");
|
|
||||||
}else {
|
if(unknownError) {
|
||||||
ui->label_aptserver->setText(tr("Apt has reported an error. Please use apt update in terminal to locate the problem."));
|
ui->label_aptserver->setText(tr("Unknown error!"));
|
||||||
}
|
|
||||||
}else {
|
|
||||||
ui->label_aptserver->setText(tr("Unknown server error!"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ui->pushButton_updateApt->setEnabled(true);
|
ui->pushButton_updateApt->setEnabled(true);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user