diff --git a/data/interfaces/default/scheduler_table.html b/data/interfaces/default/scheduler_table.html
index 29aff91b..f814973e 100644
--- a/data/interfaces/default/scheduler_table.html
+++ b/data/interfaces/default/scheduler_table.html
@@ -42,7 +42,7 @@ DOCUMENTATION :: END
${arrow.get(next_run_interval).format('HH:mm:ss')} |
${arrow.get(sched_job.next_run_time).format('YYYY-MM-DD HH:mm:ss')} |
- % elif job == 'Check for active sessions' and plexpy.CONFIG.MONITORING_USE_WEBSOCKET and not plexpy.POLLING_FAILOVER:
+ % elif job in ('Check for active sessions', 'Check for recently added items') and plexpy.CONFIG.MONITORING_USE_WEBSOCKET and not plexpy.POLLING_FAILOVER:
${job} |
Using Websocket |
diff --git a/plexpy/__init__.py b/plexpy/__init__.py
index cee06bcb..6e561c6c 100644
--- a/plexpy/__init__.py
+++ b/plexpy/__init__.py
@@ -308,8 +308,6 @@ def initialize_scheduler():
schedule_job(pmsconnect.get_server_friendly_name, 'Refresh Plex server name',
hours=12, minutes=0, seconds=0)
- schedule_job(activity_pinger.check_recently_added, 'Check for recently added items',
- hours=0, minutes=0, seconds=monitor_seconds * bool(CONFIG.NOTIFY_RECENTLY_ADDED))
schedule_job(activity_pinger.check_server_response, 'Check for Plex remote access',
hours=0, minutes=0, seconds=monitor_seconds * bool(CONFIG.MONITOR_REMOTE_ACCESS))
schedule_job(activity_pinger.check_server_updates, 'Check for Plex updates',
@@ -319,6 +317,8 @@ def initialize_scheduler():
if not CONFIG.MONITORING_USE_WEBSOCKET or POLLING_FAILOVER:
schedule_job(activity_pinger.check_active_sessions, 'Check for active sessions',
hours=0, minutes=0, seconds=monitor_seconds)
+ schedule_job(activity_pinger.check_recently_added, 'Check for recently added items',
+ hours=0, minutes=0, seconds=monitor_seconds * bool(CONFIG.NOTIFY_RECENTLY_ADDED))
# Refresh the users list and libraries list
user_hours = CONFIG.REFRESH_USERS_INTERVAL if 1 <= CONFIG.REFRESH_USERS_INTERVAL <= 24 else 12
diff --git a/plexpy/activity_handler.py b/plexpy/activity_handler.py
index d5954a3e..f7cc052d 100644
--- a/plexpy/activity_handler.py
+++ b/plexpy/activity_handler.py
@@ -26,6 +26,8 @@ import notifiers
import pmsconnect
+RECENTLY_ADDED_WAITLIST = []
+
class ActivityHandler(object):
def __init__(self, timeline):
@@ -84,7 +86,7 @@ class ActivityHandler(object):
def on_stop(self, force_stop=False):
if self.is_valid_session():
- logger.debug(u"PlexPy ActivityHandler :: Session %s has stopped." % str(self.get_session_key()))
+ logger.debug(u"PlexPy ActivityHandler :: Session %s stopped." % str(self.get_session_key()))
# Set the session last_paused timestamp
ap = activity_processor.ActivityProcessor()
@@ -258,23 +260,34 @@ class TimelineHandler(object):
def on_created(self):
if self.is_item():
- logger.debug(u"PlexPy TimelineHandler :: Library item %s has been added to Plex." % str(self.get_rating_key()))
+ logger.debug(u"PlexPy TimelineHandler :: Library item %s added to Plex." % str(self.get_rating_key()))
+ metadata = self.get_metadata()
- # Fire off notifications
- threading.Thread(target=notification_handler.notify_timeline,
- kwargs=dict(timeline_data=self.get_metadata(), notify_action='created')).start()
+ plexpy.NOTIFY_QUEUE.put({'timeline_data': metadata, 'notify_action': 'on_created'})
# This function receives events from our websocket connection
def process(self):
if self.is_item():
+ rating_key = self.get_rating_key()
+
this_state = self.timeline['state']
this_type = self.timeline['type']
+ this_section = self.timeline['sectionID']
this_metadataState = self.timeline.get('metadataState', None)
- this_mediaState = self.timeline.get('mediaState', None)
- # state: 5: done processing metadata
+ # state: 0: created media, 5: done processing metadata
# type: 1: movie, 2: tv show, 4: episode, 8: artist, 10: track
- types = [1, 2, 4, 8, 10]
- if this_state == 5 and this_type in types and this_metadataState == None and this_mediaState == None:
+ if plexpy.CONFIG.NOTIFY_RECENTLY_ADDED_GRANDPARENT:
+ media_types = (1, 2, 8)
+ else:
+ media_types = (1, 4, 10)
+
+ if this_state == 0 and this_type in media_types and this_section > 0 and this_metadataState == "created":
+ logger.debug(u"PlexPy TimelineHandler :: Library item %s added to recently added queue." % str(rating_key))
+ RECENTLY_ADDED_WAITLIST.append(rating_key)
+
+ if this_state == 5 and this_type in media_types and this_section > 0 and rating_key in RECENTLY_ADDED_WAITLIST:
+ logger.debug(u"PlexPy TimelineHandler :: Library item %s done processing metadata." % str(rating_key))
+ RECENTLY_ADDED_WAITLIST.remove(rating_key)
self.on_created()
\ No newline at end of file
diff --git a/plexpy/web_socket.py b/plexpy/web_socket.py
index 451dee60..a95056c3 100644
--- a/plexpy/web_socket.py
+++ b/plexpy/web_socket.py
@@ -163,14 +163,14 @@ def process(opcode, data):
activity = activity_handler.ActivityHandler(timeline=time_line[0])
activity.process()
- #if type == 'timeline':
- # try:
- # time_line = info.get('_children')
- # except:
- # logger.debug(u"PlexPy WebSocket :: Timeline event found but unable to get timeline data.")
- # return False
+ if type == 'timeline':
+ try:
+ time_line = info.get('_children')
+ except:
+ logger.debug(u"PlexPy WebSocket :: Timeline event found but unable to get timeline data.")
+ return False
- # activity = activity_handler.TimelineHandler(timeline=time_line[0])
- # activity.process()
+ activity = activity_handler.TimelineHandler(timeline=time_line[0])
+ activity.process()
return True