mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-08 07:27:29 -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._is_loading = True
|
||||||
self._scope = JsonDecoratorScope(UltimakerCloudScope(CuraApplication.getInstance()))
|
self._scope = JsonDecoratorScope(UltimakerCloudScope(CuraApplication.getInstance()))
|
||||||
self._request_url = f"{Marketplace.PACKAGES_URL}?limit={self.ITEMS_PER_PAGE}"
|
|
||||||
self._error_message = ""
|
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()
|
@pyqtSlot()
|
||||||
def request(self) -> None:
|
def request(self) -> None:
|
||||||
|
@ -65,6 +65,10 @@ class PackageList(ListModel):
|
||||||
error_callback = self._onError
|
error_callback = self._onError
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def reset(self) -> None:
|
||||||
|
self.clear()
|
||||||
|
self._request_url = self._initialRequestUrl()
|
||||||
|
|
||||||
isLoadingChanged = pyqtSignal()
|
isLoadingChanged = pyqtSignal()
|
||||||
|
|
||||||
def setIsLoading(self, is_loading: bool) -> None:
|
def setIsLoading(self, is_loading: bool) -> None:
|
||||||
|
@ -91,6 +95,22 @@ class PackageList(ListModel):
|
||||||
"""
|
"""
|
||||||
return self._request_url != ""
|
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:
|
def setErrorMessage(self, error_message: str) -> None:
|
||||||
if self._error_message != error_message:
|
if self._error_message != error_message:
|
||||||
self._error_message = error_message
|
self._error_message = error_message
|
||||||
|
@ -108,6 +128,15 @@ class PackageList(ListModel):
|
||||||
"""
|
"""
|
||||||
return self._error_message
|
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:
|
def _parseResponse(self, reply: "QNetworkReply") -> None:
|
||||||
"""
|
"""
|
||||||
Parse the response from the package list API request.
|
Parse the response from the package list API request.
|
||||||
|
|
|
@ -7,5 +7,6 @@ Packages
|
||||||
{
|
{
|
||||||
model: Marketplace.PackageList
|
model: Marketplace.PackageList
|
||||||
{
|
{
|
||||||
|
packageTypeFilter: "material"
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -13,6 +13,8 @@ ScrollView
|
||||||
|
|
||||||
property alias model: pluginColumn.model
|
property alias model: pluginColumn.model
|
||||||
|
|
||||||
|
Component.onCompleted: model.request()
|
||||||
|
|
||||||
ListView
|
ListView
|
||||||
{
|
{
|
||||||
id: pluginColumn
|
id: pluginColumn
|
||||||
|
|
|
@ -7,5 +7,6 @@ Packages
|
||||||
{
|
{
|
||||||
model: Marketplace.PackageList
|
model: Marketplace.PackageList
|
||||||
{
|
{
|
||||||
|
packageTypeFilter: "plugin"
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue