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
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.")
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)
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
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.")
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.')
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