resources/lib/qobuz/node/article.py
'''
qobuz.node.article
~~~~~~~~~~~~~~~~~~
:part_of: kodi-qobuz
:copyright: (c) 2012-2018 by Joachim Basmaison, Cyril Leclerc
:license: GPLv3, see LICENSE for more details.
'''
from kodi_six import xbmcgui # pylint:disable=E0401
from qobuz.api import api
from qobuz.debug import getLogger
from qobuz.gui.contextmenu import contextMenu
from qobuz.node import Flag
from qobuz.node import getNode
from qobuz.node.inode import INode
logger = getLogger(__name__)
class WidgetArticle(xbmcgui.WindowDialog):
def __init__(self, *a, **ka):
super(WidgetArticle, self).__init__()
def onInit(self):
self.image = xbmcgui.ControlImage(100, 250, 125, 75, aspectRatio=2)
def onClick(self, action):
super(WidgetArticle, self).onClick(action)
def onAction(self, action):
super(WidgetArticle, self).onAction(action)
def onFocus(self, action):
super(WidgetArticle, self).onFocus(action)
def dialog(heading='Article', txt=''):
dialog = xbmcgui.Dialog()
return dialog.ok(heading, txt)
class Node_article(INode):
def __init__(self, parent=None, parameters=None, data=None):
parameters = {} if parameters is None else parameters
super(Node_article, self).__init__(
parent=parent, parameters=parameters, data=data)
self.nt = Flag.ARTICLE
self.content_type = 'artists'
def get_label(self, default=None):
if self.nid is None:
return 'Articles (i8n)'
return '%s (%s)' % (self.get_property('title'),
self.get_property('author'))
def get_label2(self):
return self.get_property('type')
def makeListItem(self, **ka):
item = xbmcgui.ListItem(self.get_label(),
self.get_property('source'),
self.get_image(), self.get_image())
item.setInfo(
'Music',
infoLabels={
'artist': self.get_author(),
'genre': self.get_genre()
})
item.setProperty('artist_genre', self.get_genre())
item.setProperty('artist_description', self.get_description())
ctxMenu = contextMenu()
self.attach_context_menu(item, ctxMenu)
item.addContextMenuItems(ctxMenu.getTuples(), ka['replaceItems'])
return item
def get_author(self):
return self.get_property('author')
def get_genre(self):
return '%s - %s' % (self.get_property('source'),
self.get_property('category'))
def get_description(self, _abstract=True):
if self.nid is None:
return self.get_property('abstract', to='strip_html')
return self.get_property('content', to='strip_html')
def get_title(self):
return self.get_property('title')
def get_image(self):
image = self.get_property('image')
if image is not None:
image = image.replace('http://player.', 'http://www.')
return image
def fetch(self, options=None):
if self.nid is None:
return api.get('/article/listLastArticles',
offset=self.offset,
limit=self.limit)
return api.get('/article/get', article_id=self.nid)
def _populate_articles(self, _options):
for item in self.data['articles']['items']:
self.add_child(
getNode(
Flag.ARTICLE, parameters={'nid': item['id']}, data=item))
return True if self.data['articles']['items'] else False
def _populate_one(self, _options):
dialog(self.get_title(), self.get_description())
return True
def populate(self, options=None):
if self.nid is None:
return self._populate_articles(options)
return self._populate_one(options)