mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-14 01:02:59 -07:00
Get file sizes for media info table
This commit is contained in:
parent
c0f0cb0d9e
commit
35528ef602
7 changed files with 309 additions and 97 deletions
|
@ -97,6 +97,7 @@ _CONFIG_DEFINITIONS = {
|
|||
'FACEBOOK_ON_INTUP': (int, 'Facebook', 0),
|
||||
'FIRST_RUN_COMPLETE': (int, 'General', 0),
|
||||
'FREEZE_DB': (int, 'General', 0),
|
||||
'GET_FILE_SIZES': (dict, 'General', {'section_ids': [], 'rating_keys': []}),
|
||||
'GIT_BRANCH': (str, 'General', 'master'),
|
||||
'GIT_PATH': (str, 'General', ''),
|
||||
'GIT_USER': (str, 'General', 'drzoidberg33'),
|
||||
|
|
|
@ -49,7 +49,7 @@ def update_section_ids():
|
|||
|
||||
pms_connect = pmsconnect.PmsConnect()
|
||||
|
||||
error_keys = []
|
||||
error_keys = set()
|
||||
for item in result:
|
||||
id = item['id']
|
||||
rating_key = item['rating_key']
|
||||
|
@ -61,7 +61,7 @@ def update_section_ids():
|
|||
section_values = {'section_id': metadata['section_id']}
|
||||
monitor_db.upsert('session_history_metadata', key_dict=section_keys, value_dict=section_values)
|
||||
else:
|
||||
error_keys.append(rating_key)
|
||||
error_keys.add(rating_key)
|
||||
|
||||
if error_keys:
|
||||
logger.debug(u"PlexPy Libraries :: Updated all section_id's in database except for rating_keys: %s." %
|
||||
|
@ -180,7 +180,7 @@ class Libraries(object):
|
|||
|
||||
return dict
|
||||
|
||||
def get_datatables_media_info(self, section_id=None, section_type=None, rating_key=None, kwargs=None):
|
||||
def get_datatables_media_info(self, section_id=None, section_type=None, rating_key=None, refresh=False, kwargs=None):
|
||||
from plexpy import pmsconnect
|
||||
import json, os
|
||||
|
||||
|
@ -209,6 +209,11 @@ class Libraries(object):
|
|||
# Get play counts from the database
|
||||
monitor_db = database.MonitorDatabase()
|
||||
|
||||
if plexpy.CONFIG.GROUP_HISTORY_TABLES:
|
||||
count_by = 'reference_id'
|
||||
else:
|
||||
count_by = 'id'
|
||||
|
||||
if section_type == 'show' or section_type == 'artist':
|
||||
group_by = 'grandparent_rating_key'
|
||||
elif section_type == 'season' or section_type == 'album':
|
||||
|
@ -217,12 +222,12 @@ class Libraries(object):
|
|||
group_by = 'rating_key'
|
||||
|
||||
try:
|
||||
query = 'SELECT MAX(session_history.started) AS last_watched, COUNT(session_history.id) AS play_count, ' \
|
||||
query = 'SELECT MAX(session_history.started) AS last_watched, COUNT(DISTINCT session_history.%s) AS play_count, ' \
|
||||
'session_history.rating_key, session_history.parent_rating_key, session_history.grandparent_rating_key ' \
|
||||
'FROM session_history ' \
|
||||
'JOIN session_history_metadata ON session_history.id = session_history_metadata.id ' \
|
||||
'WHERE session_history_metadata.section_id = ? ' \
|
||||
'GROUP BY session_history.%s ' % group_by
|
||||
'GROUP BY session_history.%s ' % (count_by, group_by)
|
||||
result = monitor_db.select(query, args=[section_id])
|
||||
except Exception as e:
|
||||
logger.warn(u"PlexPy Libraries :: Unable to execute database query for get_datatables_media_info2: %s." % e)
|
||||
|
@ -257,16 +262,17 @@ class Libraries(object):
|
|||
pass
|
||||
|
||||
# If no cache was imported, get all library children items
|
||||
if not rows:
|
||||
cached_rating_keys = [d['rating_key'] for d in rows]
|
||||
if refresh or not rows:
|
||||
pms_connect = pmsconnect.PmsConnect()
|
||||
|
||||
if rating_key:
|
||||
library_children = pms_connect.get_library_children(rating_key=rating_key,
|
||||
get_media_info=True)
|
||||
library_children = pms_connect.get_library_children_details(rating_key=rating_key,
|
||||
get_media_info=True)
|
||||
elif section_id:
|
||||
library_children = pms_connect.get_library_children(section_id=section_id,
|
||||
section_type=section_type,
|
||||
get_media_info=True)
|
||||
library_children = pms_connect.get_library_children_details(section_id=section_id,
|
||||
section_type=section_type,
|
||||
get_media_info=True)
|
||||
|
||||
if library_children:
|
||||
library_count = library_children['library_count']
|
||||
|
@ -275,30 +281,30 @@ class Libraries(object):
|
|||
logger.warn(u"PlexPy Libraries :: Unable to get a list of library items.")
|
||||
return default_return
|
||||
|
||||
rows = []
|
||||
for item in children_list:
|
||||
row = {'section_id': library_details['section_id'],
|
||||
'section_type': library_details['section_type'],
|
||||
'added_at': item['added_at'],
|
||||
'media_type': item['media_type'],
|
||||
'rating_key': item['rating_key'],
|
||||
'parent_rating_key': item['parent_rating_key'],
|
||||
'grandparent_rating_key': item['grandparent_rating_key'],
|
||||
'title': item['title'],
|
||||
'year': item['year'],
|
||||
'media_index': item['media_index'],
|
||||
'parent_media_index': item['parent_media_index'],
|
||||
'thumb': item['thumb'],
|
||||
'container': item.get('container', ''),
|
||||
'bitrate': item.get('bitrate', ''),
|
||||
'video_codec': item.get('video_codec', ''),
|
||||
'video_resolution': item.get('video_resolution', ''),
|
||||
'video_framerate': item.get('video_framerate', ''),
|
||||
'audio_codec': item.get('audio_codec', ''),
|
||||
'audio_channels': item.get('audio_channels', ''),
|
||||
'file_size': item.get('file_size', '')
|
||||
}
|
||||
rows.append(row)
|
||||
if item['rating_key'] not in cached_rating_keys:
|
||||
row = {'section_id': library_details['section_id'],
|
||||
'section_type': library_details['section_type'],
|
||||
'added_at': item['added_at'],
|
||||
'media_type': item['media_type'],
|
||||
'rating_key': item['rating_key'],
|
||||
'parent_rating_key': item['parent_rating_key'],
|
||||
'grandparent_rating_key': item['grandparent_rating_key'],
|
||||
'title': item['title'],
|
||||
'year': item['year'],
|
||||
'media_index': item['media_index'],
|
||||
'parent_media_index': item['parent_media_index'],
|
||||
'thumb': item['thumb'],
|
||||
'container': item.get('container', ''),
|
||||
'bitrate': item.get('bitrate', ''),
|
||||
'video_codec': item.get('video_codec', ''),
|
||||
'video_resolution': item.get('video_resolution', ''),
|
||||
'video_framerate': item.get('video_framerate', ''),
|
||||
'audio_codec': item.get('audio_codec', ''),
|
||||
'audio_channels': item.get('audio_channels', ''),
|
||||
'file_size': item.get('file_size', '')
|
||||
}
|
||||
rows.append(row)
|
||||
|
||||
if not rows:
|
||||
return default_return
|
||||
|
@ -334,10 +340,11 @@ class Libraries(object):
|
|||
search_value = json_data['search']['value'].lower()
|
||||
if search_value:
|
||||
searchable_columns = [d['data'] for d in json_data['columns'] if d['searchable']]
|
||||
for k,v in [row.iteritems() for row in rows]:
|
||||
if k in searchable_columns and search_value in v.lower():
|
||||
results.append(row)
|
||||
break
|
||||
for row in rows:
|
||||
for k,v in row.iteritems():
|
||||
if k in searchable_columns and search_value in v.lower():
|
||||
results.append(row)
|
||||
break
|
||||
else:
|
||||
results = rows
|
||||
|
||||
|
@ -369,6 +376,85 @@ class Libraries(object):
|
|||
|
||||
return dict
|
||||
|
||||
def get_media_info_file_sizes(self, section_id=None, rating_key=None):
|
||||
from plexpy import pmsconnect
|
||||
import json, os
|
||||
|
||||
if section_id and not str(section_id).isdigit():
|
||||
logger.warn(u"PlexPy Libraries :: Datatable media info file size called by invalid section_id provided.")
|
||||
return False
|
||||
elif rating_key and not str(rating_key).isdigit():
|
||||
logger.warn(u"PlexPy Libraries :: Datatable media info file size called by invalid rating_key provided.")
|
||||
return False
|
||||
|
||||
# Get the library details
|
||||
library_details = self.get_details(section_id=section_id)
|
||||
if library_details['section_id'] == None:
|
||||
logger.debug(u"PlexPy Libraries :: Library section_id %s not found." % section_id)
|
||||
return False
|
||||
if library_details['section_type'] == 'photo':
|
||||
return False
|
||||
|
||||
rows = []
|
||||
# Import media info cache from json file
|
||||
if rating_key:
|
||||
#logger.debug(u"PlexPy Libraries :: Getting file sizes for rating_key %s." % rating_key)
|
||||
try:
|
||||
inFilePath = os.path.join(plexpy.CONFIG.CACHE_DIR,'media_info-%s_%s.json' % (section_id, rating_key))
|
||||
with open(inFilePath, 'r') as inFile:
|
||||
rows = json.load(inFile)
|
||||
except IOError as e:
|
||||
#logger.debug(u"PlexPy Libraries :: No JSON file for rating_key %s." % rating_key)
|
||||
#logger.debug(u"PlexPy Libraries :: Refreshing data and creating new JSON file for rating_key %s." % rating_key)
|
||||
pass
|
||||
elif section_id:
|
||||
logger.debug(u"PlexPy Libraries :: Getting file sizes for section_id %s." % section_id)
|
||||
try:
|
||||
inFilePath = os.path.join(plexpy.CONFIG.CACHE_DIR,'media_info-%s.json' % section_id)
|
||||
with open(inFilePath, 'r') as inFile:
|
||||
rows = json.load(inFile)
|
||||
except IOError as e:
|
||||
#logger.debug(u"PlexPy Libraries :: No JSON file for library section_id %s." % section_id)
|
||||
#logger.debug(u"PlexPy Libraries :: Refreshing data and creating new JSON file for section_id %s." % section_id)
|
||||
pass
|
||||
|
||||
# Get the total file size for each item
|
||||
for item in rows:
|
||||
if item['rating_key'] and not item['file_size']:
|
||||
file_size = 0
|
||||
|
||||
pms_connect = pmsconnect.PmsConnect()
|
||||
child_metadata = pms_connect.get_metadata_children_details(rating_key=item['rating_key'],
|
||||
get_children=True,
|
||||
get_media_info=True)
|
||||
metadata_list = child_metadata['metadata']
|
||||
|
||||
for child_metadata in metadata_list:
|
||||
child_file_size = helpers.cast_to_int(child_metadata['file_size'])
|
||||
if child_file_size > 0:
|
||||
file_size += child_file_size
|
||||
|
||||
item['file_size'] = file_size
|
||||
|
||||
# Cache the media info to a json file
|
||||
if rating_key:
|
||||
outFilePath = os.path.join(plexpy.CONFIG.CACHE_DIR,'media_info-%s_%s.json' % (section_id, rating_key))
|
||||
with open(outFilePath, 'w') as outFile:
|
||||
json.dump(rows, outFile)
|
||||
elif section_id:
|
||||
outFilePath = os.path.join(plexpy.CONFIG.CACHE_DIR,'media_info-%s.json' % section_id)
|
||||
with open(outFilePath, 'w') as outFile:
|
||||
json.dump(rows, outFile)
|
||||
|
||||
if rating_key:
|
||||
#logger.debug(u"PlexPy Libraries :: File sizes updated for rating_key %s." % rating_key)
|
||||
pass
|
||||
elif section_id:
|
||||
logger.debug(u"PlexPy Libraries :: File sizes updated for section_id %s." % section_id)
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def set_config(self, section_id=None, custom_thumb='', do_notify=1, keep_history=1, do_notify_created=1):
|
||||
if section_id:
|
||||
monitor_db = database.MonitorDatabase()
|
||||
|
|
|
@ -457,7 +457,7 @@ class PmsConnect(object):
|
|||
output = {'recently_added': sorted(recents_list, key=lambda k: k['added_at'], reverse=True)}
|
||||
return output
|
||||
|
||||
def get_metadata_details(self, rating_key=''):
|
||||
def get_metadata_details(self, rating_key='', get_media_info=False):
|
||||
"""
|
||||
Return processed and validated metadata list for requested item.
|
||||
|
||||
|
@ -774,9 +774,24 @@ class PmsConnect(object):
|
|||
else:
|
||||
return None
|
||||
|
||||
if get_media_info:
|
||||
item_media = metadata_main.getElementsByTagName('Media')
|
||||
for media in item_media:
|
||||
media_info = {'container': helpers.get_xml_attr(media, 'container'),
|
||||
'bitrate': helpers.get_xml_attr(media, 'bitrate'),
|
||||
'video_codec': helpers.get_xml_attr(media, 'videoCodec'),
|
||||
'video_resolution': helpers.get_xml_attr(media, 'videoResolution'),
|
||||
'video_framerate': helpers.get_xml_attr(media, 'videoFrameRate'),
|
||||
'audio_codec': helpers.get_xml_attr(media, 'audioCodec'),
|
||||
'audio_channels': helpers.get_xml_attr(media, 'audioChannels'),
|
||||
'file': helpers.get_xml_attr(media.getElementsByTagName('Part')[0], 'file'),
|
||||
'file_size': helpers.get_xml_attr(media.getElementsByTagName('Part')[0], 'size'),
|
||||
}
|
||||
metadata.update(media_info)
|
||||
|
||||
return metadata_list
|
||||
|
||||
def get_metadata_children_details(self, rating_key=''):
|
||||
def get_metadata_children_details(self, rating_key='', get_children=False, get_media_info=False):
|
||||
"""
|
||||
Return processed and validated metadata list for all children of requested item.
|
||||
|
||||
|
@ -790,20 +805,21 @@ class PmsConnect(object):
|
|||
xml_head = metadata.getElementsByTagName('MediaContainer')
|
||||
except Exception as e:
|
||||
logger.warn(u"PlexPy Pmsconnect :: Unable to parse XML for get_metadata_children: %s." % e)
|
||||
return {'metadata': []}
|
||||
|
||||
metadata_list = []
|
||||
|
||||
for a in xml_head:
|
||||
if a.getAttribute('size'):
|
||||
if a.getAttribute('size') == '0':
|
||||
metadata_list = {'metadata': None}
|
||||
metadata_list = {'metadata': []}
|
||||
return metadata_list
|
||||
|
||||
if a.getElementsByTagName('Video'):
|
||||
metadata_main = a.getElementsByTagName('Video')
|
||||
for item in metadata_main:
|
||||
child_rating_key = helpers.get_xml_attr(item, 'ratingKey')
|
||||
metadata = self.get_metadata_details(str(child_rating_key))
|
||||
metadata = self.get_metadata_details(str(child_rating_key), get_media_info)
|
||||
if metadata:
|
||||
metadata_list.append(metadata['metadata'])
|
||||
|
||||
|
@ -811,10 +827,19 @@ class PmsConnect(object):
|
|||
metadata_main = a.getElementsByTagName('Track')
|
||||
for item in metadata_main:
|
||||
child_rating_key = helpers.get_xml_attr(item, 'ratingKey')
|
||||
metadata = self.get_metadata_details(str(child_rating_key))
|
||||
metadata = self.get_metadata_details(str(child_rating_key), get_media_info)
|
||||
if metadata:
|
||||
metadata_list.append(metadata['metadata'])
|
||||
|
||||
|
||||
elif get_children and a.getElementsByTagName('Directory'):
|
||||
dir_main = a.getElementsByTagName('Directory')
|
||||
metadata_main = [d for d in dir_main if helpers.get_xml_attr(d, 'ratingKey')]
|
||||
for item in metadata_main:
|
||||
child_rating_key = helpers.get_xml_attr(item, 'ratingKey')
|
||||
metadata = self.get_metadata_children_details(str(child_rating_key), get_children, get_media_info)
|
||||
if metadata:
|
||||
metadata_list.extend(metadata['metadata'])
|
||||
|
||||
output = {'metadata': metadata_list}
|
||||
return output
|
||||
|
||||
|
@ -1529,7 +1554,7 @@ class PmsConnect(object):
|
|||
|
||||
return output
|
||||
|
||||
def get_library_children(self, section_id='', section_type='', list_type='all', count='', rating_key='', get_media_info=False):
|
||||
def get_library_children_details(self, section_id='', section_type='', list_type='all', count='', rating_key='', get_media_info=False):
|
||||
"""
|
||||
Return processed and validated server library items list.
|
||||
|
||||
|
@ -1662,7 +1687,7 @@ class PmsConnect(object):
|
|||
for library in libraries_list:
|
||||
section_type = library['section_type']
|
||||
section_id = library['section_id']
|
||||
children_list = self.get_library_children(section_id=section_id, section_type=section_type, count='1')
|
||||
children_list = self.get_library_children_details(section_id=section_id, section_type=section_type, count='1')
|
||||
|
||||
if children_list['library_count'] != '0':
|
||||
library_stats = {'section_id': library['section_id'],
|
||||
|
@ -1674,29 +1699,29 @@ class PmsConnect(object):
|
|||
}
|
||||
|
||||
if section_type == 'show':
|
||||
parent_list = self.get_library_children(section_id=section_id, section_type='season', count='1')
|
||||
parent_list = self.get_library_children_details(section_id=section_id, section_type='season', count='1')
|
||||
parent_stats = {'parent_count': parent_list['library_count']}
|
||||
library_stats.update(parent_stats)
|
||||
|
||||
child_list = self.get_library_children(section_id=section_id, section_type='episode', count='1')
|
||||
child_list = self.get_library_children_details(section_id=section_id, section_type='episode', count='1')
|
||||
child_stats = {'child_count': child_list['library_count']}
|
||||
library_stats.update(child_stats)
|
||||
|
||||
if section_type == 'artist':
|
||||
parent_list = self.get_library_children(section_id=section_id, section_type='album', count='1')
|
||||
parent_list = self.get_library_children_details(section_id=section_id, section_type='album', count='1')
|
||||
parent_stats = {'parent_count': parent_list['library_count']}
|
||||
library_stats.update(parent_stats)
|
||||
|
||||
child_list = self.get_library_children(section_id=section_id, section_type='track', count='1')
|
||||
child_list = self.get_library_children_details(section_id=section_id, section_type='track', count='1')
|
||||
child_stats = {'child_count': child_list['library_count']}
|
||||
library_stats.update(child_stats)
|
||||
|
||||
if section_type == 'photo':
|
||||
parent_list = self.get_library_children(section_id=section_id, section_type='photoAlbum', count='1')
|
||||
parent_list = self.get_library_children_details(section_id=section_id, section_type='photoAlbum', count='1')
|
||||
parent_stats = {'parent_count': parent_list['library_count']}
|
||||
library_stats.update(parent_stats)
|
||||
|
||||
child_list = self.get_library_children(section_id=section_id, section_type='picture', count='1')
|
||||
child_list = self.get_library_children_details(section_id=section_id, section_type='picture', count='1')
|
||||
child_stats = {'child_count': child_list['library_count']}
|
||||
library_stats.update(child_stats)
|
||||
|
||||
|
|
|
@ -257,18 +257,22 @@ class WebInterface(object):
|
|||
|
||||
@cherrypy.expose
|
||||
def library(self, section_id=None):
|
||||
config = {
|
||||
"get_file_sizes": plexpy.CONFIG.GET_FILE_SIZES
|
||||
}
|
||||
|
||||
library_data = libraries.Libraries()
|
||||
if section_id:
|
||||
try:
|
||||
library_details = library_data.get_details(section_id=section_id)
|
||||
except:
|
||||
logger.warn(u"Unable to retrieve library details for section_id %s " % section_id)
|
||||
return serve_template(templatename="library.html", title="Library", data=None)
|
||||
return serve_template(templatename="library.html", title="Library", data=None, config=config)
|
||||
else:
|
||||
logger.debug(u"Library page requested but no section_id received.")
|
||||
return serve_template(templatename="library.html", title="Library", data=None)
|
||||
return serve_template(templatename="library.html", title="Library", data=None, config=config)
|
||||
|
||||
return serve_template(templatename="library.html", title="Library", data=library_details)
|
||||
return serve_template(templatename="library.html", title="Library", data=library_details, config=config)
|
||||
|
||||
@cherrypy.expose
|
||||
def edit_library_dialog(self, section_id=None, **kwargs):
|
||||
|
@ -353,22 +357,56 @@ class WebInterface(object):
|
|||
return serve_template(templatename="library_recently_added.html", data=None, title="Recently Added")
|
||||
|
||||
@cherrypy.expose
|
||||
def get_library_media_info(self, section_id=None, section_type=None, rating_key=None, **kwargs):
|
||||
def get_library_media_info(self, section_id=None, section_type=None, rating_key=None, refresh='', **kwargs):
|
||||
|
||||
if refresh == 'true':
|
||||
refresh = True
|
||||
else:
|
||||
refresh = False
|
||||
|
||||
library_data = libraries.Libraries()
|
||||
result = library_data.get_datatables_media_info(section_id=section_id,
|
||||
section_type=section_type,
|
||||
rating_key=rating_key,
|
||||
refresh=refresh,
|
||||
kwargs=kwargs)
|
||||
|
||||
cherrypy.response.headers['Content-type'] = 'application/json'
|
||||
return json.dumps(result)
|
||||
|
||||
@cherrypy.expose
|
||||
def get_media_info_file_sizes(self, section_id=None, rating_key=None):
|
||||
get_file_sizes = plexpy.CONFIG.GET_FILE_SIZES
|
||||
section_ids = set(get_file_sizes['section_ids'])
|
||||
rating_keys = set(get_file_sizes['rating_keys'])
|
||||
|
||||
if (section_id and section_id not in section_ids) or (rating_key and rating_key not in rating_keys):
|
||||
if section_id:
|
||||
section_ids.add(section_id)
|
||||
elif rating_key:
|
||||
rating_keys.add(rating_key)
|
||||
plexpy.CONFIG.GET_FILE_SIZES = {'section_ids': list(section_ids), 'rating_keys': list(rating_keys)}
|
||||
|
||||
library_data = libraries.Libraries()
|
||||
result = library_data.get_media_info_file_sizes(section_id=section_id,
|
||||
rating_key=rating_key)
|
||||
|
||||
if section_id:
|
||||
section_ids.remove(section_id)
|
||||
elif rating_key:
|
||||
rating_keys.remove(rating_key)
|
||||
plexpy.CONFIG.GET_FILE_SIZES = {'section_ids': list(section_ids), 'rating_keys': list(rating_keys)}
|
||||
else:
|
||||
result = False
|
||||
|
||||
cherrypy.response.headers['Content-type'] = 'application/json'
|
||||
return json.dumps({'success': result})
|
||||
|
||||
@cherrypy.expose
|
||||
def get_library_unwatched(self, section_id=None, section_type=None, **kwargs):
|
||||
|
||||
pms_connect = pmsconnect.PmsConnect()
|
||||
result = pms_connect.get_library_children(section_id=section_id,
|
||||
result = pms_connect.get_library_children_details(section_id=section_id,
|
||||
section_type=section_type,
|
||||
get_media_info=True,
|
||||
kwargs=kwargs)
|
||||
|
@ -438,17 +476,22 @@ class WebInterface(object):
|
|||
|
||||
@cherrypy.expose
|
||||
def delete_datatable_media_info_cache(self, section_id, **kwargs):
|
||||
library_data = libraries.Libraries()
|
||||
get_file_sizes = plexpy.CONFIG.GET_FILE_SIZES
|
||||
section_ids = set(get_file_sizes['section_ids'])
|
||||
|
||||
if section_id:
|
||||
delete_row = library_data.delete_datatable_media_info_cache(section_id=section_id)
|
||||
if section_id not in section_ids:
|
||||
if section_id:
|
||||
library_data = libraries.Libraries()
|
||||
delete_row = library_data.delete_datatable_media_info_cache(section_id=section_id)
|
||||
|
||||
if delete_row:
|
||||
if delete_row:
|
||||
cherrypy.response.headers['Content-type'] = 'application/json'
|
||||
return json.dumps({'message': delete_row})
|
||||
else:
|
||||
cherrypy.response.headers['Content-type'] = 'application/json'
|
||||
return json.dumps({'message': delete_row})
|
||||
return json.dumps({'message': 'no data received'})
|
||||
else:
|
||||
cherrypy.response.headers['Content-type'] = 'application/json'
|
||||
return json.dumps({'message': 'no data received'})
|
||||
return json.dumps({'message': 'Cannot refresh library while getting file sizes.'})
|
||||
|
||||
##### Users #####
|
||||
|
||||
|
@ -1406,7 +1449,7 @@ class WebInterface(object):
|
|||
##### Info #####
|
||||
|
||||
@cherrypy.expose
|
||||
def info(self, rating_key=None, source=None, **kwargs):
|
||||
def info(self, rating_key=None, source=None, query=None, **kwargs):
|
||||
metadata = None
|
||||
|
||||
config = {
|
||||
|
@ -1425,7 +1468,7 @@ class WebInterface(object):
|
|||
if metadata:
|
||||
return serve_template(templatename="info.html", data=metadata, title="Info", config=config)
|
||||
else:
|
||||
return self.update_metadata(rating_key)
|
||||
return self.update_metadata(rating_key, query)
|
||||
|
||||
@cherrypy.expose
|
||||
def get_item_children(self, rating_key='', **kwargs):
|
||||
|
@ -1518,7 +1561,7 @@ class WebInterface(object):
|
|||
|
||||
data_factory = datafactory.DataFactory()
|
||||
query = data_factory.get_search_query(rating_key=rating_key)
|
||||
if query_string:
|
||||
if query and query_string:
|
||||
query['query_string'] = query_string
|
||||
|
||||
if query:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue