Added model to PluginBrowser

We need the model to display items in the popup view.
CURA-3856
This commit is contained in:
Jaime van Kessel 2017-06-22 17:25:48 +02:00
parent b9241e8070
commit 8f1608bc3b

View File

@ -3,17 +3,19 @@
from UM.Extension import Extension from UM.Extension import Extension
from UM.i18n import i18nCatalog from UM.i18n import i18nCatalog
from UM.Logger import Logger from UM.Logger import Logger
from UM.Qt.ListModel import ListModel
from UM.PluginRegistry import PluginRegistry
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
from PyQt5.QtCore import QUrl from PyQt5.QtCore import QUrl, QObject, Qt, pyqtProperty, pyqtSignal
import json import json
i18n_catalog = i18nCatalog("cura") i18n_catalog = i18nCatalog("cura")
class PluginBrowser(Extension): class PluginBrowser(QObject, Extension):
def __init__(self): def __init__(self, parent = None):
super().__init__() super().__init__()
self.addMenuItem(i18n_catalog.i18n("Browse plugins"), self.browsePlugins) self.addMenuItem(i18n_catalog.i18n("Browse plugins"), self.browsePlugins)
self._api_version = 1 self._api_version = 1
@ -23,6 +25,9 @@ class PluginBrowser(Extension):
self._network_manager = None self._network_manager = None
self._plugins_metadata = [] self._plugins_metadata = []
self._plugins_model = None
pluginsMetadataChanged = pyqtSignal()
def browsePlugins(self): def browsePlugins(self):
self._createNetworkManager() self._createNetworkManager()
@ -34,6 +39,30 @@ class PluginBrowser(Extension):
self._plugin_list_request = QNetworkRequest(url) self._plugin_list_request = QNetworkRequest(url)
self._network_manager.get(self._plugin_list_request) self._network_manager.get(self._plugin_list_request)
@pyqtProperty(QObject, notify=pluginsMetadataChanged)
def pluginsModel(self):
if self._plugins_model is None:
self._plugins_model = ListModel()
self._plugins_model.addRoleName(Qt.UserRole + 1, "name")
self._plugins_model.addRoleName(Qt.UserRole + 2, "version")
self._plugins_model.addRoleName(Qt.UserRole + 3, "short_description")
self._plugins_model.addRoleName(Qt.UserRole + 4, "author")
self._plugins_model.addRoleName(Qt.UserRole + 5, "already_installed")
else:
self._plugins_model.clear()
items = []
plugin_registry = PluginRegistry.getInstance()
for metadata in self._plugins_metadata:
items.append({
"name": metadata["label"],
"version": metadata["version"],
"short_description": metadata["short_description"],
"author": metadata["author"],
"already_installed": plugin_registry.getMetaData(metadata["id"]) != {}
})
self._plugins_model.setItems(items)
return self._plugins_model
def _onRequestFinished(self, reply): def _onRequestFinished(self, reply):
reply_url = reply.url().toString() reply_url = reply.url().toString()
if reply.operation() == QNetworkAccessManager.GetOperation: if reply.operation() == QNetworkAccessManager.GetOperation:
@ -41,6 +70,7 @@ class PluginBrowser(Extension):
try: try:
json_data = json.loads(bytes(reply.readAll()).decode("utf-8")) json_data = json.loads(bytes(reply.readAll()).decode("utf-8"))
self._plugins_metadata = json_data self._plugins_metadata = json_data
self.pluginsMetadataChanged.emit()
except json.decoder.JSONDecodeError: except json.decoder.JSONDecodeError:
Logger.log("w", "Received an invalid print job state message: Not valid JSON.") Logger.log("w", "Received an invalid print job state message: Not valid JSON.")
return return