diff --git a/plexpy/activity_handler.py b/plexpy/activity_handler.py index 9f7e816a..f056d93f 100644 --- a/plexpy/activity_handler.py +++ b/plexpy/activity_handler.py @@ -14,7 +14,7 @@ # along with PlexPy. If not, see . import time -from plexpy import logger, datafactory, pmsconnect, activity_processor, threading, notification_handler +from plexpy import logger, pmsconnect, activity_processor, threading, notification_handler class ActivityHandler(object): @@ -66,16 +66,16 @@ class ActivityHandler(object): logger.debug(u"PlexPy ActivityHandler :: Session %s has stopped." % str(self.get_session_key())) # Set the session last_paused timestamp - data_factory = datafactory.DataFactory() - data_factory.set_session_last_paused(session_key=self.get_session_key(), timestamp=None) + ap = activity_processor.ActivityProcessor() + ap.set_session_last_paused(session_key=self.get_session_key(), timestamp=None) # Update the session state and viewOffset - data_factory.set_session_state(session_key=self.get_session_key(), - state=self.timeline['state'], - view_offset=self.timeline['viewOffset']) + ap.set_session_state(session_key=self.get_session_key(), + state=self.timeline['state'], + view_offset=self.timeline['viewOffset']) # Retrieve the session data from our temp table - db_session = data_factory.get_session_by_key(session_key=self.get_session_key()) + db_session = ap.get_session_by_key(session_key=self.get_session_key()) # Fire off notifications threading.Thread(target=notification_handler.notify, @@ -86,7 +86,7 @@ class ActivityHandler(object): monitor_proc.write_session_history(session=db_session) # Remove the session from our temp session table - data_factory.delete_session(session_key=self.get_session_key()) + ap.delete_session(session_key=self.get_session_key()) def on_buffer(self): pass @@ -96,16 +96,16 @@ class ActivityHandler(object): logger.debug(u"PlexPy ActivityHandler :: Session %s has been paused." % str(self.get_session_key())) # Set the session last_paused timestamp - data_factory = datafactory.DataFactory() - data_factory.set_session_last_paused(session_key=self.get_session_key(), timestamp=int(time.time())) + ap = activity_processor.ActivityProcessor() + ap.set_session_last_paused(session_key=self.get_session_key(), timestamp=int(time.time())) # Update the session state and viewOffset - data_factory.set_session_state(session_key=self.get_session_key(), - state=self.timeline['state'], - view_offset=self.timeline['viewOffset']) + ap.set_session_state(session_key=self.get_session_key(), + state=self.timeline['state'], + view_offset=self.timeline['viewOffset']) # Retrieve the session data from our temp table - db_session = data_factory.get_session_by_key(session_key=self.get_session_key()) + db_session = ap.get_session_by_key(session_key=self.get_session_key()) # Fire off notifications threading.Thread(target=notification_handler.notify, @@ -116,16 +116,16 @@ class ActivityHandler(object): logger.debug(u"PlexPy ActivityHandler :: Session %s has been resumed." % str(self.get_session_key())) # Set the session last_paused timestamp - data_factory = datafactory.DataFactory() - data_factory.set_session_last_paused(session_key=self.get_session_key(), timestamp=None) + ap = activity_processor.ActivityProcessor() + ap.set_session_last_paused(session_key=self.get_session_key(), timestamp=None) # Update the session state and viewOffset - data_factory.set_session_state(session_key=self.get_session_key(), - state=self.timeline['state'], - view_offset=self.timeline['viewOffset']) + ap.set_session_state(session_key=self.get_session_key(), + state=self.timeline['state'], + view_offset=self.timeline['viewOffset']) # Retrieve the session data from our temp table - db_session = data_factory.get_session_by_key(session_key=self.get_session_key()) + db_session = ap.get_session_by_key(session_key=self.get_session_key()) # Fire off notifications threading.Thread(target=notification_handler.notify, @@ -134,8 +134,8 @@ class ActivityHandler(object): # This function receives events from our websocket connection def process(self): if self.is_valid_session(): - data_factory = datafactory.DataFactory() - db_session = data_factory.get_session_by_key(session_key=self.get_session_key()) + ap = activity_processor.ActivityProcessor() + db_session = ap.get_session_by_key(session_key=self.get_session_key()) # If we already have this session in the temp table, check for state changes if db_session: diff --git a/plexpy/activity_processor.py b/plexpy/activity_processor.py index a41c7609..24edc719 100644 --- a/plexpy/activity_processor.py +++ b/plexpy/activity_processor.py @@ -271,3 +271,59 @@ class ActivityProcessor(object): logger.debug(u"PlexPy Monitor :: Unable to find IP address on fallback search. Not logging IP address.") return None + + def get_session_by_key(self, session_key=None): + if str(session_key).isdigit(): + result = self.db.select('SELECT started, session_key, rating_key, media_type, title, parent_title, ' + 'grandparent_title, user_id, user, friendly_name, ip_address, player, ' + 'platform, machine_id, parent_rating_key, grandparent_rating_key, state, ' + 'view_offset, duration, video_decision, audio_decision, width, height, ' + 'container, video_codec, audio_codec, bitrate, video_resolution, ' + 'video_framerate, aspect_ratio, audio_channels, transcode_protocol, ' + 'transcode_container, transcode_video_codec, transcode_audio_codec, ' + 'transcode_audio_channels, transcode_width, transcode_height, ' + 'paused_counter, last_paused ' + 'FROM sessions WHERE session_key = ? LIMIT 1', args=[session_key]) + for session in result: + if session: + return session + + return None + + def set_session_state(self, session_key=None, state=None, view_offset=0): + if str(session_key).isdigit() and str(view_offset).isdigit(): + values = {'view_offset': int(view_offset)} + if state: + values['state'] = state + + keys = {'session_key': session_key} + result = self.db.upsert('sessions', values, keys) + + return result + + return None + + def delete_session(self, session_key=None): + if str(session_key).isdigit(): + self.db.action('DELETE FROM sessions WHERE session_key = ?', [session_key]) + + def set_session_last_paused(self, session_key=None, timestamp=None): + if str(session_key).isdigit(): + result = self.db.select('SELECT last_paused, paused_counter ' + 'FROM sessions ' + 'WHERE session_key = ?', args=[session_key]) + + paused_counter = None + for session in result: + if session['last_paused']: + paused_offset = int(time.time()) - int(session['last_paused']) + paused_counter = int(session['paused_counter']) + int(paused_offset) + + values = {'state': 'playing', + 'last_paused': timestamp + } + if paused_counter: + values['paused_counter'] = paused_counter + + keys = {'session_key': session_key} + self.db.upsert('sessions', values, keys) diff --git a/plexpy/datafactory.py b/plexpy/datafactory.py index 8ba72e23..2343ce42 100644 --- a/plexpy/datafactory.py +++ b/plexpy/datafactory.py @@ -779,68 +779,3 @@ class DataFactory(object): else: return 'Unable to delete items. Input user_id not valid.' - def get_session_by_key(self, session_key=None): - monitor_db = database.MonitorDatabase() - - if str(session_key).isdigit(): - result = monitor_db.select('SELECT started, session_key, rating_key, media_type, title, parent_title, ' - 'grandparent_title, user_id, user, friendly_name, ip_address, player, ' - 'platform, machine_id, parent_rating_key, grandparent_rating_key, state, ' - 'view_offset, duration, video_decision, audio_decision, width, height, ' - 'container, video_codec, audio_codec, bitrate, video_resolution, ' - 'video_framerate, aspect_ratio, audio_channels, transcode_protocol, ' - 'transcode_container, transcode_video_codec, transcode_audio_codec, ' - 'transcode_audio_channels, transcode_width, transcode_height, ' - 'paused_counter, last_paused ' - 'FROM sessions WHERE session_key = ? LIMIT 1', args=[session_key]) - for session in result: - if session: - return session - - return None - - def set_session_state(self, session_key=None, state=None, view_offset=0): - monitor_db = database.MonitorDatabase() - - if str(session_key).isdigit() and str(view_offset).isdigit(): - values = {'view_offset': int(view_offset)} - if state: - values['state'] = state - - keys = {'session_key': session_key} - result = monitor_db.upsert('sessions', values, keys) - - return result - - return None - - def delete_session(self, session_key=None): - monitor_db = database.MonitorDatabase() - - if str(session_key).isdigit(): - monitor_db.action('DELETE FROM sessions WHERE session_key = ?', [session_key]) - - def set_session_last_paused(self, session_key=None, timestamp=None): - import time - - if str(session_key).isdigit(): - monitor_db = database.MonitorDatabase() - - result = monitor_db.select('SELECT last_paused, paused_counter ' - 'FROM sessions ' - 'WHERE session_key = ?', args=[session_key]) - - paused_counter = None - for session in result: - if session['last_paused']: - paused_offset = int(time.time()) - int(session['last_paused']) - paused_counter = int(session['paused_counter']) + int(paused_offset) - - values = {'state': 'playing', - 'last_paused': timestamp - } - if paused_counter: - values['paused_counter'] = paused_counter - - keys = {'session_key': session_key} - monitor_db.upsert('sessions', values, keys) \ No newline at end of file