diff --git a/data/interfaces/default/export_modal.html b/data/interfaces/default/export_modal.html index e4e2b3ee..c7650007 100644 --- a/data/interfaces/default/export_modal.html +++ b/data/interfaces/default/export_modal.html @@ -84,7 +84,7 @@ DOCUMENTATION :: END

Add additional fields to the selected media info export level.

- +
-

Select the export file format.

+

Select the export data file format.

-
- +
+ +
+
+ +
+

- Enable to export poster and cover image files.
Note: Only applies to ${thumb_media_types}. + Select the level to export poster and cover image files.
Note: Only applies to ${thumb_media_types}.

-
- +
+ +
+
+ +
+

- Enable to export background artwork image files.
Note: Only applies to ${art_media_types}. + Select the level to export background artwork image files.
Note: Only applies to ${art_media_types}.

@@ -197,15 +213,15 @@ DOCUMENTATION :: END if ($(this).val() === 'm3u8') { $('#metadata_export_level_select').prop('disabled', true); $('#media_info_export_level_select').prop('disabled', true); - $("#export_include_thumb").prop('disabled', true); - $("#export_include_art").prop('disabled', true); + $("#export_thumb_level").prop('disabled', true); + $("#export_art_level").prop('disabled', true); export_custom_metadata_fields.disable(); export_custom_media_info_fields.disable(); } else { $('#metadata_export_level_select').prop('disabled', false); $('#media_info_export_level_select').prop('disabled', false); - $("#export_include_thumb").prop('disabled', false); - $("#export_include_art").prop('disabled', false); + $("#export_thumb_level").prop('disabled', false); + $("#export_art_level").prop('disabled', false); export_custom_metadata_fields.enable(); export_custom_media_info_fields.enable(); } @@ -218,8 +234,8 @@ DOCUMENTATION :: END var metadata_export_level = $('#metadata_export_level_select option:selected').val(); var media_info_export_level = $('#media_info_export_level_select option:selected').val(); var file_format = $('#export_file_format option:selected').val(); - var include_thumb = $("#export_include_thumb").is(':checked') ? 1 : 0; - var include_art = $("#export_include_art").is(':checked') ? 1 : 0; + var thumb_level = $("#export_thumb_level option:selected").val(); + var art_level = $("#export_art_level option:selected").val(); var custom_fields = [ $('#export_custom_metadata_fields').val(), $('#export_custom_media_info_fields').val() @@ -235,8 +251,8 @@ DOCUMENTATION :: END metadata_level: metadata_export_level, media_info_level: media_info_export_level, file_format: file_format, - include_thumb: include_thumb, - include_art: include_art, + thumb_level: thumb_level, + art_level: art_level, custom_fields: custom_fields, export_type: export_type }, diff --git a/data/interfaces/default/js/tables/export_table.js b/data/interfaces/default/js/tables/export_table.js index 5050abd7..c078045a 100644 --- a/data/interfaces/default/js/tables/export_table.js +++ b/data/interfaces/default/js/tables/export_table.js @@ -85,7 +85,7 @@ export_table_options = { "createdCell": function (td, cellData, rowData, row, col) { if (cellData !== '') { var images = ''; - if (rowData['include_thumb'] || rowData['include_art']) { + if (rowData['thumb_level'] || rowData['art_level']) { images = ' + images'; } $(td).html(cellData + images); diff --git a/plexpy/__init__.py b/plexpy/__init__.py index efeae802..37510837 100644 --- a/plexpy/__init__.py +++ b/plexpy/__init__.py @@ -800,7 +800,7 @@ def dbcheck(): 'timestamp INTEGER, section_id INTEGER, user_id INTEGER, rating_key INTEGER, media_type TEXT, ' 'filename TEXT, file_format TEXT, ' 'metadata_level INTEGER, media_info_level INTEGER, ' - 'include_thumb INTEGER DEFAULT 0, include_art INTEGER DEFAULT 0, ' + 'thumb_level INTEGER DEFAULT 0, art_level INTEGER DEFAULT 0, ' 'custom_fields TEXT, ' 'file_size INTEGER DEFAULT 0, complete INTEGER DEFAULT 0)' ) @@ -2161,6 +2161,24 @@ def dbcheck(): 'UPDATE notifiers SET agent_label = "macOS Notification Center" WHERE agent_label = "OSX Notify"' ) + # Upgrade exports table from earlier versions + try: + c_db.execute('SELECT thumb_level FROM exports') + except sqlite3.OperationalError: + logger.debug("Altering database. Updating database table exports.") + c_db.execute( + 'ALTER TABLE exports ADD COLUMN thumb_level INTEGER DEFAULT 0' + ) + c_db.execute( + 'UPDATE exports SET thumb_level = 9 WHERE include_thumb = 1' + ) + c_db.execute( + 'ALTER TABLE exports ADD COLUMN art_level INTEGER DEFAULT 0' + ) + c_db.execute( + 'UPDATE exports SET art_level = 9 WHERE include_art = 1' + ) + # Add "Local" user to database as default unauthenticated user. result = c_db.execute('SELECT id FROM users WHERE username = "Local"') if not result.fetchone(): diff --git a/plexpy/exporter.py b/plexpy/exporter.py index cceea3b6..e079561f 100644 --- a/plexpy/exporter.py +++ b/plexpy/exporter.py @@ -99,7 +99,7 @@ class Export(object): def __init__(self, section_id=None, user_id=None, rating_key=None, file_format='csv', metadata_level=1, media_info_level=1, - include_thumb=False, include_art=False, + thumb_level=False, art_level=False, custom_fields='', export_type=None): self.section_id = helpers.cast_to_int(section_id) or None self.user_id = helpers.cast_to_int(user_id) or None @@ -107,8 +107,8 @@ class Export(object): self.file_format = str(file_format).lower() self.metadata_level = helpers.cast_to_int(metadata_level) self.media_info_level = helpers.cast_to_int(media_info_level) - self.include_thumb = include_thumb - self.include_art = include_art + self.thumb_level = thumb_level + self.art_level = art_level self.custom_fields = custom_fields.replace(' ', '') self._custom_fields = {} self.export_type = export_type or 'all' @@ -127,8 +127,8 @@ class Export(object): if self.file_format == 'm3u8': self.metadata_level = 1 self.media_info_level = 1 - self.include_thumb = False - self.include_art = False + self.thumb_level = 0 + self.art_level = 0 self.custom_fields = '' def return_attrs(self, media_type, flatten=False): @@ -1494,9 +1494,9 @@ class Export(object): if self.rating_key: logger.debug( "Tautulli Exporter :: Export called with rating_key %s, " - "metadata_level %d, media_info_level %d, include_thumb %s, include_art %s", + "metadata_level %d, media_info_level %d, thumb_level %s, art_level %s", self.rating_key, self.metadata_level, self.media_info_level, - self.include_thumb, self.include_art) + self.thumb_level, self.art_level) self.obj = plex.get_item(self.rating_key) self.media_type = 'photoalbum' if self.is_photoalbum(self.obj) else self.obj.type @@ -1516,10 +1516,10 @@ class Export(object): elif self.user_id: logger.debug( "Tautulli Exporter :: Export called with user_id %s, " - "metadata_level %d, media_info_level %d, include_thumb %s, include_art %s, " + "metadata_level %d, media_info_level %d, thumb_level %s, art_level %s, " "export_type %s", self.user_id, self.metadata_level, self.media_info_level, - self.include_thumb, self.include_art, self.export_type) + self.thumb_level, self.art_level, self.export_type) self.obj = plex.plex self.media_type = self.export_type @@ -1533,10 +1533,10 @@ class Export(object): elif self.section_id: logger.debug( "Tautulli Exporter :: Export called with section_id %s, " - "metadata_level %d, media_info_level %d, include_thumb %s, include_art %s, " + "metadata_level %d, media_info_level %d, thumb_level %s, art_level %s, " "export_type %s", self.section_id, self.metadata_level, self.media_info_level, - self.include_thumb, self.include_art, self.export_type) + self.thumb_level, self.art_level, self.export_type) self.obj = plex.get_library(str(self.section_id)) if self.export_type == 'all': @@ -1560,8 +1560,8 @@ class Export(object): logger.error("Tautulli Exporter :: %s", msg) return msg - self.include_thumb = self.include_thumb and self.MEDIA_TYPES[self.media_type][0] - self.include_art = self.include_art and self.MEDIA_TYPES[self.media_type][1] + self.thumb_level = int(self.thumb_level and self.MEDIA_TYPES[self.media_type][0]) + self.art_level = int(self.art_level and self.MEDIA_TYPES[self.media_type][1]) self._process_custom_fields() self.filename = '{}.{}'.format(helpers.clean_filename(filename), self.file_format) @@ -1586,8 +1586,8 @@ class Export(object): 'filename': self.filename, 'metadata_level': self.metadata_level, 'media_info_level': self.media_info_level, - 'include_thumb': self.include_thumb, - 'include_art': self.include_art, + 'thumb_level': self.thumb_level, + 'art_level': self.art_level, 'custom_fields': self.custom_fields} db = database.MonitorDatabase() @@ -1607,8 +1607,8 @@ class Export(object): keys = {'id': self.export_id} values = {'complete': complete, 'file_size': self.file_size, - 'include_thumb': self.include_thumb, - 'include_art': self.include_art} + 'thumb_level': self.thumb_level, + 'art_level': self.art_level} db = database.MonitorDatabase() db.upsert(table_name='exports', key_dict=keys, value_dict=values) @@ -1661,10 +1661,10 @@ class Export(object): if os.path.exists(images_folder): for f in os.listdir(images_folder): - if self.include_thumb is False and f.endswith('.thumb.jpg'): - self.include_thumb = True - if self.include_art is False and f.endswith('.art.jpg'): - self.include_art = True + if not self.thumb_level and f.endswith('.thumb.jpg'): + self.thumb_level = 10 # Custom thumb level + if not self.art_level and f.endswith('.art.jpg'): + self.art_level = 10 # Custom art level image_path = os.path.join(images_folder, f) if os.path.isfile(image_path): @@ -1735,10 +1735,10 @@ class Export(object): if level <= self.media_info_level: export_attrs_set.update(attrs) - if self.include_thumb: + if self.thumb_level: if 'thumbFile' in media_attrs and self.MEDIA_TYPES[media_type][0]: export_attrs_set.add('thumbFile') - if self.include_art: + if self.art_level: if 'artFile' in media_attrs and self.MEDIA_TYPES[media_type][1]: export_attrs_set.add('artFile') @@ -1849,7 +1849,7 @@ class Export(object): def get_export(export_id): db = database.MonitorDatabase() - result = db.select_single('SELECT filename, file_format, include_thumb, include_art, complete ' + result = db.select_single('SELECT filename, file_format, thumb_level, art_level, complete ' 'FROM exports WHERE id = ?', [export_id]) @@ -1883,7 +1883,7 @@ def delete_export(export_id): def delete_all_exports(): db = database.MonitorDatabase() - result = db.select('SELECT filename, include_thumb, include_art FROM exports') + result = db.select('SELECT filename FROM exports') logger.info("Tautulli Exporter :: Deleting all exports from the database.") @@ -1937,8 +1937,8 @@ def get_export_datatable(section_id=None, user_id=None, rating_key=None, kwargs= 'exports.file_format', 'exports.metadata_level', 'exports.media_info_level', - 'exports.include_thumb', - 'exports.include_art', + 'exports.thumb_level', + 'exports.art_level', 'exports.custom_fields', 'exports.file_size', 'exports.complete' @@ -1974,8 +1974,8 @@ def get_export_datatable(section_id=None, user_id=None, rating_key=None, kwargs= 'file_format': item['file_format'], 'metadata_level': item['metadata_level'], 'media_info_level': item['media_info_level'], - 'include_thumb': item['include_thumb'], - 'include_art': item['include_art'], + 'thumb_level': item['thumb_level'], + 'art_level': item['art_level'], 'custom_fields': item['custom_fields'], 'file_size': item['file_size'], 'complete': item['complete'], diff --git a/plexpy/webserve.py b/plexpy/webserve.py index 4c6167b0..559686ff 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -6633,7 +6633,7 @@ class WebInterface(object): @addtoapi() def export_metadata(self, section_id=None, user_id=None, rating_key=None, file_format='csv', metadata_level=1, media_info_level=1, - include_thumb=False, include_art=False, + thumb_level=False, art_level=False, custom_fields='', export_type=None, **kwargs): """ Export library or media metadata to a file @@ -6647,8 +6647,8 @@ class WebInterface(object): file_format (str): csv (default), json, or xml metadata_level (int): The level of metadata to export (default 1) media_info_level (int): The level of media info to export (default 1) - include_thumb (bool): True to export poster/cover images - include_art (bool): True to export background artwork images + thumb_level (int): The level of poster/cover images to export (default 0) + art_level (int): The level of background artwork images to export (default 0) custom_fields (str): Comma separated list of custom fields to export in addition to the export level selected export_type (str): collection or playlist for library/user export, @@ -6667,8 +6667,8 @@ class WebInterface(object): file_format=file_format, metadata_level=metadata_level, media_info_level=media_info_level, - include_thumb=helpers.bool_true(include_thumb), - include_art=helpers.bool_true(include_art), + thumb_level=helpers.bool_true(thumb_level), + art_level=helpers.bool_true(art_level), custom_fields=custom_fields, export_type=export_type).export() @@ -6759,7 +6759,7 @@ class WebInterface(object): if result and result['complete'] == 1 and result['exists']: export_filepath = exporter.get_export_filepath(result['filename']) - if result['include_thumb'] or result['include_art']: + if result['thumb_level'] or result['art_level']: zip_filename = '{}.zip'.format(os.path.splitext(result['filename'])[0]) images_folder = exporter.get_export_filepath(result['filename'], images=True)