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, QUrl, pyqtProperty from .qtmpv import MpvObject import requests class Show(QObject): def __init__(self, name, parent=None): super().__init__(parent) self._name = name @pyqtProperty("QString") def name(self): return self._name 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, ip: str, port: int, parent=None): super().__init__(parent) self.url: str = f"http://{ip}:{port}" describe: dict = getUrl(self.url, "describe") self._name: str = describe["name"] shows: dict = getUrl(self.url, "shows") self._shows: dict[int, dict] = {e["id"]: 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") def getShow(self, id) -> dict: return self._shows[id] @pyqtProperty(list) def recentlyAdded(self) -> list[int]: return self._recently_added @pyqtProperty(list) def inProgress(self) -> list: return self._in_progress class DataSource: def __init__(self, providers=[]): self.providers = [Provider(ip, port) for (ip, port) in providers] def DatabaseType(data_source) -> Type: class Database(QObject): def __init__(self, parent=None): super().__init__(parent) self.data_source = data_source @pyqtProperty(list) def Providers(self): return self.data_source.providers return Database def main(): app = QApplication(sys.argv) # data_source = DataSource(["Anime", "TV", "Movies", "Settings"]) data_source = DataSource( [("127.0.0.1", "8080"), ("127.0.0.1", "8080"), ("127.0.0.1", "8080")] ) 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_()