diff --git a/plugins/Marketplace/RemotePackageList.py b/plugins/Marketplace/RemotePackageList.py index 156e7bbf0f..e7df498fbf 100644 --- a/plugins/Marketplace/RemotePackageList.py +++ b/plugins/Marketplace/RemotePackageList.py @@ -32,8 +32,10 @@ class RemotePackageList(PackageList): self._scope = JsonDecoratorScope(UltimakerCloudScope(CuraApplication.getInstance())) self._package_type_filter = "" - self._search_string = "" + self._requested_search_string = "" + self._current_search_string = "" self._request_url = self._initialRequestUrl() + self.isLoadingChanged.connect(self._onLoadingChanged) self.isLoadingChanged.emit() def __del__(self) -> None: @@ -79,10 +81,8 @@ class RemotePackageList(PackageList): self.packageTypeFilterChanged.emit() def setSearchString(self, new_search: str) -> None: - if new_search != self._search_string: - self._search_string = new_search - self.reset() - self.searchStringChanged.emit() + self._requested_search_string = new_search + self._onLoadingChanged() @pyqtProperty(str, fset = setPackageTypeFilter, notify = packageTypeFilterChanged) def packageTypeFilter(self) -> str: @@ -95,11 +95,18 @@ class RemotePackageList(PackageList): @pyqtProperty(str, fset = setSearchString, notify = searchStringChanged) def searchString(self) -> str: """ - Get the string the user is currently searching for within the packages, or an empty string if no extra search - filter has to be applied. Does not override package-type filter! + Get the string the user is currently searching for (as in: the list is updating) within the packages, + or an empty string if no extra search filter has to be applied. Does not override package-type filter! :return: String the user is searching for. Empty denotes 'no search filter'. """ - return self._search_string + return self._current_search_string + + def _onLoadingChanged(self) -> None: + if self._requested_search_string != self._current_search_string and not self._is_loading: + self._current_search_string = self._requested_search_string + self.reset() + self.updatePackages() + self.searchStringChanged.emit() def _initialRequestUrl(self) -> str: """ @@ -109,8 +116,8 @@ class RemotePackageList(PackageList): request_url = f"{Marketplace.PACKAGES_URL}?limit={self.ITEMS_PER_PAGE}" if self._package_type_filter != "": request_url += f"&package_type={self._package_type_filter}" - if self._search_string != "": - request_url += f"&search={self._search_string}" + if self._current_search_string != "": + request_url += f"&search={self._current_search_string}" return request_url def _parseResponse(self, reply: "QNetworkReply") -> None: