@@ -168,7 +169,8 @@ DOCUMENTATION :: END
url: 'get_export_fields',
async: true,
data: {
- media_type: $('#export_media_type').val()
+ media_type: $('#export_media_type').val(),
+ sub_media_type: $('#export_sub_media_type').val()
},
success: function (result) {
if (result) {
diff --git a/data/interfaces/default/info.html b/data/interfaces/default/info.html
index 415c0206..33aabd61 100644
--- a/data/interfaces/default/info.html
+++ b/data/interfaces/default/info.html
@@ -550,7 +550,8 @@ DOCUMENTATION :: END
@@ -884,7 +885,8 @@ DOCUMENTATION :: END
data: {
section_id: $(this).data('section_id'),
rating_key: $(this).data('rating_key'),
- media_type: $(this).data('media_type')
+ media_type: $(this).data('media_type'),
+ sub_media_type: $(this).data('sub_media_type')
},
cache: false,
async: true,
diff --git a/plexpy/exporter.py b/plexpy/exporter.py
index 221e0c17..5e118842 100644
--- a/plexpy/exporter.py
+++ b/plexpy/exporter.py
@@ -83,8 +83,9 @@ class Export(object):
'album': 'track',
'track': '',
'photoalbum': 'photo',
+ 'photo': '',
'collection': 'children',
- 'playlist': 'items'
+ 'playlist': 'item'
}
METADATA_LEVELS = (0, 1, 2, 3, 9)
MEDIA_INFO_LEVELS = (0, 1, 2, 3, 9)
@@ -1889,11 +1890,18 @@ def check_export_exists(filename):
return os.path.isfile(get_export_filepath(filename))
-def get_custom_fields(media_type):
+def get_custom_fields(media_type, sub_media_type=None):
+ custom_fields = {
+ 'metadata_fields': [],
+ 'media_info_fields': []
+ }
+
export = Export()
if media_type not in export.MEDIA_TYPES:
- return {'metadata_fields': [], 'media_info_fields': []}
+ return custom_fields
+ elif media_type in ('collection', 'playlist') and sub_media_type not in export.MEDIA_TYPES:
+ return custom_fields
metadata_levels_map, media_info_levels_map = export.return_attrs_level_map(media_type)
@@ -1901,23 +1909,24 @@ def get_custom_fields(media_type):
child_media_type = export.CHILD_MEDIA_TYPES[media_type]
while child_media_type:
+ if child_media_type in ('children', 'item'):
+ fields_child_media_type = sub_media_type
+ else:
+ fields_child_media_type = child_media_type
+
prefix = prefix + export.PLURAL_MEDIA_TYPES[child_media_type] + '.'
child_metadata_levels_map, child_media_info_levels_map = export.return_attrs_level_map(
- child_media_type, prefix=prefix)
+ fields_child_media_type, prefix=prefix)
metadata_levels_map.update(child_metadata_levels_map)
media_info_levels_map.update(child_media_info_levels_map)
- child_media_type = export.CHILD_MEDIA_TYPES[child_media_type]
+ child_media_type = export.CHILD_MEDIA_TYPES.get(fields_child_media_type)
- custom_metadata_fields = [{'field': attr, 'level': level}
- for attr, level in sorted(metadata_levels_map.items()) if level]
- custom_media_info_fields = [{'field': attr, 'level': level}
- for attr, level in sorted(media_info_levels_map.items()) if level]
+ custom_fields['metadata_fields'] = [{'field': attr, 'level': level}
+ for attr, level in sorted(metadata_levels_map.items()) if level]
+ custom_fields['media_info_fields'] = [{'field': attr, 'level': level}
+ for attr, level in sorted(media_info_levels_map.items()) if level]
- custom_fields = {
- 'metadata_fields': custom_metadata_fields,
- 'media_info_fields': custom_media_info_fields
- }
return custom_fields
diff --git a/plexpy/webserve.py b/plexpy/webserve.py
index a739999e..70dc9aeb 100644
--- a/plexpy/webserve.py
+++ b/plexpy/webserve.py
@@ -6482,16 +6482,18 @@ class WebInterface(object):
@cherrypy.expose
@requireAuth(member_of("admin"))
- def export_metadata_modal(self, section_id=None, rating_key=None, media_type=None, **kwargs):
+ def export_metadata_modal(self, section_id=None, rating_key=None,
+ media_type=None, sub_media_type=None, **kwargs):
return serve_template(templatename="export_modal.html", title="Export Metadata",
- section_id=section_id, rating_key=rating_key, media_type=media_type)
+ section_id=section_id, rating_key=rating_key,
+ media_type=media_type, sub_media_type=sub_media_type)
@cherrypy.expose
@cherrypy.tools.json_out()
@requireAuth(member_of("admin"))
@addtoapi()
- def get_export_fields(self, media_type=None, **kwargs):
+ def get_export_fields(self, media_type=None, sub_media_type=None, **kwargs):
""" Get a list of available custom export fields.
```
@@ -6499,7 +6501,7 @@ class WebInterface(object):
media_type (str): The media type of the fields to return
Optional parameters:
- None
+ sub_media_type (str): The child media type for collections or playlists
Returns:
json:
@@ -6514,7 +6516,8 @@ class WebInterface(object):
}
```
"""
- custom_fields = exporter.get_custom_fields(media_type=media_type)
+ custom_fields = exporter.get_custom_fields(media_type=media_type,
+ sub_media_type=sub_media_type)
return custom_fields