Пример #1
0
def refresh_users():
    logger.info(u"Tautulli Users :: Requesting users list refresh...")
    result = plextv.PlexTV().get_full_users_list()

    monitor_db = database.MonitorDatabase()
    user_data = Users()

    if result:
        for item in result:

            shared_libraries = ''
            user_tokens = user_data.get_tokens(user_id=item['user_id'])
            if user_tokens and user_tokens['server_token']:
                pms_connect = pmsconnect.PmsConnect(
                    token=user_tokens['server_token'])
                library_details = pms_connect.get_server_children()

                if library_details:
                    shared_libraries = ';'.join(
                        d['section_id']
                        for d in library_details['libraries_list'])
                else:
                    shared_libraries = ''

            control_value_dict = {"user_id": item['user_id']}
            new_value_dict = {
                "username": item['username'],
                "thumb": item['thumb'],
                "email": item['email'],
                "is_admin": item['is_admin'],
                "is_home_user": item['is_home_user'],
                "is_allow_sync": item['is_allow_sync'],
                "is_restricted": item['is_restricted'],
                "shared_libraries": shared_libraries,
                "filter_all": item['filter_all'],
                "filter_movies": item['filter_movies'],
                "filter_tv": item['filter_tv'],
                "filter_music": item['filter_music'],
                "filter_photos": item['filter_photos']
            }

            # Check if we've set a custom avatar if so don't overwrite it.
            if item['user_id']:
                avatar_urls = monitor_db.select(
                    'SELECT thumb, custom_avatar_url '
                    'FROM users WHERE user_id = ?', [item['user_id']])
                if avatar_urls:
                    if not avatar_urls[0]['custom_avatar_url'] or \
                            avatar_urls[0]['custom_avatar_url'] == avatar_urls[0]['thumb']:
                        new_value_dict['custom_avatar_url'] = item['thumb']
                else:
                    new_value_dict['custom_avatar_url'] = item['thumb']

            monitor_db.upsert('users', new_value_dict, control_value_dict)

        logger.info(u"Tautulli Users :: Users list refreshed.")
        return True
    else:
        logger.warn(u"Tautulli Users :: Unable to refresh users list.")
        return False
Пример #2
0
def check_server_updates():

    with monitor_lock:
        logger.info(u"PlexPy Monitor :: Checking for PMS updates...")

        plex_tv = plextv.PlexTV()
        download_info = plex_tv.get_plex_downloads()

        if download_info:
            logger.info(u"PlexPy Monitor :: Current PMS version: %s",
                        plexpy.CONFIG.PMS_VERSION)

            if download_info['update_available']:
                logger.info(
                    u"PlexPy Monitor :: PMS update available version: %s",
                    download_info['version'])

                # Check if any notification agents have notifications enabled
                if any(d['on_pmsupdate']
                       for d in notifiers.available_notification_agents()):
                    # Fire off notifications
                    threading.Thread(
                        target=notification_handler.notify_timeline,
                        kwargs=dict(notify_action='pmsupdate')).start()
            else:
                logger.info(u"PlexPy Monitor :: No PMS update available.")
Пример #3
0
def connect_server(log=True, startup=False):
    if plexpy.CONFIG.PMS_IS_CLOUD:
        if log:
            logger.info(u"Tautulli Monitor :: Checking for Plex Cloud server status...")

        plex_tv = plextv.PlexTV()
        status = plex_tv.get_cloud_server_status()

        if status is True:
            logger.info(u"Tautulli Monitor :: Plex Cloud server is active.")
        elif status is False:
            if log:
                logger.info(u"Tautulli Monitor :: Plex Cloud server is sleeping.")
        else:
            if log:
                logger.error(u"Tautulli Monitor :: Failed to retrieve Plex Cloud server status.")

        if not status and startup:
            web_socket.on_disconnect()

    else:
        status = True

    if status:
        if log and not startup:
            logger.info(u"Tautulli Monitor :: Attempting to reconnect Plex server...")

        try:
            web_socket.start_thread()
        except Exception as e:
            logger.error(u"Websocket :: Unable to open connection: %s." % e)
Пример #4
0
def refresh_users():
    logger.info("Tautulli Users :: Requesting users list refresh...")
    result = plextv.PlexTV().get_full_users_list()

    server_id = plexpy.CONFIG.PMS_IDENTIFIER
    if not server_id:
        logger.error(
            "Tautulli Users :: No PMS identifier, cannot refresh users. Verify server in settings."
        )
        return

    if result:
        monitor_db = database.MonitorDatabase()

        # Keep track of user_id to update is_active status
        user_ids = [0]  # Local user always considered active

        for item in result:
            user_ids.append(helpers.cast_to_int(item['user_id']))

            if item.get('shared_libraries'):
                item['shared_libraries'] = ';'.join(item['shared_libraries'])
            elif item.get('server_token'):
                libs = libraries.Libraries().get_sections()
                item['shared_libraries'] = ';'.join(
                    [str(l['section_id']) for l in libs])

            keys_dict = {"user_id": item.pop('user_id')}

            # Check if we've set a custom avatar if so don't overwrite it.
            if keys_dict['user_id']:
                avatar_urls = monitor_db.select(
                    'SELECT thumb, custom_avatar_url '
                    'FROM users WHERE user_id = ?', [keys_dict['user_id']])
                if avatar_urls:
                    if not avatar_urls[0]['custom_avatar_url'] or \
                            avatar_urls[0]['custom_avatar_url'] == avatar_urls[0]['thumb']:
                        item['custom_avatar_url'] = item['thumb']
                else:
                    item['custom_avatar_url'] = item['thumb']

            # Check if title is the same as the username
            if item['title'] == item['username']:
                item['title'] = None

            monitor_db.upsert('users', key_dict=keys_dict, value_dict=item)

        query = 'UPDATE users SET is_active = 0 WHERE user_id NOT IN ({})'.format(
            ', '.join(['?'] * len(user_ids)))
        monitor_db.action(query=query, args=user_ids)

        logger.info("Tautulli Users :: Users list refreshed.")
        return True
    else:
        logger.warn("Tautulli Users :: Unable to refresh users list.")
        return False
Пример #5
0
def check_server_updates():

    with monitor_lock:
        logger.info(u"Tautulli Monitor :: Checking for PMS updates...")

        plex_tv = plextv.PlexTV()
        download_info = plex_tv.get_plex_downloads()

        if download_info:
            logger.info(u"Tautulli Monitor :: Current PMS version: %s", plexpy.CONFIG.PMS_VERSION)

            if download_info['update_available']:
                logger.info(u"Tautulli Monitor :: PMS update available version: %s", download_info['version'])

                plexpy.NOTIFY_QUEUE.put({'notify_action': 'on_pmsupdate', 'pms_download_info': download_info})

            else:
                logger.info(u"Tautulli Monitor :: No PMS update available.")
Пример #6
0
    def _getSync(self, machine_id=None, user_id=None, **kwargs):

        pms_connect = pmsconnect.PmsConnect()
        server_id = pms_connect.get_server_identity()

        plex_tv = plextv.PlexTV()
        if not machine_id:
            result = plex_tv.get_synced_items(
                machine_id=server_id['machine_identifier'], user_id=user_id)
        else:
            result = plex_tv.get_synced_items(machine_id=machine_id,
                                              user_id=user_id)

        if result:
            self.data = result
            return result
        else:
            self.msg = 'Unable to retrieve sync data for user'
            logger.warn('Unable to retrieve sync data for user.')
Пример #7
0
def refresh_users():
    logger.info(u"Tautulli Users :: Requesting users list refresh...")
    result = plextv.PlexTV().get_full_users_list()

    if result:
        monitor_db = database.MonitorDatabase()

        for item in result:

            if item.get('shared_libraries'):
                item['shared_libraries'] = ';'.join(item['shared_libraries'])
            elif item.get('server_token'):
                libs = libraries.Libraries().get_sections()
                item['shared_libraries'] = ';'.join(
                    [str(l['section_id']) for l in libs])

            keys_dict = {"user_id": item.pop('user_id')}

            # Check if we've set a custom avatar if so don't overwrite it.
            if keys_dict['user_id']:
                avatar_urls = monitor_db.select(
                    'SELECT thumb, custom_avatar_url '
                    'FROM users WHERE user_id = ?', [keys_dict['user_id']])
                if avatar_urls:
                    if not avatar_urls[0]['custom_avatar_url'] or \
                            avatar_urls[0]['custom_avatar_url'] == avatar_urls[0]['thumb']:
                        item['custom_avatar_url'] = item['thumb']
                else:
                    item['custom_avatar_url'] = item['thumb']

            monitor_db.upsert('users', item, keys_dict)

        logger.info(u"Tautulli Users :: Users list refreshed.")
        return True
    else:
        logger.warn(u"Tautulli Users :: Unable to refresh users list.")
        return False