mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-08 06:00:51 -07:00
Queue newsletters instead of waiting for send
This commit is contained in:
parent
f810f50ea9
commit
eda0e73eb6
5 changed files with 38 additions and 25 deletions
|
@ -549,13 +549,11 @@
|
||||||
},
|
},
|
||||||
cache: false,
|
cache: false,
|
||||||
async: true,
|
async: true,
|
||||||
complete: function (xhr, status) {
|
success: function (data) {
|
||||||
if (xhr.responseText.indexOf('sent') > -1) {
|
if (data.result === 'success') {
|
||||||
var msg = '<i class="fa fa-check"></i> ' + xhr.responseText;
|
showMsg('<i class="fa fa-check"></i> ' + data.message, false, true, 5000);
|
||||||
showMsg(msg, false, true, 2000);
|
|
||||||
} else {
|
} else {
|
||||||
var msg = '<i class="fa fa-times"></i> ' + xhr.responseText;
|
showMsg('<i class="fa fa-exclamation-circle"></i> ' + data.message, false, true, 5000, true);
|
||||||
showMsg(msg, false, true, 2000, true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -28,6 +28,18 @@ import newsletters
|
||||||
NEWSLETTER_SCHED = BackgroundScheduler()
|
NEWSLETTER_SCHED = BackgroundScheduler()
|
||||||
|
|
||||||
|
|
||||||
|
def add_newsletter_each(newsletter_id=None, notify_action=None, **kwargs):
|
||||||
|
if not notify_action:
|
||||||
|
logger.debug(u"Tautulli NewsletterHandler :: Notify called but no action received.")
|
||||||
|
return
|
||||||
|
|
||||||
|
data = {'newsletter': True,
|
||||||
|
'newsletter_id': newsletter_id,
|
||||||
|
'notify_action': notify_action}
|
||||||
|
data.update(kwargs)
|
||||||
|
plexpy.NOTIFY_QUEUE.put(data)
|
||||||
|
|
||||||
|
|
||||||
def schedule_newsletters(newsletter_id=None):
|
def schedule_newsletters(newsletter_id=None):
|
||||||
newsletters_list = newsletters.get_newsletters(newsletter_id=newsletter_id)
|
newsletters_list = newsletters.get_newsletters(newsletter_id=newsletter_id)
|
||||||
|
|
||||||
|
@ -36,7 +48,7 @@ def schedule_newsletters(newsletter_id=None):
|
||||||
|
|
||||||
if newsletter['active']:
|
if newsletter['active']:
|
||||||
schedule_newsletter_job('newsletter-{}'.format(newsletter['id']), name=newsletter_job_name,
|
schedule_newsletter_job('newsletter-{}'.format(newsletter['id']), name=newsletter_job_name,
|
||||||
func=notify, args=[newsletter['id'], 'on_cron'], cron=newsletter['cron'])
|
func=add_newsletter_each, args=[newsletter['id'], 'on_cron'], cron=newsletter['cron'])
|
||||||
else:
|
else:
|
||||||
schedule_newsletter_job('newsletter-{}'.format(newsletter['id']), name=newsletter_job_name,
|
schedule_newsletter_job('newsletter-{}'.format(newsletter['id']), name=newsletter_job_name,
|
||||||
remove_job=True)
|
remove_job=True)
|
||||||
|
|
|
@ -27,9 +27,7 @@ import helpers
|
||||||
import libraries
|
import libraries
|
||||||
import logger
|
import logger
|
||||||
import newsletter_handler
|
import newsletter_handler
|
||||||
import notification_handler
|
|
||||||
import pmsconnect
|
import pmsconnect
|
||||||
from notification_handler import get_poster_info, CustomFormatter
|
|
||||||
from notifiers import send_notification, EMAIL
|
from notifiers import send_notification, EMAIL
|
||||||
|
|
||||||
|
|
||||||
|
@ -459,6 +457,7 @@ class Newsletter(object):
|
||||||
return parameters
|
return parameters
|
||||||
|
|
||||||
def build_text(self):
|
def build_text(self):
|
||||||
|
from notification_handler import CustomFormatter
|
||||||
custom_formatter = CustomFormatter()
|
custom_formatter = CustomFormatter()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -507,6 +506,8 @@ class RecentlyAdded(Newsletter):
|
||||||
_TEMPLATE = 'recently_added.html'
|
_TEMPLATE = 'recently_added.html'
|
||||||
|
|
||||||
def _get_recently_added(self, media_type=None):
|
def _get_recently_added(self, media_type=None):
|
||||||
|
from notification_handler import format_group_index
|
||||||
|
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
pms_connect = pmsconnect.PmsConnect()
|
||||||
|
|
||||||
recently_added = []
|
recently_added = []
|
||||||
|
@ -562,16 +563,14 @@ class RecentlyAdded(Newsletter):
|
||||||
seasons = []
|
seasons = []
|
||||||
for k, v in groupby(filtered_children, key=lambda x: x['parent_media_index']):
|
for k, v in groupby(filtered_children, key=lambda x: x['parent_media_index']):
|
||||||
episodes = list(v)
|
episodes = list(v)
|
||||||
num, num00 = notification_handler.format_group_index(
|
num, num00 = format_group_index([helpers.cast_to_int(d['media_index']) for d in episodes])
|
||||||
[helpers.cast_to_int(d['media_index']) for d in episodes])
|
|
||||||
|
|
||||||
seasons.append({'media_index': k,
|
seasons.append({'media_index': k,
|
||||||
'episode_range': num00,
|
'episode_range': num00,
|
||||||
'episode_count': len(episodes),
|
'episode_count': len(episodes),
|
||||||
'episode': episodes})
|
'episode': episodes})
|
||||||
|
|
||||||
num, num00 = notification_handler.format_group_index(
|
num, num00 = format_group_index([helpers.cast_to_int(d['media_index']) for d in seasons])
|
||||||
[helpers.cast_to_int(d['media_index']) for d in seasons])
|
|
||||||
|
|
||||||
show_metadata['season_range'] = num00
|
show_metadata['season_range'] = num00
|
||||||
show_metadata['season_count'] = len(seasons)
|
show_metadata['season_count'] = len(seasons)
|
||||||
|
@ -623,6 +622,8 @@ class RecentlyAdded(Newsletter):
|
||||||
return recently_added
|
return recently_added
|
||||||
|
|
||||||
def retrieve_data(self):
|
def retrieve_data(self):
|
||||||
|
from notification_handler import get_poster_info
|
||||||
|
|
||||||
if not self.config['incl_libraries']:
|
if not self.config['incl_libraries']:
|
||||||
logger.warn(u"Tautulli Newsletters :: Failed to retrieve %s newsletter data: no libraries selected." % self.NAME)
|
logger.warn(u"Tautulli Newsletters :: Failed to retrieve %s newsletter data: no libraries selected." % self.NAME)
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@ import plextv
|
||||||
import pmsconnect
|
import pmsconnect
|
||||||
import request
|
import request
|
||||||
import users
|
import users
|
||||||
|
from newsletter_handler import notify as notify_newsletter
|
||||||
|
|
||||||
|
|
||||||
def process_queue():
|
def process_queue():
|
||||||
|
@ -50,7 +51,9 @@ def process_queue():
|
||||||
break
|
break
|
||||||
elif params:
|
elif params:
|
||||||
try:
|
try:
|
||||||
if 'notify' in params:
|
if 'newsletter' in params:
|
||||||
|
notify_newsletter(**params)
|
||||||
|
elif 'notification' in params:
|
||||||
notify(**params)
|
notify(**params)
|
||||||
else:
|
else:
|
||||||
add_notifier_each(**params)
|
add_notifier_each(**params)
|
||||||
|
@ -111,7 +114,7 @@ def add_notifier_each(notifier_id=None, notify_action=None, stream_data=None, ti
|
||||||
# Check custom user conditions
|
# Check custom user conditions
|
||||||
if manual_trigger or notify_custom_conditions(notifier_id=notifier['id'], parameters=parameters):
|
if manual_trigger or notify_custom_conditions(notifier_id=notifier['id'], parameters=parameters):
|
||||||
# Add each notifier to the queue
|
# Add each notifier to the queue
|
||||||
data = {'notify': True,
|
data = {'notification': True,
|
||||||
'notifier_id': notifier['id'],
|
'notifier_id': notifier['id'],
|
||||||
'notify_action': notify_action,
|
'notify_action': notify_action,
|
||||||
'stream_data': stream_data,
|
'stream_data': stream_data,
|
||||||
|
|
|
@ -5559,6 +5559,7 @@ class WebInterface(object):
|
||||||
return {'result': 'error', 'message': 'Failed to save newsletter.'}
|
return {'result': 'error', 'message': 'Failed to save newsletter.'}
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
|
@cherrypy.tools.json_out()
|
||||||
@requireAuth(member_of("admin"))
|
@requireAuth(member_of("admin"))
|
||||||
@addtoapi("notify_newsletter")
|
@addtoapi("notify_newsletter")
|
||||||
def send_newsletter(self, newsletter_id=None, subject='', body='', notify_action='', **kwargs):
|
def send_newsletter(self, newsletter_id=None, subject='', body='', notify_action='', **kwargs):
|
||||||
|
@ -5584,20 +5585,18 @@ class WebInterface(object):
|
||||||
|
|
||||||
if newsletter:
|
if newsletter:
|
||||||
logger.debug(u"Sending %s%s newsletter." % (test, newsletter['agent_label']))
|
logger.debug(u"Sending %s%s newsletter." % (test, newsletter['agent_label']))
|
||||||
if newsletter_handler.notify(newsletter_id=newsletter_id,
|
newsletter_handler.add_newsletter_each(newsletter_id=newsletter_id,
|
||||||
notify_action=notify_action,
|
notify_action=notify_action,
|
||||||
subject=subject,
|
subject=subject,
|
||||||
body=body,
|
body=body,
|
||||||
**kwargs):
|
**kwargs)
|
||||||
return "Newsletter sent."
|
return {'result': 'success', 'message': 'Newsletter queued.'}
|
||||||
else:
|
|
||||||
return "Newsletter failed."
|
|
||||||
else:
|
else:
|
||||||
logger.debug(u"Unable to send %snewsletter, invalid newsletter_id %s." % (test, newsletter_id))
|
logger.debug(u"Unable to send %snewsletter, invalid newsletter_id %s." % (test, newsletter_id))
|
||||||
return "Invalid newsletter id %s." % newsletter_id
|
return {'result': 'error', 'message': 'Invalid newsletter id %s.' % newsletter_id}
|
||||||
else:
|
else:
|
||||||
logger.debug(u"Unable to send %snotification, no newsletter_id received." % test)
|
logger.debug(u"Unable to send %snotification, no newsletter_id received." % test)
|
||||||
return "No newsletter id received."
|
return {'result': 'error', 'message': 'No newsletter id received.'}
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
def newsletter(self, *args, **kwargs):
|
def newsletter(self, *args, **kwargs):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue