mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-11 15:56:07 -07:00
Styling tweaks.
Don't log error everytime OSX Notify agent cannot be found. Add check in PlexWatch importer to skip over rows with bad xml. Move some logging out of places where they would never be executed.
This commit is contained in:
parent
eb2b530718
commit
abc90e1252
5 changed files with 36 additions and 23 deletions
|
@ -8252,7 +8252,7 @@ ol.test >li {
|
|||
}
|
||||
|
||||
.card-back {
|
||||
padding: 20px;
|
||||
padding: 16px;
|
||||
background-color: #282828;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
|
@ -8263,7 +8263,7 @@ ol.test >li {
|
|||
}
|
||||
|
||||
.table-card-back {
|
||||
padding: 20px;
|
||||
padding: 16px 16px 16px 16px;
|
||||
background-color: #282828;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
|
@ -8279,7 +8279,7 @@ ol.test >li {
|
|||
|
||||
.rounded {
|
||||
padding: 4px 12px;
|
||||
margin: 4px 4px 4px 0px;
|
||||
margin: 2px 2px 2px 0px;
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
line-height: 1.42857143;
|
||||
|
@ -8374,6 +8374,9 @@ ol.test >li {
|
|||
display: block;
|
||||
padding: 15px 15px 15px 15px;
|
||||
color: #999;
|
||||
-webkit-transition: all 0.4s ease;
|
||||
-o-transition: all 0.4s ease;
|
||||
transition: all 0.4s ease;
|
||||
}
|
||||
|
||||
.nav-settings > li > a:hover,
|
||||
|
@ -8408,6 +8411,9 @@ ol.test >li {
|
|||
color: #eee;
|
||||
border-left: 2px solid #444;
|
||||
border-top: 1px solid #2d2d2d;
|
||||
-webkit-transition: all 0.4s ease;
|
||||
-o-transition: all 0.4s ease;
|
||||
transition: all 0.4s ease;
|
||||
}
|
||||
|
||||
.stacked-configs > li > span:hover,
|
||||
|
|
|
@ -64,12 +64,12 @@
|
|||
</div>
|
||||
<div class="form-group">
|
||||
<label for="date_format">Date Format</label>
|
||||
<input type="text" id="date_format" name="date_format" value="${config['date_format']}" size="30" data-parsley-trigger="change" required>
|
||||
<input type="text" id="date_format" name="date_format" value="${config['date_format']}" data-parsley-trigger="change" required>
|
||||
<p class="help-block">Set your preferred date format. <a href="#dateTimeOptionsModal" data-toggle="modal">Click here</a> to see the parameter list.</p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="date_format">Time Format</label>
|
||||
<input type="text" id="time_format" name="time_format" value="${config['time_format']}" size="30" data-parsley-trigger="change" required>
|
||||
<input type="text" class="input-small" id="time_format" name="time_format" value="${config['time_format']}" data-parsley-trigger="change" required>
|
||||
<p class="help-block">Set your preferred time format. <a href="#dateTimeOptionsModal" data-toggle="modal">Click here</a> to see the parameter list.</p>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
@ -83,12 +83,12 @@
|
|||
<p class="help-block">Web interface changes require a restart.</p>
|
||||
<div class="form-group">
|
||||
<label for="http_host">HTTP Host</label>
|
||||
<input type="text" id="http_host" name="http_host" value="${config['http_host']}" size="30" data-parsley-trigger="change" required>
|
||||
<input type="text" class="input-xlarge" id="http_host" name="http_host" value="${config['http_host']}" data-parsley-trigger="change" required>
|
||||
<p class="help-block">e.g. localhost or an IP, such as 0.0.0.0</p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="http_port">HTTP Port</label>
|
||||
<input type="text" data-parsley-type="integer" id="http_port" name="http_port" value="${config['http_port']}" size="10" data-parsley-trigger="change" required>
|
||||
<input type="text" class="input-small" data-parsley-type="integer" id="http_port" name="http_port" value="${config['http_port']}" data-parsley-trigger="change" required>
|
||||
<p class="help-block">Port to bind web server to. Note that ports below 1024 may require root.</p>
|
||||
</div>
|
||||
<div class="checkbox">
|
||||
|
@ -139,7 +139,7 @@
|
|||
</div>
|
||||
<div id="apioptions" class="form-group">
|
||||
<label for="api_key">API key</label>
|
||||
<input type="text" name="api_key" id="api_key" value="${config['api_key']}" size="20">
|
||||
<input class="input-xlarge" type="text" name="api_key" id="api_key" value="${config['api_key']}" size="20">
|
||||
<input type="button" class="btn btn-link" value="Generate" id="generate_api">
|
||||
<p class="help-block">Current API key: <strong><br/>${config['api_key']}</strong></p>
|
||||
</div>
|
||||
|
@ -153,13 +153,13 @@
|
|||
</div>
|
||||
<div class="form-group">
|
||||
<label for="pms_ip">Plex IP or Hostname</label>
|
||||
<input type="text" class="pms-settings" id="pms_ip" name="pms_ip" value="${config['pms_ip']}" size="30" data-parsley-trigger="change" required>
|
||||
<input type="text" class="pms-settings input-xlarge" id="pms_ip" name="pms_ip" value="${config['pms_ip']}" size="30" data-parsley-trigger="change" required>
|
||||
<span style="margin-left: 10px; display: none;" id="pms-verify-status"></span>
|
||||
<p class="help-block">IP Address or hostname for Plex Media Server.</p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="pms_port">Plex Port</label>
|
||||
<input data-parsley-type="integer" class="pms-settings" type="text" id="pms_port" name="pms_port" value="${config['pms_port']}" size="30" data-parsley-trigger="change" required>
|
||||
<input data-parsley-type="integer" class="pms-settings input-small" type="text" id="pms_port" name="pms_port" value="${config['pms_port']}" size="30" data-parsley-trigger="change" required>
|
||||
<p class="help-block">Port that Plex Media Server is listening on.</p>
|
||||
</div>
|
||||
<div class="checkbox">
|
||||
|
@ -192,7 +192,7 @@
|
|||
</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-range="[1,24]" data-parsley-trigger="change" required>
|
||||
<input type="text" class="input-mini" 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">
|
||||
|
@ -218,7 +218,7 @@
|
|||
<fieldset>
|
||||
<div class="form-group">
|
||||
<label for="pms_logs_folder">Logs Folder</label>
|
||||
<input type="text" id="pms_logs_folder" name="pms_logs_folder" value="${config['pms_logs_folder']}" size="30" data-parsley-trigger="change">
|
||||
<input type="text" class="input-xlarge" id="pms_logs_folder" name="pms_logs_folder" value="${config['pms_logs_folder']}" size="30" data-parsley-trigger="change">
|
||||
<p class="help-block">Set the folder where your Plex Server logs are. This is required if you enable IP logging.<br/><a href="https://support.plex.tv/hc/en-us/articles/200250417-Plex-Media-Server-Log-Files" target="_blank">Click here</a> for help.</p>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
@ -237,7 +237,7 @@
|
|||
</div>
|
||||
<div class="form-group">
|
||||
<label for="monitoring_interval">Monitoring Interval</label>
|
||||
<input type="text" data-parsley-type="integer" id="monitoring_interval" name="monitoring_interval" value="${config['monitoring_interval']}" size="5" data-parsley-min="30" data-parsley-trigger="change" required>
|
||||
<input type="text" class="input-mini" data-parsley-type="integer" id="monitoring_interval" name="monitoring_interval" value="${config['monitoring_interval']}" size="5" data-parsley-min="30" data-parsley-trigger="change" required>
|
||||
<p class="help-block">The interval (in seconds) PlexPy will ping your Plex Server. Min 30 seconds, Recommended 60 seconds.</p>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
@ -251,7 +251,7 @@
|
|||
</div>
|
||||
<div class="form-group">
|
||||
<label for="monitoring_interval">Ignore Interval</label>
|
||||
<input type="text" data-parsley-type="integer" id="logging_ignore_interval" name="logging_ignore_interval" value="${config['logging_ignore_interval']}" size="5" data-parsley-min="0" data-parsley-trigger="change" required>
|
||||
<input type="text" class="input-mini" data-parsley-type="integer" id="logging_ignore_interval" name="logging_ignore_interval" value="${config['logging_ignore_interval']}" size="5" data-parsley-min="0" data-parsley-trigger="change" required>
|
||||
<p class="help-block">The interval (in seconds) PlexPy will wait for a video item to be active before logging it. 0 to disable.</p>
|
||||
</div>
|
||||
<div class="checkbox">
|
||||
|
@ -291,7 +291,7 @@
|
|||
<fieldset>
|
||||
<div class="form-group">
|
||||
<label for="notify_watched_percent">Watched Percent</label>
|
||||
<input type="text" data-parsley-type="integer" id="notify_watched_percent" name="notify_watched_percent" value="${config['notify_watched_percent']}" size="5" data-parsley-range="[50,95]" data-parsley-trigger="change" required>
|
||||
<input type="text" class="input-mini" data-parsley-type="integer" id="notify_watched_percent" name="notify_watched_percent" value="${config['notify_watched_percent']}" size="5" data-parsley-range="[50,95]" data-parsley-trigger="change" required>
|
||||
<p class="help-block">Set the progress percentage of when a watched notification should be triggered. Minimum 50, Maximum 95.</p>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
@ -611,6 +611,7 @@
|
|||
|
||||
<%def name="javascriptIncludes()">
|
||||
<script src="interfaces/default/js/parsley.min.js"></script>
|
||||
<script src="interfaces/default/js/jquery.highlighttextarea.min.js"></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
|
||||
|
|
|
@ -982,7 +982,8 @@ class OSX_NOTIFY(object):
|
|||
self.objc = __import__("objc")
|
||||
self.AppKit = __import__("AppKit")
|
||||
except:
|
||||
logger.error(u"PlexPy Notifier :: Cannot load OSX Notifications agent.")
|
||||
#logger.error(u"PlexPy Notifier :: Cannot load OSX Notifications agent.")
|
||||
pass
|
||||
|
||||
def validate(self):
|
||||
try:
|
||||
|
|
|
@ -285,6 +285,11 @@ def import_from_plexwatch(database=None, table_name=None, import_ignore_interval
|
|||
# Extract the xml from the Plexwatch db xml field.
|
||||
extracted_xml = extract_plexwatch_xml(row['xml'])
|
||||
|
||||
# If we get back None from our xml extractor skip over the record and log error.
|
||||
if not extracted_xml:
|
||||
logger.error(u"PlexPy Importer :: Skipping line due to malformed xml.")
|
||||
continue
|
||||
|
||||
# If the user_id no longer exists in the friends list, pull it from the xml.
|
||||
if data_factory.get_user_id(user=row['user']):
|
||||
user_id = data_factory.get_user_id(user=row['user'])
|
||||
|
|
|
@ -619,8 +619,8 @@ class WebInterface(object):
|
|||
if result:
|
||||
return serve_template(templatename="current_activity.html", data=result)
|
||||
else:
|
||||
return serve_template(templatename="current_activity.html", data=None)
|
||||
logger.warn('Unable to retrieve data.')
|
||||
return serve_template(templatename="current_activity.html", data=None)
|
||||
|
||||
@cherrypy.expose
|
||||
def get_current_activity_header(self, **kwargs):
|
||||
|
@ -634,8 +634,8 @@ class WebInterface(object):
|
|||
if result:
|
||||
return serve_template(templatename="current_activity_header.html", data=result['stream_count'])
|
||||
else:
|
||||
return serve_template(templatename="current_activity_header.html", data=None)
|
||||
logger.warn('Unable to retrieve data.')
|
||||
return serve_template(templatename="current_activity_header.html", data=None)
|
||||
|
||||
@cherrypy.expose
|
||||
def get_recently_added(self, count='0', **kwargs):
|
||||
|
@ -649,8 +649,8 @@ class WebInterface(object):
|
|||
if result:
|
||||
return serve_template(templatename="recently_added.html", data=result['recently_added'])
|
||||
else:
|
||||
return serve_template(templatename="recently_added.html", data=None)
|
||||
logger.warn('Unable to retrieve data.')
|
||||
return serve_template(templatename="recently_added.html", data=None)
|
||||
|
||||
@cherrypy.expose
|
||||
def pms_image_proxy(self, img='', width='0', height='0', fallback=None, **kwargs):
|
||||
|
@ -706,9 +706,9 @@ class WebInterface(object):
|
|||
return serve_template(templatename="user_recently_watched.html", data=result,
|
||||
title="Recently Watched")
|
||||
else:
|
||||
logger.warn('Unable to retrieve data.')
|
||||
return serve_template(templatename="user_recently_watched.html", data=None,
|
||||
title="Recently Watched")
|
||||
logger.warn('Unable to retrieve data.')
|
||||
|
||||
@cherrypy.expose
|
||||
def get_user_watch_time_stats(self, user=None, user_id=None, **kwargs):
|
||||
|
@ -719,8 +719,8 @@ class WebInterface(object):
|
|||
if result:
|
||||
return serve_template(templatename="user_watch_time_stats.html", data=result, title="Watch Stats")
|
||||
else:
|
||||
return serve_template(templatename="user_watch_time_stats.html", data=None, title="Watch Stats")
|
||||
logger.warn('Unable to retrieve data.')
|
||||
return serve_template(templatename="user_watch_time_stats.html", data=None, title="Watch Stats")
|
||||
|
||||
@cherrypy.expose
|
||||
def get_user_platform_stats(self, user=None, user_id=None, **kwargs):
|
||||
|
@ -732,8 +732,8 @@ class WebInterface(object):
|
|||
return serve_template(templatename="user_platform_stats.html", data=result,
|
||||
title="Platform Stats")
|
||||
else:
|
||||
return serve_template(templatename="user_platform_stats.html", data=None, title="Platform Stats")
|
||||
logger.warn('Unable to retrieve data.')
|
||||
return serve_template(templatename="user_platform_stats.html", data=None, title="Platform Stats")
|
||||
|
||||
@cherrypy.expose
|
||||
def get_children(self, rating_key='', **kwargs):
|
||||
|
@ -744,8 +744,8 @@ class WebInterface(object):
|
|||
if result:
|
||||
return serve_template(templatename="info_episode_list.html", data=result, title="Episode List")
|
||||
else:
|
||||
return serve_template(templatename="info_episode_list.html", data=None, title="Episode List")
|
||||
logger.warn('Unable to retrieve data.')
|
||||
return serve_template(templatename="info_episode_list.html", data=None, title="Episode List")
|
||||
|
||||
@cherrypy.expose
|
||||
def get_metadata_json(self, rating_key='', **kwargs):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue