mirror of
https://gitee.com/spark-store-project/spark-store
synced 2025-07-28 16:32: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];
|
||||
if (arg1.trimmed().startsWith("spk://"))
|
||||
{
|
||||
w.openUrl(QUrl(argv[1]));
|
||||
w.openUrl(arg1);
|
||||
}
|
||||
}
|
||||
w.show();
|
||||
|
@ -200,11 +200,18 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
QString searchtext = searchEdit->text();
|
||||
if (!searchtext.isEmpty()) {
|
||||
if (searchtext.startsWith("spk://")) {
|
||||
openUrl(QUrl(searchtext));
|
||||
openUrl(searchtext);
|
||||
searchEdit->clearEdit();
|
||||
} else {
|
||||
ui->applistpage_1->getSearchList(searchtext);
|
||||
switchPage(AppPageSearchlist);
|
||||
if (searchtext == "%")
|
||||
{
|
||||
qWarning() << "keyword '%' matches too many results, which will cause QtWebEngine crash.";
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->applistpage_1->getSearchList(searchtext);
|
||||
switchPage(AppPageSearchlist);
|
||||
}
|
||||
}
|
||||
}
|
||||
this->setFocus(); });
|
||||
@ -213,11 +220,11 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
{ downloadButton->setProgress(i); });
|
||||
// 列表点击事件
|
||||
connect(ui->applistpage, &AppListPage::clicked, this, [=](QUrl spk)
|
||||
{ openUrl(spk); });
|
||||
{ openUrl(spk.toString()); });
|
||||
connect(ui->applistpage_1, &AppListPage::clicked, this, [=](QUrl spk)
|
||||
{ openUrl(spk); });
|
||||
{ openUrl(spk.toString()); });
|
||||
connect(ui->settingspage, &SettingsPage::openUrl, this, [=](QUrl spk)
|
||||
{ openUrl(spk); });
|
||||
{ openUrl(spk.toString()); });
|
||||
emit DGuiApplicationHelper::instance()->themeTypeChanged(DGuiApplicationHelper::instance()->themeType());
|
||||
|
||||
connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::newProcessInstance, this, &MainWindow::onNewProcessInstance);
|
||||
@ -246,7 +253,7 @@ void MainWindow::onGetUrl(const QString &url)
|
||||
{
|
||||
if (url.trimmed().startsWith("spk://"))
|
||||
{
|
||||
openUrl(QUrl(url));
|
||||
openUrl(url);
|
||||
}
|
||||
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);
|
||||
}
|
||||
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->deleteLater(); });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ public:
|
||||
explicit MainWindow(QWidget *parent = nullptr);
|
||||
~MainWindow();
|
||||
|
||||
void openUrl(QUrl);
|
||||
void openUrl(const QString &url);
|
||||
|
||||
private:
|
||||
void initDbus();
|
||||
|
@ -56,7 +56,7 @@ void AppListPage::getAppList(QString type)
|
||||
delete api;
|
||||
}
|
||||
|
||||
void AppListPage::getSearchList(QString keyword)
|
||||
void AppListPage::getSearchList(const QString &keyword)
|
||||
{
|
||||
isSearch = true;
|
||||
nowType = keyword;
|
||||
@ -71,7 +71,7 @@ void AppListPage::getSearchList(QString keyword)
|
||||
{
|
||||
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);
|
||||
delete api;
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ class AppListPage : public QWidget
|
||||
|
||||
public:
|
||||
void setTheme(bool dark);
|
||||
void getSearchList(QString keyword);
|
||||
void getSearchList(const QString &keyword);
|
||||
void getAppList(QString type);
|
||||
explicit AppListPage(QWidget *parent = nullptr);
|
||||
~AppListPage();
|
||||
|
Loading…
x
Reference in New Issue
Block a user