From 65736cb5ffb786a3ad15435d2c084646b399de2d Mon Sep 17 00:00:00 2001 From: Elias Steurer Date: Sun, 24 Apr 2022 10:02:50 +0200 Subject: [PATCH] Fix workshop search state when returning 0 items --- .../qml/SteamWorkshopStartPage.qml | 41 ++++++++++++++++--- ScreenPlayWorkshop/src/steamworkshop.cpp | 8 +++- ScreenPlayWorkshop/src/steamworkshop.h | 3 +- 3 files changed, 43 insertions(+), 9 deletions(-) diff --git a/ScreenPlayWorkshop/qml/SteamWorkshopStartPage.qml b/ScreenPlayWorkshop/qml/SteamWorkshopStartPage.qml index 2fc9e77a..2ce40451 100644 --- a/ScreenPlayWorkshop/qml/SteamWorkshopStartPage.qml +++ b/ScreenPlayWorkshop/qml/SteamWorkshopStartPage.qml @@ -16,6 +16,7 @@ Item { property Background background Component.onCompleted: { + root.state = "searching" searchConnection.target = root.steamWorkshop root.steamWorkshop.searchWorkshop(SteamEnums.K_EUGCQuery_RankedByTrend) } @@ -26,7 +27,8 @@ Item { } MouseArea { - enabled: gridView.count === 0 + id: rootMouseArea + enabled: false z: enabled ? 10 : 0 cursorShape: enabled ? Qt.WaitCursor : Qt.ArrowCursor acceptedButtons: Qt.NoButton @@ -38,7 +40,7 @@ Item { Connections { id: searchConnection ignoreUnknownSignals: true // This is needed for some reason... - function onWorkshopSearchCompleted() { + function onWorkshopBannerCompleted() { bannerTxt.text = root.steamWorkshop.workshopListModel.getBannerText( ) background.backgroundImage = root.steamWorkshop.workshopListModel.getBannerUrl() @@ -46,6 +48,10 @@ Item { bannerTxtUnderline.numberSubscriber = root.steamWorkshop.workshopListModel.getBannerAmountSubscriber() } + + function onWorkshopSearchCompleted(itemCount) { + root.state = "" + } } PopupSteamWorkshopAgreement { @@ -314,8 +320,15 @@ Item { id: tiSearch placeholderTextColor: Material.secondaryTextColor placeholderText: qsTr("Search for Wallpaper and Widgets...") - onEditingFinished: root.steamWorkshop.searchWorkshopByText( - tiSearch.text) + onEditingFinished: { + root.state = "searching" + if (tiSearch.text === "") + return root.steamWorkshop.searchWorkshop( + SteamEnums.K_EUGCQuery_RankedByTrend) + + root.steamWorkshop.searchWorkshopByText( + tiSearch.text) + } anchors { top: parent.top right: parent.right @@ -328,8 +341,11 @@ Item { ToolButton { id: tb icon.source: "qrc:/ScreenPlayWorkshop/assets/icons/icon_search.svg" - onClicked: root.steamWorkshop.searchWorkshopByText( - tiSearch.text) + onClicked: { + root.state = "searching" + root.steamWorkshop.searchWorkshopByText( + tiSearch.text) + } icon.width: 20 icon.height: 20 anchors { @@ -409,6 +425,7 @@ Item { "text": qsTr("Total Unique Subscriptions") }] onActivated: { + root.state = "searching" root.steamWorkshop.searchWorkshop( cbQuerySort.currentValue) } @@ -459,6 +476,7 @@ Item { text: qsTr("Back") enabled: root.steamWorkshop.workshopListModel.currentPage > 1 onClicked: { + root.state = "searching" root.steamWorkshop.workshopListModel.setCurrentPage( root.steamWorkshop.workshopListModel.currentPage - 1) root.steamWorkshop.searchWorkshop( @@ -483,6 +501,7 @@ Item { enabled: root.steamWorkshop.workshopListModel.currentPage <= root.steamWorkshop.workshopListModel.pages - 1 onClicked: { + root.state = "searching" root.steamWorkshop.workshopListModel.setCurrentPage( root.steamWorkshop.workshopListModel.currentPage + 1) root.steamWorkshop.searchWorkshop( @@ -519,4 +538,14 @@ Item { sidebar.close() } } + + states: [ + State { + name: "searching" + PropertyChanges { + target: rootMouseArea + enabled: true + } + } + ] } diff --git a/ScreenPlayWorkshop/src/steamworkshop.cpp b/ScreenPlayWorkshop/src/steamworkshop.cpp index efd5e4c5..cc8d8f52 100644 --- a/ScreenPlayWorkshop/src/steamworkshop.cpp +++ b/ScreenPlayWorkshop/src/steamworkshop.cpp @@ -246,7 +246,9 @@ bool SteamWorkshop::queryWorkshopItemFromHandle(SteamWorkshopListModel* listMode if (totalResults <= 0 || results <= 0) { qWarning() << "Invalid result count. Aborting! totalResults:" << totalResults << "results " << results; - return {}; + SteamUGC()->ReleaseQueryUGCRequest(pCallback->m_handle); + emit workshopSearchCompleted(0); + return false; } const float maxResultsPerPage = 50; @@ -283,7 +285,7 @@ bool SteamWorkshop::queryWorkshopItemFromHandle(SteamWorkshopListModel* listMode // Do not change the background image on every page if (i == 0 && listModel->currentPage() == 1) { - emit workshopSearchCompleted(); + emit workshopBannerCompleted(); } // const int keyValueTagsCount = SteamUGC()->GetQueryUGCNumKeyValueTags(pCallback->m_handle, i); @@ -301,6 +303,8 @@ bool SteamWorkshop::queryWorkshopItemFromHandle(SteamWorkshopListModel* listMode } SteamUGC()->ReleaseQueryUGCRequest(pCallback->m_handle); + + emit workshopSearchCompleted(results); return true; } diff --git a/ScreenPlayWorkshop/src/steamworkshop.h b/ScreenPlayWorkshop/src/steamworkshop.h index 0b2ac41e..17951c6e 100644 --- a/ScreenPlayWorkshop/src/steamworkshop.h +++ b/ScreenPlayWorkshop/src/steamworkshop.h @@ -158,7 +158,8 @@ public slots: } signals: - void workshopSearchCompleted(); + void workshopSearchCompleted(const int itemCount); + void workshopBannerCompleted(); void workshopItemCreatedSuccessful( bool userNeedsToAcceptWorkshopLegalAgreement, int eResult,