153 lines
4.6 KiB
Python
153 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')
|