- % if data['section_id'] in config['get_file_sizes']['section_ids']:
+ % if config['get_file_sizes'] and data['section_id'] in config['get_file_sizes_hold']['section_ids']:
% else:
@@ -214,7 +214,7 @@ DOCUMENTATION :: END
+
+
+ Calculate Total File Sizes [experimental]
+
+
Enable if you want PlexPy to calculate the total file size for TV Shows/Seasons and Artists/Albums on the media info tables.
+ This is currently experimental.
+
diff --git a/plexpy/config.py b/plexpy/config.py
index 98ac61bc..1564658b 100644
--- a/plexpy/config.py
+++ b/plexpy/config.py
@@ -97,7 +97,8 @@ _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': []}),
+ 'GET_FILE_SIZES': (int, 'General', 0),
+ 'GET_FILE_SIZES_HOLD': (dict, 'General', {'section_ids': [], 'rating_keys': []}),
'GIT_BRANCH': (str, 'General', 'master'),
'GIT_PATH': (str, 'General', ''),
'GIT_USER': (str, 'General', 'drzoidberg33'),
diff --git a/plexpy/libraries.py b/plexpy/libraries.py
index 3dc45997..a400390f 100644
--- a/plexpy/libraries.py
+++ b/plexpy/libraries.py
@@ -242,7 +242,7 @@ class Libraries(object):
# Import media info cache from json file
if rating_key:
try:
- inFilePath = os.path.join(plexpy.CONFIG.CACHE_DIR,'media_info-%s_%s.json' % (section_id, rating_key))
+ 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)
library_count = len(rows)
@@ -252,7 +252,7 @@ class Libraries(object):
pass
elif section_id:
try:
- inFilePath = os.path.join(plexpy.CONFIG.CACHE_DIR,'media_info-%s.json' % section_id)
+ inFilePath = os.path.join(plexpy.CONFIG.CACHE_DIR,'media_info_%s.json' % section_id)
with open(inFilePath, 'r') as inFile:
rows = json.load(inFile)
library_count = len(rows)
@@ -314,13 +314,19 @@ class Libraries(object):
# 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)
+ try:
+ 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)
+ except IOError as e:
+ logger.debug(u"PlexPy Libraries :: Unable to create cache file for rating_key %s." % rating_key)
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)
+ try:
+ outFilePath = os.path.join(plexpy.CONFIG.CACHE_DIR,'media_info_%s.json' % section_id)
+ with open(outFilePath, 'w') as outFile:
+ json.dump(rows, outFile)
+ except IOError as e:
+ logger.debug(u"PlexPy Libraries :: Unable to create cache file for section_id %s." % section_id)
# Update the last_watched and play_count
for item in rows:
@@ -407,7 +413,7 @@ class Libraries(object):
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))
+ 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:
@@ -417,7 +423,7 @@ class Libraries(object):
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)
+ 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:
@@ -426,32 +432,37 @@ class Libraries(object):
pass
# Get the total file size for each item
+ pms_connect = pmsconnect.PmsConnect()
+
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.get('file_size', 0))
- if child_file_size > 0:
- file_size += child_file_size
+ file_size += helpers.cast_to_int(child_metadata.get('file_size', 0))
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)
+ try:
+ 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)
+ except IOError as e:
+ logger.debug(u"PlexPy Libraries :: Unable to create cache file with file sizes for rating_key %s." % rating_key)
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)
+ try:
+ outFilePath = os.path.join(plexpy.CONFIG.CACHE_DIR,'media_info_%s.json' % section_id)
+ with open(outFilePath, 'w') as outFile:
+ json.dump(rows, outFile)
+ except IOError as e:
+ logger.debug(u"PlexPy Libraries :: Unable to create cache file with file sizes for section_id %s." % section_id)
if rating_key:
#logger.debug(u"PlexPy Libraries :: File sizes updated for rating_key %s." % rating_key)
@@ -460,7 +471,6 @@ class Libraries(object):
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:
diff --git a/plexpy/webserve.py b/plexpy/webserve.py
index fb765fb2..1fd52921 100644
--- a/plexpy/webserve.py
+++ b/plexpy/webserve.py
@@ -258,7 +258,8 @@ class WebInterface(object):
@cherrypy.expose
def library(self, section_id=None):
config = {
- "get_file_sizes": plexpy.CONFIG.GET_FILE_SIZES
+ "get_file_sizes": plexpy.CONFIG.GET_FILE_SIZES,
+ "get_file_sizes_hold": plexpy.CONFIG.GET_FILE_SIZES_HOLD
}
library_data = libraries.Libraries()
@@ -376,16 +377,16 @@ class WebInterface(object):
@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'])
+ get_file_sizes_hold = plexpy.CONFIG.GET_FILE_SIZES_HOLD
+ section_ids = set(get_file_sizes_hold['section_ids'])
+ rating_keys = set(get_file_sizes_hold['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)}
+ plexpy.CONFIG.GET_FILE_SIZES_HOLD = {'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,
@@ -395,7 +396,7 @@ class WebInterface(object):
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)}
+ plexpy.CONFIG.GET_FILE_SIZES_HOLD = {'section_ids': list(section_ids), 'rating_keys': list(rating_keys)}
else:
result = False
@@ -476,8 +477,8 @@ class WebInterface(object):
@cherrypy.expose
def delete_datatable_media_info_cache(self, section_id, **kwargs):
- get_file_sizes = plexpy.CONFIG.GET_FILE_SIZES
- section_ids = set(get_file_sizes['section_ids'])
+ get_file_sizes_hold = plexpy.CONFIG.GET_FILE_SIZES_HOLD
+ section_ids = set(get_file_sizes_hold['section_ids'])
if section_id not in section_ids:
if section_id:
@@ -1049,6 +1050,7 @@ class WebInterface(object):
"pms_uuid": plexpy.CONFIG.PMS_UUID,
"date_format": plexpy.CONFIG.DATE_FORMAT,
"time_format": plexpy.CONFIG.TIME_FORMAT,
+ "get_file_sizes": checked(plexpy.CONFIG.GET_FILE_SIZES),
"grouping_global_history": checked(plexpy.CONFIG.GROUPING_GLOBAL_HISTORY),
"grouping_user_history": checked(plexpy.CONFIG.GROUPING_USER_HISTORY),
"grouping_charts": checked(plexpy.CONFIG.GROUPING_CHARTS),
@@ -1122,7 +1124,7 @@ class WebInterface(object):
# Handle the variable config options. Note - keys with False values aren't getting passed
checked_configs = [
- "launch_browser", "enable_https", "api_enabled", "freeze_db", "check_github",
+ "launch_browser", "enable_https", "api_enabled", "freeze_db", "check_github", "get_file_sizes",
"grouping_global_history", "grouping_user_history", "grouping_charts", "pms_use_bif", "pms_ssl",
"movie_notify_enable", "tv_notify_enable", "music_notify_enable", "monitoring_use_websocket",
"tv_notify_on_start", "movie_notify_on_start", "music_notify_on_start",