diff --git a/ikinuki_client/__main__.py b/ikinuki_client/__main__.py index 42f2ff3..079f432 100644 --- a/ikinuki_client/__main__.py +++ b/ikinuki_client/__main__.py @@ -5,10 +5,13 @@ from urllib import parse from PyQt5.QtWidgets import QApplication from PyQt5.QtQml import qmlRegisterType, QQmlApplicationEngine +from PyQt5.QtQuick import QQuickImageProvider # from PyQt5.QtQuick import QQuickView from PyQt5.QtCore import QObject, pyqtProperty, pyqtSlot +from PyQt5.QtGui import QImage + # from PyQt5.QtCore import QObject, QUrl, pyqtProperty # from .qtmpv import MpvObject @@ -42,6 +45,23 @@ class Show(QObject): return self._source["poster"] +class ProviderImageProvider(QQuickImageProvider): + def __init__(self, icon_data): + self._icon_data = icon_data + + super(ProviderImageProvider, self).__init__(QQuickImageProvider.Image) + + def requestImage(self, p_str, size): + print(p_str) + print(size) + + img = QImage.fromData(self._icon_data.encode("utf-8")) + + # img = QImage(300, 300, QImage.Format_RGBA8888) + # img.fill(Qt.red) + return img, img.size() + + def getUrl(base: str, path: str) -> dict: url: str = parse.urljoin(base, path) r: requests.Response = requests.get(url) @@ -55,6 +75,9 @@ class Provider(QObject): describe: dict = getUrl(self.url, "describe") self._name: str = describe["name"] + self.logo_provider: ProviderImageProvider = ProviderImageProvider( + describe["icon"] + ) shows: dict = getUrl(self.url, "shows") self._shows: dict[int, Show] = {e["id"]: Show(e) for e in shows["data"]} @@ -69,6 +92,10 @@ class Provider(QObject): def name(self) -> str: return self._name + @pyqtProperty("QString") + def logo(self) -> str: + return f"image://{self._name}/logo" + # @pyqtProperty("QObject") @pyqtSlot(int, result=QObject) def getShow(self, id) -> Show: @@ -118,6 +145,12 @@ def main(): # qmlRegisterType(Provider, "Ikinuki.Client", 1, 0, "Provider") engine = QQmlApplicationEngine() + for provider in data_source.providers: + print(f"Registering provider with name {provider._name}") + engine.addImageProvider( + provider._name, + provider.logo_provider, + ) engine.load("layouts/ikinuki-default.qml") win = QObject() diff --git a/layouts/components/Sidebar.qml b/layouts/components/Sidebar.qml index 45e5947..c0fab3a 100644 --- a/layouts/components/Sidebar.qml +++ b/layouts/components/Sidebar.qml @@ -17,7 +17,7 @@ Rectangle { id: sidebarElements model: providers SidebarElement { - name: modelData.name + provider: modelData selected: (index == selectedElement) ? true : false } } diff --git a/layouts/components/SidebarElement.qml b/layouts/components/SidebarElement.qml index 4f08622..a77188c 100644 --- a/layouts/components/SidebarElement.qml +++ b/layouts/components/SidebarElement.qml @@ -1,7 +1,7 @@ import QtQuick 2.12 Item { - property string name + property var provider property bool selected: false width: parent.width * 0.9 @@ -19,9 +19,13 @@ Item { height: parent.height width: parent.width * 0.02 } + Image { + source: provider.logo + anchors.verticalCenter: parent.verticalCenter + } Text { font.pointSize: 15 - text: name + text: provider.name color: selected ? "black" : "white" anchors.verticalCenter: parent.verticalCenter }