mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-07 23:17:32 -06:00
Implement filter on PackageList
The filter affects the URL. So we can't just start a request in the init. We need to request once all of the properties have been set. We also can't start the request when the filter changes, because there will be more filters and we don't want to start multiple requests. It needs to be manual. Contributes to issue CURA-8557.
This commit is contained in:
parent
4191f98440
commit
cbd1b8fbf7
4 changed files with 36 additions and 3 deletions
|
@ -40,12 +40,12 @@ class PackageList(ListModel):
|
|||
|
||||
self._is_loading = True
|
||||
self._scope = JsonDecoratorScope(UltimakerCloudScope(CuraApplication.getInstance()))
|
||||
self._request_url = f"{Marketplace.PACKAGES_URL}?limit={self.ITEMS_PER_PAGE}"
|
||||
self._error_message = ""
|
||||
|
||||
self.addRoleName(self.PackageRole, "package")
|
||||
self._package_type_filter = ""
|
||||
self._request_url = self._initialRequestUrl()
|
||||
|
||||
self.request()
|
||||
self.addRoleName(self.PackageRole, "package")
|
||||
|
||||
@pyqtSlot()
|
||||
def request(self) -> None:
|
||||
|
@ -65,6 +65,10 @@ class PackageList(ListModel):
|
|||
error_callback = self._onError
|
||||
)
|
||||
|
||||
def reset(self) -> None:
|
||||
self.clear()
|
||||
self._request_url = self._initialRequestUrl()
|
||||
|
||||
isLoadingChanged = pyqtSignal()
|
||||
|
||||
def setIsLoading(self, is_loading: bool) -> None:
|
||||
|
@ -91,6 +95,22 @@ class PackageList(ListModel):
|
|||
"""
|
||||
return self._request_url != ""
|
||||
|
||||
packageTypeFilterChanged = pyqtSignal()
|
||||
|
||||
def setPackageTypeFilter(self, new_filter: str) -> None:
|
||||
if new_filter != self._package_type_filter:
|
||||
self._package_type_filter = new_filter
|
||||
self.reset()
|
||||
self.packageTypeFilterChanged.emit()
|
||||
|
||||
@pyqtProperty(str, notify = packageTypeFilterChanged, fset = setPackageTypeFilter)
|
||||
def packageTypeFilter(self) -> str:
|
||||
"""
|
||||
Get the package type this package list is filtering on, like ``plugin`` or ``material``.
|
||||
:return: The package type this list is filtering on.
|
||||
"""
|
||||
return self._package_type_filter
|
||||
|
||||
def setErrorMessage(self, error_message: str) -> None:
|
||||
if self._error_message != error_message:
|
||||
self._error_message = error_message
|
||||
|
@ -108,6 +128,15 @@ class PackageList(ListModel):
|
|||
"""
|
||||
return self._error_message
|
||||
|
||||
def _initialRequestUrl(self) -> str:
|
||||
"""
|
||||
Get the URL to request the first paginated page with.
|
||||
:return: A URL to request.
|
||||
"""
|
||||
if self._package_type_filter != "":
|
||||
return f"{Marketplace.PACKAGES_URL}?package_type={self._package_type_filter}&limit={self.ITEMS_PER_PAGE}"
|
||||
return f"{Marketplace.PACKAGES_URL}?limit={self.ITEMS_PER_PAGE}"
|
||||
|
||||
def _parseResponse(self, reply: "QNetworkReply") -> None:
|
||||
"""
|
||||
Parse the response from the package list API request.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue