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

@ -10,11 +10,36 @@ web页面部分正在开发当中详情请见[web仓库](https://gitee.com/de
```
http://dcstore.shenmo.tech/
http://store.shenmo.tech/
http://store.moshengren.xyz/
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/`中。

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

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

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

@ -108,10 +108,17 @@ void Widget::initUI()
//初始化web加载动画
QHBoxLayout *m_weblayout=new QHBoxLayout;
m_weblayout->addWidget(m_loadweb);
m_weblayout->addWidget(m_loaderror);
m_loadweb->hide();
m_loaderror->hide();
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->label_show->hide();
}
void Widget::initConfig()
@ -131,7 +138,6 @@ void Widget::initConfig()
//读取服务器URL并初始化菜单项的链接
QString serverUrl;
QSettings readConfig(QDir::homePath()+"/.config/spark-store/config.ini",QSettings::IniFormat);
if(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()
{
m_loadweb->setValue(0);
m_loadweb->show();
m_loaderror->hide();
ui->label_show->hide();
QUrl arg1=ui->webView->page()->mainFrame()->requestedUrl().toString();
//判断,如果末尾是/就直接访问如果是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.waitForFinished();
QPixmap appicon;
qDebug()<<appicon.load("icon.png");
QPixmap appicon(QString::fromUtf8(TMP_PATH)+"/icon.png");
ui->label_appicon->setPixmap(appicon);
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.waitForFinished();
if(screen[i].load("screen_"+QString::number(i)+".png")){
qDebug()<<"加载第"+QString::number(i)+"张图片";
label_screen[i]->setImage(screen[i]);
label_screen[i]->show();
switch(i){
switch(i){ //故意为之,为了清除多余截图
case 0:
label_screen[1]->hide();
case 1:
@ -342,7 +351,6 @@ void Widget::on_pushButton_download_clicked()
item->setFlags(item->flags() & ~Qt::ItemIsEnabled & ~Qt::ItemIsSelectable);
ui->listWidget->setItemWidget(item,&download_list[allDownload-1]);
urList.append(url);
qDebug()<<"下载:"<<url;
download_list[allDownload-1].setName(appName);
download_list[allDownload-1].setFileName(fileName);
QPixmap icon;
@ -447,7 +455,6 @@ void Widget::chooseLeftMenu(int index)
left_menu_bg[index]->setStyleSheet("background-color:#0081FF;border-radius:8");
if(index<=12){
ui->webView->setUrl(menuUrl[index]);
qDebug()<<menuUrl[index];
ui->stackedWidget->setCurrentIndex(0);
}else if (index==13) {
ui->stackedWidget->setCurrentIndex(1);
@ -516,21 +523,11 @@ void Widget::on_pushButton_return_clicked()
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)
{
if(configCanSave){
ui->label_setting1->show();
QSettings *setConfig=new QSettings(QDir::homePath()+"/.config/spark-store/config.ini",QSettings::IniFormat);
qDebug()<<arg1;
setConfig->setValue("server/choose",arg1);
}
}
@ -578,12 +575,10 @@ void Widget::on_pushButton_updateApt_clicked()
QProcess runupdate;
runupdate.start("pkexec "+QString::fromUtf8(TMP_PATH)+"/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;
}
@ -594,7 +589,7 @@ void Widget::on_pushButton_updateApt_clicked()
ui->label_aptserver->setText("更新中发生错误请在终端使用apt update来查看错误原因");
}
}else {
qDebug()<<"更新源失败";
ui->label_aptserver->setText("服务器错误");
}
ui->pushButton_updateApt->setEnabled(true);
@ -677,6 +672,12 @@ void Widget::opensetting()
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()
{
QDesktopServices::openUrl(QUrl(appweb));
@ -685,5 +686,16 @@ void Widget::on_pushButton_website_clicked()
void Widget::on_webView_loadFinished(bool arg1)
{
m_loadweb->hide();
if(arg1){
m_loadweb->hide();
}else {
m_loadweb->hide();
m_loaderror->show();
}
}
void Widget::on_webView_loadProgress(int progress)
{
m_loadweb->setValue(progress);
}

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

@ -790,7 +790,7 @@
<number>0</number>
</property>
<property name="currentIndex">
<number>0</number>
<number>2</number>
</property>
<widget class="QWidget" name="page">
<layout class="QVBoxLayout" name="verticalLayout_4">
@ -1193,19 +1193,60 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<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>
<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>
<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>
<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>
<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>
</layout>
</widget>