def home_stats(self, time_range='30', **kwargs): plex_watch = plexwatch.PlexWatch() stats_data = plex_watch.get_home_stats(time_range) return serve_template(templatename="home_stats.html", title="Stats", data=stats_data)
def get_user_list(self, start=0, length=100, **kwargs): plex_watch = plexwatch.PlexWatch() users = plex_watch.get_user_list(start, length, kwargs) cherrypy.response.headers['Content-type'] = 'application/json' return json.dumps(users)
def get_stream_details(self, rating_key=0, **kwargs): plex_watch = plexwatch.PlexWatch() stream_details = plex_watch.get_stream_details(rating_key) cherrypy.response.headers['Content-type'] = 'application/json' return json.dumps(stream_details)
def get_stream_data(self, row_id=None, user=None, **kwargs): plex_watch = plexwatch.PlexWatch() stream_data = plex_watch.get_stream_details(row_id) return serve_template(templatename="stream_data.html", title="Stream Data", data=stream_data, user=user)
def edit_user(self, user=None, friendly_name=None, **kwargs): if user: try: plex_watch = plexwatch.PlexWatch() plex_watch.set_user_friendly_name(user, friendly_name) status_message = "Successfully updated user." return status_message except: status_message = "Failed to update user." return status_message
def user(self, user=None): try: plex_watch = plexwatch.PlexWatch() user_details = plex_watch.get_user_details(user) except: logger.warn("Unable to retrieve friendly name for user %s " % user) return serve_template(templatename="user.html", title="User", data=user_details)
def get_plays_by_hourofday(self, time_range='30', **kwargs): plex_watch = plexwatch.PlexWatch() result = plex_watch.get_total_plays_per_hourofday(time_range) if result: cherrypy.response.headers['Content-type'] = 'application/json' return json.dumps(result) else: logger.warn('Unable to retrieve data.')
def get_watched(self, user=None, limit='10', **kwargs): plex_watch = plexwatch.PlexWatch() result = plex_watch.get_recently_watched(user, limit) if result: cherrypy.response.headers['Content-type'] = 'application/json' return json.dumps(result) else: logger.warn('Unable to retrieve data.')
def get_user_gravatar_image(self, user=None, **kwargs): plex_watch = plexwatch.PlexWatch() result = plex_watch.get_user_gravatar_image(user) if result: cherrypy.response.headers['Content-type'] = 'application/json' return json.dumps(result) else: logger.warn('Unable to retrieve data.')
def get_stream(self, row_id='', **kwargs): plex_watch = plexwatch.PlexWatch() result = plex_watch.get_stream_details('122') if result: cherrypy.response.headers['Content-type'] = 'application/json' return result else: logger.warn('Unable to retrieve data.')
def get_synced_items(self, machine_id=None, user_id=None): sync_list = self.get_plextv_sync_lists(machine_id) plex_watch = plexwatch.PlexWatch() synced_items = [] try: xml_parse = minidom.parseString(sync_list) except Exception, e: logger.warn("Error parsing XML for Plex sync lists: %s" % e) return []
def get_user_ips(self, start=0, length=100, custom_where='', **kwargs): if 'user' in kwargs: user = kwargs.get('user', "") custom_where = 'user = "******"' % user plex_watch = plexwatch.PlexWatch() history = plex_watch.get_user_unique_ips(start, length, kwargs, custom_where) cherrypy.response.headers['Content-type'] = 'application/json' return json.dumps(history)
def get_user_platform_stats(self, user=None, **kwargs): plex_watch = plexwatch.PlexWatch() result = plex_watch.get_user_platform_stats(user) if result: return serve_template(templatename="user_platform_stats.html", data=result, title="Platform Stats") else: return serve_template(templatename="user_platform_stats.html", data=None, title="Platform Stats") logger.warn('Unable to retrieve data.')
def get_user_recently_watched(self, user=None, limit='10', **kwargs): plex_watch = plexwatch.PlexWatch() result = plex_watch.get_recently_watched(user, limit) if result: return serve_template(templatename="user_recently_watched.html", data=result, title="Recently Watched") else: return serve_template(templatename="user_recently_watched.html", data=None, title="Recently Watched") logger.warn('Unable to retrieve data.')
def get_history(self, start=0, length=100, custom_where='', **kwargs): if 'user' in kwargs: user = kwargs.get('user', "") custom_where = 'user = "******"' % user if 'rating_key' in kwargs: rating_key = kwargs.get('rating_key', "") custom_where = 'rating_key = %s' % rating_key if 'grandparent_rating_key' in kwargs: rating_key = kwargs.get('grandparent_rating_key', "") custom_where = 'grandparent_rating_key = %s' % rating_key plex_watch = plexwatch.PlexWatch() history = plex_watch.get_history(start, length, kwargs, custom_where) cherrypy.response.headers['Content-type'] = 'application/json' return json.dumps(history)
def edit_user_dialog(self, user=None, **kwargs): if user: try: plex_watch = plexwatch.PlexWatch() result = { 'user': user, 'friendly_name': plex_watch.get_user_friendly_name(user) } status_message = "" except: result = {'user': user, 'friendly_name': ''} status_message = "There was an error." return serve_template(templatename="edit_user.html", title="Edit User", data=result, status_message=status_message) else: return serve_template(templatename="edit_user.html", title="Edit User", data=user, status_message='Unknown error.')
def get_session_each(self, stream_type='', session=None): session_output = None plex_watch = plexwatch.PlexWatch() if stream_type == 'track': if session.getElementsByTagName('TranscodeSession'): transcode_session = session.getElementsByTagName('TranscodeSession')[0] audio_decision = helpers.get_xml_attr(transcode_session, 'audioDecision') audio_channels = helpers.get_xml_attr(transcode_session, 'audioChannels') audio_codec = helpers.get_xml_attr(transcode_session, 'audioCodec') duration = helpers.get_xml_attr(transcode_session, 'duration') progress = helpers.get_xml_attr(session, 'viewOffset') else: media_info = session.getElementsByTagName('Media')[0] audio_decision = 'direct play' audio_channels = helpers.get_xml_attr(media_info, 'audioChannels') audio_codec = helpers.get_xml_attr(media_info, 'audioCodec') duration = helpers.get_xml_attr(media_info, 'duration') progress = helpers.get_xml_attr(session, 'viewOffset') session_output = {'session_key': helpers.get_xml_attr(session, 'sessionKey'), 'art': helpers.get_xml_attr(session, 'art'), 'parent_thumb': helpers.get_xml_attr(session, 'parentThumb'), 'thumb': helpers.get_xml_attr(session, 'thumb'), 'user': helpers.get_xml_attr(session.getElementsByTagName('User')[0], 'title'), 'friendly_name': plex_watch.get_user_friendly_name( helpers.get_xml_attr(session.getElementsByTagName('User')[0], 'title')), 'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'), 'state': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'), 'grandparent_title': helpers.get_xml_attr(session, 'grandparentTitle'), 'parent_title': helpers.get_xml_attr(session, 'parentTitle'), 'title': helpers.get_xml_attr(session, 'title'), 'rating_key': helpers.get_xml_attr(session, 'ratingKey'), 'audio_decision': audio_decision, 'audio_channels': audio_channels, 'audio_codec': audio_codec, 'video_decision': '', 'video_codec': '', 'height': '', 'width': '', 'duration': duration, 'progress': progress, 'progress_percent': str(helpers.get_percent(progress, duration)), 'type': 'track', 'indexes': 0 } elif stream_type == 'video': if session.getElementsByTagName('TranscodeSession'): transcode_session = session.getElementsByTagName('TranscodeSession')[0] audio_decision = helpers.get_xml_attr(transcode_session, 'audioDecision') audio_channels = helpers.get_xml_attr(transcode_session, 'audioChannels') audio_codec = helpers.get_xml_attr(transcode_session, 'audioCodec') video_decision = helpers.get_xml_attr(transcode_session, 'videoDecision') video_codec = helpers.get_xml_attr(transcode_session, 'videoCodec') width = helpers.get_xml_attr(transcode_session, 'width') height = helpers.get_xml_attr(transcode_session, 'height') duration = helpers.get_xml_attr(session, 'duration') progress = helpers.get_xml_attr(session, 'viewOffset') else: media_info = session.getElementsByTagName('Media')[0] audio_decision = 'direct play' audio_channels = helpers.get_xml_attr(media_info, 'audioChannels') audio_codec = helpers.get_xml_attr(media_info, 'audioCodec') video_decision = 'direct play' video_codec = helpers.get_xml_attr(media_info, 'videoCodec') width = helpers.get_xml_attr(media_info, 'width') height = helpers.get_xml_attr(media_info, 'height') duration = helpers.get_xml_attr(media_info, 'duration') progress = helpers.get_xml_attr(session, 'viewOffset') media_info = session.getElementsByTagName('Media')[0] if media_info.getElementsByTagName('Part'): indexes = helpers.get_xml_attr(media_info.getElementsByTagName('Part')[0], 'indexes') part_id = helpers.get_xml_attr(media_info.getElementsByTagName('Part')[0], 'id') if indexes == 'sd': bif_thumb = '/library/parts/' + part_id + '/indexes/sd/' + progress else: bif_thumb = '' else: indexes = '' bif_thumb = '' if plexpy.CONFIG.PMS_USE_BIF and indexes == 'sd': thumb = bif_thumb use_indexes = 1 else: thumb = helpers.get_xml_attr(session, 'thumb') use_indexes = 0 if helpers.get_xml_attr(session, 'type') == 'episode': session_output = {'session_key': helpers.get_xml_attr(session, 'sessionKey'), 'art': helpers.get_xml_attr(session, 'art'), 'parent_thumb': helpers.get_xml_attr(session, 'parentThumb'), 'thumb': thumb, 'user': helpers.get_xml_attr(session.getElementsByTagName('User')[0], 'title'), 'friendly_name': plex_watch.get_user_friendly_name( helpers.get_xml_attr(session.getElementsByTagName('User')[0], 'title')), 'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'), 'state': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'), 'grandparent_title': helpers.get_xml_attr(session, 'grandparentTitle'), 'parent_title': helpers.get_xml_attr(session, 'parentTitle'), 'title': helpers.get_xml_attr(session, 'title'), 'rating_key': helpers.get_xml_attr(session, 'ratingKey'), 'audio_decision': audio_decision, 'audio_channels': audio_channels, 'audio_codec': audio_codec, 'video_decision': video_decision, 'video_codec': video_codec, 'height': height, 'width': width, 'duration': duration, 'progress': progress, 'progress_percent': str(helpers.get_percent(progress, duration)), 'type': helpers.get_xml_attr(session, 'type'), 'indexes': use_indexes } elif helpers.get_xml_attr(session, 'type') == 'movie': session_output = {'session_key': helpers.get_xml_attr(session, 'sessionKey'), 'art': helpers.get_xml_attr(session, 'art'), 'thumb': thumb, 'parent_thumb': helpers.get_xml_attr(session, 'parentThumb'), 'user': helpers.get_xml_attr(session.getElementsByTagName('User')[0], 'title'), 'friendly_name': plex_watch.get_user_friendly_name( helpers.get_xml_attr(session.getElementsByTagName('User')[0], 'title')), 'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'), 'state': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'), 'grandparent_title': helpers.get_xml_attr(session, 'grandparentTitle'), 'parent_title': helpers.get_xml_attr(session, 'parentTitle'), 'title': helpers.get_xml_attr(session, 'title'), 'rating_key': helpers.get_xml_attr(session, 'ratingKey'), 'audio_decision': audio_decision, 'audio_channels': audio_channels, 'audio_codec': audio_codec, 'video_decision': video_decision, 'video_codec': video_codec, 'height': height, 'width': width, 'duration': duration, 'progress': progress, 'progress_percent': str(helpers.get_percent(progress, duration)), 'type': helpers.get_xml_attr(session, 'type'), 'indexes': use_indexes } elif helpers.get_xml_attr(session, 'type') == 'clip': session_output = {'session_key': helpers.get_xml_attr(session, 'sessionKey'), 'art': helpers.get_xml_attr(session, 'art'), 'thumb': thumb, 'parent_thumb': helpers.get_xml_attr(session, 'parentThumb'), 'user': helpers.get_xml_attr(session.getElementsByTagName('User')[0], 'title'), 'friendly_name': plex_watch.get_user_friendly_name( helpers.get_xml_attr(session.getElementsByTagName('User')[0], 'title')), 'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'), 'state': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'), 'grandparent_title': helpers.get_xml_attr(session, 'grandparentTitle'), 'parent_title': helpers.get_xml_attr(session, 'parentTitle'), 'title': helpers.get_xml_attr(session, 'title'), 'rating_key': helpers.get_xml_attr(session, 'ratingKey'), 'audio_decision': audio_decision, 'audio_channels': audio_channels, 'audio_codec': audio_codec, 'video_decision': video_decision, 'video_codec': video_codec, 'height': height, 'width': width, 'duration': duration, 'progress': progress, 'progress_percent': str(helpers.get_percent(progress, duration)), 'type': helpers.get_xml_attr(session, 'type'), 'indexes': 0 } else: logger.warn(u"No known stream types found in session list.") return session_output