mirror of
https://gitee.com/spark-store-project/spark-store
synced 2025-08-22 12:12:20 +08:00
feat: ISSUE #I67K8Y 新增 spk://search/keyword 链接格式解析
支持打开该链接跳转搜索页面(禁止直接搜索 %,搜索结果过多会导致搜索页面 QtWebEngine 进程崩溃,无法继续搜索) Log: 支持链接跳转搜索结果页面;暂不支持直接跳转到应用详情页
This commit is contained in:
parent
1a89c2a1a6
commit
4b40e3caca
@ -136,7 +136,7 @@ int main(int argc, char *argv[])
|
|||||||
QString arg1 = argv[1];
|
QString arg1 = argv[1];
|
||||||
if (arg1.trimmed().startsWith("spk://"))
|
if (arg1.trimmed().startsWith("spk://"))
|
||||||
{
|
{
|
||||||
w.openUrl(QUrl(argv[1]));
|
w.openUrl(arg1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
w.show();
|
w.show();
|
||||||
|
@ -200,11 +200,18 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
QString searchtext = searchEdit->text();
|
QString searchtext = searchEdit->text();
|
||||||
if (!searchtext.isEmpty()) {
|
if (!searchtext.isEmpty()) {
|
||||||
if (searchtext.startsWith("spk://")) {
|
if (searchtext.startsWith("spk://")) {
|
||||||
openUrl(QUrl(searchtext));
|
openUrl(searchtext);
|
||||||
searchEdit->clearEdit();
|
searchEdit->clearEdit();
|
||||||
} else {
|
} else {
|
||||||
ui->applistpage_1->getSearchList(searchtext);
|
if (searchtext == "%")
|
||||||
switchPage(AppPageSearchlist);
|
{
|
||||||
|
qWarning() << "keyword '%' matches too many results, which will cause QtWebEngine crash.";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->applistpage_1->getSearchList(searchtext);
|
||||||
|
switchPage(AppPageSearchlist);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this->setFocus(); });
|
this->setFocus(); });
|
||||||
@ -213,11 +220,11 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
{ downloadButton->setProgress(i); });
|
{ downloadButton->setProgress(i); });
|
||||||
// 列表点击事件
|
// 列表点击事件
|
||||||
connect(ui->applistpage, &AppListPage::clicked, this, [=](QUrl spk)
|
connect(ui->applistpage, &AppListPage::clicked, this, [=](QUrl spk)
|
||||||
{ openUrl(spk); });
|
{ openUrl(spk.toString()); });
|
||||||
connect(ui->applistpage_1, &AppListPage::clicked, this, [=](QUrl spk)
|
connect(ui->applistpage_1, &AppListPage::clicked, this, [=](QUrl spk)
|
||||||
{ openUrl(spk); });
|
{ openUrl(spk.toString()); });
|
||||||
connect(ui->settingspage, &SettingsPage::openUrl, this, [=](QUrl spk)
|
connect(ui->settingspage, &SettingsPage::openUrl, this, [=](QUrl spk)
|
||||||
{ openUrl(spk); });
|
{ openUrl(spk.toString()); });
|
||||||
emit DGuiApplicationHelper::instance()->themeTypeChanged(DGuiApplicationHelper::instance()->themeType());
|
emit DGuiApplicationHelper::instance()->themeTypeChanged(DGuiApplicationHelper::instance()->themeType());
|
||||||
|
|
||||||
connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::newProcessInstance, this, &MainWindow::onNewProcessInstance);
|
connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::newProcessInstance, this, &MainWindow::onNewProcessInstance);
|
||||||
@ -246,7 +253,7 @@ void MainWindow::onGetUrl(const QString &url)
|
|||||||
{
|
{
|
||||||
if (url.trimmed().startsWith("spk://"))
|
if (url.trimmed().startsWith("spk://"))
|
||||||
{
|
{
|
||||||
openUrl(QUrl(url));
|
openUrl(url);
|
||||||
}
|
}
|
||||||
activateWindow();
|
activateWindow();
|
||||||
}
|
}
|
||||||
@ -261,16 +268,27 @@ void MainWindow::onNewProcessInstance(qint64 pid, const QStringList &arguments)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::openUrl(QUrl url)
|
void MainWindow::openUrl(const QString &url)
|
||||||
{
|
{
|
||||||
if (url.toString().startsWith("spk://"))
|
if (url.startsWith("spk://search/"))
|
||||||
{
|
{
|
||||||
ui->appintopage->openUrl(QUrl(url.toString().replace("+", "%2B")));
|
QString keyword = url.mid(13);
|
||||||
|
if (keyword == "%")
|
||||||
|
{
|
||||||
|
qWarning() << "keyword '%' is not valid, which will cause QtWebEngine crash.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ui->applistpage_1->getSearchList(keyword);
|
||||||
|
switchPage(AppPageSearchlist);
|
||||||
|
}
|
||||||
|
else if (url.startsWith("spk://"))
|
||||||
|
{
|
||||||
|
ui->appintopage->openUrl(QUrl::fromUserInput(url));
|
||||||
switchPage(AppPageAppdetail);
|
switchPage(AppPageAppdetail);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
QDesktopServices::openUrl(QUrl(url.toString().replace("+", "%2B")));
|
QDesktopServices::openUrl(QUrl::fromUserInput(url));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -355,5 +373,5 @@ void MainWindow::on_pushButton_14_clicked()
|
|||||||
upgradeP->waitForFinished(-1);
|
upgradeP->waitForFinished(-1);
|
||||||
upgradeP->deleteLater(); });
|
upgradeP->deleteLater(); });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ public:
|
|||||||
explicit MainWindow(QWidget *parent = nullptr);
|
explicit MainWindow(QWidget *parent = nullptr);
|
||||||
~MainWindow();
|
~MainWindow();
|
||||||
|
|
||||||
void openUrl(QUrl);
|
void openUrl(const QString &url);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void initDbus();
|
void initDbus();
|
||||||
|
@ -56,7 +56,7 @@ void AppListPage::getAppList(QString type)
|
|||||||
delete api;
|
delete api;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppListPage::getSearchList(QString keyword)
|
void AppListPage::getSearchList(const QString &keyword)
|
||||||
{
|
{
|
||||||
isSearch = true;
|
isSearch = true;
|
||||||
nowType = keyword;
|
nowType = keyword;
|
||||||
@ -71,7 +71,7 @@ void AppListPage::getSearchList(QString keyword)
|
|||||||
{
|
{
|
||||||
theme = "theme=light";
|
theme = "theme=light";
|
||||||
}
|
}
|
||||||
url = api->getServerUrl() + "store/#/flamescion/search?keywords=" + keyword + "&" + theme;
|
url = api->getServerUrl() + "store/#/flamescion/search?keywords=" + QUrl::toPercentEncoding(keyword) + "&" + theme;
|
||||||
ui->webEngineView->setUrl(url);
|
ui->webEngineView->setUrl(url);
|
||||||
delete api;
|
delete api;
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ class AppListPage : public QWidget
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
void setTheme(bool dark);
|
void setTheme(bool dark);
|
||||||
void getSearchList(QString keyword);
|
void getSearchList(const QString &keyword);
|
||||||
void getAppList(QString type);
|
void getAppList(QString type);
|
||||||
explicit AppListPage(QWidget *parent = nullptr);
|
explicit AppListPage(QWidget *parent = nullptr);
|
||||||
~AppListPage();
|
~AppListPage();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user