mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-05-19 04:17:29 +08:00
Added model to PluginBrowser
We need the model to display items in the popup view. CURA-3856
This commit is contained in:
parent
b9241e8070
commit
8f1608bc3b
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user