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.QtWidgets import QApplication
|
||||||
from PyQt5.QtQml import qmlRegisterType, QQmlApplicationEngine
|
from PyQt5.QtQml import qmlRegisterType, QQmlApplicationEngine
|
||||||
|
from PyQt5.QtQuick import QQuickImageProvider
|
||||||
|
|
||||||
# from PyQt5.QtQuick import QQuickView
|
# from PyQt5.QtQuick import QQuickView
|
||||||
from PyQt5.QtCore import QObject, pyqtProperty, pyqtSlot
|
from PyQt5.QtCore import QObject, pyqtProperty, pyqtSlot
|
||||||
|
|
||||||
|
from PyQt5.QtGui import QImage
|
||||||
|
|
||||||
# from PyQt5.QtCore import QObject, QUrl, pyqtProperty
|
# from PyQt5.QtCore import QObject, QUrl, pyqtProperty
|
||||||
|
|
||||||
# from .qtmpv import MpvObject
|
# from .qtmpv import MpvObject
|
||||||
@@ -42,6 +45,23 @@ class Show(QObject):
|
|||||||
return self._source["poster"]
|
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:
|
def getUrl(base: str, path: str) -> dict:
|
||||||
url: str = parse.urljoin(base, path)
|
url: str = parse.urljoin(base, path)
|
||||||
r: requests.Response = requests.get(url)
|
r: requests.Response = requests.get(url)
|
||||||
@@ -55,6 +75,9 @@ class Provider(QObject):
|
|||||||
|
|
||||||
describe: dict = getUrl(self.url, "describe")
|
describe: dict = getUrl(self.url, "describe")
|
||||||
self._name: str = describe["name"]
|
self._name: str = describe["name"]
|
||||||
|
self.logo_provider: ProviderImageProvider = ProviderImageProvider(
|
||||||
|
describe["icon"]
|
||||||
|
)
|
||||||
|
|
||||||
shows: dict = getUrl(self.url, "shows")
|
shows: dict = getUrl(self.url, "shows")
|
||||||
self._shows: dict[int, Show] = {e["id"]: Show(e) for e in shows["data"]}
|
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:
|
def name(self) -> str:
|
||||||
return self._name
|
return self._name
|
||||||
|
|
||||||
|
@pyqtProperty("QString")
|
||||||
|
def logo(self) -> str:
|
||||||
|
return f"image://{self._name}/logo"
|
||||||
|
|
||||||
# @pyqtProperty("QObject")
|
# @pyqtProperty("QObject")
|
||||||
@pyqtSlot(int, result=QObject)
|
@pyqtSlot(int, result=QObject)
|
||||||
def getShow(self, id) -> Show:
|
def getShow(self, id) -> Show:
|
||||||
@@ -118,6 +145,12 @@ def main():
|
|||||||
# qmlRegisterType(Provider, "Ikinuki.Client", 1, 0, "Provider")
|
# qmlRegisterType(Provider, "Ikinuki.Client", 1, 0, "Provider")
|
||||||
|
|
||||||
engine = QQmlApplicationEngine()
|
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")
|
engine.load("layouts/ikinuki-default.qml")
|
||||||
|
|
||||||
win = QObject()
|
win = QObject()
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ Rectangle {
|
|||||||
id: sidebarElements
|
id: sidebarElements
|
||||||
model: providers
|
model: providers
|
||||||
SidebarElement {
|
SidebarElement {
|
||||||
name: modelData.name
|
provider: modelData
|
||||||
selected: (index == selectedElement) ? true : false
|
selected: (index == selectedElement) ? true : false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import QtQuick 2.12
|
import QtQuick 2.12
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
property string name
|
property var provider
|
||||||
property bool selected: false
|
property bool selected: false
|
||||||
|
|
||||||
width: parent.width * 0.9
|
width: parent.width * 0.9
|
||||||
@@ -19,9 +19,13 @@ Item {
|
|||||||
height: parent.height
|
height: parent.height
|
||||||
width: parent.width * 0.02
|
width: parent.width * 0.02
|
||||||
}
|
}
|
||||||
|
Image {
|
||||||
|
source: provider.logo
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
}
|
||||||
Text {
|
Text {
|
||||||
font.pointSize: 15
|
font.pointSize: 15
|
||||||
text: name
|
text: provider.name
|
||||||
color: selected ? "black" : "white"
|
color: selected ? "black" : "white"
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user