from typing import Type import sys from urllib import parse from PyQt5.QtWidgets import QApplication from PyQt5.QtQml import qmlRegisterType, QQmlApplicationEngine # from PyQt5.QtQuick import QQuickView from PyQt5.QtCore import QObject, pyqtProperty, pyqtSlot # from PyQt5.QtCore import QObject, QUrl, pyqtProperty # from .qtmpv import MpvObject import requests class Show(QObject): def __init__(self, source, parent=None): super().__init__(parent) self._source = source @pyqtProperty("QString") def title(self) -> str: return self._source["title"] @pyqtProperty(int) def year(self) -> int: return self._source["year"] @pyqtProperty(int) def episodes(self) -> int: return self._source["episodes"] @pyqtProperty(int) def watched(self) -> int: return self._source["watched"] @pyqtProperty("QString") def poster(self) -> str: return self._source["poster"] def getUrl(base: str, path: str) -> dict: url: str = parse.urljoin(base, path) r: requests.Response = requests.get(url) return r.json() class Provider(QObject): def __init__(self, url: str, parent=None): super().__init__(parent) self.url: str = url describe: dict = getUrl(self.url, "describe") self._name: str = describe["name"] shows: dict = getUrl(self.url, "shows") self._shows: dict[int, Show] = {e["id"]: Show(e) for e in shows["data"]} recently_added: dict = getUrl(self.url, "recently_added") self._recently_added: list[int] = recently_added["data"] in_progress: dict = getUrl(self.url, "in_progress") self._in_progress: list[int] = in_progress["data"] @pyqtProperty("QString") def name(self) -> str: return self._name # @pyqtProperty("QObject") @pyqtSlot(int, result=QObject) def getShow(self, id) -> Show: return self._shows[id] @pyqtProperty(list) def recentlyAdded(self) -> list[int]: return self._recently_added @pyqtProperty(list) def inProgress(self) -> list[int]: return self._in_progress class DataSource: def __init__(self, providers=[]): self.providers: list[Provider] = [Provider(url) for url in providers] def DatabaseType(data_source) -> Type: class Database(QObject): def __init__(self, parent=None): super().__init__(parent) self.data_source: DataSource = data_source @pyqtProperty(list) def Providers(self) -> list[Provider]: return self.data_source.providers return Database def main(): app = QApplication(sys.argv) # data_source = DataSource(["Anime", "TV", "Movies", "Settings"]) data_source = DataSource( [ "http://127.0.0.1:8080/a/", "http://127.0.0.1:8080/b/", "http://127.0.0.1:8080/c/", ] ) qmlRegisterType(DatabaseType(data_source), "Ikinuki.Client", 1, 0, "Database") # qmlRegisterType(Provider, "Ikinuki.Client", 1, 0, "Provider") engine = QQmlApplicationEngine() engine.load("layouts/ikinuki-default.qml") win = QObject() win = engine.rootObjects()[0] win.show() sys.exit(app.exec_()) # # # # app = QApplication([]) # # qmlRegisterType(MpvObject, 'mpvtest', 1, 0, "MpvObject") # # window = QQmlApplicationEngine("layouts/mpv.qml") # window.run # # view = QQuickView() # url = QUrl("layouts/mpv.qml") # # import locale # # locale.setlocale(locale.LC_NUMERIC, 'C') # # view.setSource(url) # view.show() # app.exec_()