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 #####