diff --git a/data/interfaces/default/css/plexpy.css b/data/interfaces/default/css/plexpy.css index 14cd9c60..2571667a 100644 --- a/data/interfaces/default/css/plexpy.css +++ b/data/interfaces/default/css/plexpy.css @@ -688,6 +688,14 @@ a:hover .dashboard-activity-poster { white-space: nowrap; width: 150px; } +.dashboard-activity-poster-info-ip-address { + position: absolute; + bottom: 5px; + left: 10px; + text-align: left; + font-size: 12px; + color: #eee; +} .dashboard-activity-poster-info-time { position: absolute; bottom: 5px; diff --git a/data/interfaces/default/current_activity.html b/data/interfaces/default/current_activity.html index b118d47f..ad78ee22 100644 --- a/data/interfaces/default/current_activity.html +++ b/data/interfaces/default/current_activity.html @@ -32,6 +32,7 @@ user_thumb Returns the profile picture of the user owning the s state Returns the state of the current session. Either 'playing', 'paused' or 'buffering'. title Returns the name of the episode, movie or music track. year Returns the year of the episode, movie, or clip. +ip_address Returns the ip address of the stream. player Returns the name of the platform used to play the stream. platform Returns the type of platform used to play the stream. throttled Returns true if the transcode session is throttled. @@ -191,6 +192,13 @@ DOCUMENTATION :: END % if a['media_type'] != 'photo':
+
+ % if a['ip_address']: + IP: ${a['ip_address']} + % else: + IP: N/A + % endif +
${a['view_offset']}/${a['duration']}
diff --git a/data/interfaces/default/settings.html b/data/interfaces/default/settings.html index ba7f08dd..76a8551f 100644 --- a/data/interfaces/default/settings.html +++ b/data/interfaces/default/settings.html @@ -435,7 +435,7 @@ available_notification_agents = sorted(notifiers.available_notification_agents()

- Enable this to attempt to log the IP address of the user. + Enable this to attempt to log the IP address of the user (for PMS 0.9.12 and below, IP address is automatically logged for PMS 0.9.14 and above).

@@ -882,13 +882,17 @@ available_notification_agents = sorted(notifiers.available_notification_agents() {player} The name of the device being used for playback. + + {ip_address} + The IP address of the device being used for playback. (PMS 0.9.14 and above) + {media_type} The type of media being played (movie, episode, track). {title} - The title of the item being played. + The full title of the item being played. {show_name} @@ -906,6 +910,10 @@ available_notification_agents = sorted(notifiers.available_notification_agents() {album_name} The title of the album being played. + + {track_name} + The title of the track being played. + {season_num} The season number for the media item if item is episode. diff --git a/plexpy/activity_processor.py b/plexpy/activity_processor.py index 95b43fe1..db290c2d 100644 --- a/plexpy/activity_processor.py +++ b/plexpy/activity_processor.py @@ -39,6 +39,7 @@ class ActivityProcessor(object): 'parent_title': session['parent_title'], 'grandparent_title': session['grandparent_title'], 'friendly_name': session['friendly_name'], + 'ip_address': session['ip_address'], 'player': session['player'], 'platform': session['platform'], 'parent_rating_key': session['parent_rating_key'], @@ -78,16 +79,16 @@ class ActivityProcessor(object): kwargs=dict(stream_data=values, notify_action='play')).start() started = int(time.time()) + timestamp = {'started': started} - # Try and grab IP address from logs - if plexpy.CONFIG.IP_LOGGING_ENABLE and plexpy.CONFIG.PMS_LOGS_FOLDER: - ip_address = self.find_session_ip(rating_key=session['rating_key'], - machine_id=session['machine_id']) - else: - ip_address = None - - timestamp = {'started': started, - 'ip_address': ip_address} + # Try and grab IP address from logs (fallback if not on PMS 0.9.14 and above) + if not session['ip_address']: + if plexpy.CONFIG.IP_LOGGING_ENABLE and plexpy.CONFIG.PMS_LOGS_FOLDER: + ip_address = self.find_session_ip(rating_key=session['rating_key'], + machine_id=session['machine_id']) + timestamp.update({'ip_address': ip_address}) + else: + timestamp.update({'ip_address': None}) # If it's our first write then time stamp it. self.db.upsert('sessions', timestamp, keys) diff --git a/plexpy/datafactory.py b/plexpy/datafactory.py index b03d1c64..38c4e5ce 100644 --- a/plexpy/datafactory.py +++ b/plexpy/datafactory.py @@ -998,4 +998,20 @@ class DataFactory(object): else: return 'No updated rating key needed in database. No changes were made.' # for debugging - #return mapping \ No newline at end of file + #return mapping + + def get_session_ip(self, session_key=''): + monitor_db = database.MonitorDatabase() + + if session_key: + query = 'SELECT ip_address FROM sessions WHERE session_key = %d' % int(session_key) + result = monitor_db.select(query) + else: + return None + + ip_address = 'N/A' + + for item in result: + ip_address = item[0] + + return ip_address diff --git a/plexpy/notification_handler.py b/plexpy/notification_handler.py index af7d6a80..f85887f4 100644 --- a/plexpy/notification_handler.py +++ b/plexpy/notification_handler.py @@ -355,6 +355,7 @@ def build_notify_text(session=None, timeline=None, state=None): user = '' platform = '' player = '' + ip_address = 'N/A' # Session values if session: @@ -383,6 +384,7 @@ def build_notify_text(session=None, timeline=None, state=None): user = session['friendly_name'] platform = session['platform'] player = session['player'] + ip_address = session['ip_address'] if session['ip_address'] != '' else 'N/A' progress_percent = helpers.get_percent(view_offset, duration) @@ -390,12 +392,14 @@ def build_notify_text(session=None, timeline=None, state=None): 'user': user, 'platform': platform, 'player': player, + 'ip_address': ip_address, 'media_type': metadata['media_type'], 'title': full_title, 'show_name': metadata['grandparent_title'], 'episode_name': metadata['title'], 'artist_name': metadata['grandparent_title'], 'album_name': metadata['parent_title'], + 'track_name': metadata['title'], 'season_num': metadata['parent_index'], 'season_num00': metadata['parent_index'].zfill(2), 'episode_num': metadata['index'], diff --git a/plexpy/pmsconnect.py b/plexpy/pmsconnect.py index fdecfae6..a53e9f4b 100644 --- a/plexpy/pmsconnect.py +++ b/plexpy/pmsconnect.py @@ -756,6 +756,7 @@ class PmsConnect(object): 'user_id': user_details['user_id'], 'friendly_name': user_details['friendly_name'], 'user_thumb': user_details['thumb'], + 'ip_address': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'address'), 'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title'), 'platform': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'), 'machine_id': machine_id, @@ -876,6 +877,7 @@ class PmsConnect(object): 'user_id': user_details['user_id'], 'friendly_name': user_details['friendly_name'], 'user_thumb': user_details['thumb'], + 'ip_address': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'address'), 'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title'), 'platform': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'), 'machine_id': machine_id, @@ -932,6 +934,7 @@ class PmsConnect(object): 'user_id': user_details['user_id'], 'friendly_name': user_details['friendly_name'], 'user_thumb': user_details['thumb'], + 'ip_address': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'address'), 'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title'), 'platform': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'), 'machine_id': machine_id, @@ -988,6 +991,7 @@ class PmsConnect(object): 'user_id': user_details['user_id'], 'friendly_name': user_details['friendly_name'], 'user_thumb': user_details['thumb'], + 'ip_address': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'address'), 'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title'), 'platform': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'), 'machine_id': machine_id, @@ -1077,6 +1081,7 @@ class PmsConnect(object): 'user_id': user_details['user_id'], 'friendly_name': user_details['friendly_name'], 'user_thumb': user_details['thumb'], + 'ip_address': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'address'), 'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title'), 'platform': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'), 'machine_id': machine_id, diff --git a/plexpy/webserve.py b/plexpy/webserve.py index 7c2a7986..4e0d4937 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -711,6 +711,12 @@ class WebInterface(object): try: pms_connect = pmsconnect.PmsConnect() result = pms_connect.get_current_activity() + + data_factory = datafactory.DataFactory() + for session in result['sessions']: + if not session['ip_address']: + ip_address = data_factory.get_session_ip(session['session_key']) + session['ip_address'] = ip_address except: return serve_template(templatename="current_activity.html", data=None)