diff --git a/spark-store-project.pro b/spark-store-project.pro
index 254ea6c..19a741e 100644
--- a/spark-store-project.pro
+++ b/spark-store-project.pro
@@ -1,7 +1,9 @@
 TEMPLATE = subdirs
+
 CONFIG += ordered
 
-SUBDIRS = third-party/QtNetworkService \
+SUBDIRS += \
+    third-party/QtNetworkService \
     src/spark-store.pro
     
 spark-store.depends = third-party/QtNetworkService
diff --git a/src/appitem.cpp b/src/appitem.cpp
index ec44ba4..ed18e0a 100644
--- a/src/appitem.cpp
+++ b/src/appitem.cpp
@@ -14,12 +14,12 @@ AppItem::AppItem(QWidget *parent) :
 {
     ui->setupUi(this);
 
-//    auto shadow = new QGraphicsDropShadowEffect();
-//    shadow->setXOffset(0);
-//    shadow->setYOffset(1);
-//    shadow->setBlurRadius(2);
-//    shadow->setColor(QColor::fromRgba(qRgba(0, 0, 0, 180)));
-//    ui->container->setGraphicsEffect(shadow);
+    // auto shadow = new QGraphicsDropShadowEffect();
+    // shadow->setXOffset(0);
+    // shadow->setYOffset(1);
+    // shadow->setBlurRadius(2);
+    // shadow->setColor(QColor::fromRgba(qRgba(0, 0, 0, 180)));
+    // ui->container->setGraphicsEffect(shadow);
 }
 
 AppItem::~AppItem()
@@ -46,7 +46,8 @@ void AppItem::setDescription(QString description)
 void AppItem::setIcon(QString icon)
 {
     m_icon = icon;
-    if (!icon.isEmpty()) {
+    if(!icon.isEmpty())
+    {
         downloadIcon(icon);
     }
 }
@@ -58,7 +59,8 @@ void AppItem::setUrl(QString url)
 
 void AppItem::mousePressEvent(QMouseEvent *event)
 {
-    Q_UNUSED(event);
+    Q_UNUSED(event)
+
     emit clicked(QUrl(m_url));
 }
 
@@ -68,8 +70,10 @@ void AppItem::mousePressEvent(QMouseEvent *event)
  */
 void AppItem::downloadIcon(QString icon)
 {
-    QtConcurrent::run([=](){
+    QtConcurrent::run([=]()
+    {
         auto reqManager = new QNetworkAccessManager();
+
         QUrl url(icon);
         QNetworkReply *reply = reqManager->get(QNetworkRequest(url));
         QEventLoop loop;
@@ -77,14 +81,17 @@ void AppItem::downloadIcon(QString icon)
         connect(reply, &QNetworkReply::finished, this, [=] () { emit finished(); });
         loop.exec();
         reqManager->deleteLater();
+
         QPixmap pixmap;
         pixmap.loadFromData(reply->readAll());
         pixmap = pixmap.scaled(78, 78, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
-        if (reply->error() == QNetworkReply::NoError) {
-            QMetaObject::invokeMethod(this, "loadIcon", Qt::QueuedConnection,
-                                      Q_ARG(QPixmap, pixmap));
-        } else {
-        qDebug() << reply->errorString();
+        if (reply->error() == QNetworkReply::NoError)
+        {
+            QMetaObject::invokeMethod(this, "loadIcon", Qt::QueuedConnection, Q_ARG(QPixmap, pixmap));
+        }
+        else
+        {
+            qDebug() << reply->errorString();
         }
     });
 }
@@ -93,5 +100,3 @@ void AppItem::loadIcon(QPixmap pic)
 {
     ui->lbl_icon->setPixmap(pic);
 }
-
-
diff --git a/src/appitem.h b/src/appitem.h
index b2f6750..3d30c66 100644
--- a/src/appitem.h
+++ b/src/appitem.h
@@ -14,7 +14,7 @@ class AppItem : public QWidget
 
 public:
     explicit AppItem(QWidget *parent = nullptr);
-    ~AppItem();
+    ~AppItem() override;
 
     void setTitle(QString title);
     void setDescription(QString description);
@@ -24,14 +24,6 @@ public:
 protected:
     void mousePressEvent(QMouseEvent *event) override;
 
-signals:
-    void clicked(QUrl url);
-    void finished();
-
-public slots:
-    void downloadIcon(QString icon);
-    void loadIcon(QPixmap pic);
-
 private:
     Ui::AppItem *ui;
 
@@ -39,6 +31,15 @@ private:
     QString m_description;
     QString m_icon;
     QString m_url;
+
+public slots:
+    void downloadIcon(QString icon);
+    void loadIcon(QPixmap pic);
+
+signals:
+    void clicked(QUrl url);
+    void finished();
+
 };
 
 #endif // APPITEM_H
diff --git a/src/big_image.cpp b/src/big_image.cpp
index abfbefd..9ae6f56 100644
--- a/src/big_image.cpp
+++ b/src/big_image.cpp
@@ -1,22 +1,30 @@
 #include "big_image.h"
+
 #include <QHBoxLayout>
 #include <QtConcurrent>
-big_image::big_image(DBlurEffectWidget *parent) : DBlurEffectWidget(parent)
+
+big_image::big_image(DBlurEffectWidget *parent) :
+    DBlurEffectWidget(parent),
+    m_image(new QLabel)
 {
-//    m_image->setParent(this);
-    QHBoxLayout *layout=new QHBoxLayout;
-    setLayout(layout);
-    layout->addWidget(m_image);
-    layout->setMargin(0);
-    m_image->setAlignment(Qt::AlignCenter);
-//    m_image->setMaximumSize(1360,768);
-    setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint);//设置图片对话框总在最前
+    setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint); // 设置图片对话框总在最前
     setRadius(0);
     setMaskAlpha(60);
     setMaskColor(QColor("#000000"));
 
+    QHBoxLayout *layout = new QHBoxLayout;
+    setLayout(layout);
+    layout->addWidget(m_image);
+    layout->setMargin(0);
 
+    // m_image->setParent(this);
+    // m_image->setMaximumSize(1360,768);
+    m_image->setAlignment(Qt::AlignCenter);
+}
 
+void big_image::setimage(QPixmap image)
+{
+    m_image->setPixmap(image);
 }
 
 void big_image::mousePressEvent(QMouseEvent *)
@@ -25,11 +33,6 @@ void big_image::mousePressEvent(QMouseEvent *)
     m_image->clear();
 }
 
-void big_image::setimage(QPixmap image)
-{
-    m_image->setPixmap(image);
-}
-
 void big_image::focusOutEvent(QFocusEvent *)
 {
     hide();
diff --git a/src/big_image.h b/src/big_image.h
index 4a22430..c353062 100644
--- a/src/big_image.h
+++ b/src/big_image.h
@@ -1,25 +1,27 @@
 #ifndef BIG_IMAGE_H
 #define BIG_IMAGE_H
 
-#include <QWidget>
-#include <DBlurEffectWidget>
 #include <QMouseEvent>
 #include <QLabel>
+
+#include <DBlurEffectWidget>
+
 DWIDGET_USE_NAMESPACE
 
 class big_image : public DBlurEffectWidget
 {
     Q_OBJECT
+
 public:
     explicit big_image(DBlurEffectWidget *parent = nullptr);
-    void mousePressEvent(QMouseEvent *event);
-    QLabel *m_image=new QLabel;
+
+    QLabel *m_image;
+
     void setimage(QPixmap);
-    void focusOutEvent(QFocusEvent *event);
 
-signals:
-
-public slots:
+protected:
+    void mousePressEvent(QMouseEvent *event) override;
+    void focusOutEvent(QFocusEvent *event) override;
 };
 
 #endif // BIG_IMAGE_H
diff --git a/src/downloadlist.cpp b/src/downloadlist.cpp
index 4379383..1a1b46a 100644
--- a/src/downloadlist.cpp
+++ b/src/downloadlist.cpp
@@ -1,19 +1,27 @@
 #include "downloadlist.h"
 #include "ui_downloadlist.h"
-#include "widget.h"
-#include <QDebug>
-#include <QIcon>
-#include <QPixmap>
+
 #include <QtConcurrent>
 #include <QProcess>
-#include <QTextBrowser>
-bool downloadlist::isInstall=false;
+
+#include "widget.h"
+
+bool downloadlist::isInstall = false;
 
 downloadlist::downloadlist(QWidget *parent) :
     QWidget(parent),
-    ui(new Ui::downloadlist)
+    reinstall(false),
+    close(false),
+    ui(new Ui::downloadlist),
+    menu_install(new QMenu),
+    action_dpkg(new QAction),
+    action_deepin(new QAction),
+    action_gdebi(new QAction),
+    output_w(new DDialog),
+    textbrowser(new QTextBrowser)
 {
     ui->setupUi(this);
+
     ui->pushButton_install->setEnabled(false);
     ui->progressBar->setValue(0);
     ui->label_filename->hide();
@@ -22,22 +30,25 @@ downloadlist::downloadlist(QWidget *parent) :
     ui->widget_spinner->start();
     ui->widget_spinner->hide();
     action_dpkg->setText(tr("Spark Store App Installer"));
-    action_gdebi->setText(tr("gdebi"));
     action_deepin->setText(tr("deepin deb installer"));
+    action_gdebi->setText(tr("gdebi"));
+
     connect(action_dpkg,&QAction::triggered,[=](){downloadlist::install(0);});
     connect(action_deepin,&QAction::triggered,[=](){downloadlist::install(1);});
     connect(action_gdebi,&QAction::triggered,[=](){downloadlist::install(2);});
 
-    //ssinstall命令存在时再加入该选项
+    // ssinstall 命令存在时再加入该选项
     QFile ssinstall("/usr/local/bin/ssinstall");
     ssinstall.open(QIODevice::ReadOnly);
-    if(ssinstall.isOpen()){
+    if(ssinstall.isOpen())
+    {
         menu_install->addAction(action_dpkg);
     }
 
     QFile deepin("/usr/bin/deepin-deb-installer");
     deepin.open(QIODevice::ReadOnly);
-    if(deepin.isOpen()){
+    if(deepin.isOpen())
+    {
         menu_install->addAction(action_deepin);
     }
 
@@ -49,18 +60,19 @@ downloadlist::~downloadlist()
     delete ui;
 }
 
-void downloadlist::setValue(long long value)
+void downloadlist::setValue(qint64 value)
 {
-    ui->progressBar->setValue(int(value));
-    ui->label_2->setText(QString::number(double(value)/100)+"% ("+speed+")");
-    if(ui->label_2->text().left(4)=="100%"){
+    ui->progressBar->setValue(qint32(value));
+    ui->label_2->setText(QString::number(double(value) / 100) + "% (" + speed + ")");
+    if(ui->label_2->text().left(4) == "100%")
+    {
         ui->label_2->setText(tr("Downloaded, waiting to install"));
     }
 }
 
-void downloadlist::setMax(long long max)
+void downloadlist::setMax(qint64 max)
 {
-    ui->progressBar->setMaximum(int(max));
+    ui->progressBar->setMaximum(qint32(max));
 }
 
 void downloadlist::setName(QString name)
@@ -75,26 +87,28 @@ QString downloadlist::getName()
 
 void downloadlist::readyInstall()
 {
-    if(ui->progressBar->value()!= ui->progressBar->maximum() && !close){
+    if(ui->progressBar->value() != ui->progressBar->maximum() && !close)
+    {
         ui->progressBar->hide();
         ui->pushButton_install->show();
         ui->pushButton_2->hide();
         Widget::sendNotification(tr("Failed to download %1").arg(ui->label->text()), 5000,
-                                 "/tmp/spark-store/icon_"+QString::number(num).toUtf8()+".png");
+                                 "/tmp/spark-store/icon_" + QString::number(num).toUtf8() + ".png");
         ui->label_2->setText(tr("Download Failed,Check Your Connection"));
         ui->pushButton_install->setEnabled(false);
-        return;
 
+        return;
     }
-    if(!close){
+
+    if(!close)
+    {
         ui->progressBar->hide();
         ui->pushButton_install->setEnabled(true);
         ui->pushButton_install->show();
         ui->pushButton_2->hide();
         Widget::sendNotification(tr("Finished downloading %1, awaiting to install").arg(ui->label->text()), 5000,
-                                    "/tmp/spark-store/icon_"+QString::number(num).toUtf8()+".png");
+                                 "/tmp/spark-store/icon_" + QString::number(num).toUtf8() + ".png");
     }
-
 }
 
 void downloadlist::setFileName(QString fileName)
@@ -114,79 +128,98 @@ void downloadlist::closeDownload()
 
 void downloadlist::setSpeed(QString s)
 {
-    speed=s;
+    speed = s;
 }
 
 void downloadlist::install(int t)
 {
-    if(!isInstall){
-        isInstall=true;
+    if(!isInstall)
+    {
+        isInstall = true;
         ui->pushButton_install->hide();
         ui->widget_spinner->show();
-        qDebug()<<"/tmp/spark-store/"+ui->label_filename->text().toUtf8();
+        qDebug() << "/tmp/spark-store/" + ui->label_filename->text().toUtf8();
         ui->label_2->setText(tr("Installing"));
-        QtConcurrent::run([=](){
+
+        QtConcurrent::run([=]()
+        {
             QProcess installer;
-            if(!reinstall){
-                switch (t) {
+            if(!reinstall)
+            {
+                switch(t)
+                {
                 case 0:
-                    installer.start("pkexec ssinstall /tmp/spark-store/"+ui->label_filename->text().toUtf8());
+                    installer.start("pkexec ssinstall /tmp/spark-store/" + ui->label_filename->text().toUtf8());
                     break;
                 case 1:
-                    installer.start("deepin-deb-installer /tmp/spark-store/"+ui->label_filename->text().toUtf8());
+                    installer.start("deepin-deb-installer /tmp/spark-store/" + ui->label_filename->text().toUtf8());
                     break;
                 case 2:
-                    installer.start("pkexec gdebi -n /tmp/spark-store/"+ui->label_filename->text().toUtf8());
-                    break;
-                }
-            }else {
-                switch (t) {
-                case 0:
-                    installer.start("pkexec ssinstall /tmp/spark-store/"+ui->label_filename->text().toUtf8());
-                    break;
-                case 1:
-                    installer.start("deepin-deb-installer /tmp/spark-store/"+ui->label_filename->text().toUtf8());
-                    break;
-                case 2:
-                    installer.start("pkexec gdebi -n /tmp/spark-store/"+ui->label_filename->text().toUtf8());
+                    installer.start("pkexec gdebi -n /tmp/spark-store/" + ui->label_filename->text().toUtf8());
                     break;
                 }
             }
-            bool haveError=false;
-            bool notRoot=false;
+            else
+            {
+                switch(t)
+                {
+                case 0:
+                    installer.start("pkexec ssinstall /tmp/spark-store/" + ui->label_filename->text().toUtf8());
+                    break;
+                case 1:
+                    installer.start("deepin-deb-installer /tmp/spark-store/" + ui->label_filename->text().toUtf8());
+                    break;
+                case 2:
+                    installer.start("pkexec gdebi -n /tmp/spark-store/" + ui->label_filename->text().toUtf8());
+                    break;
+                }
+            }
+
+            bool haveError = false;
+            bool notRoot = false;
             installer.waitForFinished();
-            out=installer.readAllStandardOutput();
-            QStringList everyOut=out.split("\n");
-            for (int i=0;i<everyOut.size();i++) {
-                if(everyOut[i].left(2)=="E:"){
-                    haveError=true;
+            out = installer.readAllStandardOutput();
+
+            QStringList everyOut = out.split("\n");
+            for(int i=0;i<everyOut.size();i++)
+            {
+                if(everyOut[i].left(2) == "E:")
+                {
+                    haveError = true;
                 }
-                if(everyOut[i].right(14)=="Not authorized"){
-                    notRoot=true;
+                if(everyOut[i].right(14) == "Not authorized")
+                {
+                    notRoot = true;
                 }
             }
+
             QProcess isInstall;
-            isInstall.start("dpkg -s "+pkgName);
+            isInstall.start("dpkg -s " + pkgName);
             isInstall.waitForFinished();
-            int error=QString::fromStdString(isInstall.readAllStandardError().toStdString()).length();
-            if(error==0){
+            int error = QString::fromStdString(isInstall.readAllStandardError().toStdString()).length();
+            if(error == 0)
+            {
                 ui->pushButton_install->hide();
                 ui->label_2->setText(tr("Finish"));
                 ui->pushButton_3->show();
-            }else {
+            }
+            else
+            {
                 ui->pushButton_install->show();
                 ui->pushButton_install->setText(tr("Retry"));
                 ui->label_2->setText(tr("Error happened in dpkg progress , you can try it again"));
                 ui->pushButton_3->show();
             }
-            if(notRoot){
+
+            if(notRoot)
+            {
                 ui->label_2->setText(tr("dpkg progress had been aborted,you can retry installation"));
                 ui->pushButton_install->show();
                 ui->pushButton_3->hide();
             }
-            ui->widget_spinner->hide();
-            downloadlist::isInstall=false;
 
+            ui->widget_spinner->hide();
+            downloadlist::isInstall = false;
         });
 
         qDebug()<<ui->label_filename->text().toUtf8();
@@ -196,7 +229,7 @@ void downloadlist::install(int t)
 
 void downloadlist::on_pushButton_install_clicked()
 {
-    //弹出菜单
+    // 弹出菜单
     menu_install->exec(cursor().pos());
 }
 
@@ -205,17 +238,18 @@ void downloadlist::on_pushButton_2_clicked()
     ui->label_2->setText(tr("Download canceled"));
     ui->pushButton_2->setEnabled(false);
     ui->progressBar->hide();
-    close=true;
+    close = true;
 }
 
 void downloadlist::on_pushButton_3_clicked()
 {
-    output_w.layout()->addWidget(textbrowser);
     textbrowser->setLineWidth(0);
     textbrowser->setText(out);
-    output_w.layout()->setMargin(20);
-    output_w.setTitle(ui->label->text());
-    output_w.setMinimumHeight(600);
-    output_w.setAttribute(Qt::WA_TranslucentBackground);
-    output_w.show();
+
+    output_w->setMinimumHeight(600);
+    output_w->setAttribute(Qt::WA_TranslucentBackground);
+    output_w->setTitle(ui->label->text());
+    output_w->layout()->setMargin(20);
+    output_w->layout()->addWidget(textbrowser);
+    output_w->show();
 }
diff --git a/src/downloadlist.h b/src/downloadlist.h
index db11116..e9a8b8a 100644
--- a/src/downloadlist.h
+++ b/src/downloadlist.h
@@ -2,11 +2,14 @@
 #define DOWNLOADLIST_H
 
 #include <QWidget>
-#include <DDialog>
 #include <QTextBrowser>
 #include <QMenu>
 #include <QAction>
+
+#include <DDialog>
+
 DWIDGET_USE_NAMESPACE
+
 namespace Ui {
 class downloadlist;
 }
@@ -18,40 +21,45 @@ class downloadlist : public QWidget
 public:
     explicit downloadlist(QWidget *parent = nullptr);
     ~downloadlist();
-    void setValue(long long);
-    void setMax(long long);
+
+    int num;
+    bool free;
+    static bool isInstall;
+    bool reinstall;
+    QString speed;
+    QString out;
+    QString pkgName;
+    bool close;
+
+    void setValue(qint64);
+    void setMax(qint64);
     void setName(QString);
     QString getName();
     void readyInstall();
-    bool free;
+
     void setFileName(QString);
     void seticon(const QPixmap);
     void closeDownload();
     void setSpeed(QString);
-    int num;
-    bool close=false;
-    QString out;
-    DDialog output_w;
-    QTextBrowser *textbrowser=new QTextBrowser;
-    bool reinstall=false;
-    QString pkgName;
-    QMenu *menu_install=new QMenu;
-    QAction *action_gdebi=new QAction;
-    QAction *action_dpkg=new QAction;
-    QAction *action_deepin=new QAction;
+
     void install(int);
-private slots:
-    void on_pushButton_install_clicked();
-//    void on_pushButton_maninst_clicked();
-    void on_pushButton_2_clicked();
-    void on_pushButton_3_clicked();
 
 private:
     Ui::downloadlist *ui;
-    static bool isInstall;
-    QString speed;
 
+    QMenu *menu_install;
+    QAction *action_dpkg;
+    QAction *action_deepin;
+    QAction *action_gdebi;
+
+    DDialog *output_w;
+    QTextBrowser *textbrowser;
+
+private slots:
+    void on_pushButton_install_clicked();
+    void on_pushButton_2_clicked();
+    void on_pushButton_3_clicked();
 
 };
-//bool downloadlist::isInstall=false;
+
 #endif // DOWNLOADLIST_H
diff --git a/src/downloadworker.cpp b/src/downloadworker.cpp
index 8f38cbe..7a54e75 100644
--- a/src/downloadworker.cpp
+++ b/src/downloadworker.cpp
@@ -1,10 +1,9 @@
 #include "downloadworker.h"
-#include <QIODevice>
+
 #include <QEventLoop>
 #include <QNetworkAccessManager>
 #include <QNetworkRequest>
 #include <QNetworkReply>
-#include <QDebug>
 #include <QThread>
 #include <QRegularExpression>
 #include <QFileInfo>
@@ -12,7 +11,7 @@
 
 DownloadWorker::DownloadWorker(QObject *parent)
 {
-
+    Q_UNUSED(parent)
 }
 
 void DownloadWorker::setIdentifier(int identifier)
@@ -35,28 +34,28 @@ qint64 DownloadWorker::getReceivedPos()
 
 void DownloadWorker::doWork()
 {
-        mgr = new QNetworkAccessManager(this);
-        QNetworkRequest request;
-        request.setUrl(url);
-        request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
-        request.setRawHeader("Range", QString("bytes=%1-%2").arg(startPos)
-                    .arg(endPos).toLocal8Bit());
-        reply = mgr->get(request);
-        qDebug() << "开始下载数据:" << QString(" %1~%2 -> writePos Start %3")
-            .arg(startPos).arg(endPos).arg(receivedPos);
-        connect(reply, static_cast<void(QNetworkReply::*)(QNetworkReply::NetworkError)>(&QNetworkReply::error),
-        [this](QNetworkReply::NetworkError error){
-            if (error != QNetworkReply::NoError) {
-                qDebug() << "出错了:" << reply->errorString();
-            }
-        });
-        connect(reply, &QNetworkReply::finished, mgr, &QNetworkAccessManager::deleteLater);
-        connect(reply, &QNetworkReply::readyRead, this, &DownloadWorker::dataReady);
-        connect(reply, &QNetworkReply::finished, this, &DownloadWorker::slotFinish);
-        connect(reply, &QNetworkReply::downloadProgress, this, &DownloadWorker::handleProcess);
-//        connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
-        connect(reply, &QNetworkReply::finished, this, &DownloadWorker::doStop);
+    mgr = new QNetworkAccessManager(this);
+    QNetworkRequest request;
+    request.setUrl(url);
+    request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
+    request.setRawHeader("Range", QString("bytes=%1-%2").arg(startPos).arg(endPos).toLocal8Bit());
+    reply = mgr->get(request);
+    qDebug() << "开始下载数据:" << QString(" %1~%2 -> writePos Start %3").arg(startPos).arg(endPos).arg(receivedPos);
 
+    connect(reply, static_cast<void(QNetworkReply::*)(QNetworkReply::NetworkError) > (&QNetworkReply::error),
+            [this](QNetworkReply::NetworkError error)
+    {
+        if(error != QNetworkReply::NoError)
+        {
+            qDebug() << "出错了:" << reply->errorString();
+        }
+    });
+    connect(reply, &QNetworkReply::finished, mgr, &QNetworkAccessManager::deleteLater);
+    connect(reply, &QNetworkReply::readyRead, this, &DownloadWorker::dataReady);
+    connect(reply, &QNetworkReply::finished, this, &DownloadWorker::slotFinish);
+    connect(reply, &QNetworkReply::downloadProgress, this, &DownloadWorker::handleProcess);
+    // connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
+    connect(reply, &QNetworkReply::finished, this, &DownloadWorker::doStop);
 }
 
 void DownloadWorker::doStop()
@@ -80,8 +79,7 @@ void DownloadWorker::dataReady()
 void DownloadWorker::slotFinish()
 {
     file->flush();
-    qDebug() << "数据块下载完毕:" << QString(" %1~%2 -> writePos Start %3")
-        .arg(startPos).arg(endPos).arg(receivedPos);
+    qDebug() << "数据块下载完毕:" << QString(" %1~%2 -> writePos Start %3").arg(startPos).arg(endPos).arg(receivedPos);
     emit workFinished();
 }
 
@@ -93,6 +91,8 @@ void DownloadWorker::handleProcess(qint64, qint64)
 
 DownloadController::DownloadController(QObject *parent)
 {
+    Q_UNUSED(parent)
+
     domains = {
         "d1.store.deepinos.org.cn",
         "d2.store.deepinos.org.cn",
@@ -100,13 +100,15 @@ DownloadController::DownloadController(QObject *parent)
         "d4.store.deepinos.org.cn",
         "d5.store.deepinos.org.cn"
     };
-    this->threadNum =  domains.size() > 5 ? 5 : domains.size();
+    this->threadNum = domains.size() > 5 ? 5 : domains.size();
 }
 
 DownloadController::~DownloadController()
 {
-    if (workers.size() > 0) {
-        for(int i = 0; i < workers.size(); i++) {
+    if(workers.size() > 0)
+    {
+        for(int i = 0; i < workers.size(); i++)
+        {
             workers.at(i)->doStop();
             workers.at(i)->disconnect();
             workers.at(i)->deleteLater();
@@ -130,45 +132,52 @@ void DownloadController::setThreadNum(int threadNum)
  */
 void DownloadController::startDownload(const QString &url)
 {
-
-
     finish = 0;
 
     // 下载任务等分,计算每个线程的下载数据
     fileSize = getFileSize(url);
-    if (fileSize == 0) {
+    if(fileSize == 0)
+    {
         emit errorOccur("文件大小获取失败");
         return; 
     }
+
     qint64 segmentSize = fileSize / threadNum;
     ranges.resize(threadNum);
     QVector<qint64> receivedBytes;
     receivedBytes.resize(threadNum);
-    for (int i = 0; i < threadNum; i++) {
+    for(int i = 0; i < threadNum; i++)
+    {
         ranges[i].first = i * segmentSize;
         ranges[i].second = i * segmentSize + segmentSize - 1;
         receivedBytes[i] = 0;
     }
-    ranges[threadNum-1].second = fileSize; // 余数部分加入最后一个
+    ranges[threadNum - 1].second = fileSize; // 余数部分加入最后一个
 
     // 打开文件
     QDir tmpdir("/tmp/spark-store");
     file = new QFile;
     file->setFileName(tmpdir.absoluteFilePath(filename));
 
-    if (file->exists())
+    if(file->exists())
+    {
         file->remove();
-    if (!file->open(QIODevice::WriteOnly)) {
+    }
+
+    if(!file->open(QIODevice::WriteOnly))
+    {
         delete file;
         file = nullptr;
         emit errorOccur(file->errorString());
         return;
     }
+
     file->resize(fileSize);
 
     // 创建下载线程
     workers.clear();
-    for(int i = 0; i < ranges.size(); i++) {
+    for(int i = 0; i < ranges.size(); i++)
+    {
         qDebug() << QString("第%1个下载请求:%2-%3").arg(i).arg(ranges.at(i).first).arg(ranges.at(i).second);
         auto worker = new DownloadWorker(this);
         auto range = ranges.at(i);
@@ -176,8 +185,10 @@ void DownloadController::startDownload(const QString &url)
         worker->setIdentifier(i);
         worker->setParamter(chunkUrl, range, file);
         workers.append(worker);
+
         connect(worker, &DownloadWorker::downloadProcess, this, &DownloadController::handleProcess);
         connect(worker, &DownloadWorker::workFinished, this, &DownloadController::chunkDownloadFinish);
+
         worker->doWork();
     }
 }
@@ -187,14 +198,15 @@ void DownloadController::startDownload(const QString &url)
  */
 void DownloadController::stopDownload()
 {
-    for(int i = 0; i < workers.size(); i++) {
+    for(int i = 0; i < workers.size(); i++)
+    {
         workers.at(i)->doStop();
         workers.at(i)->disconnect();
         workers.at(i)->deleteLater();
     }
     workers.clear();
-
     qDebug() << "文件下载路径:" << QFileInfo(file->fileName()).absoluteFilePath();
+
     file->flush();
     file->close();
     delete file;
@@ -205,7 +217,8 @@ void DownloadController::stopDownload()
 void DownloadController::handleProcess()
 {
     qint64 bytesReceived = 0;
-    for(int i = 0; i < workers.size(); i++) {
+    for(int i = 0; i < workers.size(); i++)
+    {
         bytesReceived += workers.at(i)->getReceivedPos();
     }
     qDebug() << QString("下载进度 %1-%2").arg(bytesReceived).arg(fileSize);
@@ -216,7 +229,8 @@ void DownloadController::chunkDownloadFinish()
 {
     finish++;
     qDebug() << QString("已下载了%1块,共%2块!!!").arg(finish).arg(threadNum);
-    if (finish == threadNum) {
+    if(finish == threadNum)
+    {
         stopDownload();
         emit downloadFinished();
     }
@@ -230,17 +244,21 @@ qint64 DownloadController::getFileSize(const QString& url)
     request.setUrl(QUrl(url));
     request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
     QNetworkReply *reply = requestManager.head(request);
-    connect(reply, static_cast<void(QNetworkReply::*)(QNetworkReply::NetworkError)>(&QNetworkReply::error),
-    [this, reply](QNetworkReply::NetworkError error){
-        if (error != QNetworkReply::NoError) {
+    connect(reply, static_cast<void(QNetworkReply::*)(QNetworkReply::NetworkError) > (&QNetworkReply::error),
+            [this, reply](QNetworkReply::NetworkError error)
+    {
+        if(error != QNetworkReply::NoError)
+        {
             emit errorOccur(reply->errorString());
         }
     });
     connect(reply, &QNetworkReply::finished, &event, &QEventLoop::quit);
     event.exec();
+
     qint64 fileSize = 0;
-    if (reply->rawHeader("Accept-Ranges") == QByteArrayLiteral("bytes")
-            && reply->hasRawHeader(QString("Content-Length").toLocal8Bit())) {
+    if(reply->rawHeader("Accept-Ranges") == QByteArrayLiteral("bytes")
+            && reply->hasRawHeader(QString("Content-Length").toLocal8Bit()))
+    {
         fileSize = reply->header(QNetworkRequest::ContentLengthHeader).toUInt();
     }
     qDebug() << "文件大小为:" << fileSize;
@@ -251,9 +269,9 @@ qint64 DownloadController::getFileSize(const QString& url)
 QString DownloadController::replaceDomain(const QString& url, const QString domain)
 {
     QRegularExpression regex(R"((?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9])");
-    if (regex.match(url).hasMatch()) {
+    if(regex.match(url).hasMatch())
+    {
         return QString(url).replace(regex.match(url).captured(), domain);
     }
     return url;
 }
-
diff --git a/src/downloadworker.h b/src/downloadworker.h
index 72f558b..5ea0aca 100644
--- a/src/downloadworker.h
+++ b/src/downloadworker.h
@@ -9,8 +9,10 @@
 class DownloadWorker : public QObject
 {
     Q_OBJECT
+
 public:
     explicit DownloadWorker(QObject *parent = nullptr);
+
     void setIdentifier(int identifier);
     void setParamter(const QString &url, QPair<qint64, qint64> range, QFile *flle);
     qint64 getReceivedPos();
@@ -22,12 +24,6 @@ public slots:
     void slotFinish();
     void handleProcess(qint64, qint64);
 
-signals:
-    void resultReady(int identifier, QByteArray data);
-    void testSignals();
-    void workFinished();
-    void downloadProcess();
-
 private:
     int identifier;
     QString url;
@@ -37,14 +33,23 @@ private:
     QNetworkReply *reply;
     QNetworkAccessManager *mgr;
     QFile *file;
+
+signals:
+    void resultReady(int identifier, QByteArray data);
+    void testSignals();
+    void workFinished();
+    void downloadProcess();
+
 };
 
 class DownloadController : public QObject
 {
     Q_OBJECT
+
 public:
     explicit DownloadController(QObject *parent = nullptr);
     ~DownloadController();
+
     void setFilename(QString filename);
     void setThreadNum(int threadNum);
     void startDownload(const QString &url);
@@ -52,15 +57,6 @@ public:
     qint64 getFileSize(const QString& url);
     QString replaceDomain(const QString& url, const QString domain);
 
-public slots:    
-    void handleProcess();
-    void chunkDownloadFinish();
-
-signals:
-    void errorOccur(const QString& msg);
-    void downloadProcess(qint64, qint64);
-    void downloadFinished();
-
 private:
     int threadNum;
     QString filename;
@@ -70,6 +66,16 @@ private:
     QList<DownloadWorker*> workers;
     int finish = 0;
     QVector<QString> domains;
+
+public slots:
+    void handleProcess();
+    void chunkDownloadFinish();
+
+signals:
+    void errorOccur(const QString& msg);
+    void downloadProcess(qint64, qint64);
+    void downloadFinished();
+
 };
 
 #endif // FILEDOWNLOADWORKER_H
diff --git a/src/flowlayout.cpp b/src/flowlayout.cpp
index 9203da0..b60335c 100644
--- a/src/flowlayout.cpp
+++ b/src/flowlayout.cpp
@@ -117,14 +117,14 @@ QLayoutItem *FlowLayout::takeAt(int index)
     if (index >= 0 && index < itemList.size())
         return itemList.takeAt(index);
     else
-        return 0;
+        return nullptr;
 }
 //! [5]
 
 //! [6]
 Qt::Orientations FlowLayout::expandingDirections() const
 {
-    return 0;
+    return nullptr;
 }
 //! [6]
 
@@ -215,7 +215,7 @@ int FlowLayout::smartSpacing(QStyle::PixelMetric pm) const
         return -1;
     } else if (parent->isWidgetType()) {
         QWidget *pw = static_cast<QWidget *>(parent);
-        return pw->style()->pixelMetric(pm, 0, pw);
+        return pw->style()->pixelMetric(pm, nullptr, pw);
     } else {
         return static_cast<QLayout *>(parent)->spacing();
     }
diff --git a/src/flowlayout.h b/src/flowlayout.h
index 920f4e6..8aa4603 100644
--- a/src/flowlayout.h
+++ b/src/flowlayout.h
@@ -60,7 +60,7 @@ class FlowLayout : public QLayout
 public:
     explicit FlowLayout(QWidget *parent, int margin = -1, int hSpacing = -1, int vSpacing = -1);
     explicit FlowLayout(int margin = -1, int hSpacing = -1, int vSpacing = -1);
-    ~FlowLayout();
+    ~FlowLayout() override;
 
     void addItem(QLayoutItem *item) override;
     int horizontalSpacing() const;
@@ -85,4 +85,4 @@ private:
 };
 //! [0]
 
-#endif // FLOWLAYOUT_H
\ No newline at end of file
+#endif // FLOWLAYOUT_H
diff --git a/src/image_show.cpp b/src/image_show.cpp
index 4dcc773..54ebf70 100644
--- a/src/image_show.cpp
+++ b/src/image_show.cpp
@@ -1,17 +1,13 @@
 #include "image_show.h"
 
-#include <QScreen>  // Qt5 不再建议使用 QDesktopWidget
 #include <QHBoxLayout>
-#include <QPainter>
+#include <QScreen>  // Qt5 不再建议使用 QDesktopWidget
+#include <QGuiApplication>
 
-#include <DDialog>
-#include <DBlurEffectWidget>
-#include <DWidgetUtil>
-#include <DApplication>
-
-DWIDGET_USE_NAMESPACE
-
-image_show::image_show(QWidget *parent) : QWidget(parent)
+image_show::image_show(QWidget *parent) :
+    QWidget(parent),
+    m_dialog(new big_image),
+    m_label(new QLabel)
 {
     QHBoxLayout *layout = new QHBoxLayout;
     layout->addWidget(m_label);
@@ -23,13 +19,12 @@ void image_show::setImage(QPixmap image)
 {
     QImage screen0;
     screen0 = image.toImage();
-    // QPainter painter(&screen0);
     QImage re_screen1;
     QImage re_screen0 = screen0.scaled(QSize(400, 300), Qt::KeepAspectRatio, Qt::SmoothTransformation);
 
     // 获取主屏幕尺寸
-    desktop_w = DApplication::primaryScreen()->geometry().width();
-    desktop_h = DApplication::primaryScreen()->geometry().height();
+    desktop_w = QGuiApplication::primaryScreen()->geometry().width();
+    desktop_h = QGuiApplication::primaryScreen()->geometry().height();
 
     if(screen0.width() > (desktop_w - 20) || screen0.height() > (desktop_h - 20))
     {
@@ -53,5 +48,4 @@ void image_show::mousePressEvent(QMouseEvent *)
     m_dialog->setFixedSize(desktop_w, desktop_h);
 
     m_dialog->move(0,0);
-    // moveToCenter(m_dialog);
 }
diff --git a/src/image_show.h b/src/image_show.h
index 8854068..a851dd7 100644
--- a/src/image_show.h
+++ b/src/image_show.h
@@ -3,30 +3,30 @@
 
 #include <QWidget>
 #include <QMouseEvent>
-#include <QLabel>
-#include <QPixmap>
-#include <DDialog>
-#include <DBlurEffectWidget>
-#include <big_image.h>
-DWIDGET_USE_NAMESPACE
+
+#include "big_image.h"
+
 class image_show : public QWidget
 {
     Q_OBJECT
+
 public:
     explicit image_show(QWidget *parent = nullptr);
 
-    void setImage(QPixmap);
     int desktop_w;
     int desktop_h;
-private:
-    QLabel *m_label=new QLabel;
-    QPixmap m_image;
-    QLabel image;
-    big_image *m_dialog=new big_image;
-    void mousePressEvent(QMouseEvent *event);
-signals:
 
-public slots:
+    void setImage(QPixmap);
+
+protected:
+    void mousePressEvent(QMouseEvent *event) override;
+
+private:
+    big_image *m_dialog;
+    QLabel *m_label;
+    QLabel image;
+    QPixmap m_image;
+
 };
 
 #endif // IMAGE_SHOW_H
diff --git a/src/progressload.cpp b/src/progressload.cpp
index 3e07fb3..c335ce1 100644
--- a/src/progressload.cpp
+++ b/src/progressload.cpp
@@ -1,37 +1,42 @@
 #include "progressload.h"
 
-ProgressLoad::ProgressLoad(QWidget *parent) : QWidget(parent)
+ProgressLoad::ProgressLoad(QWidget *parent) :
+    QWidget(parent),
+    m_progess(new QWidget(this)),
+    timer(new QTimer),
+    value(0)
 {
-    m_progess=new QWidget(this);
     m_progess->move(0,0);
     m_progess->show();
-    timer=new QTimer;
-    value=0;
+
     timer->setInterval(10);
     timer->start();
-    connect(timer,&QTimer::timeout,[=](){
-        m_progess->setFixedWidth(width()/100*value);
+    connect(timer, &QTimer::timeout, [=]()
+    {
+        m_progess->setFixedWidth(width() / 100 * value);
         m_progess->setFixedHeight(height());
     });
 }
 
 void ProgressLoad::setValue(int v)
 {
-    value=v;
-    m_progess->setFixedWidth(width()/100*value);
+    value = v;
+    m_progess->setFixedWidth(width() / 100 * value);
 }
 
 void ProgressLoad::setTheme(bool dark, QColor color)
 {
-    if(dark){
-        plt.setColor(QPalette::Background,QColor(28,28,28));
-        setAutoFillBackground(true);
-        setPalette(plt);
-
-    }else {
-        plt.setColor(QPalette::Background,QColor(255,255,255));
+    if(dark)
+    {
+        plt.setColor(QPalette::Background, QColor(28,28,28));
         setAutoFillBackground(true);
         setPalette(plt);
     }
-    m_progess->setStyleSheet("background-color:"+color.name());
+    else
+    {
+        plt.setColor(QPalette::Background, QColor(255,255,255));
+        setAutoFillBackground(true);
+        setPalette(plt);
+    }
+    m_progess->setStyleSheet("background-color: " + color.name() + ";");
 }
diff --git a/src/progressload.h b/src/progressload.h
index ffa3c7e..630766a 100644
--- a/src/progressload.h
+++ b/src/progressload.h
@@ -4,21 +4,23 @@
 #include <QWidget>
 #include <QTimer>
 #include <QPalette>
+
 class ProgressLoad : public QWidget
 {
     Q_OBJECT
+
 public:
     explicit ProgressLoad(QWidget *parent = nullptr);
+
     void setValue(int v);
     void setTheme(bool dark,QColor color);
-signals:
 
-public slots:
 private:
     QWidget *m_progess;
-    int value;
     QTimer *timer;
+    int value;
     QPalette plt;
+
 };
 
 #endif // PROGRESSLOAD_H
diff --git a/src/widget.cpp b/src/widget.cpp
index 55dd9eb..290f5a9 100644
--- a/src/widget.cpp
+++ b/src/widget.cpp
@@ -65,6 +65,24 @@ Widget::Widget(DBlurEffectWidget *parent) :
     connect(ui->menu_other, &QPushButton::clicked, this, [=](){Widget::chooseLeftMenu(12);});
     connect(ui->menu_download, &QPushButton::clicked, this, [=](){Widget::chooseLeftMenu(13);});
 
+    connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, [=](DGuiApplicationHelper::ColorType themeType)
+    {
+        // 获取系统活动色
+        QColor main_color;
+        main_color = DGuiApplicationHelper::instance()->applicationPalette().highlight().color();
+
+        if(themeType == DGuiApplicationHelper::DarkType)
+        {
+            qDebug() << "Dark";
+            setTheme(true, main_color);
+        }
+        else
+        {
+            qDebug() << "Light";
+            setTheme(false, main_color);
+        }
+    });
+
     connect(&appinfoLoadThread, SIGNAL(requestResetUi()), this, SLOT(sltAppinfoResetUi()), Qt::ConnectionType::BlockingQueuedConnection);
     connect(&appinfoLoadThread, &SpkAppInfoLoaderThread::requestSetTags, this, &Widget::sltAppinfoTags, Qt::ConnectionType::BlockingQueuedConnection);
     connect(&appinfoLoadThread, &SpkAppInfoLoaderThread::requestSetAppInformation, this, &Widget::sltAppinfoDetails, Qt::ConnectionType::BlockingQueuedConnection);
@@ -85,24 +103,6 @@ Widget::Widget(DBlurEffectWidget *parent) :
         this->setFocus();
     });
 
-    connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, [=](DGuiApplicationHelper::ColorType themeType)
-    {
-        // 获取系统活动色
-        QColor main_color;
-        main_color = DGuiApplicationHelper::instance()->applicationPalette().highlight().color();
-
-        if(themeType == DGuiApplicationHelper::DarkType)
-        {
-            qDebug() << "Dark";
-            setTheme(true, main_color);
-        }
-        else
-        {
-            qDebug() << "Light";
-            setTheme(false, main_color);
-        }
-    });
-
     // 计算显示下载速度
     download_speed.setInterval(1000);
     download_speed.start();
@@ -236,6 +236,16 @@ void Widget::initUI()
     main->addWidget(spinner);
     ui->applist_scrollAreaWidget->setLayout(main);
     spinner->setFixedSize(80, 80);
+
+    // 初始化主题颜色
+    if(DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::DarkType)
+    {
+        themeIsDark = true;
+    }
+    else
+    {
+        themeIsDark = false;
+    }
 }
 
 void Widget::initConfig()
@@ -296,17 +306,17 @@ void Widget::initConfig()
     // ui->webView->page()->settings()->setAttribute(QWebSettings::JavascriptEnabled,true);
     ui->webfoot->hide();
 
-    //初始化首页
+    // 初始化首页
     // ui->webEngineView->setUrl(menuUrl[0]);
     chooseLeftMenu(0);
 
-    //给下载列表赋值到数组,方便调用
+    // 给下载列表赋值到数组,方便调用
     for(int i = 0; i < LIST_MAX; i++)
     {
         download_list[i].num = i;
     }
 
-    // 初始化apt源显示
+    // 初始化 apt 源显示
     QFile aptserver("/etc/apt/sources.list.d/sparkstore.list");
     aptserver.open(QIODevice::ReadOnly);
     if(aptserver.isOpen())
@@ -543,17 +553,6 @@ void Widget::chooseLeftMenu(int index)
 
     updateUI();
 
-    /*
-    if(QLocale::system().name() == "zh_CN")
-    {
-        left_list[index]->setStyleSheet("color: #FFFFFF; background-color: " + main_color.name() + "; border-radius: 8; border: 0px;");
-    }
-    else
-    {
-        left_list[index]->setStyleSheet("color: #FFFFFF; background-color: " + main_color.name() + "; border-radius: 8; border: 0px; text-align: left; padding-left: 15px;");
-    }
-    */
-
     if(index <= 12)
     {
         if(themeIsDark)
@@ -810,7 +809,7 @@ void Widget::sltAppinfoResetUi()
     ui->tag_dwine5->hide();
     ui->tag_a2d->hide();
 
-    // 重置UI状态
+    // 重置 UI 状态
     ui->pushButton_uninstall->hide();
     ui->pushButton_website->setEnabled(false);
     ui->pushButton->setEnabled(false);
@@ -919,7 +918,7 @@ void Widget::sltAppinfoScreenshot(QPixmap *picture, int index)
 
 void Widget::sltAppinfoFinish()
 {
-    ui->label_show->setText("");
+    ui->label_show->clear();
     ui->label_show->hide();
 }
 
@@ -1090,7 +1089,7 @@ void Widget::on_pushButton_updateApt_clicked()
                 system(("chmod +x " + tmpPath + "/update.sh").c_str());
 
                 QProcess runupdate;
-                runupdate.start(QString::fromStdString("pkexec " + tmpPath + "/update.sh"), QStringList());
+                runupdate.start(QString::fromStdString("pkexec " + tmpPath + "/update.sh"));
                 runupdate.waitForFinished();
                 QString error = runupdate.readAllStandardError();
 
@@ -1132,7 +1131,7 @@ void Widget::on_pushButton_uninstall_clicked()
         ui->pushButton_uninstall->setEnabled(false);
 
         QProcess uninstall;
-        uninstall.start("pkexec apt purge -y " + pkgName.toLower(), QStringList());
+        uninstall.start("pkexec apt purge -y " + pkgName.toLower());
         uninstall.waitForFinished();
 
         ui->pushButton_download->setEnabled(true);
diff --git a/src/widget.h b/src/widget.h
index 8b0152b..42d8c3d 100644
--- a/src/widget.h
+++ b/src/widget.h
@@ -54,9 +54,9 @@ public:
 
     void startRequest(QUrl url, QString fileName);
     void searchApp(QString);
-    int nowDownload=0;
-    int allDownload=0;
-    int isdownload=false;
+    int nowDownload = 0;
+    int allDownload = 0;
+    int isdownload = false;
     void opensetting(); //打开设置页面
     void openUrl(QUrl);
     void setTheme(bool,QColor);
@@ -133,15 +133,15 @@ private:
     QPushButton * left_list[15];
     QUrl menuUrl[13];
     ProgressLoad *m_loadweb;
-    QLabel *m_loaderror=new QLabel;
+    QLabel *m_loaderror = new QLabel;
     QString serverUrl;
-    bool configCanSave=false;
-    bool isBusy=false;
-    int nowMenu=0; //定位当前菜单
-    int prePage=0; //定位前一个页面
-    long download_size=0;
-    long size1=0;
-    long size2=0;
+    bool configCanSave = false;
+    bool isBusy = false;
+    int nowMenu = 0;    // 定位当前菜单
+    int prePage = 0;    // 定位前一个页面
+    long download_size = 0;
+    long size1 = 0;
+    long size2 = 0;
     QPixmap screen[5];
     QFuture<void> load;
     QFutureWatcher<void> watchScreenshotLoad;
diff --git a/src/workerthreads.cpp b/src/workerthreads.cpp
index 5241363..35299f7 100644
--- a/src/workerthreads.cpp
+++ b/src/workerthreads.cpp
@@ -1,9 +1,10 @@
+#include "workerthreads.h"
 
 #include <QProcess>
 #include <QDir>
 #include <QFile>
 #include <QJsonDocument>
-#include "workerthreads.h"
+
 #include "widget.h"
 #include "HttpClient.h"
 
@@ -14,112 +15,136 @@ void SpkAppInfoLoaderThread::run()
     httpClient = new AeaQt::HttpClient;
 
     httpClient->get(targetUrl.toString())
-        .header("content-type", "application/json")
-        .onResponse([this](QByteArray json_array) {
-            qDebug() << "请求应用信息 " << json_array;
-            QString urladdress, deatils, more, packagename, appweb;
-            bool isInstalled;
+            .header("content-type", "application/json")
+            .onResponse([this](QByteArray json_array)
+    {
+        qDebug() << "请求应用信息 " << json_array;
+        QString urladdress, deatils, more, packagename, appweb;
+        bool isInstalled;
 
-            // 将路径转化为相应源的下载路径
-            urladdress = targetUrl.toString().left(targetUrl.toString().length()-8);
-            QStringList downloadurl=urladdress.split("/");
+        // 将路径转化为相应源的下载路径
+        urladdress = targetUrl.toString().left(targetUrl.toString().length() - 8);
+        QStringList downloadurl = urladdress.split("/");
 
-            QString deburl = serverUrl;
-            deburl = deburl.left(urladdress.length()-1);
-            urladdress = "https://img.jerrywang.top/"; // 使用图片专用服务器请保留这行,删除后将使用源服务器
-            urladdress = urladdress.left(urladdress.length()-1);
+        QString deburl = serverUrl;
+        deburl = deburl.left(urladdress.length() - 1);
+        urladdress = "https://img.jerrywang.top/";  // 使用图片专用服务器请保留这行,删除后将使用源服务器
+        urladdress = urladdress.left(urladdress.length() - 1);
 
-            for (int i=3;i<downloadurl.size();i++) {
-                urladdress+="/"+downloadurl[i];
-                deburl+="/"+downloadurl[i];
-            }
+        for(int i = 3; i < downloadurl.size(); i++)
+        {
+            urladdress += "/" + downloadurl[i];
+            deburl += "/" + downloadurl[i];
+        }
 
-            // 路径转化完成
-            QJsonObject json= QJsonDocument::fromJson(json_array).object();
-            QString appName = json["Name"].toString();
-            QUrl fileUrl = deburl + json["Filename"].toString();
+        // 路径转化完成
+        QJsonObject json = QJsonDocument::fromJson(json_array).object();
+        QString appName = json["Name"].toString();
+        QUrl fileUrl = deburl + json["Filename"].toString();
 
-            // 软件信息加载
-            QString details;
-            details = tr("PkgName: ") + json["Pkgname"].toString()+"\n";
-            details += tr("Version: ") + json["Version"].toString()+"\n";
-            if(json["Author"].toString() != "" && json["Author"].toString() != " "){
-                details += tr("Author: ") + json["Author"].toString() + "\n";
-            }
+        // 软件信息加载
+        QString details;
+        details = tr("PkgName: ") + json["Pkgname"].toString() + "\n";
+        details += tr("Version: ") + json["Version"].toString() + "\n";
+        if(!json["Author"].toString().trimmed().isEmpty())
+        {
+            details += tr("Author: ") + json["Author"].toString() + "\n";
+        }
 
-            if(json["Website"].toString() != "" && json["Website"].toString() != " "){
-                details += tr("Official Site: ") + json["Website"].toString() + "\n";
-                //ui->pushButton_website->show(); move to setinfo slot
-                appweb=json["Website"].toString();
-            }
-            details+=tr("Contributor: ")+json["Contributor"].toString()+"\n";
-            details+=tr("Update Time: ")+json["Update"].toString()+"\n";
-            details+=tr("Installed Size: ")+json["Size"].toString()+"\n";
-            more = json["More"].toString();
+        if(!json["Website"].toString().trimmed().isEmpty())
+        {
+            details += tr("Official Site: ") + json["Website"].toString() + "\n";
+            // ui->pushButton_website->show();  // move to setinfo slot
+            appweb = json["Website"].toString();
+        }
+        details += tr("Contributor: ") + json["Contributor"].toString() + "\n";
+        details += tr("Update Time: ") + json["Update"].toString() + "\n";
+        details += tr("Installed Size: ") + json["Size"].toString() + "\n";
+        more = json["More"].toString();
 
-            QProcess isInstall;
-            packagename = json["Pkgname"].toString();
-            isInstall.start("dpkg -s "+json["Pkgname"].toString());
-            isInstall.waitForFinished();
-            int error=QString::fromStdString(isInstall.readAllStandardError().toStdString()).length();
-            if(error==0)
-                isInstalled = true;
-            else
-                isInstalled = false;
+        QProcess isInstall;
+        packagename = json["Pkgname"].toString();
+        isInstall.start("dpkg -s " + json["Pkgname"].toString());
+        isInstall.waitForFinished();
+        int error = QString::fromStdString(isInstall.readAllStandardError().toStdString()).length();
+        if(error == 0)
+        {
+            isInstalled = true;
+        }
+        else
+        {
+            isInstalled = false;
+        }
 
-            emit requestSetAppInformation(&appName, &details, &more, &appweb, &packagename, &fileUrl, isInstalled);
+        emit requestSetAppInformation(&appName, &details, &more, &appweb, &packagename, &fileUrl, isInstalled);
 
-            //tag加载
-            QString tags=json["Tags"].toString();
-            QStringList tagList=tags.split(";");
-            emit requestSetTags(&tagList);
+        // tag 加载
+        QString tags = json["Tags"].toString();
+        QStringList tagList = tags.split(";");
+        emit requestSetTags(&tagList);
 
-            // 图标加载
-            httpClient->get(urladdress+"icon.png")
-                .onResponse([this](QByteArray imgData){
-                    QPixmap appicon;
-                    appicon.loadFromData(imgData);
-                    emit finishedIconLoad(&appicon);
-                }) 
-                .onError([this](QString errorStr) {
-                    Widget::sendNotification(tr("Failed to load application icon."));
-                })
-                .block()
-                .timeout(5 * 100)
-                .exec(); 
-
-
-            // 截图展示加载
-            QPixmap screenshotCache[5];
-            for (int i = 0; i < 5; i++) {
-                httpClient->get(urladdress+"screen_"+QString::number(i+1)+".png")
-                    .onResponse([this, i, &screenshotCache](QByteArray imgData){
-                        bool s = screenshotCache[i].loadFromData(imgData);
-                        if(s){
-                            emit finishedScreenshotLoad(&screenshotCache[i], i);
-                        }else{
-                            emit finishedScreenshotLoad(nullptr, i);
-                        }
-                    }) 
-                    .onError([this](QString errorStr) {
-                        qDebug() << "截图下载失败";
-//                        Widget::sendNotification(tr("Failed to load application screenshot."));
-                    })
-                    .block()
-                    .timeout(4 * 100)
-                    .exec(); 
-            }
-            emit finishAllLoading();
-
-            httpClient->deleteLater();
+        // 图标加载
+        httpClient->get(urladdress+"icon.png")
+                .onResponse([this](QByteArray imgData)
+        {
+            QPixmap appicon;
+            appicon.loadFromData(imgData);
+            emit finishedIconLoad(&appicon);
         })
-        .onError([](QString errorStr) {
-            Widget::sendNotification(tr("Failed to download app info. Please check internet connection."));
+        .onError([this](QString errorStr)
+        {
+            Q_UNUSED(this)
+            Q_UNUSED(errorStr)
+
+            Widget::sendNotification(tr("Failed to load application icon."));
         })
-        .timeout(5 * 100)
         .block()
-        .exec(); 
+                .timeout(5 * 100)
+                .exec();
 
+
+        // 截图展示加载
+        QPixmap screenshotCache[5];
+        for(int i = 0; i < 5; i++)
+        {
+            httpClient->get(urladdress + "screen_" + QString::number(i + 1) + ".png")
+                    .onResponse([this, i, &screenshotCache](QByteArray imgData)
+            {
+                bool s = screenshotCache[i].loadFromData(imgData);
+                if(s)
+                {
+                    emit finishedScreenshotLoad(&screenshotCache[i], i);
+                }
+                else
+                {
+                    emit finishedScreenshotLoad(nullptr, i);
+                }
+            })
+                    .onError([this](QString errorStr)
+            {
+                Q_UNUSED(this)
+                Q_UNUSED(errorStr)
+
+                qDebug() << "截图下载失败";
+                // Widget::sendNotification(tr("Failed to load application screenshot."));
+            })
+            .block()
+                    .timeout(4 * 100)
+                    .exec();
+        }
+        emit finishAllLoading();
+
+        httpClient->deleteLater();
+    })
+    .onError([](QString errorStr)
+    {
+        Q_UNUSED(errorStr)
+
+        Widget::sendNotification(tr("Failed to download app info. Please check internet connection."));
+    })
+    .timeout(5 * 100)
+            .block()
+            .exec();
 }
 
 
@@ -135,8 +160,9 @@ void SpkAppInfoLoaderThread::setServer(const QString &server)
 
 void SpkAppInfoLoaderThread::downloadFinished(int exitcode, QProcess::ExitStatus status)
 {
-    Q_UNUSED(exitcode);
-    Q_UNUSED(status);
+    Q_UNUSED(exitcode)
+    Q_UNUSED(status)
+
     qDebug() << "Finish one download";
     finishedDownload = true;
 }
@@ -146,7 +172,10 @@ int SpkAppInfoLoaderThread::waitDownload(QProcess& downloader)
     while(!downloader.waitForFinished(100))
     {
         if(downloader.state() == QProcess::NotRunning)
+        {
             return -1;
+        }
+
         if(this->isInterruptionRequested())
         {
             downloader.terminate();
diff --git a/src/workerthreads.h b/src/workerthreads.h
index dc3535f..d66d748 100644
--- a/src/workerthreads.h
+++ b/src/workerthreads.h
@@ -6,21 +6,35 @@
 #include <QUrl>
 #include <QProcess>
 
-
 namespace AeaQt {
-    class HttpClient;
+class HttpClient;
 }
 
 class SpkAppInfoLoaderThread Q_DECL_FINAL : public QThread
 {
     Q_OBJECT
+
 public:
-    //explicit SpkAppInfoLoaderThread() = default;
+    // explicit SpkAppInfoLoaderThread() = default;
+
+protected:
     void run() Q_DECL_OVERRIDE;
+
+private:
+    QUrl targetUrl;
+    QString serverUrl;
+    bool finishedDownload = false;
+    int downloaderRetval = 0;
+
+    AeaQt::HttpClient *httpClient;
+
+    int waitDownload(QProcess& downloader);
+
 public slots:
     void setUrl(const QUrl &url);
     void setServer(const QString &server);
     void downloadFinished(int exitcode, QProcess::ExitStatus status);
+
 signals:
     void requestResetUi();
     void requestSetTags(QStringList *tagList);
@@ -28,16 +42,9 @@ signals:
                                   QString *website, QString *packageName,
                                   QUrl *fileUrl, bool isInstalled);
     void finishedIconLoad(QPixmap *icon);
-    void finishedScreenshotLoad(QPixmap *icon, int index); // 该信号必须以BlockingQueued方式连接
-    void finishAllLoading(); // 该信号必须以BlockingQueued方式连接
-private:
-    int waitDownload(QProcess& downloader);
-    QUrl targetUrl;
-    QString serverUrl;
-    bool finishedDownload = false;
-    int downloaderRetval = 0;
+    void finishedScreenshotLoad(QPixmap *icon, int index);  // 该信号必须以 BlockingQueued 方式连接
+    void finishAllLoading();                                // 该信号必须以 BlockingQueued 方式连接
 
-    AeaQt::HttpClient *httpClient;
 };
 
 #endif // WORKERTHREADS_H