Add support for rendering provider icon in sidebar
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -17,7 +17,7 @@ Rectangle {
|
||||
id: sidebarElements
|
||||
model: providers
|
||||
SidebarElement {
|
||||
name: modelData.name
|
||||
provider: modelData
|
||||
selected: (index == selectedElement) ? true : false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user