PlexKodiConnect/resources/lib/plexnet/audio.py
2018-09-30 13:16:17 +02:00

152 lines
4.6 KiB
Python

# -*- coding: utf-8 -*-
import plexobjects
import plexmedia
import media
class Audio(media.MediaItem):
def __init__(self, *args, **kwargs):
self._settings = None
media.MediaItem.__init__(self, *args, **kwargs)
def __eq__(self, other):
return self.ratingKey == other.ratingKey
def __ne__(self, other):
return not self.__eq__(other)
def _setData(self, data):
for k, v in data.attrib.items():
setattr(self, k, plexobjects.PlexValue(v, self))
self.key = plexobjects.PlexValue(self.key.replace('/children', ''), self)
def isMusicItem(self):
return True
@plexobjects.registerLibType
class Artist(Audio):
TYPE = 'artist'
def _setData(self, data):
Audio._setData(self, data)
if self.isFullObject():
self.countries = plexobjects.PlexItemList(data, media.Country, media.Country.TYPE, server=self.server)
self.genres = plexobjects.PlexItemList(data, media.Genre, media.Genre.TYPE, server=self.server)
self.similar = plexobjects.PlexItemList(data, media.Similar, media.Similar.TYPE, server=self.server)
def albums(self):
path = '%s/children' % self.key
return plexobjects.listItems(self.server, path, Album.TYPE)
def album(self, title):
path = '%s/children' % self.key
return plexobjects.findItem(self.server, path, title)
def tracks(self, watched=None):
leavesKey = '/library/metadata/%s/allLeaves' % self.ratingKey
return plexobjects.listItems(self.server, leavesKey, watched=watched)
def all(self):
return self.tracks()
def track(self, title):
path = '/library/metadata/%s/allLeaves' % self.ratingKey
return plexobjects.findItem(self.server, path, title)
def isFullObject(self):
# plex bug? http://bit.ly/1Sc2J3V
fixed_key = self.key.replace('/children', '')
return self.initpath == fixed_key
def refresh(self):
self.server.query('/library/metadata/%s/refresh' % self.ratingKey)
@plexobjects.registerLibType
class Album(Audio):
TYPE = 'album'
def _setData(self, data):
Audio._setData(self, data)
if self.isFullObject():
self.genres = plexobjects.PlexItemList(data, media.Genre, media.Genre.TYPE, server=self.server)
@property
def defaultTitle(self):
return self.parentTitle or self.title
def tracks(self, watched=None):
path = '%s/children' % self.key
return plexobjects.listItems(self.server, path, watched=watched)
def track(self, title):
path = '%s/children' % self.key
return plexobjects.findItem(self.server, path, title)
def all(self):
return self.tracks()
def isFullObject(self):
# plex bug? http://bit.ly/1Sc2J3V
fixed_key = self.key.replace('/children', '')
return self.initpath == fixed_key
def artist(self):
return plexobjects.listItems(self.server, self.parentKey)[0]
def watched(self):
return self.tracks(watched=True)
def unwatched(self):
return self.tracks(watched=False)
@plexobjects.registerLibType
class Track(Audio):
TYPE = 'track'
def _setData(self, data):
Audio._setData(self, data)
if self.isFullObject():
self.moods = plexobjects.PlexItemList(data, media.Mood, media.Mood.TYPE, server=self.server)
self.media = plexobjects.PlexMediaItemList(data, plexmedia.PlexMedia, media.Media.TYPE, initpath=self.initpath, server=self.server, media=self)
# data for active sessions
self.user = self._findUser(data)
self.player = self._findPlayer(data)
self.transcodeSession = self._findTranscodeSession(data)
@property
def defaultTitle(self):
return self.parentTitle or self.title
@property
def settings(self):
if not self._settings:
import plexapp
self._settings = plexapp.PlayerSettingsInterface()
return self._settings
@property
def thumbUrl(self):
return self.server.url(self.parentThumb)
def album(self):
return plexobjects.listItems(self.server, self.parentKey)[0]
def artist(self):
return plexobjects.listItems(self.server, self.grandparentKey)[0]
def getStreamURL(self, **params):
return self._getStreamURL(**params)
@property
def defaultThumb(self):
return self.__dict__.get('thumb') or self.__dict__.get('parentThumb') or self.get('grandparentThumb')
@property
def defaultArt(self):
return self.__dict__.get('art') or self.get('grandparentArt')