Stage one of notification rewrite. Page cache refresh required.

Each notification has it's own modal config now, PlexWeb-style.
Few minor text changes.
This commit is contained in:
Tim 2015-07-22 01:40:20 +02:00
parent bb3139727e
commit e309d6ba92
6 changed files with 503 additions and 516 deletions

View file

@ -1,6 +1,9 @@
<%inherit file="base.html"/>
<%!
import plexpy
from plexpy import notifiers
available_notification_agents = notifiers.available_notification_agents()
%>
<%def name="headerIncludes()">
@ -31,9 +34,9 @@
<li role="presentation" class="active"><a href="#tabs-1" aria-controls="tabs-1" role="tab" data-toggle="tab">General</a></li>
<li role="presentation"><a href="#tabs-2" aria-controls="tabs-2" role="tab" data-toggle="tab">Web Interface</a></li>
<li role="presentation"><a href="#tabs-3" aria-controls="tabs-3" role="tab" data-toggle="tab">Access Control</a></li>
<li role="presentation"><a href="#tabs-4" aria-controls="tabs-4" role="tab" data-toggle="tab">Plex Server Settings</a></li>
<li role="presentation"><a href="#tabs-4" aria-controls="tabs-4" role="tab" data-toggle="tab">Plex Media Server</a></li>
<li role="presentation"><a href="#tabs-5" aria-controls="tabs-5" role="tab" data-toggle="tab">Plex.tv Account</a></li>
<li role="presentation"><a href="#tabs-6" aria-controls="tabs-6" role="tab" data-toggle="tab">Extra Setting</a></li>
<li role="presentation"><a href="#tabs-6" aria-controls="tabs-6" role="tab" data-toggle="tab">Extra Settings</a></li>
<li role="presentation"><a href="#tabs-7" aria-controls="tabs-7" role="tab" data-toggle="tab">Monitoring</a></li>
<li role="presentation"><a href="#tabs-8" aria-controls="tabs-8" role="tab" data-toggle="tab">Notifications</a></li>
<li role="presentation"><a href="#tabs-9" aria-controls="tabs-9" role="tab" data-toggle="tab">Notification Agents</a></li>
@ -187,8 +190,8 @@
</div>
<div class="form-group">
<label for="refresh_users_interval">User list Refresh Interval</label>
<input type="text" data-parsley-type="integer" id="refresh_users_interval" name="refresh_users_interval" value="${config['refresh_users_interval']}" size="5" data-parsley-min="0" data-parsley-trigger="change" required>
<p class="help-block">The interval (in hours) PlexPy will request an updated friends list from Plex.tv. 0 to disable.</p>
<input type="text" data-parsley-type="integer" id="refresh_users_interval" name="refresh_users_interval" value="${config['refresh_users_interval']}" size="5" data-parsley-range="[1,24]" data-parsley-trigger="change" required>
<p class="help-block">The interval (in hours) PlexPy will request an updated friends list from Plex.tv. 1 minimum, 24 maximum.</p>
</div>
<div class="checkbox">
<input type="checkbox" id="refresh_users_on_startup" name="refresh_users_on_startup" value="1" ${config['refresh_users_on_startup']}> Refresh user list on startup
@ -338,276 +341,24 @@
<div role="tabpanel" class="tab-pane" id="tabs-9">
<fieldset>
<div class="wellheader">
<h3>Growl</h3>
</div>
<div class="checkbox">
<input type="checkbox" name="growl_enabled" id="growl" value="1" ${config['growl_enabled']}> Enable Growl Notifications
</div>
<div id="growloptions">
<div class="form-group">
<label for="growl_host">Growl Host:Port</label>
<input type="text" id="growl_host" name="growl_host" value="${config['growl_host']}" size="30">
</div>
<div class="form-group">
<label for="growl_password">Growl Password</label>
<input type="password" id="growl_password" name="growl_password" value="${config['growl_password']}" size="30">
</div>
</div>
</fieldset>
<fieldset>
<div class="wellheader">
<h3>Prowl</h3>
</div>
<div class="checkbox">
<input type="checkbox" name="prowl_enabled" id="prowl" value="1" ${config['prowl_enabled']}> Enable Prowl Notifications
</div>
<div id="prowloptions">
<div class="form-group">
<label for="prowl_keys">API Key</label>
<input type="text" id="prowl_keys" name="prowl_keys" value="${config['prowl_keys']}" size="50">
</div>
<div class="form-group">
<label for="prowl_priority">Priority (-2,-1,0,1 or 2)</label>
<input type="text" id="prowl_priority" name="prowl_priority" value="${config['prowl_priority']}" size="2">
</div>
</div>
</fieldset>
<fieldset>
<div class="wellheader">
<h3>XBMC</h3>
</div>
<div class="checkbox">
<input type="checkbox" name="xbmc_enabled" id="xbmc" value="1" ${config['xbmc_enabled']}> Enable XBMC Notifications
</div>
<div id="xbmcoptions">
<div class="form-group">
<label for="xbmc_host">XBMC Host:Port</label>
<input type="text" id="xbmc_host" name="xbmc_host" value="${config['xbmc_host']}" size="30">
<p class="help-block">e.g. http://localhost:8080. Separate hosts with commas.</p>
</div>
<div class="form-group">
<label for="xbmc_username">XBMC Username</label>
<input type="text" id="xbmc_username" name="xbmc_username" value="${config['xbmc_username']}" size="30">
</div>
<div class="form-group">
<label for="xbmc_password">XBMC Password</label>
<input type="password" id="xbmc_password" name="xbmc_password" value="${config['xbmc_password']}" size="30">
</div>
</div>
</fieldset>
<fieldset>
<div class="wellheader">
<h3>Plex Home Theatre</h3>
</div>
<div class="checkbox">
<input type="checkbox" name="plex_enabled" id="plex" value="1" ${config['plex_enabled']}> Enable Plex Notifications
</div>
<div id="plexoptions">
<div class="form-group">
<label for="plex_client_host">Plex Client Host:Port</label>
<input type="text" id="plex_client_host" name="plex_client_host" value="${config['plex_client_host']}" size="30">
<p class="help-block">Host running Plex Client (eg. http://192.168.1.100:3000).</p>
</div>
<div class="form-group">
<label for="plex_username">Plex Username</label>
<input type="text" id="plex_username"name="plex_username" value="${config['plex_username']}" size="30">
<p class="help-block">Username of your Plex client API (blank for none).</p>
</div>
<div class="form-group">
<label for="plex_password">Plex Password</label>
<input type="password" id="plex_password" name="plex_password" value="${config['plex_password']}" size="30">
<p class="help-block">Password of your Plex client API (blank for none).</p>
</div>
</div>
</fieldset>
<fieldset>
<div class="wellheader">
<h3>NotifyMyAndroid</h3>
</div>
<div class="checkbox">
<input type="checkbox" name="nma_enabled" id="nma" value="1" ${config['nma_enabled']}> Enable NotifyMyAndroid
</div>
<div id="nmaoptions">
<div class="form-group">
<label for="nma_apikey">NotifyMyAndroid API Key</label>
<input type="text" id="nma_apikey" name="nma_apikey" value="${config['nma_apikey']}" size="30">
<p class="help-block">Separate multiple api keys with commas.</p>
</div>
<div class="form-group">
<label for="nma_priority">Priority</label>
<select id="nma_priority" name="nma_priority">
%for x in [-2,-1,0,1,2]:
<%
if config['nma_priority'] == x:
nma_priority_selected = 'selected'
else:
nma_priority_selected = ''
if x == -2:
nma_priority_value = 'Very Low'
elif x == -1:
nma_priority_value = 'Moderate'
elif x == 0:
nma_priority_value = 'Normal'
elif x == 1:
nma_priority_value = 'High'
else:
nma_priority_value = 'Emergency'
%>
<option value=${x} ${nma_priority_selected}>${nma_priority_value}</option>
%endfor
</select>
</div>
</div>
</fieldset>
<fieldset>
<div class="wellheader">
<h3>Pushalot</h3>
</div>
<div class="checkbox">
<input type="checkbox" name="pushalot_enabled" id="pushalot" value="1" ${config['pushalot_enabled']}> Enable Pushalot
</div>
<div id="pushalotoptions">
<div class="form-group">
<label for="pushalot_apikey">Pushalot API Key</label>
<input type="text" id="pushalot_apikey" name="pushalot_apikey" value="${config['pushalot_apikey']}" size="30">
<p class="help-block">Separate multiple api keys with commas.</p>
</div>
</div>
</fieldset>
<fieldset>
<div class="wellheader">
<h3>Email</h3>
</div>
<div class="checkbox">
<input type="checkbox" name="email_enabled" id="email" value="1" ${config['email_enabled']}> Enable Email Notifications
</div>
<div id="email_options">
<div class="form-group">
<label for="email_from">From</label>
<input type="text" id="email_from" name="email_from" value="${config['email_from']}" size="254">
</div>
<div class="form-group">
<label for="email_to">To</label>
<input type="text" id="email_to" name="email_to" value="${config['email_to']}" size="254">
</div>
<div class="form-group">
<label for="email_smtp_server">SMTP Server</label>
<input type="text" id="email_smtp_server" name="email_smtp_server" value="${config['email_smtp_server']}" size="254">
</div>
<div class="form-group">
<label for="email_smtp_user">SMTP User</label>
<input type="text" id="email_smtp_user" name="email_smtp_user" value="${config['email_smtp_user']}" size="254">
</div>
<div class="form-group">
<label for="email_smtp_password">SMTP Password</label>
<input type="password" id="email_smtp_password" name="email_smtp_password" value="${config['email_smtp_password']}" size="50">
</div>
<div class="form-group">
<label for="email_smtp_port">SMTP Port</label>
<input type="text" id="email_smtp_port" name="email_smtp_port" value="${config['email_smtp_port']}" size="4">
</div>
<div class="checkbox">
<input type="checkbox" name="email_tls" value="1" ${config['email_tls']}> TLS
</div>
</div>
</fieldset>
<fieldset>
<div class="wellheader">
<h3>Pushover</h3>
</div>
<div class="checkbox">
<input type="checkbox" name="pushover_enabled" id="pushover" value="1" ${config['pushover_enabled']}> Enable Pushover Notifications
</div>
<div id="pushoveroptions">
<div class="form-group">
<label for="pushover_keys">User key</label>
<input type="text" id="pushover_keys" name="pushover_keys" value="${config['pushover_keys']}" size="50">
</div>
<div class="form-group">
<label for="pushover_priority">Priority (-1,0, or 1)</label>
<input type="text" id="pushover_priority" name="pushover_priority" value="${config['pushover_priority']}" size="2">
</div>
<div class="form-group">
<label for="pushover_apitoken">API Token (leave blank to use PlexPy default)</label>
<input type="text" id="pushover_apitoken" name="pushover_apitoken" value="${config['pushover_apitoken']}" size="50">
</div>
</div>
</fieldset>
<fieldset>
<div class="wellheader">
<h3>Pushbullet</h3>
</div>
<div class="checkbox">
<input type="checkbox" name="pushbullet_enabled" id="pushbullet" value="1" ${config['pushbullet_enabled']}> Enable PushBullet Notifications
</div>
<div id="pushbulletoptions">
<div class="form-group">
<label for="pushbullet_apikey">API Key</label>
<input type="text" id="pushbullet_apikey" name="pushbullet_apikey" value="${config['pushbullet_apikey']}" size="50">
</div>
<div class="form-group">
<label for="pushbullet_deviceid">Device ID</label>
<input type="text" id="pushbullet_deviceid" name="pushbullet_deviceid" value="${config['pushbullet_deviceid']}" size="50">
</div>
</div>
</fieldset>
<!-- We need to test Twitter first
<fieldset>
<div class="wellheader">
<h3>Twitter</h3>
</div>
<div class="checkbox">
<input type="checkbox" name="twitter_enabled" id="twitter" value="1" ${config['twitter_enabled']}> Enable Twitter Notifications
</div>
<div id="twitteroptions">
<div class="form-group">
<input type="button" class="btn btn-small" value="Request Authorization" id="twitterStep1" />
</div>
<div class="form-group">
<input type="text" id="twitter_key" value="" size="35" placeholder="Input Authorization Key" />
<input type="button" class="btn btn-link" value="Verify Key" id="twitterStep2" />
</div>
<div class="form-group">
<input type="button" class="btn btn-small" value="Test Twitter" id="testTwitter" />
</div>
</div>
</fieldset>
-->
<fieldset>
<div class="wellheader">
<h3>OS X</h3>
</div>
<div class="checkbox">
<input type="checkbox" name="osx_notify_enabled" id="osx_notify" value="1" ${config['osx_notify_enabled']}> Enable OS X Notifications
</div>
<div id="osx_notify_options">
<div class="form-group">
<label for="osx_notify_reg">Register Notify App</label>
<input type="text" id="osx_notify_reg" name="osx_notify_app" value="${config['osx_notify_app']}" size="50">
<input type="button" class="btn btn-link" value="Register" id="osxnotifyregister">
<p class="help-block">Enter the path/application name to be registered with the Notification Center, default is /Applications/PlexPy.</p>
</div>
</div>
</fieldset>
<fieldset>
<div class="wellheader">
<h3>Boxcar2</h3>
</div>
<div class="checkbox">
<input type="checkbox" name="boxcar_enabled" id="boxcar" value="1" ${config['boxcar_enabled']}> Enable Boxcar2 Notifications
</div>
<div id="boxcar_options">
<div class="form-group">
<label for="boxcar_token">Access Token</label>
<input type="text" id="boxcar_token" name="boxcar_token" value="${config['boxcar_token']}" size="35">
</div>
<h3>Notification Agents</h3>
</div>
<p class="help-block">
Check the desired notification option and configure it by selecting the settings icon to the right.
</p>
<br/>
<ul class="stacked-configs">
% for agent in available_notification_agents:
<li>
<span>
<input type="checkbox" name="${agent['config_name']}" id="${agent['config_name']}" value="1" ${agent['state']}> ${agent['name']}
% if agent['has_config']:
<a href="#notification-config-modal" data-id="${agent['id']}" class="toggle-notification-config-modal" data-toggle="modal"><i class="fa fa-lg fa-cog"></i></a>
% endif
</span>
</li>
% endfor
</ul>
</fieldset>
<input type="button" class="rounded rounded-primary save-button" value="Save" data-success="Changes saved successfully">
</div>
@ -777,6 +528,9 @@
<div id="plexwatch-import-modal" class="modal hide fade" tabindex="-1" role="dialog"
aria-labelledby="plexwatch-import-modal" aria-hidden="true">
</div>
<div id="notification-config-modal" class="modal hide fade" tabindex="-1" role="dialog"
aria-labelledby="notification-setting-modal" aria-hidden="true">
</div>
</div>
</div>
</div>
@ -939,245 +693,18 @@
});
});
// Legacy stuff we need to remove
if ($("#growl").is(":checked"))
{
$("#growloptions").show();
}
else
{
$("#growloptions").hide();
}
$("#growl").click(function(){
if ($("#growl").is(":checked"))
{
$("#growloptions").slideDown();
}
else
{
$("#growloptions").slideUp();
}
});
if ($("#prowl").is(":checked"))
{
$("#prowloptions").show();
}
else
{
$("#prowloptions").hide();
}
$("#prowl").click(function(){
if ($("#prowl").is(":checked"))
{
$("#prowloptions").slideDown();
}
else
{
$("#prowloptions").slideUp();
}
});
if ($("#xbmc").is(":checked"))
{
$("#xbmcoptions").show();
}
else
{
$("#xbmcoptions").hide();
}
$("#xbmc").click(function(){
if ($("#xbmc").is(":checked"))
{
$("#xbmcoptions").slideDown();
}
else
{
$("#xbmcoptions").slideUp();
}
});
if ($("#plex").is(":checked"))
{
$("#plexoptions").show();
}
else
{
$("#plexoptions").hide();
}
$("#plex").click(function(){
if ($("#plex").is(":checked"))
{
$("#plexoptions").slideDown();
}
else
{
$("#plexoptions").slideUp();
}
});
if ($("#nma").is(":checked"))
{
$("#nmaoptions").show();
}
else
{
$("#nmaoptions").hide();
}
$("#nma").click(function(){
if ($("#nma").is(":checked"))
{
$("#nmaoptions").slideDown();
}
else
{
$("#nmaoptions").slideUp();
}
});
if ($("#pushalot").is(":checked"))
{
$("#pushalotoptions").show();
}
else
{
$("#pushalotoptions").hide();
}
$("#pushalot").click(function(){
if ($("#pushalot").is(":checked"))
{
$("#pushalotoptions").slideDown();
}
else
{
$("#pushalotoptions").slideUp();
}
});
if ($("#pushover").is(":checked"))
{
$("#pushoveroptions").show();
}
else
{
$("#pushoveroptions").hide();
}
$("#pushover").click(function(){
if ($("#pushover").is(":checked"))
{
$("#pushoveroptions").slideDown();
}
else
{
$("#pushoveroptions").slideUp();
}
});
if ($("#pushbullet").is(":checked"))
{
$("#pushbulletoptions").show();
}
else
{
$("#pushbulletoptions").hide();
}
$("#pushbullet").click(function(){
if ($("#pushbullet").is(":checked"))
{
$("#pushbulletoptions").slideDown();
}
else
{
$("#pushbulletoptions").slideUp();
}
});
if ($("#twitter").is(":checked"))
{
$("#twitteroptions").show();
}
else
{
$("#twitteroptions").hide();
}
$("#twitter").click(function(){
if ($("#twitter").is(":checked"))
{
$("#twitteroptions").slideDown();
}
else
{
$("#twitteroptions").slideUp();
}
});
if ($("#osx_notify").is(":checked"))
{
$("#osx_notify_options").show();
}
else
{
$("#osx_notify_options").hide();
}
$("#osx_notify").click(function(){
if ($("#osx_notify").is(":checked"))
{
$("#osx_notify_options").slideDown();
}
else
{
$("#osx_notify_options").slideUp();
}
});
if ($("#boxcar").is(":checked"))
{
$("#boxcar_options").show();
}
else
{
$("#boxcar_options").hide();
}
$("#boxcar").click(function(){
if ($("#boxcar").is(":checked"))
{
$("#boxcar_options").slideDown();
}
else
{
$("#boxcar_options").slideUp();
}
});
if ($("#email").is(":checked"))
{
$("#email_options").show();
}
else
{
$("#email_options").hide();
}
$("#email").click(function(){
if ($("#email").is(":checked"))
{
$("#email_options").slideDown();
}
else
{
$("#email_options").slideUp();
// Load PlexWatch import modal
$(".toggle-notification-config-modal").click(function() {
var configId = $(this).data('id');
$.ajax({
url: 'get_notification_agent_config',
data: { config_id: configId },
cache: false,
async: true,
complete: function(xhr, status) {
$("#notification-config-modal").html(xhr.responseText);
}
});
});
if ($("#tv_notify_enable").is(":checked"))