diff --git a/data/interfaces/default/base.html b/data/interfaces/default/base.html index c4c280f3..affe9b12 100644 --- a/data/interfaces/default/base.html +++ b/data/interfaces/default/base.html @@ -141,13 +141,13 @@ from plexpy import version % endif % if title=="Settings":
  • - +
  • % else:
  • - +
  • % endif diff --git a/data/interfaces/default/config.html b/data/interfaces/default/config.html index 39ab521a..67caa818 100644 --- a/data/interfaces/default/config.html +++ b/data/interfaces/default/config.html @@ -349,10 +349,10 @@ Notify on playback start
    - Notify on playback stop + Notify on playback stop
    - Notify on playback pause + Notify on playback pause
    diff --git a/data/interfaces/default/css/plexwatch.css b/data/interfaces/default/css/plexwatch.css index 5bf2c94b..d5fba94c 100644 --- a/data/interfaces/default/css/plexwatch.css +++ b/data/interfaces/default/css/plexwatch.css @@ -1405,7 +1405,7 @@ textarea::-webkit-input-placeholder { .radio input[type="radio"], .checkbox input[type="checkbox"] { float: left; - margin-left: -25px; + margin-left: -20px; margin-top: 2px; } .controls > .radio:first-child, @@ -8334,3 +8334,56 @@ ol.test >li { .colvis-button-bar { 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; +} \ No newline at end of file diff --git a/data/interfaces/default/settings.html b/data/interfaces/default/settings.html new file mode 100644 index 00000000..2b089609 --- /dev/null +++ b/data/interfaces/default/settings.html @@ -0,0 +1,1250 @@ +<%inherit file="base.html"/> +<%! + import plexpy +%> + +<%def name="headerIncludes()"> + + + +<%def name="body()"> +
    +
    +
    +
    +
    +

    Settings

    +
    +
    + % if config['check_github']: + + % endif + + +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    +

    Software Updates

    +
    +
    + Enable Updates +

    If you have Git installed, allow periodic checks for updates.

    +
    + % if plexpy.CURRENT_VERSION: +

    Current version: ${plexpy.CURRENT_VERSION}

    + % endif +
    +
    +
    +

    Display Settings

    +
    +
    + + +

    Set your preferred date format. Click here to see the parameter list.

    +
    +
    + + +

    Set your preferred time format. Click here to see the parameter list.

    +
    +
    + +
    +
    +
    +
    +

    Web Interface

    +
    +
    + + +

    e.g. localhost or an IP, such as 0.0.0.0

    +
    +
    + + +

    Port to bind web server to. Note that ports below 1024 may require root.

    +
    +
    + Launch Browser on Startup +

    Launch browser pointed to PlexPy, on startup.

    +
    +
    + Enable HTTPS +

    Enable HTTPS for web server for encrypted communication.

    +
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    +
    +
    +

    Authentication

    +
    +
    + + +

    Username for web server authentication. Leave empty to disable.

    +
    +
    + + +

    Password for web server authentication. Leave empty to disable.

    +
    +
    +
    +
    +

    API

    +
    +
    + Enable API +

    Allow remote applications to interface with PlexPy.

    +
    +
    + + + +

    Current API key:
    ${config['api_key']}

    +
    +
    + +
    +
    +
    +
    +

    Plex Media Server

    +
    +
    + + + +

    IP Address or hostname for Plex Media Server.

    +
    +
    + + +

    Port that Plex Media Server is listening on.

    +
    +
    + Remote Server +

    Check this is your Plex Server is not on the same local network as PlexPy.

    +
    +
    + Force SSL +

    Force PlexPy to connect to your Plex Server via SSL. Your server needs to have remote access enabled.

    +
    + +
    + +
    +
    +
    +
    +

    Plex.tv Authentication

    +
    +
    + + +  Fetch Token +

    Token for Plex.tv authentication.

    +
    +
    +
    +
    +

    Friends List

    +
    +
    + + +

    The interval (in hours) PlexPy will request an updated friends list from Plex.tv. 0 to disable.

    +
    +
    + Refresh user list on startup +

    Refresh the user list when PlexPy starts.

    +
    +
    + +
    +
    +
    +

    Extra Settings

    +
    +
    +
    + Use BIF thumbs +

    If you have media indexing enabled on your server, use these on the activity pane.

    +
    +
    +
    +

    Plex Logs

    +
    +
    +
    + + +

    Set the folder where your Plex Server logs are. This is required if you enable IP logging.
    Click here for help.

    +
    +
    +
    +
    +

    PlexWatch Import Tool

    +
    +

    Click here to Import an existing Plexwatch database.

    +
    + +
    +
    +
    +
    +

    Monitoring Settings

    +
    +
    + + +

    The interval (in seconds) PlexPy will ping your Plex Server. Min 30 seconds, Recommended 60 seconds.

    +
    +
    +
    +
    +

    History Logging

    +
    +
    + Log Movies and TV +

    Keep records of all video items played from your Plex Media Server.

    +
    +
    + + +

    The interval (in seconds) PlexPy will wait for a video item to be active before logging it. 0 to disable.

    +
    +
    + Log Music +

    Keep records of all audio items played from your Plex Media Server. VERY experimental.

    +
    +
    +
    +
    +

    IP Logging

    +
    +
    + Enable IP Logging +

    + Enable this to attempt to log the IP address of the user. Debug logging must be enabled and your log folder must be set in the PlexPy settings. +

    +
    +
    + +
    +
    +
    +
    +

    Global Notifications

    +
    +
    +
    +
    + Enable TV Notifications +
    +
    +
    +
    +
    + Notify on playback start +
    +
    + Notify on playback stop +
    +
    + Notify on playback pause +
    +
    +
    +
    +
    +
    +
    + Enable Movie Notifications +
    +
    +
    +
    +
    + Notify on playback start +
    +
    + Notify on playback stop +
    +
    + Notify on playback pause +
    +
    +
    +
    +
    +
    +
    + Enable Music Notifications +
    +
    +
    +
    +
    + Notify on playback start +
    +
    + Notify on playback stop +
    +
    + Notify on playback pause +
    +
    +
    +
    +
    + +
    +
    +
    +
    +

    Growl

    +
    +
    + Enable Growl Notifications +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    +

    Prowl

    +
    +
    + Enable Prowl Notifications +
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    +

    XBMC

    +
    +
    + Enable XBMC Notifications +
    +
    +
    + + +

    e.g. http://localhost:8080. Separate hosts with commas.

    +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    +

    Plex Home Theatre

    +
    +
    + Enable Plex Notifications +
    +
    +
    + + +

    Host running Plex Client (eg. http://192.168.1.100:3000).

    +
    +
    + + +

    Username of your Plex client API (blank for none).

    +
    +
    + + +

    Password of your Plex client API (blank for none).

    +
    +
    +
    +
    +
    +

    NotifyMyAndroid

    +
    +
    + Enable NotifyMyAndroid +
    +
    +
    + + +

    Separate multiple api keys with commas.

    +
    +
    + + +
    +
    +
    + +
    +
    +

    Pushalot

    +
    +
    + Enable Pushalot +
    +
    +
    + + +

    Separate multiple api keys with commas.

    +
    +
    +
    + +
    +
    +

    Email

    +
    +
    + Enable Email Notifications +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + TLS +
    +
    +
    +
    +
    +

    Pushover

    +
    +
    + Enable Pushover Notifications +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    +

    Pushbullet

    +
    +
    + Enable PushBullet Notifications +
    +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +

    OS X

    +
    +
    + Enable OS X Notifications +
    +
    +
    + + + +

    Enter the path/application name to be registered with the Notification Center, default is /Applications/PlexPy.

    +
    +
    +
    + +
    +
    +

    Boxcar2

    +
    +
    + Enable Boxcar2 Notifications +
    +
    +
    + + +
    +
    +
    + +
    +
    +
    +
    +
    +
    + + + + +
    +
    +
    + + + +<%def name="javascriptIncludes()"> + + + \ No newline at end of file diff --git a/data/interfaces/default/welcome.html b/data/interfaces/default/welcome.html index c7d118ad..9c292531 100644 --- a/data/interfaces/default/welcome.html +++ b/data/interfaces/default/welcome.html @@ -162,6 +162,7 @@ from plexpy import version + diff --git a/plexpy/webserve.py b/plexpy/webserve.py index 1e3697fe..7f399c6b 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -86,7 +86,8 @@ class WebInterface(object): "music_notify_on_start": checked(plexpy.CONFIG.MUSIC_NOTIFY_ON_START), "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 + "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. @@ -406,6 +407,114 @@ class WebInterface(object): 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 def configUpdate(self, **kwargs): # Handle the variable config options. Note - keys with False values aren't getting passed