Compare commits

..

4 Commits

Author SHA1 Message Date
a3ca04ddc5 更新到spark,加入apt-list的修改功能 2020-07-04 12:09:35 +08:00
147258a7ac SparkProject 2020-07-03 20:53:58 +08:00
68269577c0 beta3更新 2020-07-03 11:53:47 +08:00
58304f2c19 优化了app.json解析 2020-07-01 20:54:42 +08:00
14 changed files with 1090 additions and 774 deletions

View File

@@ -1,23 +1,17 @@
# 深度社区应用商店 # 星火商店
#### 介绍 #### 介绍
deepin社区商店由社区维护 星火商店商店,由深度社区爱好者维护
web页面部分正在开发当中详情请见[web仓库](https://gitee.com/deepin-community-store/DCSAPP_WEB) web页面部分正在开发当中详情请见[web仓库](https://gitee.com/deepin-community-store/DCSAPP_WEB)
#### 编译指导
依赖dtk2版适用于ubuntu/15.11)qt5-default g++ libdtkcore2-dev libdtkwidget2-dev libqt5webkit5-dev libdtkgui2-dev
dtk5版适用于20beta):qt5-default g++ libdtkwidget5-dev libdtkcore5-dev libdtkgui5-dev libqt5webkit5-dev
#### 说明 #### 说明
需要在运行目录下放置服务器线路列表`server.list`,每行一个,在末尾需要添加“/”
当前服务器线路列表(项目中包含): 当前服务器线路列表(项目中包含):
``` ```
http://dcstore.shenmo.tech/ http://dcstore.shenmo.tech/
http://store.shenmo.tech/ http://store.shenmo.tech/
http://store2.shenmo.tech/ http://store2.shenmo.tech/
http://store.moshengren.xyz/
``` ```
#### 目录结构 #### 目录结构
@@ -26,7 +20,7 @@ http://store.moshengren.xyz/
配置文件被储存到`~/.config/deepin-community-store/`中。 配置文件被储存到`~/.config/deepin-community-store/`中。
线路文件:当前运行目录下的`./server.list` 线路文件:新版的线路文件被放置于源服务器中,可随时刷新更新源列表
#### 参与贡献 #### 参与贡献

View File

@@ -16,6 +16,7 @@ downloadlist::downloadlist(QWidget *parent) :
ui->progressBar->setValue(0); ui->progressBar->setValue(0);
ui->label_filename->hide(); ui->label_filename->hide();
ui->pushButton->hide(); ui->pushButton->hide();
ui->pushButton_3->hide();
ui->label->setStyleSheet("color:#000000"); ui->label->setStyleSheet("color:#000000");
} }
@@ -27,7 +28,7 @@ downloadlist::~downloadlist()
void downloadlist::setValue(long long value) void downloadlist::setValue(long long value)
{ {
ui->progressBar->setValue(value); ui->progressBar->setValue(value);
ui->label_2->setText(QString::number((double)value/100)+"%"); ui->label_2->setText(QString::number((double)value/100)+"% ("+speed+")");
if(ui->label_2->text()=="100%"){ if(ui->label_2->text()=="100%"){
ui->label_2->setText("已完成,等待安装"); ui->label_2->setText("已完成,等待安装");
} }
@@ -85,6 +86,11 @@ void downloadlist::closeDownload()
on_pushButton_2_clicked(); on_pushButton_2_clicked();
} }
void downloadlist::setSpeed(QString s)
{
speed=s;
}
void downloadlist::on_pushButton_clicked() void downloadlist::on_pushButton_clicked()
{ {
if(!isInstall){ if(!isInstall){
@@ -93,9 +99,15 @@ void downloadlist::on_pushButton_clicked()
ui->label_2->setText("正在安装,请稍候"); ui->label_2->setText("正在安装,请稍候");
QtConcurrent::run([=](){ QtConcurrent::run([=](){
QProcess installer; QProcess installer;
if(reinstall){
installer.start("pkexec apt reinstall -y /tmp/deepin-community-store/"+ui->label_filename->text().toUtf8());
}else {
installer.start("pkexec apt install -y /tmp/deepin-community-store/"+ui->label_filename->text().toUtf8()); installer.start("pkexec apt install -y /tmp/deepin-community-store/"+ui->label_filename->text().toUtf8());
}
installer.waitForFinished(); installer.waitForFinished();
QString error=QString::fromStdString(installer.readAllStandardError().toStdString()); QString error=QString::fromStdString(installer.readAllStandardError().toStdString());
out=installer.readAllStandardOutput();
QStringList everyError=error.split("\n"); QStringList everyError=error.split("\n");
bool haveError=false; bool haveError=false;
bool notRoot=false; bool notRoot=false;
@@ -111,15 +123,18 @@ void downloadlist::on_pushButton_clicked()
if(!haveError && !notRoot){ if(!haveError && !notRoot){
ui->pushButton->hide(); ui->pushButton->hide();
ui->label_2->setText("安装完成"); ui->label_2->setText("安装完成");
ui->pushButton_3->show();
}else if(haveError){ }else if(haveError){
ui->pushButton->hide(); ui->pushButton->hide();
ui->label_2->setText("安装出现错误"); ui->label_2->setText("安装出现错误");
ui->pushButton_3->show();
}else { }else {
ui->label_2->setText("安装被终止"); ui->label_2->setText("安装被终止");
ui->pushButton->setEnabled(true);
} }
isInstall=false; isInstall=false;
}); });
// system("x-terminal-emulator -e sudo apt install -y ./"+ui->label_filename->text().toUtf8());
qDebug()<<ui->label_filename->text().toUtf8(); qDebug()<<ui->label_filename->text().toUtf8();
} }
@@ -132,3 +147,9 @@ void downloadlist::on_pushButton_2_clicked()
ui->progressBar->hide(); ui->progressBar->hide();
close=true; close=true;
} }
void downloadlist::on_pushButton_3_clicked()
{
output_w.setoutput(out);
output_w.show();
}

View File

@@ -2,6 +2,7 @@
#define DOWNLOADLIST_H #define DOWNLOADLIST_H
#include <QWidget> #include <QWidget>
#include <outputwindow.h>
namespace Ui { namespace Ui {
class downloadlist; class downloadlist;
} }
@@ -23,18 +24,25 @@ public:
void setFileName(QString); void setFileName(QString);
void seticon(const QPixmap); void seticon(const QPixmap);
void closeDownload(); void closeDownload();
void setSpeed(QString);
int num; int num;
bool close=false; bool close=false;
QString out;
outputwindow output_w;
bool reinstall=false;
private slots: private slots:
void on_pushButton_clicked(); void on_pushButton_clicked();
void on_pushButton_2_clicked(); void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
private: private:
Ui::downloadlist *ui; Ui::downloadlist *ui;
static bool isInstall; static bool isInstall;
QString speed;
}; };
//bool downloadlist::isInstall=false; //bool downloadlist::isInstall=false;

View File

@@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>744</width> <width>786</width>
<height>54</height> <height>54</height>
</rect> </rect>
</property> </property>
@@ -16,15 +16,77 @@
<property name="styleSheet"> <property name="styleSheet">
<string notr="true"/> <string notr="true"/>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item row="0" column="1"> <item>
<widget class="QLabel" name="label_3">
<property name="maximumSize">
<size>
<width>40</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>icon</string>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_filename"> <widget class="QLabel" name="label_filename">
<property name="maximumSize">
<size>
<width>0</width>
<height>16777215</height>
</size>
</property>
<property name="text"> <property name="text">
<string>TextLabel</string> <string>TextLabel</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="4"> <item>
<widget class="QLabel" name="label">
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<pointsize>13</pointsize>
</font>
</property>
<property name="text">
<string>名称</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QWidget" name="widget" native="true"> <widget class="QWidget" name="widget" native="true">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
@@ -97,7 +159,7 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="0" column="6"> <item>
<spacer name="horizontalSpacer_2"> <spacer name="horizontalSpacer_2">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@@ -113,23 +175,7 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="0" column="3"> <item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="7">
<widget class="QPushButton" name="pushButton"> <widget class="QPushButton" name="pushButton">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
@@ -148,47 +194,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="2"> <item>
<widget class="QLabel" name="label">
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<pointsize>13</pointsize>
</font>
</property>
<property name="text">
<string>名称</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_3">
<property name="maximumSize">
<size>
<width>40</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>icon</string>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="8">
<widget class="QPushButton" name="pushButton_2"> <widget class="QPushButton" name="pushButton_2">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
@@ -207,6 +213,25 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QPushButton" name="pushButton_3">
<property name="minimumSize">
<size>
<width>60</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>60</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>详情</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<resources/> <resources/>

View File

@@ -7,15 +7,14 @@ int main(int argc, char *argv[])
{ {
DApplication::loadDXcbPlugin(); //让bar处在标题栏中 DApplication::loadDXcbPlugin(); //让bar处在标题栏中
DApplication a(argc, argv); DApplication a(argc, argv);
a.setAttribute(Qt::AA_UseHighDpiPixmaps); a.setAttribute(Qt::AA_UseHighDpiPixmaps);
a.loadTranslator(); a.loadTranslator();
a.setOrganizationName("deepin"); a.setOrganizationName("community");
a.setApplicationVersion(DApplication::buildVersion("1.0")); a.setApplicationVersion(DApplication::buildVersion("1.0-beta3.2"));
a.setApplicationAcknowledgementPage("https://gitee.com/deepin-community-store/deepin-community-store"); a.setApplicationAcknowledgementPage("https://gitee.com/deepin-community-store/deepin-community-store");
a.setProductIcon(QIcon::fromTheme("deepin-community-store")); //设置Logo a.setProductIcon(QIcon::fromTheme("spark-store")); //设置Logo
a.setProductName("深度社区应用商店"); a.setProductName("星火应用商店");
a.setApplicationName("社区应用商店"); //只有在这儿修改窗口标题才有效 a.setApplicationName("星火应用商店"); //只有在这儿修改窗口标题才有效
MainWindow w; MainWindow w;
w.show(); w.show();

View File

@@ -10,11 +10,15 @@ MainWindow::MainWindow(QWidget *parent)
w = new Widget; w = new Widget;
resize(w->size()); //设置窗口大小 resize(w->size()); //设置窗口大小
setMinimumSize(900,750); setMinimumSize(950,700);
setCentralWidget(w); setCentralWidget(w);
// searchEdit->setParent(this);
// searchEdit->move(1,1);
// searchEdit->show();
} }
MainWindow::~MainWindow() MainWindow::~MainWindow()
{ {
} }

View File

@@ -3,18 +3,21 @@
#include <DMainWindow> #include <DMainWindow>
#include "widget.h" #include "widget.h"
#include <QThread>
#include <DSearchEdit>
DWIDGET_USE_NAMESPACE DWIDGET_USE_NAMESPACE
class MainWindow : public DMainWindow class MainWindow : public DMainWindow
{ {
Q_OBJECT Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
// DSearchEdit *searchEdit=new DSearchEdit;
private: private:
Widget *w; Widget *w;
}; };

24
outputwindow.cpp Normal file
View File

@@ -0,0 +1,24 @@
#include "outputwindow.h"
#include "ui_outputwindow.h"
#include <QDebug>
#include <QDesktopWidget>
outputwindow::outputwindow(QWidget *parent) :
QWidget(parent),
ui(new Ui::outputwindow)
{
ui->setupUi(this);
setWindowTitle("安装详情");
QDesktopWidget *desktop = QApplication::desktop();
move((desktop->width() - width())/ 2, (desktop->height() - height()) /2);
}
outputwindow::~outputwindow()
{
delete ui;
}
void outputwindow::setoutput(QString output)
{
qDebug()<<output;
ui->textBrowser->setText(output);
}

22
outputwindow.h Normal file
View File

@@ -0,0 +1,22 @@
#ifndef OUTPUTWINDOW_H
#define OUTPUTWINDOW_H
#include <QWidget>
namespace Ui {
class outputwindow;
}
class outputwindow : public QWidget
{
Q_OBJECT
public:
explicit outputwindow(QWidget *parent = nullptr);
~outputwindow();
void setoutput(QString);
private:
Ui::outputwindow *ui;
};
#endif // OUTPUTWINDOW_H

24
outputwindow.ui Normal file
View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>outputwindow</class>
<widget class="QWidget" name="outputwindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>391</width>
<height>372</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QTextBrowser" name="textBrowser"/>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@@ -8,7 +8,7 @@ QT += core gui webkitwidgets network concurrent
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = deepin-community-store TARGET = spark-store
TEMPLATE = app TEMPLATE = app
# The following define makes your compiler emit warnings if you use # The following define makes your compiler emit warnings if you use
@@ -26,11 +26,13 @@ DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += main.cpp\ SOURCES += main.cpp\
mainwindow.cpp \ mainwindow.cpp \
widget.cpp \ widget.cpp \
downloadlist.cpp downloadlist.cpp \
outputwindow.cpp
HEADERS += mainwindow.h \ HEADERS += mainwindow.h \
widget.h \ widget.h \
downloadlist.h downloadlist.h \
outputwindow.h
CONFIG += link_pkgconfig CONFIG += link_pkgconfig
PKGCONFIG += dtkwidget PKGCONFIG += dtkwidget
@@ -39,4 +41,5 @@ CONFIG += c++11
FORMS += \ FORMS += \
widget.ui \ widget.ui \
downloadlist.ui downloadlist.ui \
outputwindow.ui

View File

@@ -47,11 +47,19 @@ Widget::Widget(QWidget *parent) :
left_list[12]=ui->menu_btn_theme;left_menu_bg[12]=ui->menu_bg_theme; left_list[12]=ui->menu_btn_theme;left_menu_bg[12]=ui->menu_bg_theme;
left_list[13]=ui->menu_btn_download;left_menu_bg[13]=ui->menu_bg_download; left_list[13]=ui->menu_btn_download;left_menu_bg[13]=ui->menu_bg_download;
left_list[14]=ui->menu_btn_settings;left_menu_bg[14]=ui->menu_bg_settings; left_list[14]=ui->menu_btn_settings;left_menu_bg[14]=ui->menu_bg_settings;
server.open("server.list",std::ios::in); server.open(QDir::homePath().toUtf8()+"/.config/deepin-community-store/server.list",std::ios::in);
// system("mkdir /etc/deepin-community-store/");
// server.open("/etc/deepin-community-store/server.list",std::ios::in);
std::string lineTmp; std::string lineTmp;
if(server){
while (getline(server,lineTmp)) { while (getline(server,lineTmp)) {
ui->comboBox_server->addItem(QString::fromStdString(lineTmp)); ui->comboBox_server->addItem(QString::fromStdString(lineTmp));
} }
}else {
ui->comboBox_server->addItem("http://dcstore.shenmo.tech/");
}
QSettings readConfig(QDir::homePath()+"/.config/deepin-community-store/config.ini",QSettings::IniFormat); QSettings readConfig(QDir::homePath()+"/.config/deepin-community-store/config.ini",QSettings::IniFormat);
if(readConfig.value("server/choose").toString()!=""){ if(readConfig.value("server/choose").toString()!=""){
ui->comboBox_server->setCurrentText(readConfig.value("server/choose").toString()); ui->comboBox_server->setCurrentText(readConfig.value("server/choose").toString());
@@ -62,6 +70,7 @@ Widget::Widget(QWidget *parent) :
configCanSeve=true; configCanSeve=true;
qDebug()<<serverUrl; qDebug()<<serverUrl;
menuUrl[0]=serverUrl + "store/#/"; menuUrl[0]=serverUrl + "store/#/";
// menuUrl[0]="http://127.0.0.1:8000/#/relations";
menuUrl[1]=serverUrl + "store/#/network/"; menuUrl[1]=serverUrl + "store/#/network/";
menuUrl[2]=serverUrl + "store/#/relations"; menuUrl[2]=serverUrl + "store/#/relations";
menuUrl[3]=serverUrl + "store/#/musicandsound"; menuUrl[3]=serverUrl + "store/#/musicandsound";
@@ -87,58 +96,51 @@ Widget::Widget(QWidget *parent) :
ui->line1_widget->setGraphicsEffect(opacityEffect_1); ui->line1_widget->setGraphicsEffect(opacityEffect_1);
ui->line2_widget->setGraphicsEffect(opacityEffect_2); ui->line2_widget->setGraphicsEffect(opacityEffect_2);
connect(ui->webView->page(),SIGNAL(javaScriptWindowObjectCleared()),this,SLOT([=](){qDebug()<<" ";})); connect(ui->webView->page(),SIGNAL(javaScriptWindowObjectCleared()),this,SLOT([=](){qDebug()<<" ";}));
download_speed.setInterval(1000);
download_speed.start();
connect(&download_speed,&QTimer::timeout,[=](){
if(isdownload){
size1=download_size;
QString theSpeed;
double bspeed;
bspeed=size1-size2;
if(bspeed<1024){
theSpeed=QString::number(bspeed)+"B";
}else if (bspeed<(1024*1024)) {
theSpeed=QString::number(0.01*int(100*(bspeed/1024)))+"KB";
}else if (bspeed<(1024*1024*1024)) {
theSpeed=QString::number(0.01*int(100*(bspeed/(1024*1024))))+"MB";
}else {
theSpeed=QString::number(0.01*int(100*(bspeed/(1024*1024*1024))))+"GB";
}
download_list[nowDownload-1].setSpeed(theSpeed);
size2=download_size;
}
});
chooseLeftMenu(0);
QFile aptserver("/etc/apt/sources.list.d/sparkstore.list");
aptserver.open(QIODevice::ReadOnly);
if(aptserver.isOpen()){
ui->label_aptserver->setText(aptserver.readAll());
}else {
ui->label_aptserver->setText("不存在");
}
aptserver.close();
} }
Widget::~Widget() Widget::~Widget()
{ {
delete ui; delete ui;
} }
void Widget::on_webView_linkClicked(const QUrl &arg1)
{
//这里通过获取url的方式和现有web不符
// qDebug()<<arg1;
// //判断,如果末尾是/就直接访问如果是app.json就打开详情页
// if(arg1.path().right(1)=="/"){
// ui->webView->setUrl(arg1);
// }else if(arg1.path().right(8)=="app.json"){
// load.cancel();//打开并发加载线程前关闭正在执行的线程
//// load.waitForFinished();
// QPixmap pixmap_null;//一个空的图片指针,用来清空先有内容
// ui->label_appicon->setPixmap(pixmap_null);
// ui->screen_1->setPixmap(pixmap_null);
// ui->screen_2->setPixmap(pixmap_null);
// ui->screen_3->setPixmap(pixmap_null);
// ui->screen_4->setPixmap(pixmap_null);
// ui->screen_5->setPixmap(pixmap_null);
// //先隐藏详情页负责显示截图的label
// ui->screen_1->hide();
// ui->screen_2->hide();
// ui->screen_3->hide();
// ui->screen_4->hide();
// ui->screen_5->hide();
// ui->label_more->setText("");//清空详情介绍
// ui->label_info->setText("");
// ui->label_appname->setText("");
// ui->pushButton->setEnabled(false);
// ui->stackedWidget->setCurrentIndex(2);
// load.cancel();//打开并发加载线程前关闭正在执行的线程
// load = QtConcurrent::run([=](){
// loadappinfo(arg1);
// });
// }
}
void Widget::on_webView_loadStarted() void Widget::on_webView_loadStarted()
{ {
ui->label_show->setText("正在加载,请稍候");
ui->label_show->show();
QUrl arg1=ui->webView->page()->mainFrame()->requestedUrl().toString(); QUrl arg1=ui->webView->page()->mainFrame()->requestedUrl().toString();
qDebug()<<arg1;
//判断,如果末尾是/就直接访问如果是app.json就打开详情页 //判断,如果末尾是/就直接访问如果是app.json就打开详情页
if(arg1.path().right(8)=="app.json"){ if(arg1.path().right(8)=="app.json"){
load.cancel();//打开并发加载线程前关闭正在执行的线程 load.cancel();//打开并发加载线程前关闭正在执行的线程
load.waitForFinished();
QPixmap pixmap_null;//一个空的图片指针,用来清空先有内容 QPixmap pixmap_null;//一个空的图片指针,用来清空先有内容
ui->label_appicon->setPixmap(pixmap_null); ui->label_appicon->setPixmap(pixmap_null);
ui->screen_1->setPixmap(pixmap_null); ui->screen_1->setPixmap(pixmap_null);
@@ -167,8 +169,7 @@ void Widget::loadappinfo(QUrl arg1)
{ {
ui->label_show->setText("正在加载,请稍候"); ui->label_show->setText("正在加载,请稍候");
ui->label_show->show();
QProcess get_json; QProcess get_json;
QDir dir; QDir dir;
dir.cd("/tmp"); dir.cd("/tmp");
@@ -178,9 +179,16 @@ void Widget::loadappinfo(QUrl arg1)
get_json.waitForFinished(); get_json.waitForFinished();
QFile app_json("app.json"); QFile app_json("app.json");
if(app_json.open(QIODevice::ReadOnly)){ if(app_json.open(QIODevice::ReadOnly)){
// //成功得到json文件 // //成功得到json文件
QByteArray json_array=app_json.readAll(); QByteArray json_array=app_json.readAll();
//将路径转化为相应源的下载路径
urladdress=arg1.toString().left(arg1.toString().length()-8); urladdress=arg1.toString().left(arg1.toString().length()-8);
QStringList downloadurl=urladdress.split("/");
urladdress=ui->comboBox_server->currentText();
for (int i=3;i<downloadurl.size();i++) {
urladdress+="/"+downloadurl[i];
}
//路径转化完成
QJsonObject json= QJsonDocument::fromJson(json_array).object(); QJsonObject json= QJsonDocument::fromJson(json_array).object();
appName = json["Name"].toString(); appName = json["Name"].toString();
url=urladdress + json["Filename"].toString(); url=urladdress + json["Filename"].toString();
@@ -189,18 +197,18 @@ void Widget::loadappinfo(QUrl arg1)
ui->label_show->show(); ui->label_show->show();
//软件信息加载 //软件信息加载
QString info; QString info;
info="包名:"+json["Pkgname"].toString()+"\n"; info="包名: "+json["Pkgname"].toString()+"\n";
info+="版本号:"+json["Version"].toString()+"\n"; info+="版本号: "+json["Version"].toString()+"\n";
if(json["Author"].toString()!="" && json["Author"].toString()!=" "){ if(json["Author"].toString()!="" && json["Author"].toString()!=" "){
info+="作者:"+json["Author"].toString()+"\n"; info+="作者: "+json["Author"].toString()+"\n";
} }
if(json["Website"].toString()!="" && json["Website"].toString()!=" "){ if(json["Website"].toString()!="" && json["Website"].toString()!=" "){
info+="官网:"+json["Website"].toString()+"\n"; info+="官网: "+json["Website"].toString()+"\n";
} }
info+="投稿者:"+json["Contributor"].toString()+"\n"; info+="投稿者: "+json["Contributor"].toString()+"\n";
info+="更新时间:"+json["Update"].toString()+"\n"; info+="更新时间: "+json["Update"].toString()+"\n";
info+="大小:"+json["Size"].toString()+"\n"; info+="大小: "+json["Size"].toString()+"\n";
ui->label_info->setText(info); ui->label_info->setText(info);
ui->label_more->setText(json["More"].toString()); ui->label_more->setText(json["More"].toString());
QProcess isInstall; QProcess isInstall;
@@ -209,6 +217,7 @@ void Widget::loadappinfo(QUrl arg1)
int error=QString::fromStdString(isInstall.readAllStandardError().toStdString()).length(); int error=QString::fromStdString(isInstall.readAllStandardError().toStdString()).length();
if(error==0){ if(error==0){
ui->pushButton->setText("重新安装"); ui->pushButton->setText("重新安装");
}else { }else {
ui->pushButton->setText("安装"); ui->pushButton->setText("安装");
} }
@@ -226,6 +235,11 @@ void Widget::loadappinfo(QUrl arg1)
ui->screen_1->show(); ui->screen_1->show();
ui->screen_1->setPixmap(screen[0]); ui->screen_1->setPixmap(screen[0]);
ui->screen_1->setScaledContents(true); ui->screen_1->setScaledContents(true);
ui->screen_2->hide();
ui->screen_3->hide();
ui->screen_4->hide();
ui->screen_5->hide();
} }
get_json.start("wget "+urladdress+"screen_2.png"); get_json.start("wget "+urladdress+"screen_2.png");
get_json.waitForFinished(); get_json.waitForFinished();
@@ -233,6 +247,9 @@ void Widget::loadappinfo(QUrl arg1)
ui->screen_2->show(); ui->screen_2->show();
ui->screen_2->setPixmap(screen[1]); ui->screen_2->setPixmap(screen[1]);
ui->screen_2->setScaledContents(true); ui->screen_2->setScaledContents(true);
ui->screen_3->hide();
ui->screen_4->hide();
ui->screen_5->hide();
} }
get_json.start("wget "+urladdress+"screen_3.png"); get_json.start("wget "+urladdress+"screen_3.png");
get_json.waitForFinished(); get_json.waitForFinished();
@@ -240,6 +257,8 @@ void Widget::loadappinfo(QUrl arg1)
ui->screen_3->show(); ui->screen_3->show();
ui->screen_3->setPixmap(screen[2]); ui->screen_3->setPixmap(screen[2]);
ui->screen_3->setScaledContents(true); ui->screen_3->setScaledContents(true);
ui->screen_4->hide();
ui->screen_5->hide();
} }
get_json.start("wget "+urladdress+"screen_4.png"); get_json.start("wget "+urladdress+"screen_4.png");
get_json.waitForFinished(); get_json.waitForFinished();
@@ -247,6 +266,7 @@ void Widget::loadappinfo(QUrl arg1)
ui->screen_4->show(); ui->screen_4->show();
ui->screen_4->setPixmap(screen[3]); ui->screen_4->setPixmap(screen[3]);
ui->screen_4->setScaledContents(true); ui->screen_4->setScaledContents(true);
ui->screen_5->hide();
} }
get_json.start("wget "+urladdress+"screen_5.png"); get_json.start("wget "+urladdress+"screen_5.png");
get_json.waitForFinished(); get_json.waitForFinished();
@@ -264,15 +284,15 @@ void Widget::loadappinfo(QUrl arg1)
void Widget::chooseLeftMenu(int index) void Widget::chooseLeftMenu(int index)
{ {
nowMenu=index; nowMenu=index;
for (int i=0;i<15;i++) { for (int i=0;i<15;i++) {
load.cancel();//打开并发加载线程前关闭正在执行的线程
left_list[i]->setStyleSheet(""); left_list[i]->setStyleSheet("");
left_list[i]->setFont(QFont("",11));
left_menu_bg[i]->setStyleSheet(""); left_menu_bg[i]->setStyleSheet("");
} }
left_list[index]->setStyleSheet("color:#FFFFFF"); left_list[index]->setStyleSheet("color:#FFFFFF");
left_menu_bg[index]->setStyleSheet("background-color:#0081FF;border-radius:8"); left_menu_bg[index]->setStyleSheet("background-color:#0081FF;border-radius:8");
if(index<=12){ if(index<=12){
ui->webView->setUrl(menuUrl[index]); ui->webView->setUrl(menuUrl[index]);
ui->stackedWidget->setCurrentIndex(0); ui->stackedWidget->setCurrentIndex(0);
@@ -315,6 +335,9 @@ void Widget::on_pushButton_clicked()
nowDownload+=1; nowDownload+=1;
startRequest(urList.at(nowDownload-1)); //进行链接请求 startRequest(urList.at(nowDownload-1)); //进行链接请求
} }
if(ui->pushButton->text()=="重新安装"){
download_list[allDownload-1].reinstall=true;
}
} }
void Widget::startRequest(QUrl url) void Widget::startRequest(QUrl url)
@@ -343,29 +366,28 @@ void Widget::updateDataReadProgress(qint64 bytesRead, qint64 totalBytes)
{ {
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;
if(download_list[nowDownload-1].close){ if(download_list[nowDownload-1].close){
download_list[nowDownload-1].closeDownload(); download_list[nowDownload-1].closeDownload();
httpFinished(); httpFinished();
} }
// download_list[nowDownload-1].setMax(bytesRead/10);
// download_list[nowDownload-1].setValue(totalBytes/10);
} }
void Widget::httpFinished() //完成下载 void Widget::httpFinished() //完成下载
{ {
file->flush(); file->flush();
file->close(); file->close();
reply->deleteLater(); reply->deleteLater();
reply = nullptr; reply = nullptr;
delete file; delete file;
file = nullptr; file = nullptr;
isdownload=false; isdownload=false;
isBusy=false; isBusy=false;
download_list[nowDownload-1].readyInstall(); download_list[nowDownload-1].readyInstall();
download_list[nowDownload-1].free=true; download_list[nowDownload-1].free=true;
if(nowDownload<allDownload){ if(nowDownload<allDownload){
nowDownload+=1; nowDownload+=1;
while (download_list[nowDownload-1].close) { while (download_list[nowDownload-1].close) {
nowDownload+=1; nowDownload+=1;
@@ -374,13 +396,12 @@ if(nowDownload<allDownload){
file = new QFile(fileName); file = new QFile(fileName);
if(!file->open(QIODevice::WriteOnly)) if(!file->open(QIODevice::WriteOnly))
{ {
qDebug()<<"file open error";
delete file; delete file;
file = nullptr; file = nullptr;
return ; return ;
} }
startRequest(urList.at(nowDownload-1)); startRequest(urList.at(nowDownload-1));
} }
} }
void Widget::on_listWidget_currentRowChanged(int currentRow) void Widget::on_listWidget_currentRowChanged(int currentRow)
{ {
@@ -413,7 +434,7 @@ void Widget::on_menu_btn_video_clicked()//视频播放
} }
void Widget::on_menu_btn_photo_clicked()//图形图像 void Widget::on_menu_btn_photo_clicked()//图形图像
{ {
chooseLeftMenu(5); chooseLeftMenu(5);
} }
void Widget::on_menu_btn_game_clicked()//游戏娱乐 void Widget::on_menu_btn_game_clicked()//游戏娱乐
{ {
@@ -462,7 +483,7 @@ void Widget::on_pushButton_2_clicked()
void Widget::on_webView_loadFinished() void Widget::on_webView_loadFinished()
{ {
if(ui->webView->page()->mainFrame()->requestedUrl().toString().right(5)!=".json"){ if(ui->webView->page()->mainFrame()->requestedUrl().toString().right(5)!=".json"){
ui->label_show->setText(""); ui->label_show->setText("正在加载,请稍候");
ui->label_show->hide(); ui->label_show->hide();
} }
} }
@@ -480,3 +501,70 @@ void Widget::on_comboBox_server_currentIndexChanged(const QString &arg1)
setConfig->setValue("server/choose",arg1); setConfig->setValue("server/choose",arg1);
} }
} }
void Widget::on_pushButton_3_clicked()
{
QtConcurrent::run([=](){
ui->pushButton_3->setEnabled(false);
ui->comboBox_server->clear();
system(QDir::homePath().toUtf8()+"/.config/deepin-community-store/server.list");
system("wget -P "+QDir::homePath().toUtf8()+"/.config/deepin-community-store http://store2.shenmo.tech/store/server.list");
std::fstream server;
server.open(QDir::homePath().toUtf8()+"/.config/deepin-community-store/server.list",std::ios::in);
std::string lineTmp;
if(server){
while (getline(server,lineTmp)) {
ui->comboBox_server->addItem(QString::fromStdString(lineTmp));
}
}else {
ui->comboBox_server->addItem("http://dcstore.shenmo.tech/");
}
ui->pushButton_3->setEnabled(true);
ui->comboBox_server->setCurrentIndex(0);
});
}
void Widget::on_pushButton_4_clicked()
{
QtConcurrent::run([=](){
ui->pushButton_4->setEnabled(false);
ui->label_aptserver->setText("请稍等,正在更新");
std::fstream sourcesList;
system("mkdir /tmp/spark-store");
sourcesList.open("/tmp/spark-store/sparkstore.list",std::ios::out);
if(sourcesList){
sourcesList<<"deb [by-hash=force] ";
sourcesList<<QString::fromUtf8(ui->comboBox_server->currentText().toUtf8()).toStdString();
sourcesList<<" ./";
std::fstream update;
update.open("/tmp/spark-store/update.sh",std::ios::out);
update<<"#!/bin/sh\n";
update<<"mv /tmp/spark-store/sparkstore.list /etc/apt/sources.list.d/sparkstore.list && apt update";
update.close();
system("chmod +x /tmp/spark-store/update.sh");
QProcess runupdate;
runupdate.start("pkexec /tmp/spark-store/update.sh");
runupdate.waitForFinished();
qDebug()<<runupdate.readAllStandardError();
QString error=QString::fromStdString(runupdate.readAllStandardError().toStdString());
QStringList everyError=error.split("\n");
bool haveError=false;
for (int i=0;i<everyError.size();i++) {
qDebug()<<everyError[i].left(2);
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("更新中发生错误请在终端使用apt update来查看错误原因");
}
}else {
qDebug()<<"更新源失败";
}
ui->pushButton_4->setEnabled(true);
});
}

View File

@@ -11,15 +11,18 @@
#include <QProcess> #include <QProcess>
#include <QFuture> #include <QFuture>
#include <QToolButton> #include <QToolButton>
#include <QTimer>
#define LIST_MAX 99 #define LIST_MAX 99
namespace Ui { namespace Ui {
class Widget; class Widget;
} }
class Widget : public QWidget class Widget : public QWidget
{ {
Q_OBJECT
Q_OBJECT
public: public:
explicit Widget(QWidget *parent = 0); explicit Widget(QWidget *parent = 0);
~Widget(); ~Widget();
@@ -31,11 +34,10 @@ public:
void chooseLeftMenu(int index); void chooseLeftMenu(int index);
QPixmap screen[5]; QPixmap screen[5];
QFuture<void> load; QFuture<void> load;
QTimer download_speed;
private slots: private slots:
void on_webView_linkClicked(const QUrl &arg1);
void httpFinished(); void httpFinished();
void httpReadyRead(); void httpReadyRead();
void updateDataReadProgress(qint64,qint64); void updateDataReadProgress(qint64,qint64);
@@ -81,7 +83,11 @@ private slots:
void on_comboBox_server_currentIndexChanged(const QString &arg1); void on_comboBox_server_currentIndexChanged(const QString &arg1);
private: void on_pushButton_3_clicked();
void on_pushButton_4_clicked();
public:
QUrl url; QUrl url;
bool isBusy=false; bool isBusy=false;
downloadlist download_list[LIST_MAX]; downloadlist download_list[LIST_MAX];
@@ -97,6 +103,10 @@ private:
QUrl menuUrl[13]; QUrl menuUrl[13];
bool configCanSeve=false; bool configCanSeve=false;
int nowMenu=0; int nowMenu=0;
long download_size=0;
long size1=0;
long size2=0;
}; };

1283
widget.ui

File diff suppressed because it is too large Load Diff