diff --git a/data/interfaces/default/history.html b/data/interfaces/default/history.html
index bfe32348..16d62a94 100644
--- a/data/interfaces/default/history.html
+++ b/data/interfaces/default/history.html
@@ -185,17 +185,15 @@
$('#deleteCount').text(history_to_delete.length);
$('#confirm-modal-delete').modal();
$('#confirm-modal-delete').one('click', '#confirm-delete', function () {
- history_to_delete.forEach(function(row, idx) {
- $.ajax({
- url: 'delete_history_rows',
- type: 'POST',
- data: { row_id: row },
- async: true,
- success: function (data) {
- var msg = "History deleted";
- showMsg(msg, false, true, 2000);
- }
- });
+ $.ajax({
+ url: 'delete_history_rows',
+ type: 'POST',
+ data: { row_ids: history_to_delete.join(',') },
+ async: true,
+ success: function (data) {
+ var msg = "History deleted";
+ showMsg(msg, false, true, 2000);
+ }
});
history_table.draw();
});
diff --git a/data/interfaces/default/info.html b/data/interfaces/default/info.html
index 30f7caa6..36ce79a6 100644
--- a/data/interfaces/default/info.html
+++ b/data/interfaces/default/info.html
@@ -721,17 +721,15 @@ DOCUMENTATION :: END
$('#deleteCount').text(history_to_delete.length);
$('#confirm-modal-delete').modal();
$('#confirm-modal-delete').one('click', '#confirm-delete', function () {
- history_to_delete.forEach(function (row, idx) {
- $.ajax({
- url: 'delete_history_rows',
- type: 'POST',
- data: { row_id: row },
- async: true,
- success: function (data) {
- var msg = "History deleted";
- showMsg(msg, false, true, 2000);
- }
- });
+ $.ajax({
+ url: 'delete_history_rows',
+ type: 'POST',
+ data: { row_ids: history_to_delete.join(',') },
+ async: true,
+ success: function (data) {
+ var msg = "History deleted";
+ showMsg(msg, false, true, 2000);
+ }
});
history_table.draw();
});
diff --git a/data/interfaces/default/library.html b/data/interfaces/default/library.html
index 2d8364a9..a3a68296 100644
--- a/data/interfaces/default/library.html
+++ b/data/interfaces/default/library.html
@@ -485,17 +485,15 @@ DOCUMENTATION :: END
$('#deleteCount').text(history_to_delete.length);
$('#confirm-modal-delete').modal();
$('#confirm-modal-delete').one('click', '#confirm-delete', function () {
- history_to_delete.forEach(function(row, idx) {
- $.ajax({
- url: 'delete_history_rows',
- type: 'POST',
- data: { row_id: row },
- async: true,
- success: function (data) {
- var msg = "History deleted";
- showMsg(msg, false, true, 2000);
- }
- });
+ $.ajax({
+ url: 'delete_history_rows',
+ type: 'POST',
+ data: { row_ids: history_to_delete.join(',') },
+ async: true,
+ success: function (data) {
+ var msg = "History deleted";
+ showMsg(msg, false, true, 2000);
+ }
});
history_table.draw();
});
diff --git a/data/interfaces/default/user.html b/data/interfaces/default/user.html
index e95af099..1875ba7b 100644
--- a/data/interfaces/default/user.html
+++ b/data/interfaces/default/user.html
@@ -574,17 +574,15 @@ DOCUMENTATION :: END
$('#deleteType').text('history');
$('#confirm-modal-delete').modal();
$('#confirm-modal-delete').one('click', '#confirm-delete', function () {
- history_to_delete.forEach(function(row, idx) {
- $.ajax({
- url: 'delete_history_rows',
- type: 'POST',
- data: { row_id: row },
- async: true,
- success: function (data) {
- var msg = "History deleted";
- showMsg(msg, false, true, 2000);
- }
- });
+ $.ajax({
+ url: 'delete_history_rows',
+ type: 'POST',
+ data: { row_ids: history_to_delete.join(',') },
+ async: true,
+ success: function (data) {
+ var msg = "History deleted";
+ showMsg(msg, false, true, 2000);
+ }
});
history_table.draw();
});
diff --git a/plexpy/datafactory.py b/plexpy/datafactory.py
index 58ae5514..131eedce 100644
--- a/plexpy/datafactory.py
+++ b/plexpy/datafactory.py
@@ -1561,21 +1561,23 @@ class DataFactory(object):
return key_list
- def delete_session_history_rows(self, row_id=None):
- monitor_db = database.MonitorDatabase()
+ def delete_session_history_rows(self, row_ids=None):
+ if row_ids and row_ids is not None:
+ row_ids = map(helpers.cast_to_int, row_ids.split(','))
- if row_id.isdigit():
- logger.info(u"Tautulli DataFactory :: Deleting row id %s from the session history database." % row_id)
- session_history_del = \
- monitor_db.action('DELETE FROM session_history WHERE id = ?', [row_id])
- session_history_media_info_del = \
- monitor_db.action('DELETE FROM session_history_media_info WHERE id = ?', [row_id])
- session_history_metadata_del = \
- monitor_db.action('DELETE FROM session_history_metadata WHERE id = ?', [row_id])
+ if row_ids:
+ monitor_db = database.MonitorDatabase()
- return 'Deleted rows %s.' % row_id
+ logger.info(u"Tautulli DataFactory :: Deleting history row ids %s from the session history database." % row_ids)
+
+ where = 'WHERE id IN ({})'.format(', '.join(['?'] * len(row_ids)))
+ for table in ('session_history', 'session_history_media_info', 'session_history_metadata'):
+ query = 'DELETE FROM {table} {where}'.format(table=table, where=where)
+ monitor_db.action(query=query, args=row_ids)
+
+ return 'Deleted history.'
else:
- return 'Unable to delete rows. Input row not valid.'
+ return 'Unable to delete rows. Input rows not valid.'
def update_metadata(self, old_key_list='', new_key_list='', media_type=''):
pms_connect = pmsconnect.PmsConnect()
diff --git a/plexpy/webserve.py b/plexpy/webserve.py
index ea62dfb8..4fda8647 100644
--- a/plexpy/webserve.py
+++ b/plexpy/webserve.py
@@ -819,11 +819,11 @@ class WebInterface(object):
```
Required parameters:
- section_id (str): The id of the Plex library section
+ section_id (str): The id of the Plex library section
Optional parameters:
grouping (int): 0 or 1
- query_days (str): Comma separated days, e.g. "1, 7, 30, 0"
+ query_days (str): Comma separated days, e.g. "1,7,30,0"
Returns:
json:
@@ -1447,7 +1447,7 @@ class WebInterface(object):
Optional parameters:
grouping (int): 0 or 1
- query_days (str): Comma separated days, e.g. "1, 7, 30, 0"
+ query_days (str): Comma separated days, e.g. "1,7,30,0"
Returns:
json:
@@ -1853,16 +1853,30 @@ class WebInterface(object):
@cherrypy.expose
@cherrypy.tools.json_out()
@requireAuth(member_of("admin"))
- def delete_history_rows(self, row_id, **kwargs):
+ @addtoapi("delete_history")
+ def delete_history_rows(self, row_ids=None, **kwargs):
+ """ Delete history rows from Tautulli.
+
+ ```
+ Required parameters:
+ row_ids (str): Comma separated row ids to delete, e.g. "65,110,2,3645"
+
+ Optional parameters:
+ None
+
+ Returns:
+ None
+ ```
+ """
data_factory = datafactory.DataFactory()
- if row_id:
- delete_row = data_factory.delete_session_history_rows(row_id=row_id)
+ if row_ids:
+ delete_row = data_factory.delete_session_history_rows(row_ids=row_ids)
if delete_row:
return {'message': delete_row}
else:
- return {'message': 'no data received'}
+ return {'message': 'No row ids received.'}
##### Graphs #####