mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-05-19 09:10:47 +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.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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user