This commit is contained in:
2020-07-26 11:32:48 +08:00
parent 82f49c4aa9
commit 8158159bf9
7 changed files with 148 additions and 49 deletions

View File

@@ -10,11 +10,36 @@ web页面部分正在开发当中详情请见[web仓库](https://gitee.com/de
``` ```
http://dcstore.shenmo.tech/ http://dcstore.shenmo.tech/
http://store.shenmo.tech/
http://store.moshengren.xyz/
http://store.jerrywang.top/ http://store.jerrywang.top/
``` ```
#### 参数
参数只有一个Url该url应当遵循这种格式`spk://<任意合法字符>/web分类/包名`
例如:
[spk://abcdefg/network/firefox-zh](spk://abcdefg/network/firefox-zh)
[spk://higklmn/network/firefox-zh](spk://higklmn/network/firefox-zh)
可选的web分类
| 分类名称 | web分类 |
| -------- | ------------- |
| 网络应用 | network |
| 社交沟通 | relations |
| 音乐欣赏 | MusicAndSound |
| 视频播放 | Videos |
| 图形图像 | Photos |
| 游戏娱乐 | Games |
| 办公学习 | Office |
| 阅读翻译 | Reading |
| 编程开发 | Programming |
| 系统工具 | Tools |
| 主题美化 | Themes |
| 其他应用 | Others |
#### 目录结构 #### 目录结构
安装软件过程中产生的包,图标,截图等被储存到`/tmp/deepin-community-store/`中。 安装软件过程中产生的包,图标,截图等被储存到`/tmp/deepin-community-store/`中。

View File

@@ -43,7 +43,11 @@ int main(int argc, char *argv[])
} }
w.show(); w.show();
// qDebug()<<argv[1];
QString arg1=argv[1];
if(arg1.left(6)=="spk://"){
w.openUrl(QUrl(argv[1]));
}
//让打开时界面显示在正中 //让打开时界面显示在正中
Dtk::Widget::moveToCenter(&w); Dtk::Widget::moveToCenter(&w);

View File

@@ -56,6 +56,7 @@ MainWindow::MainWindow(QWidget *parent)
}); });
} }
MainWindow::~MainWindow() MainWindow::~MainWindow()
@@ -63,3 +64,9 @@ MainWindow::~MainWindow()
} }
void MainWindow::openUrl(QUrl url)
{
w->openUrl(url);
}

View File

@@ -19,6 +19,8 @@ public:
~MainWindow(); ~MainWindow();
DSearchEdit *searchEdit=new DSearchEdit; DSearchEdit *searchEdit=new DSearchEdit;
DTitlebar *titlebar=new DTitlebar; DTitlebar *titlebar=new DTitlebar;
void openUrl(QUrl);
private: private:
Widget *w; Widget *w;

View File

@@ -108,10 +108,17 @@ void Widget::initUI()
//初始化web加载动画 //初始化web加载动画
QHBoxLayout *m_weblayout=new QHBoxLayout; QHBoxLayout *m_weblayout=new QHBoxLayout;
m_weblayout->addWidget(m_loadweb); m_weblayout->addWidget(m_loadweb);
m_weblayout->addWidget(m_loaderror);
m_loadweb->hide(); m_loadweb->hide();
m_loaderror->hide();
m_loadweb->start(); m_loadweb->start();
m_loadweb->setMaximumSize(60,60); m_loadweb->setMaximumSize(30,30);
m_loadweb->setTextVisible(false);
m_loaderror->setPixmap(QIcon::fromTheme("dialog-error").pixmap(60,60));
m_loaderror->setAlignment(Qt::AlignCenter);
ui->webView->setLayout(m_weblayout); ui->webView->setLayout(m_weblayout);
ui->label_show->hide();
} }
void Widget::initConfig() void Widget::initConfig()
@@ -131,7 +138,6 @@ void Widget::initConfig()
//读取服务器URL并初始化菜单项的链接 //读取服务器URL并初始化菜单项的链接
QString serverUrl;
QSettings readConfig(QDir::homePath()+"/.config/spark-store/config.ini",QSettings::IniFormat); QSettings readConfig(QDir::homePath()+"/.config/spark-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());
@@ -185,7 +191,12 @@ void Widget::initConfig()
void Widget::on_webView_loadStarted() void Widget::on_webView_loadStarted()
{ {
m_loadweb->setValue(0);
m_loadweb->show(); m_loadweb->show();
m_loaderror->hide();
ui->label_show->hide();
QUrl arg1=ui->webView->page()->mainFrame()->requestedUrl().toString(); QUrl arg1=ui->webView->page()->mainFrame()->requestedUrl().toString();
//判断,如果末尾是/就直接访问如果是app.json就打开详情页 //判断,如果末尾是/就直接访问如果是app.json就打开详情页
if(arg1.path().right(8)=="app.json"){ if(arg1.path().right(8)=="app.json"){
@@ -279,8 +290,7 @@ void Widget::loadappinfo(QUrl arg1)
//图标加载 //图标加载
get_json.start("wget -O icon.png "+urladdress+"icon.png"); get_json.start("wget -O icon.png "+urladdress+"icon.png");
get_json.waitForFinished(); get_json.waitForFinished();
QPixmap appicon; QPixmap appicon(QString::fromUtf8(TMP_PATH)+"/icon.png");
qDebug()<<appicon.load("icon.png");
ui->label_appicon->setPixmap(appicon); ui->label_appicon->setPixmap(appicon);
ui->pushButton_download->setEnabled(true); ui->pushButton_download->setEnabled(true);
//截图展示加载 //截图展示加载
@@ -299,10 +309,9 @@ void Widget::loadappinfo(QUrl arg1)
get_json.start("wget "+urladdress+"screen_"+QString::number(i)+".png"); get_json.start("wget "+urladdress+"screen_"+QString::number(i)+".png");
get_json.waitForFinished(); get_json.waitForFinished();
if(screen[i].load("screen_"+QString::number(i)+".png")){ if(screen[i].load("screen_"+QString::number(i)+".png")){
qDebug()<<"加载第"+QString::number(i)+"张图片";
label_screen[i]->setImage(screen[i]); label_screen[i]->setImage(screen[i]);
label_screen[i]->show(); label_screen[i]->show();
switch(i){ switch(i){ //故意为之,为了清除多余截图
case 0: case 0:
label_screen[1]->hide(); label_screen[1]->hide();
case 1: case 1:
@@ -342,7 +351,6 @@ void Widget::on_pushButton_download_clicked()
item->setFlags(item->flags() & ~Qt::ItemIsEnabled & ~Qt::ItemIsSelectable); item->setFlags(item->flags() & ~Qt::ItemIsEnabled & ~Qt::ItemIsSelectable);
ui->listWidget->setItemWidget(item,&download_list[allDownload-1]); ui->listWidget->setItemWidget(item,&download_list[allDownload-1]);
urList.append(url); urList.append(url);
qDebug()<<"下载:"<<url;
download_list[allDownload-1].setName(appName); download_list[allDownload-1].setName(appName);
download_list[allDownload-1].setFileName(fileName); download_list[allDownload-1].setFileName(fileName);
QPixmap icon; QPixmap icon;
@@ -447,7 +455,6 @@ void Widget::chooseLeftMenu(int index)
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]);
qDebug()<<menuUrl[index];
ui->stackedWidget->setCurrentIndex(0); ui->stackedWidget->setCurrentIndex(0);
}else if (index==13) { }else if (index==13) {
ui->stackedWidget->setCurrentIndex(1); ui->stackedWidget->setCurrentIndex(1);
@@ -516,21 +523,11 @@ void Widget::on_pushButton_return_clicked()
ui->stackedWidget->setCurrentIndex(0); ui->stackedWidget->setCurrentIndex(0);
} }
void Widget::on_webView_loadFinished()
{
if(ui->webView->page()->mainFrame()->requestedUrl().toString().right(5)!=".json"){
ui->label_show->setText("正在加载,请稍候");
ui->label_show->hide();
}
}
void Widget::on_comboBox_server_currentIndexChanged(const QString &arg1) void Widget::on_comboBox_server_currentIndexChanged(const QString &arg1)
{ {
if(configCanSave){ if(configCanSave){
ui->label_setting1->show(); ui->label_setting1->show();
QSettings *setConfig=new QSettings(QDir::homePath()+"/.config/spark-store/config.ini",QSettings::IniFormat); QSettings *setConfig=new QSettings(QDir::homePath()+"/.config/spark-store/config.ini",QSettings::IniFormat);
qDebug()<<arg1;
setConfig->setValue("server/choose",arg1); setConfig->setValue("server/choose",arg1);
} }
} }
@@ -578,12 +575,10 @@ void Widget::on_pushButton_updateApt_clicked()
QProcess runupdate; QProcess runupdate;
runupdate.start("pkexec "+QString::fromUtf8(TMP_PATH)+"/update.sh"); runupdate.start("pkexec "+QString::fromUtf8(TMP_PATH)+"/update.sh");
runupdate.waitForFinished(); runupdate.waitForFinished();
qDebug()<<runupdate.readAllStandardError();
QString error=QString::fromStdString(runupdate.readAllStandardError().toStdString()); QString error=QString::fromStdString(runupdate.readAllStandardError().toStdString());
QStringList everyError=error.split("\n"); QStringList everyError=error.split("\n");
bool haveError=false; bool haveError=false;
for (int i=0;i<everyError.size();i++) { for (int i=0;i<everyError.size();i++) {
qDebug()<<everyError[i].left(2);
if(everyError[i].left(2)=="E:"){ if(everyError[i].left(2)=="E:"){
haveError=true; haveError=true;
} }
@@ -594,7 +589,7 @@ void Widget::on_pushButton_updateApt_clicked()
ui->label_aptserver->setText("更新中发生错误请在终端使用apt update来查看错误原因"); ui->label_aptserver->setText("更新中发生错误请在终端使用apt update来查看错误原因");
} }
}else { }else {
qDebug()<<"更新源失败"; ui->label_aptserver->setText("服务器错误");
} }
ui->pushButton_updateApt->setEnabled(true); ui->pushButton_updateApt->setEnabled(true);
@@ -677,6 +672,12 @@ void Widget::opensetting()
ui->stackedWidget->setCurrentIndex(3); ui->stackedWidget->setCurrentIndex(3);
} }
void Widget::openUrl(QUrl u)
{
QString app=serverUrl + "store"+u.path()+"/app.json";
ui->webView->setUrl(app);
}
void Widget::on_pushButton_website_clicked() void Widget::on_pushButton_website_clicked()
{ {
QDesktopServices::openUrl(QUrl(appweb)); QDesktopServices::openUrl(QUrl(appweb));
@@ -685,5 +686,16 @@ void Widget::on_pushButton_website_clicked()
void Widget::on_webView_loadFinished(bool arg1) void Widget::on_webView_loadFinished(bool arg1)
{ {
if(arg1){
m_loadweb->hide(); m_loadweb->hide();
}else {
m_loadweb->hide();
m_loaderror->show();
}
}
void Widget::on_webView_loadProgress(int progress)
{
m_loadweb->setValue(progress);
} }

View File

@@ -15,7 +15,9 @@
#include <DSettings> #include <DSettings>
#include <DBlurEffectWidget> #include <DBlurEffectWidget>
#include <DSpinner> #include <DSpinner>
#define LIST_MAX 99 #include <DWaterProgress>
#include <QLabel>
#define LIST_MAX 99 //一次最多下载数量
#define TMP_PATH "/tmp/spark-store" #define TMP_PATH "/tmp/spark-store"
DWIDGET_USE_NAMESPACE DWIDGET_USE_NAMESPACE
@@ -30,20 +32,15 @@ class Widget : public QWidget
Q_OBJECT Q_OBJECT
public: public:
explicit Widget(QWidget *parent = 0); explicit Widget(QWidget *parent = nullptr);
~Widget(); ~Widget();
void startRequest(QUrl url); void startRequest(QUrl url);
void searchApp(QString); void searchApp(QString);
int nowDownload=0; int nowDownload=0;
int allDownload=0; int allDownload=0;
int isdownload=false; int isdownload=false;
void loadappinfo(QUrl); void opensetting(); //打开设置页面
void chooseLeftMenu(int index); void openUrl(QUrl);
quint64 dirFileSize(const QString &path);
QPixmap screen[5];
QFuture<void> load;
QTimer download_speed;
void opensetting();
private slots: private slots:
@@ -66,7 +63,6 @@ private slots:
void on_pushButton_download_clicked(); void on_pushButton_download_clicked();
void on_pushButton_return_clicked(); void on_pushButton_return_clicked();
void on_webView_loadStarted(); void on_webView_loadStarted();
void on_webView_loadFinished();
void on_menu_btn_theme_clicked(); void on_menu_btn_theme_clicked();
void on_comboBox_server_currentIndexChanged(const QString &arg1); void on_comboBox_server_currentIndexChanged(const QString &arg1);
void on_pushButton_updateServer_clicked(); void on_pushButton_updateServer_clicked();
@@ -74,14 +70,13 @@ private slots:
void on_pushButton_uninstall_clicked(); void on_pushButton_uninstall_clicked();
void on_pushButton_clear_clicked(); void on_pushButton_clear_clicked();
void on_pushButton_website_clicked(); void on_pushButton_website_clicked();
void on_webView_loadFinished(bool arg1); void on_webView_loadFinished(bool arg1);
void on_webView_loadProgress(int progress);
public: public:
void initUI();
void initConfig();
QUrl url; QUrl url;
bool isBusy=false;
downloadlist download_list[LIST_MAX]; downloadlist download_list[LIST_MAX];
Ui::Widget *ui; Ui::Widget *ui;
QNetworkAccessManager *manager; QNetworkAccessManager *manager;
@@ -92,17 +87,30 @@ public:
QString urladdress; QString urladdress;
QString pkgName; QString pkgName;
QString appweb; QString appweb;
private:
void initUI();
void initConfig();
void loadappinfo(QUrl);
void chooseLeftMenu(int index);
quint64 dirFileSize(const QString &path);
private:
QToolButton * left_list[15]; QToolButton * left_list[15];
QWidget * left_menu_bg[15]; QWidget * left_menu_bg[15];
QUrl menuUrl[13]; QUrl menuUrl[13];
DWaterProgress *m_loadweb=new DWaterProgress;
QLabel *m_loaderror=new QLabel;
QString serverUrl;
bool configCanSave=false; bool configCanSave=false;
int nowMenu=0; bool isBusy=false;
int nowMenu=0; //定位当前菜单
long download_size=0; long download_size=0;
long size1=0; long size1=0;
long size2=0; long size2=0;
Dtk::Core::DSettings *jsonConfig=new Dtk::Core::DSettings; QPixmap screen[5];
private: QFuture<void> load;
DSpinner *m_loadweb=new DSpinner; QTimer download_speed;
}; };

View File

@@ -790,7 +790,7 @@
<number>0</number> <number>0</number>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>2</number>
</property> </property>
<widget class="QWidget" name="page"> <widget class="QWidget" name="page">
<layout class="QVBoxLayout" name="verticalLayout_4"> <layout class="QVBoxLayout" name="verticalLayout_4">
@@ -1193,19 +1193,60 @@
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout_4"> <layout class="QHBoxLayout" name="horizontalLayout_4">
<item> <item>
<widget class="image_show" name="screen_0" native="true"/> <widget class="image_show" name="screen_0" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>400</width>
<height>16777215</height>
</size>
</property>
</widget>
</item> </item>
<item> <item>
<widget class="image_show" name="screen_1" native="true"/> <widget class="image_show" name="screen_1" native="true">
<property name="maximumSize">
<size>
<width>400</width>
<height>16777215</height>
</size>
</property>
</widget>
</item> </item>
<item> <item>
<widget class="image_show" name="screen_2" native="true"/> <widget class="image_show" name="screen_2" native="true">
<property name="maximumSize">
<size>
<width>400</width>
<height>16777215</height>
</size>
</property>
</widget>
</item> </item>
<item> <item>
<widget class="image_show" name="screen_3" native="true"/> <widget class="image_show" name="screen_3" native="true">
<property name="maximumSize">
<size>
<width>400</width>
<height>16777215</height>
</size>
</property>
</widget>
</item> </item>
<item> <item>
<widget class="image_show" name="screen_4" native="true"/> <widget class="image_show" name="screen_4" native="true">
<property name="maximumSize">
<size>
<width>400</width>
<height>16777215</height>
</size>
</property>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>