diff --git a/data/interfaces/default/info.html b/data/interfaces/default/info.html
index 0efb697a..9a0de9ad 100644
--- a/data/interfaces/default/info.html
+++ b/data/interfaces/default/info.html
@@ -150,7 +150,7 @@ DOCUMENTATION :: END
- % if data['media_type'] == 'movie' or data['media_type'] == 'show' or data['media_type'] == 'artist':
+ % if data['media_type'] in ('movie', 'show', 'artist'):
% endif
- % if data['media_type'] == 'movie' or data['media_type'] == 'episode' or data['media_type'] == 'track':
+ % if data['media_type'] in ('movie', 'episode', 'track'):
% if data['media_type'] != 'track' and data['video_codec']:
@@ -377,7 +377,8 @@ DOCUMENTATION :: END
% else:
% endif
-
@@ -447,7 +448,7 @@ DOCUMENTATION :: END
% if data:
-% if data['media_type'] == 'show' or data['media_type'] == 'artist':
+% if data['media_type'] in ('show', 'artist'):
-% elif data['media_type'] == 'season' or data['media_type'] == 'album':
+% elif data['media_type'] in ('season', 'album'):
-% elif data['media_type'] == 'episode' or data['media_type'] == 'track' or data['media_type'] == 'movie':
+% elif data['media_type'] in ('movie', 'episode', 'track'):
-% if data['media_type'] == 'show' or data['media_type'] == 'season' or data['media_type'] == 'artist' or data['media_type'] == 'album':
+% if data['media_type'] in ('show', 'season', 'artist', 'album'):
% endif
diff --git a/plexpy/__init__.py b/plexpy/__init__.py
index 7021b7e7..c32e229e 100644
--- a/plexpy/__init__.py
+++ b/plexpy/__init__.py
@@ -477,7 +477,7 @@ def dbcheck():
'CREATE TABLE IF NOT EXISTS notify_log (id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER, '
'session_key INTEGER, rating_key INTEGER, parent_rating_key INTEGER, grandparent_rating_key INTEGER, '
'user_id INTEGER, user TEXT, notifier_id INTEGER, agent_id INTEGER, agent_name TEXT, notify_action TEXT, '
- 'subject_text TEXT, body_text TEXT, poster_url TEXT)'
+ 'subject_text TEXT, body_text TEXT)'
)
# library_sections table :: This table keeps record of the servers library sections
@@ -516,6 +516,12 @@ def dbcheck():
'on_concurrent_body TEXT, on_newdevice_body TEXT, on_plexpyupdate_body TEXT)'
)
+ # poster_urls table :: This table keeps record of the notification poster urls
+ c_db.execute(
+ 'CREATE TABLE IF NOT EXISTS poster_urls (id INTEGER PRIMARY KEY AUTOINCREMENT, '
+ 'rating_key INTEGER, poster_title TEXT, poster_url TEXT)'
+ )
+
# Upgrade sessions table from earlier versions
try:
c_db.execute('SELECT started FROM sessions')
diff --git a/plexpy/datafactory.py b/plexpy/datafactory.py
index 5b3a39d5..65900f82 100644
--- a/plexpy/datafactory.py
+++ b/plexpy/datafactory.py
@@ -1014,51 +1014,48 @@ class DataFactory(object):
return ip_address
- def get_poster_url(self, rating_key='', metadata=None):
+ def get_poster_info(self, rating_key='', metadata=None):
monitor_db = database.MonitorDatabase()
- poster_url = ''
- poster_key = []
-
- if rating_key:
- where_key = 'WHERE rating_key = ? OR parent_rating_key = ? OR grandparent_rating_key = ?'
- poster_key = [rating_key, rating_key, rating_key]
+ if str(rating_key).isdigit():
+ poster_key = rating_key
elif metadata:
if metadata['media_type'] in ('movie', 'show', 'artist'):
- where_key = 'WHERE rating_key = ?'
- poster_key = [metadata['rating_key']]
+ poster_key = metadata['rating_key']
elif metadata['media_type'] in ('season', 'album'):
- where_key = 'WHERE parent_rating_key = ?'
- poster_key = [metadata['rating_key']]
+ poster_key = metadata['rating_key']
elif metadata['media_type'] in ('episode', 'track'):
- where_key = 'WHERE parent_rating_key = ?'
- poster_key = [metadata['parent_rating_key']]
+ poster_key = metadata['parent_rating_key']
+ poster_info = {}
if poster_key:
try:
- query = 'SELECT id, poster_url FROM notify_log %s ' \
- 'ORDER BY id DESC LIMIT 1' % where_key
- result = monitor_db.select(query, args=poster_key)
+ query = 'SELECT poster_title, poster_url FROM poster_urls ' \
+ 'WHERE rating_key = ?'
+ poster_info = monitor_db.select_single(query, args=[poster_key])
except Exception as e:
logger.warn(u"PlexPy DataFactory :: Unable to execute database query for get_poster_url: %s." % e)
- return poster_url
- else:
- return poster_url
- for item in result:
- poster_url = item['poster_url']
+ return poster_info
- return poster_url
-
- def delete_poster_url(self, poster_url=''):
+ def set_poster_url(self, rating_key='', poster_title='', poster_url=''):
monitor_db = database.MonitorDatabase()
- if poster_url:
- logger.info(u"PlexPy DataFactory :: Deleting poster_url %s from the notify log database." % poster_url)
- monitor_db.upsert('notify_log', {'poster_url': None}, {'poster_url': poster_url})
- return 'Deleted poster_url %s.' % poster_url
- else:
- return 'Unable to delete poster_url.'
+ if str(rating_key).isdigit():
+ keys = {'rating_key': int(rating_key)}
+
+ values = {'poster_title': poster_title,
+ 'poster_url': poster_url}
+
+ monitor_db.upsert(table_name='poster_urls', key_dict=keys, value_dict=values)
+
+ def delete_poster_url(self, rating_key=''):
+ monitor_db = database.MonitorDatabase()
+
+ if rating_key:
+ logger.info(u"PlexPy DataFactory :: Deleting poster_url for rating_key %s from the database." % rating_key)
+ result = monitor_db.action('DELETE FROM poster_urls WHERE rating_key = ?', [rating_key])
+ return True if result else False
def get_search_query(self, rating_key=''):
monitor_db = database.MonitorDatabase()
diff --git a/plexpy/notification_handler.py b/plexpy/notification_handler.py
index 7c0c3413..3a171e62 100644
--- a/plexpy/notification_handler.py
+++ b/plexpy/notification_handler.py
@@ -187,8 +187,7 @@ def notify(notifier_id=None, notify_action=None, stream_data=None, timeline_data
notify_action=notify_action,
notifier=notifier_config,
subject=subject,
- body=body,
- parameters=parameters)
+ body=body)
def get_notify_state(session):
@@ -210,13 +209,12 @@ def get_notify_state(session):
return notify_states
-def set_notify_state(notify_action, notifier, subject, body, session=None, parameters=None):
+def set_notify_state(notify_action, notifier, subject, body, session=None):
if notify_action and notifier:
monitor_db = database.MonitorDatabase()
session = session or {}
- parameters = parameters or {}
keys = {'timestamp': int(time.time()),
'session_key': session.get('session_key', None),
@@ -231,8 +229,7 @@ def set_notify_state(notify_action, notifier, subject, body, session=None, param
'user': session.get('user', None),
'agent_name': notifier['agent_name'],
'subject_text': subject,
- 'body_text': body,
- 'poster_url': parameters.get('poster_url', None)}
+ 'body_text': body}
monitor_db.upsert(table_name='notify_log', key_dict=keys, value_dict=values)
else:
@@ -343,7 +340,8 @@ def build_media_notify_params(notify_action=None, session=None, timeline=None, *
metadata['lastfm_url'] = 'https://www.last.fm/music/' + metadata['lastfm_id']
if plexpy.CONFIG.NOTIFY_UPLOAD_POSTERS:
- metadata['poster_url'] = upload_poster(metadata=metadata)
+ poster_info = get_poster_info(metadata=metadata)
+ metadata.update(poster_info)
# Create a title
if metadata['media_type'] == 'episode' or metadata['media_type'] == 'track':
@@ -499,6 +497,7 @@ def build_media_notify_params(notify_action=None, session=None, timeline=None, *
'tagline': metadata['tagline'],
'rating': metadata['rating'],
'duration': duration,
+ 'poster_title': metadata.get('poster_title',''),
'poster_url': metadata.get('poster_url',''),
'plex_url': metadata.get('plex_url',''),
'imdb_id': metadata.get('imdb_id',''),
@@ -682,33 +681,31 @@ def format_group_index(group_keys):
return ','.join(sorted(num)) or '0', ','.join(sorted(num00)) or '00'
-def upload_poster(metadata):
- if metadata['media_type'] in ('movie', 'show', 'season', 'artist', 'album'):
- thumb = metadata['thumb']
- poster_key = metadata['rating_key']
- poster_title = metadata['title']
- elif metadata['media_type'] in ('season', 'album'):
- thumb = metadata['thumb']
- poster_key = metadata['rating_key']
- poster_title = '%s - %s' % (metadata['parent_title'],
- metadata['title'])
- elif metadata['media_type'] in ('episode', 'track'):
- thumb = metadata['parent_thumb']
- poster_key = metadata['parent_rating_key']
- poster_title = '%s - %s' % (metadata['grandparent_title'],
- metadata['parent_title'])
- else:
- thumb = None
+def get_poster_info(metadata):
+ # Try to retrieve poster info from the database
+ data_factory = datafactory.DataFactory()
+ poster_info = data_factory.get_poster_info(metadata=metadata)
- poster_url = ''
+ # If no previous poster info
+ if not poster_info:
+ if metadata['media_type'] in ('movie', 'show', 'artist'):
+ thumb = metadata['thumb']
+ poster_key = metadata['rating_key']
+ poster_title = metadata['title']
+ elif metadata['media_type'] in ('season', 'album'):
+ thumb = metadata['thumb']
+ poster_key = metadata['rating_key']
+ poster_title = '%s - %s' % (metadata['parent_title'],
+ metadata['title'])
+ elif metadata['media_type'] in ('episode', 'track'):
+ thumb = metadata['parent_thumb']
+ poster_key = metadata['parent_rating_key']
+ poster_title = '%s - %s' % (metadata['grandparent_title'],
+ metadata['parent_title'])
+ else:
+ thumb = None
- if thumb:
- # Try to retrieve a poster_url from the database
- data_factory = datafactory.DataFactory()
- poster_url = data_factory.get_poster_url(rating_key=poster_key)
-
- # If no previous poster_url
- if not poster_url:
+ if thumb:
try:
thread_name = str(threading.current_thread().ident)
poster_file = os.path.join(plexpy.CONFIG.CACHE_DIR, 'cache-poster-%s' % thread_name)
@@ -725,9 +722,15 @@ def upload_poster(metadata):
# Upload thumb to Imgur and get link
poster_url = helpers.uploadToImgur(poster_file, poster_title)
+ # Create poster info
+ poster_info = {'poster_title': poster_title, 'poster_url': poster_url}
+
+ # Save the poster url in the database
+ data_factory.set_poster_url(rating_key=poster_key, poster_title=poster_title, poster_url=poster_url)
+
# Delete the cached poster
os.remove(poster_file)
except Exception as e:
logger.error(u"PlexPy Notifier :: Unable to retrieve poster for rating_key %s: %s." % (str(rating_key), e))
- return poster_url
+ return poster_info
diff --git a/plexpy/webserve.py b/plexpy/webserve.py
index ac6c6aa9..e18c7483 100644
--- a/plexpy/webserve.py
+++ b/plexpy/webserve.py
@@ -3383,15 +3383,15 @@ class WebInterface(object):
data_factory = datafactory.DataFactory()
metadata = data_factory.get_metadata_details(rating_key=rating_key)
if metadata:
- poster_url = data_factory.get_poster_url(metadata=metadata)
- metadata['poster_url'] = poster_url
+ poster_info = data_factory.get_poster_info(metadata=metadata)
+ metadata.update(poster_info)
else:
pms_connect = pmsconnect.PmsConnect()
metadata = pms_connect.get_metadata_details(rating_key=rating_key, get_media_info=True)
if metadata:
data_factory = datafactory.DataFactory()
- poster_url = data_factory.get_poster_url(metadata=metadata)
- metadata['poster_url'] = poster_url
+ poster_info = data_factory.get_poster_info(metadata=metadata)
+ metadata.update(poster_info)
if metadata:
if metadata['section_id'] and not allow_session_library(metadata['section_id']):
@@ -3581,18 +3581,15 @@ class WebInterface(object):
@cherrypy.expose
@cherrypy.tools.json_out()
@requireAuth(member_of("admin"))
- def delete_poster_url(self, poster_url='', **kwargs):
+ def delete_poster_url(self, rating_key='', **kwargs):
- if poster_url:
- data_factory = datafactory.DataFactory()
- result = data_factory.delete_poster_url(poster_url=poster_url)
- else:
- result = None
+ data_factory = datafactory.DataFactory()
+ result = data_factory.delete_poster_url(rating_key=rating_key)
if result:
- return {'message': result}
+ return {'result': 'success', 'message': 'Deleted Imgur poster url.'}
else:
- return {'message': 'no data received'}
+ return {'result': 'error', 'message': 'Failed to delete Imgur poster url.'}
##### Search #####