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.i18n import i18nCatalog
from UM.Logger import Logger
from UM.Qt.ListModel import ListModel
from UM.PluginRegistry import PluginRegistry
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
from PyQt5.QtCore import QUrl
from PyQt5.QtCore import QUrl, QObject, Qt, pyqtProperty, pyqtSignal
import json
i18n_catalog = i18nCatalog("cura")
class PluginBrowser(Extension):
def __init__(self):
class PluginBrowser(QObject, Extension):
def __init__(self, parent = None):
super().__init__()
self.addMenuItem(i18n_catalog.i18n("Browse plugins"), self.browsePlugins)
self._api_version = 1
@ -23,6 +25,9 @@ class PluginBrowser(Extension):
self._network_manager = None
self._plugins_metadata = []
self._plugins_model = None
pluginsMetadataChanged = pyqtSignal()
def browsePlugins(self):
self._createNetworkManager()
@ -34,6 +39,30 @@ class PluginBrowser(Extension):
self._plugin_list_request = QNetworkRequest(url)
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):
reply_url = reply.url().toString()
if reply.operation() == QNetworkAccessManager.GetOperation:
@ -41,6 +70,7 @@ class PluginBrowser(Extension):
try:
json_data = json.loads(bytes(reply.readAll()).decode("utf-8"))
self._plugins_metadata = json_data
self.pluginsMetadataChanged.emit()
except json.decoder.JSONDecodeError:
Logger.log("w", "Received an invalid print job state message: Not valid JSON.")
return