From 006e7c214d93fecd46c60eaa1fb8f016738e7c97 Mon Sep 17 00:00:00 2001 From: JonnyWong16 Date: Wed, 19 Apr 2017 19:32:35 -0700 Subject: [PATCH] Add notification success to database --- .../default/js/tables/notification_logs.js | 25 ++++++++++- data/interfaces/default/logs.html | 1 + plexpy/__init__.py | 14 ++++++- plexpy/datafactory.py | 6 ++- plexpy/notification_handler.py | 41 ++++++++++++------- 5 files changed, 68 insertions(+), 19 deletions(-) diff --git a/data/interfaces/default/js/tables/notification_logs.js b/data/interfaces/default/js/tables/notification_logs.js index f2d6b7e1..5ff5df73 100644 --- a/data/interfaces/default/js/tables/notification_logs.js +++ b/data/interfaces/default/js/tables/notification_logs.js @@ -80,13 +80,34 @@ notification_log_table_options = { $(td).html(cellData); } }, - "width": "50%" - } + "width": "48%" + }, + { + "targets": [6], + "data": "success", + "createdCell": function (td, cellData, rowData, row, col) { + if (cellData == 1) { + $(td).html(''); + } else { + $(td).html(''); + } + }, + "searchable": false, + "orderable": false, + "className": "no-wrap", + "width": "2%" + }, ], "drawCallback": function (settings) { // Jump to top of page //$('html,body').scrollTop(0); $('#ajaxMsg').fadeOut(); + + // Create the tooltips. + $('body').tooltip({ + selector: '[data-toggle="tooltip"]', + container: 'body' + }); }, "preDrawCallback": function(settings) { var msg = " Fetching rows..."; diff --git a/data/interfaces/default/logs.html b/data/interfaces/default/logs.html index 497884de..51fbe958 100644 --- a/data/interfaces/default/logs.html +++ b/data/interfaces/default/logs.html @@ -109,6 +109,7 @@ Action Subject Text Body Text + diff --git a/plexpy/__init__.py b/plexpy/__init__.py index 3ed46c55..d8973bce 100644 --- a/plexpy/__init__.py +++ b/plexpy/__init__.py @@ -481,7 +481,7 @@ def dbcheck(): 'CREATE TABLE IF NOT EXISTS notify_log (id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER, ' 'session_key INTEGER, rating_key INTEGER, parent_rating_key INTEGER, grandparent_rating_key INTEGER, ' 'user_id INTEGER, user TEXT, notifier_id INTEGER, agent_id INTEGER, agent_name TEXT, notify_action TEXT, ' - 'subject_text TEXT, body_text TEXT, script_args TEXT)' + 'subject_text TEXT, body_text TEXT, script_args TEXT, success INTEGER DEFAULT 0)' ) # library_sections table :: This table keeps record of the servers library sections @@ -958,6 +958,18 @@ def dbcheck(): 'ALTER TABLE notify_log ADD COLUMN notifier_id INTEGER' ) + # Upgrade notify_log table from earlier versions + try: + c_db.execute('SELECT send_success FROM notify_log') + except sqlite3.OperationalError: + logger.debug(u"Altering database. Updating database table notify_log.") + c_db.execute( + 'ALTER TABLE notify_log ADD COLUMN success INTEGER DEFAULT 0' + ) + c_db.execute( + 'UPDATE notify_log SET success = 1' + ) + # Upgrade library_sections table from earlier versions (remove UNIQUE constraint on section_id) try: result = c_db.execute('SELECT SQL FROM sqlite_master WHERE type="table" AND name="library_sections"').fetchone() diff --git a/plexpy/datafactory.py b/plexpy/datafactory.py index 28c0c3a9..9ae9f67a 100644 --- a/plexpy/datafactory.py +++ b/plexpy/datafactory.py @@ -1321,7 +1321,8 @@ class DataFactory(object): 'notify_log.agent_name', 'notify_log.notify_action', 'notify_log.subject_text', - 'notify_log.body_text' + 'notify_log.body_text', + 'notify_log.success' ] try: query = data_tables.ssp_query(table_name='notify_log', @@ -1360,7 +1361,8 @@ class DataFactory(object): 'agent_name': item['agent_name'], 'notify_action': item['notify_action'], 'subject_text': item['subject_text'], - 'body_text': body_text + 'body_text': body_text, + 'success': item['success'] } rows.append(row) diff --git a/plexpy/notification_handler.py b/plexpy/notification_handler.py index 0338838c..a34ed214 100644 --- a/plexpy/notification_handler.py +++ b/plexpy/notification_handler.py @@ -192,21 +192,25 @@ def notify(notifier_id=None, notify_action=None, stream_data=None, timeline_data parameters=parameters, agent_id=notifier_config['agent_id']) - # Send the notification - notifiers.send_notification(notifier_id=notifier_config['id'], - subject=subject, - body=body, - script_args=script_args, - notify_action=notify_action, - parameters=parameters) - # Set the notification state in the db - set_notify_state(session=stream_data or timeline_data, - notify_action=notify_action, - notifier=notifier_config, - subject=subject, - body=body, - script_args=script_args) + notification_id = set_notify_state(session=stream_data or timeline_data, + notify_action=notify_action, + notifier=notifier_config, + subject=subject, + body=body, + script_args=script_args) + + # Send the notification + success = notifiers.send_notification(notifier_id=notifier_config['id'], + subject=subject, + body=body, + script_args=script_args, + notify_action=notify_action, + notification_id=notification_id, + parameters=parameters) + + if success: + set_notify_success(notification_id) def get_notify_state(session): @@ -254,10 +258,19 @@ def set_notify_state(notify_action, notifier, subject, body, script_args, sessio 'script_args': script_args} monitor_db.upsert(table_name='notify_log', key_dict=keys, value_dict=values) + return monitor_db.last_insert_id() else: logger.error(u"PlexPy NotificationHandler :: Unable to set notify state.") +def set_notify_success(notification_id): + keys = {'id': notification_id} + values = {'success': 1} + + monitor_db = database.MonitorDatabase() + monitor_db.upsert(table_name='notify_log', key_dict=keys, value_dict=values) + + def build_media_notify_params(notify_action=None, session=None, timeline=None, **kwargs): # Get time formats date_format = plexpy.CONFIG.DATE_FORMAT.replace('Do','')