From b336f07ff9b8e2a9d5fcc76a2010f22f1743fb73 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 3 May 2020 16:52:17 -0700 Subject: [PATCH] Improve database import error messages --- data/interfaces/default/app_import.html | 25 ++++++++++++++++++--- plexpy/webserve.py | 29 +++++++++++++++---------- 2 files changed, 40 insertions(+), 14 deletions(-) diff --git a/data/interfaces/default/app_import.html b/data/interfaces/default/app_import.html index 9e0f1eaf..5d95084a 100644 --- a/data/interfaces/default/app_import.html +++ b/data/interfaces/default/app_import.html @@ -123,6 +123,7 @@ }); $("#import_db").click(function() { + $(this).prop('disabled', true); var database_file = false; var formData = new FormData(); @@ -145,7 +146,9 @@ formData.append('ignore_interval', $("#import_ignore_interval").val()); } if (database_file) { - $("#status-message").html(' Uploading database file...'); + $("#status-message").html('  Uploading database file...'); + } else { + $("#status-message").html(''); } $.ajax({ @@ -157,10 +160,26 @@ contentType: false, processData: false, success: function(data) { - $("#status-message").html(data); + var msg; + if (data.result === 'success') { + msg = "  " + data.message; + } else { + msg = "  " + data.message; + } + $("#status-message").html(msg); $("#import_database_file").val(null); - $('#import_database_file_name').val(''); + $("#import_database_file_name").val(''); $("#import_database_path").val(''); + }, + error: function (xhr) { + var msg = "  Error (" + xhr.status + ")"; + if (xhr.status === 413) { + msg += ": file is too large to upload" + } + $("#status-message").html(msg); + }, + complete: function(xhr) { + $("#import_db").prop('disabled', false); } }); }); diff --git a/plexpy/webserve.py b/plexpy/webserve.py index 6ba5be3a..2fab0c15 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -3739,6 +3739,7 @@ class WebInterface(object): return {'result': 'error', 'message': 'Failed to delete device.'} @cherrypy.expose + @cherrypy.tools.json_out() @requireAuth(member_of("admin")) @addtoapi() def import_database(self, app=None, database_file=None, database_path=None, method=None, backup=True, @@ -3762,11 +3763,14 @@ class WebInterface(object): of seconds for a stream to import Returns: - None + json: + {"result": "success", + "message": "Import has started. Check the logs to monitor any problems." + } ``` """ if not app: - return 'No app specified for import' + return {'result': 'error', 'message': 'No app specified for import'} if database_file: database_path = os.path.join(plexpy.CONFIG.CACHE_DIR, database_file.filename) @@ -3780,7 +3784,7 @@ class WebInterface(object): f.write(data) if not database_path: - return 'No database specified for import' + return {'result': 'error', 'message': 'No database specified for import'} if app.lower() == 'tautulli': db_check_msg = database.validate_database(database=database_path) @@ -3789,9 +3793,10 @@ class WebInterface(object): kwargs={'database': database_path, 'method': method, 'backup': helpers.bool_true(backup)}).start() - return 'Import has started. Check the Tautulli logs to monitor any problems.' + return {'result': 'success', + 'message': 'Import has started. Check the logs to monitor any problems.'} else: - return db_check_msg + return {'result': 'error', 'message': db_check_msg} elif app.lower() == 'plexwatch': db_check_msg = plexwatch_import.validate_database(database=database_path, @@ -3801,10 +3806,11 @@ class WebInterface(object): kwargs={'database': database_path, 'table_name': table_name, 'import_ignore_interval': import_ignore_interval}).start() - return 'Import has started. Check the Tautulli logs to monitor any problems.' + return {'result': 'success', + 'message': 'Import has started. Check the logs to monitor any problems.'} else: - return db_check_msg - + return {'result': 'error', 'message': db_check_msg} + elif app.lower() == 'plexivity': db_check_msg = plexivity_import.validate_database(database=database_path, table_name=table_name) @@ -3813,12 +3819,13 @@ class WebInterface(object): kwargs={'database': database_path, 'table_name': table_name, 'import_ignore_interval': import_ignore_interval}).start() - return 'Import has started. Check the Tautulli logs to monitor any problems.' + return {'result': 'success', + 'message': 'Import has started. Check the logs to monitor any problems.'} else: - return db_check_msg + return {'result': 'error', 'message': db_check_msg} else: - return 'App not recognized for import' + return {'result': 'error', 'message': 'App not recognized for import'} @cherrypy.expose @requireAuth(member_of("admin"))