def _dispatch_play_media(self, media, offset):
     for client in self.PLEX_CLIENTS:
         if type(client) == str:
             clientItem = self.PLEX.client(client)
         elif type(client) == dict:
             clientItem = PlexClient(server=self.PLEX,
                                     baseurl=client['baseurl'])
         clientItem.playMedia(media, offset=offset)
Exemple #2
0
 def client(self, name):
     for elem in self.query('/clients'):
         if elem.attrib.get('name').lower() == name.lower():
             baseurl = 'http://%s:%s' % (elem.attrib['address'],
                                         elem.attrib['port'])
             return PlexClient(baseurl, server=self, data=elem)
     raise NotFound('Unknown client name: %s' % name)
Exemple #3
0
 def clients(self):
     """ Returns list of all :class:`~plexapi.client.PlexClient` objects connected to server. """
     items = []
     cache_resource = None
     from plexapi.myplex import MyPlexResource
     for elem in self.query('/clients'):
         # Some shitty clients dont include a port..
         port = elem.attrib.get('port')
         if port is None:
             log.debug(
                 "%s didn't provide a port. Checking https://plex.tv/devices.xml"
                 % elem.attrib.get('name'))
             data = cache_resource or self._server._session.get(
                 'https://plex.tv/devices.xml?X-Plex-Token=%s' %
                 self.token)  # noqa
             cache_resource = data
             resources = MyPlexResource(self, data)
             for resource in resources:
                 if resource.clientIdentifier == elem.attrib.get(
                         'machineIdentifier'):
                     for conn in resource.connection:
                         if conn.local is True:
                             port = conn.port
                             break
         baseurl = 'http://%s:%s' % (elem.attrib['host'], port)
         items.append(
             PlexClient(baseurl=baseurl,
                        server=self,
                        data=elem,
                        connect=False))
     return items
Exemple #4
0
 def _connect(self, url, results, i):
     try:
         results[i] = (url, self.token,
                       PlexClient(baseurl=url, token=self.token))
     except Exception as err:
         log.error('%s: %s', url, err)
         results[i] = (url, self.token, None)
Exemple #5
0
 def clients(self):
     items = []
     for elem in self.query('/clients'):
         baseurl = 'http://%s:%s' % (elem.attrib['address'],
                                     elem.attrib['port'])
         items.append(PlexClient(baseurl, server=self, data=elem))
     return items
Exemple #6
0
 def connect_to_client(source,
                       baseurl,
                       machine_identifier,
                       name="Unknown"):
     """Connect to a Plex client and return a PlexClient instance."""
     try:
         client = PlexClient(
             server=self._plex_server,
             baseurl=baseurl,
             token=self._plex_server.createToken(),
         )
     except requests.exceptions.ConnectionError:
         _LOGGER.error(
             "Direct client connection failed, will try again: %s (%s)",
             name,
             baseurl,
         )
     except Unauthorized:
         _LOGGER.error(
             "Direct client connection unauthorized, ignoring: %s (%s)",
             name,
             baseurl,
         )
         self._client_device_cache[machine_identifier] = None
     else:
         self._client_device_cache[client.machineIdentifier] = client
         process_device(source, client)
Exemple #7
0
def findPlayer(server, data):
    elem = data.find('Player')
    if elem is not None:
        from plexapi.client import PlexClient
        baseurl = 'http://%s:%s' % (elem.attrib.get('address'),
                                    elem.attrib.get('port'))
        return PlexClient(baseurl, server=server, data=elem)
    return None
Exemple #8
0
 def clients(self):
     """ Returns a list of all :class:`~plexapi.client.PlexClient` objects
         connected  to this server.
     """
     items = []
     for elem in self.query('/clients'):
         baseurl = 'http://%s:%s' % (elem.attrib['host'],
                                     elem.attrib['port'])
         items.append(PlexClient(baseurl, server=self, data=elem))
     return items
Exemple #9
0
 def clients(self):
     """ Returns list of all :class:`~plexapi.client.PlexClient` objects connected to server. """
     items = []
     ports = None
     for elem in self.query('/clients'):
         port = elem.attrib.get('port')
         if not port:
             log.warn('%s did not advertise a port, checking plex.tv.', elem.attrib.get('name'))
             ports = self._myPlexClientPorts() if ports is None else ports
             port = ports.get(elem.attrib.get('machineIdentifier'))
         baseurl = 'http://%s:%s' % (elem.attrib['host'], port)
         items.append(PlexClient(baseurl=baseurl, server=self, data=elem, connect=False))
     return items
Exemple #10
0
    def clients(self):
        """Query PMS for all clients connected to PMS.

        Returns:
            list: of Plexclient connnected to PMS

        """
        items = []
        for elem in self.query('/clients'):
            baseurl = 'http://%s:%s' % (elem.attrib['address'],
                                        elem.attrib['port'])
            items.append(PlexClient(baseurl, server=self, data=elem))
        return items
Exemple #11
0
    def _connect(self, url, results, i):
        """Summary

        Args:
            url (TYPE): Description
            results (TYPE): Description
            i (TYPE): Description

        Returns:
            TYPE: Description
        """
        try:
            results[i] = (url, self.token, PlexClient(url, self.token))
        except NotFound as err:
            results[i] = (url, self.token, None)
Exemple #12
0
    def client(self, name):
        """ Returns the :class:`~plexapi.client.PlexClient` that matches the specified name.

            Parameters:
                name (str): Name of the client to return.

            Raises:
                :class:`~plexapi.exceptions.NotFound`: Unknown client name
        """
        for elem in self.query('/clients'):
            if elem.attrib.get('name').lower() == name.lower():
                baseurl = 'http://%s:%s' % (elem.attrib['host'],
                                            elem.attrib['port'])
                return PlexClient(baseurl=baseurl, server=self, data=elem)
        raise NotFound('Unknown client name: %s' % name)
Exemple #13
0
def findPlayer(server, data):
    """Find a player in a elementthee

    Args:
        server (Plexserver): PMS your connected to
        data (xml.etree.ElementTree.Element): xml from pms as a element

    Returns:
        PlexClient or None
    """
    elem = data.find('Player')
    if elem is not None:
        from plexapi.client import PlexClient
        baseurl = 'http://%s:%s' % (elem.attrib.get('address'),
                                    elem.attrib.get('port'))
        return PlexClient(baseurl, server=server, data=elem)
    return None
Exemple #14
0
    def client(self, name):
        """Querys PMS for all clients connected to PMS.

        Returns:
            Plexclient

        Args:
            name (str): client title, John's Iphone

        Raises:
            NotFound: Unknown client name Betty

        """
        for elem in self.query('/clients'):
            if elem.attrib.get('name').lower() == name.lower():
                baseurl = 'http://%s:%s' % (elem.attrib['address'],
                                            elem.attrib['port'])
                return PlexClient(baseurl, server=self, data=elem)
        raise NotFound('Unknown client name: %s' % name)
Exemple #15
0
    def client(self, name):
        """ Returns the :class:`~plexapi.client.PlexClient` that matches the specified name.

            Parameters:
                name (str): Name of the client to return.

            Raises:
                :class:`~plexapi.exceptions.NotFound`: Unknown client name
        """
        for elem in self.query('/clients'):
            if elem.attrib.get('name').lower() == name.lower():
                port = elem.attrib.get('port')
                if not port:
                    log.warn('%s did not advertise a port, checking plex.tv.', elem.attrib.get('name'))
                    ports = self._myPlexClientPorts()
                    port = ports.get(elem.attrib.get('machineIdentifier'))
                baseurl = 'http://%s:%s' % (elem.attrib['host'], port)
                return PlexClient(baseurl=baseurl, server=self, data=elem)
        raise NotFound('Unknown client name: %s' % name)
Exemple #16
0
 def _connect(self, url, results, i):
     try:
         results[i] = (url, self.token, PlexClient(url, self.token))
     except NotFound as err:
         print(err)
         results[i] = (url, self.token, None)
Exemple #17
0
def safe_client(name, baseurl, server):
    try:
        return server.client(name)
    except NotFound as err:
        log(2, 'Warning: %s' % err)
        return PlexClient(baseurl, server=server)
Exemple #18
0
def client(request, plex):
    return PlexClient(plex, baseurl=CLIENT_BASEURL, token=CLIENT_TOKEN)