Auto-load next batch with searched-for text in Marketplace.

part of CURA-8559
This commit is contained in:
Remco Burema 2021-11-12 15:20:46 +01:00
parent 79f7724923
commit 44242dcd02
No known key found for this signature in database
GPG key ID: 215C49431D43F98C

View file

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