Files
htpc-client/ikinuki_client/__main__.py
T
restitux 94a69d383b Add Provider object and update the UI to use
This currently uses localhost:8080 hosted providers to facilitate
testing.
2022-08-19 12:46:20 -04:00

126 lines
3.0 KiB
Python

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_()