mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-07 06:57:28 -06:00
Initial commit for the DL
This commit is contained in:
parent
e19d5545bc
commit
d972c505d0
38 changed files with 3512 additions and 0 deletions
71
plugins/DigitalLibrary/src/DigitalFactoryProjectModel.py
Normal file
71
plugins/DigitalLibrary/src/DigitalFactoryProjectModel.py
Normal file
|
@ -0,0 +1,71 @@
|
|||
# Copyright (c) 2021 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
from typing import List, Optional
|
||||
|
||||
from PyQt5.QtCore import Qt, pyqtSignal
|
||||
|
||||
from UM.Logger import Logger
|
||||
from UM.Qt.ListModel import ListModel
|
||||
from .DigitalFactoryProjectResponse import DigitalFactoryProjectResponse
|
||||
|
||||
PROJECT_UPDATED_AT_DATETIME_FORMAT = "%d-%m-%Y"
|
||||
|
||||
|
||||
class DigitalFactoryProjectModel(ListModel):
|
||||
DisplayNameRole = Qt.UserRole + 1
|
||||
LibraryProjectIdRole = Qt.UserRole + 2
|
||||
DescriptionRole = Qt.UserRole + 3
|
||||
ThumbnailUrlRole = Qt.UserRole + 5
|
||||
UsernameRole = Qt.UserRole + 6
|
||||
LastUpdatedRole = Qt.UserRole + 7
|
||||
|
||||
dfProjectModelChanged = pyqtSignal()
|
||||
|
||||
def __init__(self, parent = None):
|
||||
super().__init__(parent)
|
||||
self.addRoleName(self.DisplayNameRole, "displayName")
|
||||
self.addRoleName(self.LibraryProjectIdRole, "libraryProjectId")
|
||||
self.addRoleName(self.DescriptionRole, "description")
|
||||
self.addRoleName(self.ThumbnailUrlRole, "thumbnailUrl")
|
||||
self.addRoleName(self.UsernameRole, "username")
|
||||
self.addRoleName(self.LastUpdatedRole, "lastUpdated")
|
||||
self._projects = [] # type: List[DigitalFactoryProjectResponse]
|
||||
|
||||
def setProjects(self, df_projects: List[DigitalFactoryProjectResponse]) -> None:
|
||||
if self._projects == df_projects:
|
||||
return
|
||||
self._items.clear()
|
||||
self._projects = df_projects
|
||||
# self.sortProjectsBy("display_name")
|
||||
self._update(df_projects)
|
||||
|
||||
def extendProjects(self, df_projects: List[DigitalFactoryProjectResponse]) -> None:
|
||||
if not df_projects:
|
||||
return
|
||||
self._projects.extend(df_projects)
|
||||
# self.sortProjectsBy("display_name")
|
||||
self._update(df_projects)
|
||||
|
||||
def sortProjectsBy(self, sort_by: Optional[str]):
|
||||
if sort_by:
|
||||
try:
|
||||
self._projects.sort(key = lambda p: getattr(p, sort_by))
|
||||
except AttributeError:
|
||||
Logger.log("e", "The projects cannot be sorted by '{}'. No such attribute exists.".format(sort_by))
|
||||
|
||||
def clearProjects(self) -> None:
|
||||
self.clear()
|
||||
self._projects.clear()
|
||||
self.dfProjectModelChanged.emit()
|
||||
|
||||
def _update(self, df_projects: List[DigitalFactoryProjectResponse]) -> None:
|
||||
for project in df_projects:
|
||||
self.appendItem({
|
||||
"displayName" : project.display_name,
|
||||
"libraryProjectId" : project.library_project_id,
|
||||
"description": project.description,
|
||||
"thumbnailUrl": project.thumbnail_url,
|
||||
"username": project.username,
|
||||
"lastUpdated": project.last_updated.strftime(PROJECT_UPDATED_AT_DATETIME_FORMAT) if project.last_updated else "",
|
||||
})
|
||||
self.dfProjectModelChanged.emit()
|
Loading…
Add table
Add a link
Reference in a new issue