diff --git a/plugins/Marketplace/RemotePackageList.py b/plugins/Marketplace/RemotePackageList.py index 8fa75453c1..150d9901f1 100644 --- a/plugins/Marketplace/RemotePackageList.py +++ b/plugins/Marketplace/RemotePackageList.py @@ -32,6 +32,7 @@ class RemotePackageList(PackageList): self._scope = JsonDecoratorScope(UltimakerCloudScope(CuraApplication.getInstance())) self._package_type_filter = "" + self._search_string = "" self._request_url = self._initialRequestUrl() self.isLoadingChanged.emit() @@ -69,6 +70,7 @@ class RemotePackageList(PackageList): self._request_url = self._initialRequestUrl() packageTypeFilterChanged = pyqtSignal() + searchStringChanged = pyqtSignal() def setPackageTypeFilter(self, new_filter: str) -> None: if new_filter != self._package_type_filter: @@ -76,6 +78,12 @@ class RemotePackageList(PackageList): self.reset() 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() + @pyqtProperty(str, fset = setPackageTypeFilter, notify = packageTypeFilterChanged) def packageTypeFilter(self) -> str: """ @@ -84,14 +92,26 @@ class RemotePackageList(PackageList): """ return self._package_type_filter + @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! + :return: String the user is searching for. Empty denotes 'no search filter'. + """ + return self._search_string + def _initialRequestUrl(self) -> str: """ Get the URL to request the first paginated page with. :return: A URL to request. """ + request_url = f"{Marketplace.PACKAGES_URL}?limit={self.ITEMS_PER_PAGE}" 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}" + request_url += f"&package_type={self._package_type_filter}" + if self._search_string != "": + request_url += f"" # TODO + return request_url def _parseResponse(self, reply: "QNetworkReply") -> None: """ diff --git a/plugins/Marketplace/resources/qml/Marketplace.qml b/plugins/Marketplace/resources/qml/Marketplace.qml index 1422a0eece..e92ac44c1d 100644 --- a/plugins/Marketplace/resources/qml/Marketplace.qml +++ b/plugins/Marketplace/resources/qml/Marketplace.qml @@ -14,6 +14,8 @@ Window id: marketplaceDialog property variant catalog: UM.I18nCatalog { name: "cura" } + signal searchStringChanged(string new_search) + minimumWidth: UM.Theme.getSize("modal_window_minimum").width minimumHeight: UM.Theme.getSize("modal_window_minimum").height width: minimumWidth @@ -92,7 +94,7 @@ Window id: searchBar Layout.preferredHeight: parent.height Layout.fillWidth: true - //onTextEdited: // TODO! + onTextEdited: marketplaceDialog.searchStringChanged(text) } // Page selection. @@ -168,6 +170,11 @@ Window function onLoaded() { pageTitle.text = content.item.pageTitle + searchStringChanged.connect(onSearchStringChanged) + } + function onSearchStringChanged(new_search) + { + content.item.model.searchString = new_search } } }