Skip to content

Commit f371061

Browse files
authored
Merge pull request #437 from pkkid/poster_change
poster_change
2 parents 83a292a + 319fe52 commit f371061

File tree

5 files changed

+127
-7
lines changed

5 files changed

+127
-7
lines changed

plexapi/base.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,44 @@ def history(self, maxresults=9999999, mindate=None):
433433
"""
434434
return self._server.history(maxresults=maxresults, mindate=mindate, ratingKey=self.ratingKey)
435435

436+
def posters(self):
437+
""" Returns list of available poster objects. :class:`~plexapi.media.Poster`. """
438+
439+
return self.fetchItems('%s/posters' % self.key)
440+
441+
def uploadPoster(self, url=None, filepath=None):
442+
""" Upload poster from url or filepath. :class:`~plexapi.media.Poster` to :class:`~plexapi.video.Video`. """
443+
if url:
444+
key = '%s/posters?url=%s' % (self.key, quote_plus(url))
445+
self._server.query(key, method=self._server._session.post)
446+
elif filepath:
447+
key = '%s/posters?' % self.key
448+
data = open(filepath, 'rb').read()
449+
self._server.query(key, method=self._server._session.post, data=data)
450+
451+
def setPoster(self, poster):
452+
""" Set . :class:`~plexapi.media.Poster` to :class:`~plexapi.video.Video` """
453+
poster.select()
454+
455+
def arts(self):
456+
""" Returns list of available art objects. :class:`~plexapi.media.Poster`. """
457+
458+
return self.fetchItems('%s/arts' % self.key)
459+
460+
def uploadArt(self, url=None, filepath=None):
461+
""" Upload art from url or filepath. :class:`~plexapi.media.Poster` to :class:`~plexapi.video.Video`. """
462+
if url:
463+
key = '/library/metadata/%s/arts?url=%s' % (self.ratingKey, quote_plus(url))
464+
self._server.query(key, method=self._server._session.post)
465+
elif filepath:
466+
key = '/library/metadata/%s/arts?' % self.ratingKey
467+
data = open(filepath, 'rb').read()
468+
self._server.query(key, method=self._server._session.post, data=data)
469+
470+
def setArt(self, art):
471+
""" Set :class:`~plexapi.media.Poster` to :class:`~plexapi.video.Video` """
472+
art.select()
473+
436474
def unmatch(self):
437475
""" Unmatches metadata match from object. """
438476
key = '/library/metadata/%s/unmatch' % self.ratingKey

plexapi/library.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1084,5 +1084,43 @@ def sortUpdate(self, sort=None):
10841084
part = '/library/metadata/%s/prefs?collectionSort=%s' % (self.ratingKey, key)
10851085
return self._server.query(part, method=self._server._session.put)
10861086

1087+
def posters(self):
1088+
""" Returns list of available poster objects. :class:`~plexapi.media.Poster`. """
1089+
1090+
return self.fetchItems('/library/metadata/%s/posters' % self.ratingKey)
1091+
1092+
def uploadPoster(self, url=None, filepath=None):
1093+
""" Upload poster from url or filepath. :class:`~plexapi.media.Poster` to :class:`~plexapi.video.Video`. """
1094+
if url:
1095+
key = '/library/metadata/%s/posters?url=%s' % (self.ratingKey, quote_plus(url))
1096+
self._server.query(key, method=self._server._session.post)
1097+
elif filepath:
1098+
key = '/library/metadata/%s/posters?' % self.ratingKey
1099+
data = open(filepath, 'rb').read()
1100+
self._server.query(key, method=self._server._session.post, data=data)
1101+
1102+
def setPoster(self, poster):
1103+
""" Set . :class:`~plexapi.media.Poster` to :class:`~plexapi.video.Video` """
1104+
poster.select()
1105+
1106+
def arts(self):
1107+
""" Returns list of available art objects. :class:`~plexapi.media.Poster`. """
1108+
1109+
return self.fetchItems('/library/metadata/%s/arts' % self.ratingKey)
1110+
1111+
def uploadArt(self, url=None, filepath=None):
1112+
""" Upload art from url or filepath. :class:`~plexapi.media.Poster` to :class:`~plexapi.video.Video`. """
1113+
if url:
1114+
key = '/library/metadata/%s/arts?url=%s' % (self.ratingKey, quote_plus(url))
1115+
self._server.query(key, method=self._server._session.post)
1116+
elif filepath:
1117+
key = '/library/metadata/%s/arts?' % self.ratingKey
1118+
data = open(filepath, 'rb').read()
1119+
self._server.query(key, method=self._server._session.post, data=data)
1120+
1121+
def setArt(self, art):
1122+
""" Set :class:`~plexapi.media.Poster` to :class:`~plexapi.video.Video` """
1123+
art.select()
1124+
10871125
# def edit(self, **kwargs):
10881126
# TODO

plexapi/media.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# -*- coding: utf-8 -*-
2-
from plexapi import log, utils, settings
2+
3+
import xml
4+
5+
from plexapi import compat, log, utils, settings
36
from plexapi.base import PlexObject
47
from plexapi.exceptions import BadRequest
58
from plexapi.utils import cast
@@ -143,7 +146,7 @@ def setDefaultAudioStream(self, stream):
143146

144147
def setDefaultSubtitleStream(self, stream):
145148
""" Set the default :class:`~plexapi.media.SubtitleStream` for this MediaPart.
146-
149+
147150
Parameters:
148151
stream (:class:`~plexapi.media.SubtitleStream`): SubtitleStream to set as default.
149152
"""
@@ -617,6 +620,14 @@ def _loadData(self, data):
617620
self.selected = data.attrib.get('selected')
618621
self.thumb = data.attrib.get('thumb')
619622

623+
def select(self):
624+
key = self._initpath[:-1]
625+
data = '%s?url=%s' % (key, compat.quote_plus(self.ratingKey))
626+
try:
627+
self._server.query(data, method=self._server._session.put)
628+
except xml.etree.ElementTree.ParseError:
629+
pass
630+
620631

621632
@utils.registerPlexObject
622633
class Producer(MediaTag):

plexapi/playlist.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,3 +268,41 @@ def sync(self, videoQuality=None, photoResolution=None, audioBitrate=None, clien
268268
raise Unsupported('Unsupported playlist content')
269269

270270
return myplex.sync(sync_item, client=client, clientId=clientId)
271+
272+
def posters(self):
273+
""" Returns list of available poster objects. :class:`~plexapi.media.Poster`. """
274+
275+
return self.fetchItems('/library/metadata/%s/posters' % self.ratingKey)
276+
277+
def uploadPoster(self, url=None, filepath=None):
278+
""" Upload poster from url or filepath. :class:`~plexapi.media.Poster` to :class:`~plexapi.video.Video`. """
279+
if url:
280+
key = '/library/metadata/%s/posters?url=%s' % (self.ratingKey, quote_plus(url))
281+
self._server.query(key, method=self._server._session.post)
282+
elif filepath:
283+
key = '/library/metadata/%s/posters?' % self.ratingKey
284+
data = open(filepath, 'rb').read()
285+
self._server.query(key, method=self._server._session.post, data=data)
286+
287+
def setPoster(self, poster):
288+
""" Set . :class:`~plexapi.media.Poster` to :class:`~plexapi.video.Video` """
289+
poster.select()
290+
291+
def arts(self):
292+
""" Returns list of available art objects. :class:`~plexapi.media.Poster`. """
293+
294+
return self.fetchItems('/library/metadata/%s/arts' % self.ratingKey)
295+
296+
def uploadArt(self, url=None, filepath=None):
297+
""" Upload art from url or filepath. :class:`~plexapi.media.Poster` to :class:`~plexapi.video.Video`. """
298+
if url:
299+
key = '/library/metadata/%s/arts?url=%s' % (self.ratingKey, quote_plus(url))
300+
self._server.query(key, method=self._server._session.post)
301+
elif filepath:
302+
key = '/library/metadata/%s/arts?' % self.ratingKey
303+
data = open(filepath, 'rb').read()
304+
self._server.query(key, method=self._server._session.post, data=data)
305+
306+
def setArt(self, art):
307+
""" Set :class:`~plexapi.media.Poster` to :class:`~plexapi.video.Video` """
308+
art.select()

plexapi/video.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,6 @@ def removeSubtitles(self, streamID=None, streamTitle=None):
121121
if streamID == stream.id or streamTitle == stream.title:
122122
self._server.query(stream.key, self._server._session.delete)
123123

124-
def posters(self):
125-
""" Returns list of available poster objects. :class:`~plexapi.media.Poster`:"""
126-
127-
return self.fetchItems('%s/posters' % self.key, cls=media.Poster)
128-
129124
def optimize(self, title=None, target="", targetTagID=None, locationID=-1, policyScope='all',
130125
policyValue="", policyUnwatched=0, videoQuality=None, deviceProfile=None):
131126
""" Optimize item

0 commit comments

Comments
 (0)