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"))