diff --git a/data/interfaces/default/js/tables/export_table.js b/data/interfaces/default/js/tables/export_table.js index 7943c9c0..d0e8b6cb 100644 --- a/data/interfaces/default/js/tables/export_table.js +++ b/data/interfaces/default/js/tables/export_table.js @@ -69,7 +69,11 @@ export_table_options = { "data": "filename", "createdCell": function (td, cellData, rowData, row, col) { if (cellData !== '') { - $(td).html(cellData); + if (rowData['complete'] === 1 && rowData['exists']) { + $(td).html('' + cellData + ''); + } else { + $(td).html(cellData); + } } }, "width": "50%", diff --git a/plexpy/exporter.py b/plexpy/exporter.py index 12460516..dd2e575b 100644 --- a/plexpy/exporter.py +++ b/plexpy/exporter.py @@ -984,7 +984,7 @@ def _real_export(export_id, items, attrs, file_format, filename): def get_export(export_id): db = database.MonitorDatabase() - result = db.select_single('SELECT filename, complete ' + result = db.select_single('SELECT filename, file_format, complete ' 'FROM exports WHERE id = ?', [export_id]) diff --git a/plexpy/webserve.py b/plexpy/webserve.py index 82eab3cb..d1f457f7 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -22,6 +22,7 @@ from future.builtins import str from io import open import base64 +import csv import json import linecache import os @@ -6514,6 +6515,57 @@ class WebInterface(object): else: return {'result': 'error', 'message': 'Failed to export metadata.'} + @cherrypy.expose + @requireAuth(member_of("admin")) + def view_export(self, export_id=None, **kwargs): + """ Download an exported metadata file + + ``` + Required parameters: + export_id (int): The row id of the exported file to view + + Optional parameters: + None + + Returns: + download + ``` + """ + result = exporter.get_export(export_id=export_id) + + if result and result['complete'] == 1 and result['exists']: + if result['file_format'] == 'json': + return serve_file(exporter.get_export_filepath(result['filename']), name=result['filename'], + content_type='application/json') + elif result['file_format'] == 'csv': + with open(exporter.get_export_filepath(result['filename']), 'r', encoding='utf-8') as f: + reader = csv.DictReader(f) + table = '' + \ + ''.join( + '' for row in reader) + \ + '
' + \ + ''.join(reader.fieldnames) + \ + '
' + ''.join(row.values()) + '
' + style = '' + return style + '
%s
' % table + else: + if result and result.get('complete') == 0: + msg = 'Export is still being processed.' + elif result and result.get('complete') == -1: + msg = 'Export failed to process.' + elif result and not result.get('exists'): + msg = 'Export file does not exist.' + else: + msg = 'Invalid export_id provided.' + cherrypy.response.headers['Content-Type'] = 'application/json;charset=UTF-8' + return json.dumps({'result': 'error', 'message': msg}).encode('utf-8') + @cherrypy.expose @requireAuth(member_of("admin")) @addtoapi()