Add support for rendering provider icon in sidebar

This commit is contained in:
2022-08-30 01:57:01 -04:00
parent e7bedd4048
commit 57750046f5
3 changed files with 40 additions and 3 deletions
+33
View File
@@ -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()
+1 -1
View File
@@ -17,7 +17,7 @@ Rectangle {
id: sidebarElements
model: providers
SidebarElement {
name: modelData.name
provider: modelData
selected: (index == selectedElement) ? true : false
}
}
+6 -2
View File
@@ -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
}