mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-16 02:02:58 -07:00
Add update metadata feature
* Use rating_key instead of item_id for history info
This commit is contained in:
parent
09aac22909
commit
771885f27f
16 changed files with 448 additions and 367 deletions
|
@ -765,10 +765,10 @@ class DataFactory(object):
|
|||
|
||||
return recently_watched
|
||||
|
||||
def get_metadata_details(self, row_id):
|
||||
def get_metadata_details(self, rating_key):
|
||||
monitor_db = database.MonitorDatabase()
|
||||
|
||||
if row_id:
|
||||
if rating_key:
|
||||
query = 'SELECT session_history_metadata.rating_key, session_history_metadata.parent_rating_key, ' \
|
||||
'session_history_metadata.grandparent_rating_key, session_history_metadata.title, ' \
|
||||
'session_history_metadata.parent_title, session_history_metadata.grandparent_title, ' \
|
||||
|
@ -785,8 +785,8 @@ class DataFactory(object):
|
|||
'session_history_metadata.actors, session_history_metadata.genres, session_history_metadata.studio ' \
|
||||
'FROM session_history_metadata ' \
|
||||
'JOIN library_sections ON session_history_metadata.library_id = library_sections.section_id ' \
|
||||
'WHERE session_history_metadata.id = ?'
|
||||
result = monitor_db.select(query=query, args=[row_id])
|
||||
'WHERE session_history_metadata.rating_key = ?'
|
||||
result = monitor_db.select(query=query, args=[rating_key])
|
||||
else:
|
||||
result = []
|
||||
|
||||
|
@ -1041,7 +1041,9 @@ class DataFactory(object):
|
|||
|
||||
return key_list
|
||||
|
||||
def update_rating_key(self, old_key_list='', new_key_list='', media_type=''):
|
||||
def update_metadata(self, old_key_list='', new_key_list='', media_type=''):
|
||||
from plexpy import pmsconnect
|
||||
pms_connect = pmsconnect.PmsConnect()
|
||||
monitor_db = database.MonitorDatabase()
|
||||
|
||||
# function to map rating keys pairs
|
||||
|
@ -1049,8 +1051,7 @@ class DataFactory(object):
|
|||
pairs = {}
|
||||
for k, v in old.iteritems():
|
||||
if k in new:
|
||||
if v['rating_key'] != new[k]['rating_key']:
|
||||
pairs.update({v['rating_key']: new[k]['rating_key']})
|
||||
pairs.update({v['rating_key']: new[k]['rating_key']})
|
||||
if 'children' in old[k]:
|
||||
pairs.update(get_pairs(old[k]['children'], new[k]['children']))
|
||||
|
||||
|
@ -1062,73 +1063,78 @@ class DataFactory(object):
|
|||
mapping = get_pairs(old_key_list, new_key_list)
|
||||
|
||||
if mapping:
|
||||
logger.info(u"PlexPy DataFactory :: Updating rating keys in the database.")
|
||||
logger.info(u"PlexPy DataFactory :: Updating metadata in the database.")
|
||||
for old_key, new_key in mapping.iteritems():
|
||||
# check library_id (1 table)
|
||||
monitor_db.action('UPDATE session_history_metadata SET library_id = ? WHERE rating_key = ?',
|
||||
[new_key_list['library_id'], old_key])
|
||||
result = pms_connect.get_metadata_details(new_key)
|
||||
|
||||
# check rating_key (3 tables)
|
||||
monitor_db.action('UPDATE session_history SET rating_key = ? WHERE rating_key = ?',
|
||||
[new_key, old_key])
|
||||
monitor_db.action('UPDATE session_history_media_info SET rating_key = ? WHERE rating_key = ?',
|
||||
[new_key, old_key])
|
||||
monitor_db.action('UPDATE session_history_metadata SET rating_key = ? WHERE rating_key = ?',
|
||||
[new_key, old_key])
|
||||
if result:
|
||||
metadata = result['metadata']
|
||||
if metadata['media_type'] == 'show' or metadata['media_type'] == 'artist':
|
||||
# check grandparent_rating_key (2 tables)
|
||||
monitor_db.action('UPDATE session_history SET grandparent_rating_key = ? WHERE grandparent_rating_key = ?',
|
||||
[new_key, old_key])
|
||||
monitor_db.action('UPDATE session_history_metadata SET grandparent_rating_key = ? WHERE grandparent_rating_key = ?',
|
||||
[new_key, old_key])
|
||||
elif metadata['media_type'] == 'season' or metadata['media_type'] == 'album':
|
||||
# check parent_rating_key (2 tables)
|
||||
monitor_db.action('UPDATE session_history SET parent_rating_key = ? WHERE parent_rating_key = ?',
|
||||
[new_key, old_key])
|
||||
monitor_db.action('UPDATE session_history_metadata SET parent_rating_key = ? WHERE parent_rating_key = ?',
|
||||
[new_key, old_key])
|
||||
else:
|
||||
# check rating_key (2 tables)
|
||||
monitor_db.action('UPDATE session_history SET rating_key = ? WHERE rating_key = ?',
|
||||
[new_key, old_key])
|
||||
monitor_db.action('UPDATE session_history_media_info SET rating_key = ? WHERE rating_key = ?',
|
||||
[new_key, old_key])
|
||||
|
||||
# check parent_rating_key (2 tables)
|
||||
monitor_db.action('UPDATE session_history SET parent_rating_key = ? WHERE parent_rating_key = ?',
|
||||
[new_key, old_key])
|
||||
monitor_db.action('UPDATE session_history_metadata SET parent_rating_key = ? WHERE parent_rating_key = ?',
|
||||
[new_key, old_key])
|
||||
# update session_history_metadata table
|
||||
self.update_metadata_details(old_key, new_key, metadata)
|
||||
|
||||
# check grandparent_rating_key (2 tables)
|
||||
monitor_db.action('UPDATE session_history SET grandparent_rating_key = ? WHERE grandparent_rating_key = ?',
|
||||
[new_key, old_key])
|
||||
monitor_db.action('UPDATE session_history_metadata SET grandparent_rating_key = ? WHERE grandparent_rating_key = ?',
|
||||
[new_key, old_key])
|
||||
|
||||
# check thumb (1 table)
|
||||
monitor_db.action('UPDATE session_history_metadata SET thumb = replace(thumb, ?, ?) \
|
||||
WHERE thumb LIKE "/library/metadata/%s/thumb/%%"' % old_key,
|
||||
[old_key, new_key])
|
||||
|
||||
# check parent_thumb (1 table)
|
||||
monitor_db.action('UPDATE session_history_metadata SET parent_thumb = replace(parent_thumb, ?, ?) \
|
||||
WHERE parent_thumb LIKE "/library/metadata/%s/thumb/%%"' % old_key,
|
||||
[old_key, new_key])
|
||||
|
||||
# check grandparent_thumb (1 table)
|
||||
monitor_db.action('UPDATE session_history_metadata SET grandparent_thumb = replace(grandparent_thumb, ?, ?) \
|
||||
WHERE grandparent_thumb LIKE "/library/metadata/%s/thumb/%%"' % old_key,
|
||||
[old_key, new_key])
|
||||
|
||||
# check art (1 table)
|
||||
monitor_db.action('UPDATE session_history_metadata SET art = replace(art, ?, ?) \
|
||||
WHERE art LIKE "/library/metadata/%s/art/%%"' % old_key,
|
||||
[old_key, new_key])
|
||||
|
||||
return 'Updated rating key in database.'
|
||||
return 'Updated metadata in database.'
|
||||
else:
|
||||
return 'No updated rating key needed in database. No changes were made.'
|
||||
return 'Unable to update metadata in database. No changes were made.'
|
||||
# for debugging
|
||||
#return mapping
|
||||
|
||||
def get_session_ip(self, session_key=''):
|
||||
monitor_db = database.MonitorDatabase()
|
||||
def update_metadata_details(self, old_rating_key='', new_rating_key='', metadata=None):
|
||||
|
||||
if session_key:
|
||||
query = 'SELECT ip_address FROM sessions WHERE session_key = %d' % int(session_key)
|
||||
result = monitor_db.select(query)
|
||||
else:
|
||||
return None
|
||||
if metadata:
|
||||
# Create full_title
|
||||
if metadata['media_type'] == 'episode' or metadata['media_type'] == 'track':
|
||||
full_title = '%s - %s' % (metadata['grandparent_title'], metadata['title'])
|
||||
else:
|
||||
full_title = metadata['title']
|
||||
|
||||
ip_address = 'N/A'
|
||||
directors = ";".join(metadata['directors'])
|
||||
writers = ";".join(metadata['writers'])
|
||||
actors = ";".join(metadata['actors'])
|
||||
genres = ";".join(metadata['genres'])
|
||||
|
||||
for item in result:
|
||||
ip_address = item['ip_address']
|
||||
#logger.info(u"PlexPy DataFactory :: Updating metadata in the database for rating key: %s." % new_rating_key)
|
||||
monitor_db = database.MonitorDatabase()
|
||||
|
||||
return ip_address
|
||||
# Update the session_history_metadata table
|
||||
query = 'UPDATE session_history_metadata SET rating_key = ?, parent_rating_key = ?, ' \
|
||||
'grandparent_rating_key = ?, title = ?, parent_title = ?, grandparent_title = ?, full_title = ?, ' \
|
||||
'media_index = ?, parent_media_index = ?, library_id = ?, thumb = ?, parent_thumb = ?, ' \
|
||||
'grandparent_thumb = ?, art = ?, media_type = ?, year = ?, originally_available_at = ?, ' \
|
||||
'added_at = ?, updated_at = ?, last_viewed_at = ?, content_rating = ?, summary = ?, ' \
|
||||
'tagline = ?, rating = ?, duration = ?, guid = ?, directors = ?, writers = ?, actors = ?, ' \
|
||||
'genres = ?, studio = ? ' \
|
||||
'WHERE rating_key = ?'
|
||||
|
||||
args = [metadata['rating_key'], metadata['parent_rating_key'], metadata['grandparent_rating_key'],
|
||||
metadata['title'], metadata['parent_title'], metadata['grandparent_title'], full_title,
|
||||
metadata['media_index'], metadata['parent_media_index'], metadata['library_id'], metadata['thumb'],
|
||||
metadata['parent_thumb'], metadata['grandparent_thumb'], metadata['art'], metadata['media_type'],
|
||||
metadata['year'], metadata['originally_available_at'], metadata['added_at'], metadata['updated_at'],
|
||||
metadata['last_viewed_at'], metadata['content_rating'], metadata['summary'], metadata['tagline'],
|
||||
metadata['rating'], metadata['duration'], metadata['guid'], directors, writers, actors, genres,
|
||||
metadata['studio'],
|
||||
old_rating_key]
|
||||
|
||||
monitor_db.action(query=query, args=args)
|
||||
|
||||
def get_total_duration(self, custom_where=None):
|
||||
monitor_db = database.MonitorDatabase()
|
||||
|
@ -1167,8 +1173,8 @@ class DataFactory(object):
|
|||
return None
|
||||
|
||||
for item in result:
|
||||
id = item[0]
|
||||
rating_key = item[1]
|
||||
id = item['id']
|
||||
rating_key = item['rating_key']
|
||||
|
||||
result = pms_connect.get_metadata_details(rating_key=rating_key)
|
||||
|
||||
|
@ -1202,4 +1208,20 @@ class DataFactory(object):
|
|||
|
||||
monitor_db.upsert('library_sections', key_dict=section_keys, value_dict=section_values)
|
||||
|
||||
return True
|
||||
return True
|
||||
|
||||
def get_session_ip(self, session_key=''):
|
||||
monitor_db = database.MonitorDatabase()
|
||||
|
||||
if session_key:
|
||||
query = 'SELECT ip_address FROM sessions WHERE session_key = %d' % int(session_key)
|
||||
result = monitor_db.select(query)
|
||||
else:
|
||||
return None
|
||||
|
||||
ip_address = 'N/A'
|
||||
|
||||
for item in result:
|
||||
ip_address = item['ip_address']
|
||||
|
||||
return ip_address
|
Loading…
Add table
Add a link
Reference in a new issue