Skip to content

Commit 0854325

Browse files
committed
optimize method rewrite
dict instead of string big help from @JonnyWong16
1 parent d23c81c commit 0854325

File tree

1 file changed

+28
-31
lines changed

1 file changed

+28
-31
lines changed

plexapi/video.py

Lines changed: 28 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from plexapi import media, utils
33
from plexapi.exceptions import BadRequest, NotFound
44
from plexapi.base import Playable, PlexPartialObject
5-
from plexapi.compat import quote_plus, quote
5+
from plexapi.compat import quote_plus, quote, urlencode
66
import os
77

88

@@ -161,47 +161,44 @@ def optimize(self, title=None, target="", targetTagID=None, locationID=-1, polic
161161
if targetTagID not in tagIDs and (deviceProfile == None or videoQuality == None):
162162
raise BadRequest('Unexpected or missing quality profile.')
163163

164-
from plexapi.sync import MediaSettings
165-
166-
if title is None:
167-
title = self.title
168-
169-
key = '/playlists/1111/items?'
170-
itemType = '%s=42' % quote_plus('Item[type]')
171-
itemTitle = '&%s=%s' % (quote_plus('Item[title]'), quote(title))
172-
itemTarget = '&%s=%s' % (quote_plus('Item[target]'), quote_plus(target))
173164
if isinstance(targetTagID, str):
174165
tagIndex = tagKeys.index(targetTagID)
175166
targetTagID = tagValues[tagIndex]
176167

177-
itemTargetTagID = '&%s=%s' % (quote_plus('Item[targetTagID]'), targetTagID if targetTagID else "")
178-
itemLocationID = '&%s=%s' % (quote_plus('Item[locationID]'), locationID)
179-
section = self._server.library.sectionByID(self.librarySectionID)
180-
location = '%s=%s%s%s' % (quote_plus('Item[Location][uri]'), quote_plus('library://'),
181-
section.uuid, quote_plus('/item/'))
182-
itemLocationUri = '&%s%s' % (location, quote_plus(quote_plus('%s' % self.key)))
183-
itemPolicyScope = '&%s=%s' % (quote_plus('Item[Policy][scope]'), quote_plus(policyScope))
184-
itemPolicyValue = '&%s=%s' % (quote_plus('Item[Policy][value]'), quote_plus(policyValue))
185-
itemPolicyUnwatched = '&%s=%s' % (quote_plus('Item[Policy][unwatched]'), policyUnwatched)
168+
if title is None:
169+
title = self.title
186170

187-
data = key + itemType + itemTitle + itemTarget + itemTargetTagID + itemLocationID + \
188-
itemLocationUri + '%253FincludeExternalMedia%253D1'
171+
key = '/playlists/1111/items?'
172+
params = {
173+
'Item[type]': 42,
174+
'Item[target]': target,
175+
'Item[targetTagID]': targetTagID if targetTagID else '',
176+
'Item[locationID]': locationID,
177+
'Item[Policy][scope]': policyScope,
178+
'Item[Policy][value]': policyValue,
179+
'Item[Policy][unwatched]': policyUnwatched
180+
}
189181

190182
if deviceProfile:
191-
data += '&%s=%s' % (quote_plus('Item[Device][profile]'), deviceProfile)
192-
193-
data += itemPolicyScope + itemPolicyValue + itemPolicyUnwatched
183+
params['Item[Device][profile]'] = deviceProfile
194184

195185
if videoQuality:
186+
from plexapi.sync import MediaSettings
196187
mediaSettings = MediaSettings.createVideo(videoQuality)
197-
data += '&%s=%s' % (quote_plus('Item[MediaSettings][videoQuality]'), mediaSettings.videoQuality)
198-
data += '&%s=%s' % (quote_plus('Item[MediaSettings][videoResolution]'), mediaSettings.videoResolution)
199-
data += '&%s=%s' % (quote_plus('Item[MediaSettings][maxVideoBitrate]'), mediaSettings.maxVideoBitrate)
200-
data += '&%s=%s' % (quote_plus('Item[MediaSettings][audioBoost]'), '')
201-
data += '&%s=%s' % (quote_plus('Item[MediaSettings][subtitleSize]'), '')
202-
data += '&%s=%s' % (quote_plus('Item[MediaSettings][musicBitrate]'), '')
203-
data += '&%s=%s' % (quote_plus('Item[MediaSettings][photoQuality]'), '')
188+
params['Item[MediaSettings][videoQuality]'] = mediaSettings.videoQuality
189+
params['Item[MediaSettings][videoResolution]'] = mediaSettings.videoResolution
190+
params['Item[MediaSettings][maxVideoBitrate]'] = mediaSettings.maxVideoBitrate
191+
params['Item[MediaSettings][audioBoost]'] = ''
192+
params['Item[MediaSettings][subtitleSize]'] = ''
193+
params['Item[MediaSettings][musicBitrate]'] = ''
194+
params['Item[MediaSettings][photoQuality]'] = ''
195+
196+
titleParam = {'Item[title]': title}
197+
section = self._server.library.sectionByID(self.librarySectionID)
198+
params['Item[Location][uri]'] = 'library://' + section.uuid + '/item/' + \
199+
quote_plus(self.key + '?includeExternalMedia=1')
204200

201+
data = key + urlencode(params) + '&' + urlencode(titleParam, quote_via=quote)
205202
return self._server.query(data, method=self._server._session.put)
206203

207204
def sync(self, videoQuality, client=None, clientId=None, limit=None, unwatched=False, title=None):

0 commit comments

Comments
 (0)