summaryrefslogtreecommitdiff
path: root/kodereviewer/models/pull_request.py
diff options
context:
space:
mode:
authorMatias Linares <matias.linares@comprandoengrupo.net>2024-09-22 15:37:36 -0300
committerMatias Linares <matias.linares@comprandoengrupo.net>2024-09-22 15:37:36 -0300
commitc651ae6d7a11c77a607543a1afae863b20b6d174 (patch)
tree812d3b8fdb1b6d32b8046f0d55f882ed6db991ff /kodereviewer/models/pull_request.py
parent504d29accac51c537d5dcd42b129deb6f7463457 (diff)
downloadkodereviewer-c651ae6d7a11c77a607543a1afae863b20b6d174.tar.gz
Pull request description and comments working
Diffstat (limited to 'kodereviewer/models/pull_request.py')
-rw-r--r--kodereviewer/models/pull_request.py75
1 files changed, 75 insertions, 0 deletions
diff --git a/kodereviewer/models/pull_request.py b/kodereviewer/models/pull_request.py
new file mode 100644
index 0000000..7d08efa
--- /dev/null
+++ b/kodereviewer/models/pull_request.py
@@ -0,0 +1,75 @@
+import json
+from os import path
+from typing import Any, Optional
+
+from PySide6.QtCore import QAbstractListModel, QByteArray, QModelIndex, QObject, QPersistentModelIndex, QStandardPaths, QUrl, Qt, Signal, Slot, Property
+from PySide6.QtQml import QmlElement
+
+from kodereviewer.project import Project
+from kodereviewer.data import PullRequest
+
+QML_IMPORT_NAME = "org.deprecated.kodereviewer"
+QML_IMPORT_MAJOR_VERSION = 1
+
+@QmlElement
+class PullRequestModel(QAbstractListModel):
+
+ _project: Optional[Project]
+
+ NumberRole = Qt.ItemDataRole.UserRole + 1
+ TitleRole = NumberRole + 1
+
+ def __init__(self):
+ super().__init__()
+
+ def data(self,
+ index: QModelIndex | QPersistentModelIndex,
+ role: int = Qt.ItemDataRole.DisplayRole) -> object:
+ if self._project is None:
+ return None
+
+ pull_request = self._project.pullRequests[index.row()]
+ if role == self.NumberRole:
+ return pull_request.number
+ if role == self.TitleRole:
+ return pull_request.title
+ if role == Qt.ItemDataRole.DisplayRole:
+ return f'{pull_request.number} - {pull_request.title}'
+ return None
+
+ def rowCount(self, parent: QModelIndex | QPersistentModelIndex = QModelIndex()) -> int:
+ if self._project is not None:
+ return len(self._project.pullRequests)
+ return 0
+
+ def roleNames(self) -> dict[int, QByteArray]:
+ return {
+ self.NumberRole: QByteArray(b"number"),
+ self.TitleRole: QByteArray(b"title"),
+ }
+
+ def get_project(self) -> Optional[Project]:
+ return self._project
+
+ def set_project(self, project: Optional[Project])-> None:
+ if project is None:
+ return
+
+ self._project = project
+ assert self._project is not None
+
+ self._project.pullRequestsChanged.connect(self._reset_model)
+
+ project = Property(Project, fget=get_project, fset=set_project)
+
+ @Slot(int, result=PullRequest)
+ def get(self, index: int) -> Optional[PullRequest]:
+ if self._project is not None:
+ return self._project.pullRequests[index]
+ return None
+
+
+ def _reset_model(self) -> None:
+ print("Reseting pull request model")
+ self.beginResetModel()
+ self.endResetModel()