mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-15 09:42:57 -07:00
Settings page rewrite. Please clear page cache if things look funky.
Set default check github to enable after first run.
This commit is contained in:
parent
9a5348dbfa
commit
bb3139727e
6 changed files with 1419 additions and 6 deletions
|
@ -141,13 +141,13 @@ from plexpy import version
|
||||||
% endif
|
% endif
|
||||||
% if title=="Settings":
|
% if title=="Settings":
|
||||||
<li class="active">
|
<li class="active">
|
||||||
<a href="config">
|
<a href="settings">
|
||||||
<i class="fa fa-cog fa-2x" data-toggle="tooltip" data-placement="bottom" title="Settings" id="settings"></i>
|
<i class="fa fa-cog fa-2x" data-toggle="tooltip" data-placement="bottom" title="Settings" id="settings"></i>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
% else:
|
% else:
|
||||||
<li>
|
<li>
|
||||||
<a href="config">
|
<a href="settings">
|
||||||
<i class="fa fa-cog fa-2x" data-toggle="tooltip" data-placement="bottom"
|
<i class="fa fa-cog fa-2x" data-toggle="tooltip" data-placement="bottom"
|
||||||
title="Settings" id="settings"></i></a></li>
|
title="Settings" id="settings"></i></a></li>
|
||||||
% endif
|
% endif
|
||||||
|
|
|
@ -349,10 +349,10 @@
|
||||||
<input type="checkbox" name="music_notify_on_start" id="music_notify_on_start" value="1" ${config['music_notify_on_start']}> Notify on playback start
|
<input type="checkbox" name="music_notify_on_start" id="music_notify_on_start" value="1" ${config['music_notify_on_start']}> Notify on playback start
|
||||||
</div>
|
</div>
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<input type="checkbox" name="music_notify_on_stop" id="music_notify_on_stop" value="1" ${config['music_notify_on_stop']}> Notify on playback stop
|
<input type="checkbox" name="music_notify_on_stop" id="music_notify_on_stop" data-parsley-multiple="music_notify" value="1" ${config['music_notify_on_stop']}> Notify on playback stop
|
||||||
</div>
|
</div>
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<input type="checkbox" name="music_notify_on_pause" id="music_notify_on_pause" value="1" ${config['music_notify_on_pause']}> Notify on playback pause
|
<input type="checkbox" name="music_notify_on_pause" id="music_notify_on_pause" data-parsley-multiple="music_notify" data-parsley-mincheck="1" data-parsley-required value="1" ${config['music_notify_on_pause']}> Notify on playback pause
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</dd>
|
</dd>
|
||||||
|
|
|
@ -1405,7 +1405,7 @@ textarea::-webkit-input-placeholder {
|
||||||
.radio input[type="radio"],
|
.radio input[type="radio"],
|
||||||
.checkbox input[type="checkbox"] {
|
.checkbox input[type="checkbox"] {
|
||||||
float: left;
|
float: left;
|
||||||
margin-left: -25px;
|
margin-left: -20px;
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
}
|
}
|
||||||
.controls > .radio:first-child,
|
.controls > .radio:first-child,
|
||||||
|
@ -8334,3 +8334,56 @@ ol.test >li {
|
||||||
.colvis-button-bar {
|
.colvis-button-bar {
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.settings-pane {
|
||||||
|
padding: 20px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
margin-top: 20px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
width: 90%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.settings-pane-options-list {
|
||||||
|
float: left;
|
||||||
|
width: 25%;
|
||||||
|
}
|
||||||
|
.settings-pane-content {
|
||||||
|
margin-left: 25%;
|
||||||
|
padding-left: 40px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-settings,
|
||||||
|
.nav-settings ul {
|
||||||
|
margin: 0px 0px 20px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-settings > li {
|
||||||
|
list-style: none;
|
||||||
|
background-color: #282828;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 320px;
|
||||||
|
min-width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-settings > li > a {
|
||||||
|
display: block;
|
||||||
|
padding: 15px 15px 15px 15px;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-settings > li > a:hover,
|
||||||
|
.nav-settings > li > a:focus {
|
||||||
|
color: #eee;
|
||||||
|
background-color: #2f2f2f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-settings > .active > a,
|
||||||
|
.nav-settings > .active > a:hover,
|
||||||
|
.nav-settings > .active > a:focus {
|
||||||
|
color: #eb8600;
|
||||||
|
background-color: #2f2f2f;
|
||||||
|
}
|
1250
data/interfaces/default/settings.html
Normal file
1250
data/interfaces/default/settings.html
Normal file
File diff suppressed because it is too large
Load diff
|
@ -162,6 +162,7 @@ from plexpy import version
|
||||||
<input type="checkbox" name="movie_notify_enable" id="movie_notify_enable" value="1">
|
<input type="checkbox" name="movie_notify_enable" id="movie_notify_enable" value="1">
|
||||||
<input type="checkbox" name="tv_notify_enable" id="tv_notify_enable" value="1">
|
<input type="checkbox" name="tv_notify_enable" id="tv_notify_enable" value="1">
|
||||||
<input type="checkbox" name="music_notify_enable" id="music_notify_enable" value="1">
|
<input type="checkbox" name="music_notify_enable" id="music_notify_enable" value="1">
|
||||||
|
<input type="checkbox" name="check_github" id="check_github" value="1" checked>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Required fields but hidden -->
|
<!-- Required fields but hidden -->
|
||||||
|
|
|
@ -86,7 +86,8 @@ class WebInterface(object):
|
||||||
"music_notify_on_start": checked(plexpy.CONFIG.MUSIC_NOTIFY_ON_START),
|
"music_notify_on_start": checked(plexpy.CONFIG.MUSIC_NOTIFY_ON_START),
|
||||||
"video_logging_enable": checked(plexpy.CONFIG.VIDEO_LOGGING_ENABLE),
|
"video_logging_enable": checked(plexpy.CONFIG.VIDEO_LOGGING_ENABLE),
|
||||||
"music_logging_enable": checked(plexpy.CONFIG.MUSIC_LOGGING_ENABLE),
|
"music_logging_enable": checked(plexpy.CONFIG.MUSIC_LOGGING_ENABLE),
|
||||||
"logging_ignore_interval": plexpy.CONFIG.LOGGING_IGNORE_INTERVAL
|
"logging_ignore_interval": plexpy.CONFIG.LOGGING_IGNORE_INTERVAL,
|
||||||
|
"check_github": checked(plexpy.CONFIG.CHECK_GITHUB)
|
||||||
}
|
}
|
||||||
|
|
||||||
# The setup wizard just refreshes the page on submit so we must redirect to home if config set.
|
# The setup wizard just refreshes the page on submit so we must redirect to home if config set.
|
||||||
|
@ -406,6 +407,114 @@ class WebInterface(object):
|
||||||
|
|
||||||
return serve_template(templatename="config.html", title="Settings", config=config)
|
return serve_template(templatename="config.html", title="Settings", config=config)
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def settings(self):
|
||||||
|
interface_dir = os.path.join(plexpy.PROG_DIR, 'data/interfaces/')
|
||||||
|
interface_list = [name for name in os.listdir(interface_dir) if
|
||||||
|
os.path.isdir(os.path.join(interface_dir, name))]
|
||||||
|
|
||||||
|
# Initialise blank passwords so we do not expose them in the html forms
|
||||||
|
# but users are still able to clear them
|
||||||
|
if plexpy.CONFIG.HTTP_PASSWORD != '':
|
||||||
|
http_password = ' '
|
||||||
|
else:
|
||||||
|
http_password = ''
|
||||||
|
|
||||||
|
config = {
|
||||||
|
"http_host": plexpy.CONFIG.HTTP_HOST,
|
||||||
|
"http_username": plexpy.CONFIG.HTTP_USERNAME,
|
||||||
|
"http_port": plexpy.CONFIG.HTTP_PORT,
|
||||||
|
"http_password": http_password,
|
||||||
|
"launch_browser": checked(plexpy.CONFIG.LAUNCH_BROWSER),
|
||||||
|
"enable_https": checked(plexpy.CONFIG.ENABLE_HTTPS),
|
||||||
|
"https_cert": plexpy.CONFIG.HTTPS_CERT,
|
||||||
|
"https_key": plexpy.CONFIG.HTTPS_KEY,
|
||||||
|
"api_enabled": checked(plexpy.CONFIG.API_ENABLED),
|
||||||
|
"api_key": plexpy.CONFIG.API_KEY,
|
||||||
|
"update_db_interval": plexpy.CONFIG.UPDATE_DB_INTERVAL,
|
||||||
|
"freeze_db": checked(plexpy.CONFIG.FREEZE_DB),
|
||||||
|
"log_dir": plexpy.CONFIG.LOG_DIR,
|
||||||
|
"cache_dir": plexpy.CONFIG.CACHE_DIR,
|
||||||
|
"check_github": checked(plexpy.CONFIG.CHECK_GITHUB),
|
||||||
|
"interface_list": interface_list,
|
||||||
|
"growl_enabled": checked(plexpy.CONFIG.GROWL_ENABLED),
|
||||||
|
"growl_host": plexpy.CONFIG.GROWL_HOST,
|
||||||
|
"growl_password": plexpy.CONFIG.GROWL_PASSWORD,
|
||||||
|
"prowl_enabled": checked(plexpy.CONFIG.PROWL_ENABLED),
|
||||||
|
"prowl_keys": plexpy.CONFIG.PROWL_KEYS,
|
||||||
|
"prowl_priority": plexpy.CONFIG.PROWL_PRIORITY,
|
||||||
|
"xbmc_enabled": checked(plexpy.CONFIG.XBMC_ENABLED),
|
||||||
|
"xbmc_host": plexpy.CONFIG.XBMC_HOST,
|
||||||
|
"xbmc_username": plexpy.CONFIG.XBMC_USERNAME,
|
||||||
|
"xbmc_password": plexpy.CONFIG.XBMC_PASSWORD,
|
||||||
|
"plex_enabled": checked(plexpy.CONFIG.PLEX_ENABLED),
|
||||||
|
"plex_client_host": plexpy.CONFIG.PLEX_CLIENT_HOST,
|
||||||
|
"plex_username": plexpy.CONFIG.PLEX_USERNAME,
|
||||||
|
"plex_password": plexpy.CONFIG.PLEX_PASSWORD,
|
||||||
|
"nma_enabled": checked(plexpy.CONFIG.NMA_ENABLED),
|
||||||
|
"nma_apikey": plexpy.CONFIG.NMA_APIKEY,
|
||||||
|
"nma_priority": int(plexpy.CONFIG.NMA_PRIORITY),
|
||||||
|
"pushalot_enabled": checked(plexpy.CONFIG.PUSHALOT_ENABLED),
|
||||||
|
"pushalot_apikey": plexpy.CONFIG.PUSHALOT_APIKEY,
|
||||||
|
"pushover_enabled": checked(plexpy.CONFIG.PUSHOVER_ENABLED),
|
||||||
|
"pushover_keys": plexpy.CONFIG.PUSHOVER_KEYS,
|
||||||
|
"pushover_apitoken": plexpy.CONFIG.PUSHOVER_APITOKEN,
|
||||||
|
"pushover_priority": plexpy.CONFIG.PUSHOVER_PRIORITY,
|
||||||
|
"pushbullet_enabled": checked(plexpy.CONFIG.PUSHBULLET_ENABLED),
|
||||||
|
"pushbullet_apikey": plexpy.CONFIG.PUSHBULLET_APIKEY,
|
||||||
|
"pushbullet_deviceid": plexpy.CONFIG.PUSHBULLET_DEVICEID,
|
||||||
|
"twitter_enabled": checked(plexpy.CONFIG.TWITTER_ENABLED),
|
||||||
|
"osx_notify_enabled": checked(plexpy.CONFIG.OSX_NOTIFY_ENABLED),
|
||||||
|
"osx_notify_app": plexpy.CONFIG.OSX_NOTIFY_APP,
|
||||||
|
"boxcar_enabled": checked(plexpy.CONFIG.BOXCAR_ENABLED),
|
||||||
|
"boxcar_token": plexpy.CONFIG.BOXCAR_TOKEN,
|
||||||
|
"cache_sizemb": plexpy.CONFIG.CACHE_SIZEMB,
|
||||||
|
"email_enabled": checked(plexpy.CONFIG.EMAIL_ENABLED),
|
||||||
|
"email_from": plexpy.CONFIG.EMAIL_FROM,
|
||||||
|
"email_to": plexpy.CONFIG.EMAIL_TO,
|
||||||
|
"email_smtp_server": plexpy.CONFIG.EMAIL_SMTP_SERVER,
|
||||||
|
"email_smtp_user": plexpy.CONFIG.EMAIL_SMTP_USER,
|
||||||
|
"email_smtp_password": plexpy.CONFIG.EMAIL_SMTP_PASSWORD,
|
||||||
|
"email_smtp_port": int(plexpy.CONFIG.EMAIL_SMTP_PORT),
|
||||||
|
"email_tls": checked(plexpy.CONFIG.EMAIL_TLS),
|
||||||
|
"pms_identifier": plexpy.CONFIG.PMS_IDENTIFIER,
|
||||||
|
"pms_ip": plexpy.CONFIG.PMS_IP,
|
||||||
|
"pms_logs_folder": plexpy.CONFIG.PMS_LOGS_FOLDER,
|
||||||
|
"pms_port": plexpy.CONFIG.PMS_PORT,
|
||||||
|
"pms_token": plexpy.CONFIG.PMS_TOKEN,
|
||||||
|
"pms_ssl": checked(plexpy.CONFIG.PMS_SSL),
|
||||||
|
"pms_use_bif": checked(plexpy.CONFIG.PMS_USE_BIF),
|
||||||
|
"pms_uuid": plexpy.CONFIG.PMS_UUID,
|
||||||
|
"plexwatch_database": plexpy.CONFIG.PLEXWATCH_DATABASE,
|
||||||
|
"date_format": plexpy.CONFIG.DATE_FORMAT,
|
||||||
|
"time_format": plexpy.CONFIG.TIME_FORMAT,
|
||||||
|
"grouping_global_history": checked(plexpy.CONFIG.GROUPING_GLOBAL_HISTORY),
|
||||||
|
"grouping_user_history": checked(plexpy.CONFIG.GROUPING_USER_HISTORY),
|
||||||
|
"grouping_charts": checked(plexpy.CONFIG.GROUPING_CHARTS),
|
||||||
|
"tv_notify_enable": checked(plexpy.CONFIG.TV_NOTIFY_ENABLE),
|
||||||
|
"movie_notify_enable": checked(plexpy.CONFIG.MOVIE_NOTIFY_ENABLE),
|
||||||
|
"music_notify_enable": checked(plexpy.CONFIG.MUSIC_NOTIFY_ENABLE),
|
||||||
|
"tv_notify_on_start": checked(plexpy.CONFIG.TV_NOTIFY_ON_START),
|
||||||
|
"movie_notify_on_start": checked(plexpy.CONFIG.MOVIE_NOTIFY_ON_START),
|
||||||
|
"music_notify_on_start": checked(plexpy.CONFIG.MUSIC_NOTIFY_ON_START),
|
||||||
|
"tv_notify_on_stop": checked(plexpy.CONFIG.TV_NOTIFY_ON_STOP),
|
||||||
|
"movie_notify_on_stop": checked(plexpy.CONFIG.MOVIE_NOTIFY_ON_STOP),
|
||||||
|
"music_notify_on_stop": checked(plexpy.CONFIG.MUSIC_NOTIFY_ON_STOP),
|
||||||
|
"tv_notify_on_pause": checked(plexpy.CONFIG.TV_NOTIFY_ON_PAUSE),
|
||||||
|
"movie_notify_on_pause": checked(plexpy.CONFIG.MOVIE_NOTIFY_ON_PAUSE),
|
||||||
|
"music_notify_on_pause": checked(plexpy.CONFIG.MUSIC_NOTIFY_ON_PAUSE),
|
||||||
|
"monitoring_interval": plexpy.CONFIG.MONITORING_INTERVAL,
|
||||||
|
"refresh_users_interval": plexpy.CONFIG.REFRESH_USERS_INTERVAL,
|
||||||
|
"refresh_users_on_startup": checked(plexpy.CONFIG.REFRESH_USERS_ON_STARTUP),
|
||||||
|
"ip_logging_enable": checked(plexpy.CONFIG.IP_LOGGING_ENABLE),
|
||||||
|
"video_logging_enable": checked(plexpy.CONFIG.VIDEO_LOGGING_ENABLE),
|
||||||
|
"music_logging_enable": checked(plexpy.CONFIG.MUSIC_LOGGING_ENABLE),
|
||||||
|
"logging_ignore_interval": plexpy.CONFIG.LOGGING_IGNORE_INTERVAL,
|
||||||
|
"pms_is_remote": checked(plexpy.CONFIG.PMS_IS_REMOTE)
|
||||||
|
}
|
||||||
|
|
||||||
|
return serve_template(templatename="settings.html", title="Settings", config=config)
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
def configUpdate(self, **kwargs):
|
def configUpdate(self, **kwargs):
|
||||||
# Handle the variable config options. Note - keys with False values aren't getting passed
|
# Handle the variable config options. Note - keys with False values aren't getting passed
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue