Create a new database table for poster urls

This commit is contained in:
JonnyWong16 2016-10-15 16:55:41 -07:00 committed by JonnyWong16
parent ffdd9c9cbf
commit ed6a42f747
5 changed files with 98 additions and 98 deletions

View file

@ -150,7 +150,7 @@ DOCUMENTATION :: END
</a> </a>
</div> </div>
<div class="summary-content-title"> <div class="summary-content-title">
% if data['media_type'] == 'movie' or data['media_type'] == 'show' or data['media_type'] == 'artist': % if data['media_type'] in ('movie', 'show', 'artist'):
<h1>&nbsp;</h1><h1>${data['title']}</h1> <h1>&nbsp;</h1><h1>${data['title']}</h1>
% elif data['media_type'] == 'season': % elif data['media_type'] == 'season':
<h1>&nbsp;</h1><h1><a href="info?rating_key=${data['parent_rating_key']}">${data['parent_title']}</a></h1> <h1>&nbsp;</h1><h1><a href="info?rating_key=${data['parent_rating_key']}">${data['parent_title']}</a></h1>
@ -185,7 +185,7 @@ DOCUMENTATION :: END
% else: % else:
<div class="summary-content-padding hidden-xs hidden-sm"> <div class="summary-content-padding hidden-xs hidden-sm">
% endif % endif
% if data['media_type'] == 'movie' or data['media_type'] == 'episode' or data['media_type'] == 'track': % if data['media_type'] in ('movie', 'episode', 'track'):
<div class="summary-content-media-info-wrapper"> <div class="summary-content-media-info-wrapper">
% if data['media_type'] != 'track' and data['video_codec']: % if data['media_type'] != 'track' and data['video_codec']:
<img class="summary-content-media-flag" title="${data['video_codec']}" src="${http_root}images/media_flags/video_codec/${data['video_codec'] | vf}.png" /> <img class="summary-content-media-flag" title="${data['video_codec']}" src="${http_root}images/media_flags/video_codec/${data['video_codec'] | vf}.png" />
@ -377,7 +377,8 @@ DOCUMENTATION :: END
% else: % else:
<span class="imgur-poster-tooltip" data-toggle="popover" data-img="${data['poster_url']}" data-height="120" data-width="80" style="display: inline-flex;"> <span class="imgur-poster-tooltip" data-toggle="popover" data-img="${data['poster_url']}" data-height="120" data-width="80" style="display: inline-flex;">
% endif % endif
<button class="btn btn-danger btn-edit" data-toggle="button" aria-pressed="false" autocomplete="off" id="delete-imgur-poster"> <button class="btn btn-danger btn-edit" data-toggle="button" aria-pressed="false" autocomplete="off" id="delete-imgur-poster"
data-id="${data['parent_rating_key'] if data['media_type'] in ('episode', 'track') else data['rating_key']}">
<i class="fa fa-picture-o"></i> Reset Imgur Poster <i class="fa fa-picture-o"></i> Reset Imgur Poster
</button> </button>
</span> </span>
@ -447,7 +448,7 @@ DOCUMENTATION :: END
% if data: % if data:
<script src="${http_root}js/tables/history_table.js"></script> <script src="${http_root}js/tables/history_table.js"></script>
% if data['media_type'] == 'show' or data['media_type'] == 'artist': % if data['media_type'] in ('show', 'artist'):
<script> <script>
function get_history() { function get_history() {
history_table_options.ajax = { history_table_options.ajax = {
@ -463,7 +464,7 @@ DOCUMENTATION :: END
} }
} }
</script> </script>
% elif data['media_type'] == 'season' or data['media_type'] == 'album': % elif data['media_type'] in ('season', 'album'):
<script> <script>
function get_history() { function get_history() {
history_table_options.ajax = { history_table_options.ajax = {
@ -479,7 +480,7 @@ DOCUMENTATION :: END
} }
} }
</script> </script>
% elif data['media_type'] == 'episode' or data['media_type'] == 'track' or data['media_type'] == 'movie': % elif data['media_type'] in ('movie', 'episode', 'track'):
<script> <script>
function get_history() { function get_history() {
history_table_options.ajax = { history_table_options.ajax = {
@ -543,13 +544,13 @@ DOCUMENTATION :: END
}); });
}); });
</script> </script>
% 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'):
<script> <script>
$.ajax({ $.ajax({
url: 'get_item_children', url: 'get_item_children',
type: 'GET', type: 'GET',
async: true, async: true,
data: { rating_key : ${data['rating_key']} }, data: { rating_key : "${data['rating_key']}" },
complete: function(xhr, status) { complete: function(xhr, status) {
$("#children-list").html(xhr.responseText); } $("#children-list").html(xhr.responseText); }
}); });
@ -566,26 +567,22 @@ DOCUMENTATION :: END
html: true, html: true,
container: 'body', container: 'body',
trigger: 'hover', trigger: 'hover',
placement: 'left', placement: 'top',
template: '<div class="popover history-thumbnail-popover" role="tooltip"><div class="arrow" style="top: 50%;"></div><div class="popover-content"></div></div>', template: '<div class="popover history-thumbnail-popover" role="tooltip"><div class="arrow" style="top: 50%;"></div><div class="popover-content"></div></div>',
content: function () { content: function () {
return '<div class="history-thumbnail" style="background-image: url(' + $(this).data('img') + '); height: ' + $(this).data('height') + 'px; width: ' + $(this).data('width') + 'px;" />'; return '<div class="history-thumbnail" style="background-image: url(' + $(this).data('img') + '); height: ' + $(this).data('height') + 'px; width: ' + $(this).data('width') + 'px;" />';
} }
}); });
$('#delete-imgur-poster').on('click', function() { $('#delete-imgur-poster').on('click', function () {
$.ajax({ var msg = 'Are you sure you want to reset the Imgur poster for <strong>${data["poster_title"]}</strong>?';
url: 'delete_poster_url', var url = 'delete_poster_url';
type: 'POST', var data = { rating_key: $(this).data('id') }
async: true, var callback = function () {
data: { poster_url : "${data['poster_url']}" }, $('.imgur-poster-tooltip').popover('destroy');
success: function (data) { $('#delete-imgur-poster').closest('span').remove();
var msg = '<i class="fa fa-check"></i>&nbsp; Imgur poster reset'; }
showMsg(msg, false, true, 2000); confirmAjaxCall(url, msg, data, false, callback);
$('.imgur-poster-tooltip').popover('destroy');
$('#delete-imgur-poster').closest('span').remove();
}
});
}); });
</script> </script>
% endif % endif

View file

@ -477,7 +477,7 @@ def dbcheck():
'CREATE TABLE IF NOT EXISTS notify_log (id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER, ' '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, ' '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, ' '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 # 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)' '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 # Upgrade sessions table from earlier versions
try: try:
c_db.execute('SELECT started FROM sessions') c_db.execute('SELECT started FROM sessions')

View file

@ -1014,51 +1014,48 @@ class DataFactory(object):
return ip_address 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() monitor_db = database.MonitorDatabase()
poster_url = '' if str(rating_key).isdigit():
poster_key = [] poster_key = rating_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]
elif metadata: elif metadata:
if metadata['media_type'] in ('movie', 'show', 'artist'): 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'): 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'): 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: if poster_key:
try: try:
query = 'SELECT id, poster_url FROM notify_log %s ' \ query = 'SELECT poster_title, poster_url FROM poster_urls ' \
'ORDER BY id DESC LIMIT 1' % where_key 'WHERE rating_key = ?'
result = monitor_db.select(query, args=poster_key) poster_info = monitor_db.select_single(query, args=[poster_key])
except Exception as e: except Exception as e:
logger.warn(u"PlexPy DataFactory :: Unable to execute database query for get_poster_url: %s." % 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: return poster_info
poster_url = item['poster_url']
return poster_url def set_poster_url(self, rating_key='', poster_title='', poster_url=''):
def delete_poster_url(self, poster_url=''):
monitor_db = database.MonitorDatabase() monitor_db = database.MonitorDatabase()
if poster_url: if str(rating_key).isdigit():
logger.info(u"PlexPy DataFactory :: Deleting poster_url %s from the notify log database." % poster_url) keys = {'rating_key': int(rating_key)}
monitor_db.upsert('notify_log', {'poster_url': None}, {'poster_url': poster_url})
return 'Deleted poster_url %s.' % poster_url values = {'poster_title': poster_title,
else: 'poster_url': poster_url}
return 'Unable to delete 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=''): def get_search_query(self, rating_key=''):
monitor_db = database.MonitorDatabase() monitor_db = database.MonitorDatabase()

View file

@ -187,8 +187,7 @@ def notify(notifier_id=None, notify_action=None, stream_data=None, timeline_data
notify_action=notify_action, notify_action=notify_action,
notifier=notifier_config, notifier=notifier_config,
subject=subject, subject=subject,
body=body, body=body)
parameters=parameters)
def get_notify_state(session): def get_notify_state(session):
@ -210,13 +209,12 @@ def get_notify_state(session):
return notify_states 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: if notify_action and notifier:
monitor_db = database.MonitorDatabase() monitor_db = database.MonitorDatabase()
session = session or {} session = session or {}
parameters = parameters or {}
keys = {'timestamp': int(time.time()), keys = {'timestamp': int(time.time()),
'session_key': session.get('session_key', None), '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), 'user': session.get('user', None),
'agent_name': notifier['agent_name'], 'agent_name': notifier['agent_name'],
'subject_text': subject, 'subject_text': subject,
'body_text': body, 'body_text': body}
'poster_url': parameters.get('poster_url', None)}
monitor_db.upsert(table_name='notify_log', key_dict=keys, value_dict=values) monitor_db.upsert(table_name='notify_log', key_dict=keys, value_dict=values)
else: 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'] metadata['lastfm_url'] = 'https://www.last.fm/music/' + metadata['lastfm_id']
if plexpy.CONFIG.NOTIFY_UPLOAD_POSTERS: 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 # Create a title
if metadata['media_type'] == 'episode' or metadata['media_type'] == 'track': 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'], 'tagline': metadata['tagline'],
'rating': metadata['rating'], 'rating': metadata['rating'],
'duration': duration, 'duration': duration,
'poster_title': metadata.get('poster_title',''),
'poster_url': metadata.get('poster_url',''), 'poster_url': metadata.get('poster_url',''),
'plex_url': metadata.get('plex_url',''), 'plex_url': metadata.get('plex_url',''),
'imdb_id': metadata.get('imdb_id',''), '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' return ','.join(sorted(num)) or '0', ','.join(sorted(num00)) or '00'
def upload_poster(metadata): def get_poster_info(metadata):
if metadata['media_type'] in ('movie', 'show', 'season', 'artist', 'album'): # Try to retrieve poster info from the database
thumb = metadata['thumb'] data_factory = datafactory.DataFactory()
poster_key = metadata['rating_key'] poster_info = data_factory.get_poster_info(metadata=metadata)
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
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: 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:
try: try:
thread_name = str(threading.current_thread().ident) thread_name = str(threading.current_thread().ident)
poster_file = os.path.join(plexpy.CONFIG.CACHE_DIR, 'cache-poster-%s' % thread_name) 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 # Upload thumb to Imgur and get link
poster_url = helpers.uploadToImgur(poster_file, poster_title) 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 # Delete the cached poster
os.remove(poster_file) os.remove(poster_file)
except Exception as e: except Exception as e:
logger.error(u"PlexPy Notifier :: Unable to retrieve poster for rating_key %s: %s." % (str(rating_key), 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

View file

@ -3383,15 +3383,15 @@ class WebInterface(object):
data_factory = datafactory.DataFactory() data_factory = datafactory.DataFactory()
metadata = data_factory.get_metadata_details(rating_key=rating_key) metadata = data_factory.get_metadata_details(rating_key=rating_key)
if metadata: if metadata:
poster_url = data_factory.get_poster_url(metadata=metadata) poster_info = data_factory.get_poster_info(metadata=metadata)
metadata['poster_url'] = poster_url metadata.update(poster_info)
else: else:
pms_connect = pmsconnect.PmsConnect() pms_connect = pmsconnect.PmsConnect()
metadata = pms_connect.get_metadata_details(rating_key=rating_key, get_media_info=True) metadata = pms_connect.get_metadata_details(rating_key=rating_key, get_media_info=True)
if metadata: if metadata:
data_factory = datafactory.DataFactory() data_factory = datafactory.DataFactory()
poster_url = data_factory.get_poster_url(metadata=metadata) poster_info = data_factory.get_poster_info(metadata=metadata)
metadata['poster_url'] = poster_url metadata.update(poster_info)
if metadata: if metadata:
if metadata['section_id'] and not allow_session_library(metadata['section_id']): if metadata['section_id'] and not allow_session_library(metadata['section_id']):
@ -3581,18 +3581,15 @@ class WebInterface(object):
@cherrypy.expose @cherrypy.expose
@cherrypy.tools.json_out() @cherrypy.tools.json_out()
@requireAuth(member_of("admin")) @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()
data_factory = datafactory.DataFactory() result = data_factory.delete_poster_url(rating_key=rating_key)
result = data_factory.delete_poster_url(poster_url=poster_url)
else:
result = None
if result: if result:
return {'message': result} return {'result': 'success', 'message': 'Deleted Imgur poster url.'}
else: else:
return {'message': 'no data received'} return {'result': 'error', 'message': 'Failed to delete Imgur poster url.'}
##### Search ##### ##### Search #####