Add Sonos cache & speaker lookup methods, set X-Plex-Client-Identifier

This commit is contained in:
Jason Lawrence 2020-04-28 15:17:59 -05:00
parent 55b335ee7c
commit 95188b0f72
2 changed files with 18 additions and 4 deletions

View file

@ -89,6 +89,8 @@ class MyPlexAccount(PlexObject):
def __init__(self, username=None, password=None, token=None, session=None, timeout=None):
self._token = token
self._session = session or requests.Session()
self._sonos_cache = []
self._sonos_cache_timestamp = 0
data, initpath = self._signin(username, password, timeout)
super(MyPlexAccount, self).__init__(self, data, initpath)
@ -213,8 +215,20 @@ class MyPlexAccount(PlexObject):
def sonos_speakers(self):
if 'companions_sonos' not in self.subscriptionFeatures:
return []
data = self.query('https://sonos.plex.tv/resources')
return [PlexSonosClient(self, elem) for elem in data]
t = time.time()
if t - self._sonos_cache_timestamp > 60:
self._sonos_cache_timestamp = t
data = self.query('https://sonos.plex.tv/resources')
self._sonos_cache = [PlexSonosClient(self, elem) for elem in data]
return self._sonos_cache
def sonos_speaker(self, name):
return [x for x in self.sonos_speakers() if x.title == name][0]
def sonos_speaker_by_id(self, identifier):
return [x for x in self.sonos_speakers() if x.machineIdentifier == identifier][0]
def inviteFriend(self, user, server, sections=None, allowSync=False, allowCameraUpload=False,
allowChannels=False, filterMovies=None, filterTelevision=None, filterMusic=None):

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
import requests
from plexapi import CONFIG
from plexapi import CONFIG, X_PLEX_IDENTIFIER
from plexapi.client import PlexClient
from plexapi.exceptions import BadRequest
from plexapi.playqueue import PlayQueue
@ -98,7 +98,7 @@ class PlexSonosClient(PlexClient):
"port": server_port,
"token": media._server.createToken(),
"commandID": self._nextCommandId(),
#"X-Plex-Client-Identifier": client_id,
"X-Plex-Client-Identifier": X_PLEX_IDENTIFIER,
"X-Plex-Token": media._server._token,
"X-Plex-Target-Client-Identifier": self.machineIdentifier,
}, **params))