diff --git a/data/interfaces/default/edit_user.html b/data/interfaces/default/edit_user.html index 717c67a0..213427df 100644 --- a/data/interfaces/default/edit_user.html +++ b/data/interfaces/default/edit_user.html @@ -31,7 +31,7 @@ DOCUMENTATION :: END
-
+
@@ -40,11 +40,11 @@ DOCUMENTATION :: END
-
+
-

Change the users profile picture in plexpy. You should save the URL if you would like to go back as this replaces the existing one.

+

Change the users profile picture in PlexPy.

diff --git a/plexpy/__init__.py b/plexpy/__init__.py index 4881c37d..ed0c1b5d 100644 --- a/plexpy/__init__.py +++ b/plexpy/__init__.py @@ -388,7 +388,7 @@ def dbcheck(): 'user_id INTEGER DEFAULT NULL UNIQUE, username TEXT NOT NULL UNIQUE, ' 'friendly_name TEXT, thumb TEXT, email TEXT, is_home_user INTEGER DEFAULT NULL, ' 'is_allow_sync INTEGER DEFAULT NULL, is_restricted INTEGER DEFAULT NULL, do_notify INTEGER DEFAULT 1, ' - 'keep_history INTEGER DEFAULT 1)' + 'keep_history INTEGER DEFAULT 1, custom_avatar_url TEXT)' ) # Upgrade sessions table from earlier versions @@ -534,29 +534,29 @@ def dbcheck(): 'on_pause INTEGER, on_resume INTEGER, on_buffer INTEGER)' ) - # Upgrade sessions table from earlier versions + # Upgrade users table from earlier versions try: c_db.execute('SELECT do_notify from users') except sqlite3.OperationalError: - logger.debug(u"Altering database. Updating database table sessions.") + logger.debug(u"Altering database. Updating database table users.") c_db.execute( 'ALTER TABLE users ADD COLUMN do_notify INTEGER DEFAULT 1' ) - # Upgrade sessions table from earlier versions + # Upgrade users table from earlier versions try: c_db.execute('SELECT keep_history from users') except sqlite3.OperationalError: - logger.debug(u"Altering database. Updating database table sessions.") + logger.debug(u"Altering database. Updating database table users.") c_db.execute( 'ALTER TABLE users ADD COLUMN keep_history INTEGER DEFAULT 1' ) - # Upgrade sessions table from earlier versions + # Upgrade notify_log table from earlier versions try: c_db.execute('SELECT on_pause from notify_log') except sqlite3.OperationalError: - logger.debug(u"Altering database. Updating database table sessions.") + logger.debug(u"Altering database. Updating database table notify_log.") c_db.execute( 'ALTER TABLE notify_log ADD COLUMN on_pause INTEGER' ) @@ -579,6 +579,15 @@ def dbcheck(): 'ALTER TABLE sessions ADD COLUMN buffer_last_triggered INTEGER' ) + # Upgrade users table from earlier versions + try: + c_db.execute('SELECT custom_avatar_url from users') + except sqlite3.OperationalError: + logger.debug(u"Altering database. Updating database table users.") + c_db.execute( + 'ALTER TABLE users ADD COLUMN custom_avatar_url TEXT' + ) + conn_db.commit() c_db.close() diff --git a/plexpy/datafactory.py b/plexpy/datafactory.py index 28b6ec3e..1601ff40 100644 --- a/plexpy/datafactory.py +++ b/plexpy/datafactory.py @@ -30,7 +30,7 @@ class DataFactory(object): data_tables = datatables.DataTables() columns = ['users.user_id as user_id', - 'users.thumb as thumb', + 'users.custom_avatar_url as thumb', '(case when users.friendly_name is null then users.username else \ users.friendly_name end) as friendly_name', 'MAX(session_history.started) as last_seen', @@ -256,7 +256,7 @@ class DataFactory(object): monitor_db = database.MonitorDatabase() control_value_dict = {"user_id": user_id} - new_value_dict = {"thumb": profile_url} + new_value_dict = {"custom_avatar_url": profile_url} try: monitor_db.upsert('users', new_value_dict, control_value_dict) except Exception, e: @@ -268,7 +268,7 @@ class DataFactory(object): monitor_db = database.MonitorDatabase() control_value_dict = {"username": user} - new_value_dict = {"thumb": profile_url} + new_value_dict = {"custom_avatar_url": profile_url} try: monitor_db.upsert('users', new_value_dict, control_value_dict) except Exception, e: @@ -279,7 +279,7 @@ class DataFactory(object): monitor_db = database.MonitorDatabase() query = 'select username, ' \ '(CASE WHEN friendly_name IS NULL THEN username ELSE friendly_name END),' \ - 'do_notify, keep_history, thumb ' \ + 'do_notify, keep_history, custom_avatar_url as thumb ' \ 'FROM users WHERE user_id = ?' result = monitor_db.select(query, args=[user_id]) if result: @@ -303,7 +303,7 @@ class DataFactory(object): monitor_db = database.MonitorDatabase() query = 'select user_id, ' \ '(CASE WHEN friendly_name IS NULL THEN username ELSE friendly_name END),' \ - 'do_notify, keep_history, thumb ' \ + 'do_notify, keep_history, custom_avatar_url as thumb ' \ 'FROM users WHERE username = ?' result = monitor_db.select(query, args=[user]) if result: @@ -347,7 +347,7 @@ class DataFactory(object): if user: query = 'SELECT user_id, username, friendly_name, email, ' \ - 'thumb, is_home_user, is_allow_sync, is_restricted, do_notify ' \ + 'custom_avatar_url as thumb, is_home_user, is_allow_sync, is_restricted, do_notify ' \ 'FROM users ' \ 'WHERE username = ? ' \ 'UNION ALL ' \ @@ -359,7 +359,7 @@ class DataFactory(object): result = monitor_db.select(query, args=[user, user]) elif user_id: query = 'SELECT user_id, username, friendly_name, email, ' \ - 'thumb, is_home_user, is_allow_sync, is_restricted, do_notify ' \ + 'custom_avatar_url as thumb, is_home_user, is_allow_sync, is_restricted, do_notify ' \ 'FROM users ' \ 'WHERE user_id = ? ' \ 'UNION ALL ' \ @@ -402,7 +402,7 @@ class DataFactory(object): # Refresh users plextv.refresh_users() query = 'SELECT user_id, username, friendly_name, email, ' \ - 'thumb, is_home_user, is_allow_sync, is_restricted, do_notify ' \ + 'custom_avatar_url as thumb, is_home_user, is_allow_sync, is_restricted, do_notify ' \ 'FROM users ' \ 'WHERE username = ? ' \ 'UNION ALL ' \ @@ -416,7 +416,7 @@ class DataFactory(object): # Refresh users plextv.refresh_users() query = 'SELECT user_id, username, friendly_name, email, ' \ - 'thumb, is_home_user, is_allow_sync, is_restricted, do_notify ' \ + 'custom_avatar_url as thumb, is_home_user, is_allow_sync, is_restricted, do_notify ' \ 'FROM users ' \ 'WHERE user_id = ? ' \ 'UNION ALL ' \ @@ -566,7 +566,7 @@ class DataFactory(object): 'users.friendly_name end) as friendly_name,' \ 'COUNT(session_history.id) as total_plays, ' \ 'MAX(session_history.started) as last_watch, ' \ - 'users.thumb, ' \ + 'users.custom_avatar_url as thumb, ' \ 'users.user_id ' \ 'FROM session_history ' \ 'JOIN session_history_metadata ON session_history.id = session_history_metadata.id ' \ diff --git a/plexpy/monitor.py b/plexpy/monitor.py index f3b13355..1d93fa74 100644 --- a/plexpy/monitor.py +++ b/plexpy/monitor.py @@ -72,7 +72,7 @@ def check_active_sessions(): monitor_db.action('UPDATE sessions SET paused_counter = ? ' 'WHERE session_key = ? AND rating_key = ?', [paused_counter, stream['session_key'], stream['rating_key']]) - if session['state'] == 'buffering': + if session['state'] == 'buffering' and plexpy.CONFIG.BUFFER_THRESHOLD > 0: # The stream is buffering so we need to increment the buffer_count # We're going just increment on every monitor ping, # would be difficult to keep track otherwise @@ -107,6 +107,12 @@ def check_active_sessions(): plexpy.CONFIG.BUFFER_WAIT: logger.info(u"PlexPy Monitor :: User '%s' has triggered multiple buffer warnings." % stream['user']) + # Set the buffer trigger time + monitor_db.action('UPDATE sessions ' + 'SET buffer_last_triggered = strftime("%s","now") ' + 'WHERE session_key = ? AND rating_key = ?', + [stream['session_key'], stream['rating_key']]) + threading.Thread(target=notification_handler.notify, kwargs=dict(stream_data=stream, notify_action='buffer')).start() diff --git a/plexpy/plextv.py b/plexpy/plextv.py index d130b864..8ca98957 100644 --- a/plexpy/plextv.py +++ b/plexpy/plextv.py @@ -37,6 +37,15 @@ def refresh_users(): "is_restricted": item['is_restricted'] } + # Check if we've set a custom avatar if so don't overwrite it. + avatar_urls = monitor_db.select('SELECT thumb, custom_avatar_url ' + 'FROM users WHERE user_id = ?', + [item['user_id']]) + + 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'] + monitor_db.upsert('users', new_value_dict, control_value_dict) logger.info("Users list refreshed.") diff --git a/plexpy/webserve.py b/plexpy/webserve.py index 4e1d1bac..9555f5e4 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -186,6 +186,11 @@ class WebInterface(object): keep_history = kwargs.get('keep_history') else: keep_history = 0 + if 'thumb' in kwargs: + custom_avatar = kwargs['thumb'] + else: + custom_avatar = '' + if user_id: try: data_factory = datafactory.DataFactory() @@ -194,7 +199,7 @@ class WebInterface(object): do_notify=do_notify, keep_history=keep_history) data_factory.set_user_profile_url(user_id=user_id, - profile_url=kwargs['thumb']) + profile_url=custom_avatar) status_message = "Successfully updated user." return status_message @@ -209,7 +214,7 @@ class WebInterface(object): do_notify=do_notify, keep_history=keep_history) data_factory.set_user_profile_url(user=user, - profile_url=kwargs['thumb']) + profile_url=custom_avatar) status_message = "Successfully updated user." return status_message