mirror of
https://github.com/aunefyren/wrapperr
synced 2024-11-24 12:03:03 +00:00
Dynamic time frame
This commit is contained in:
parent
1b66ddddf9
commit
b0c575cf25
8 changed files with 134 additions and 49 deletions
|
@ -136,6 +136,8 @@ func CreateConfigFile() error {
|
|||
config.CreateShareLinks = true
|
||||
config.WinterTheme = true
|
||||
config.BasicAuth = false
|
||||
config.WrappedDynamic = false
|
||||
config.WrappedDynamicDays = 0
|
||||
config.WrapperrCustomize.StatsTopListLength = 10
|
||||
config.WrapperrCustomize.ObfuscateOtherUsers = true
|
||||
config.WrapperrCustomize.StatsOrderByDuration = true
|
||||
|
|
|
@ -1,24 +1,26 @@
|
|||
package models
|
||||
|
||||
type WrapperrConfig struct {
|
||||
TautulliConfig []TautulliConfig `json:"tautulli_config"`
|
||||
WrapperrCustomize WrapperrCustomize `json:"wrapperr_customize"`
|
||||
WrapperrVersion string `json:"wrapperr_version"`
|
||||
Timezone string `json:"timezone"`
|
||||
ApplicationName string `json:"application_name"`
|
||||
ApplicationURL string `json:"application_url"`
|
||||
UseCache bool `json:"use_cache"`
|
||||
UseLogs bool `json:"use_logs"`
|
||||
ClientKey string `json:"client_key"`
|
||||
WrapperrRoot string `json:"wrapperr_root"`
|
||||
PrivateKey string `json:"private_key"`
|
||||
CreateShareLinks bool `json:"create_share_links"`
|
||||
WrappedStart int `json:"wrapped_start"`
|
||||
WrappedEnd int `json:"wrapped_end"`
|
||||
WrapperrPort int `json:"wrapperr_port"`
|
||||
PlexAuth bool `json:"plex_auth"`
|
||||
BasicAuth bool `json:"basic_auth"`
|
||||
WinterTheme bool `json:"winter_theme"`
|
||||
TautulliConfig []TautulliConfig `json:"tautulli_config"`
|
||||
WrapperrCustomize WrapperrCustomize `json:"wrapperr_customize"`
|
||||
WrapperrVersion string `json:"wrapperr_version"`
|
||||
Timezone string `json:"timezone"`
|
||||
ApplicationName string `json:"application_name"`
|
||||
ApplicationURL string `json:"application_url"`
|
||||
UseCache bool `json:"use_cache"`
|
||||
UseLogs bool `json:"use_logs"`
|
||||
ClientKey string `json:"client_key"`
|
||||
WrapperrRoot string `json:"wrapperr_root"`
|
||||
PrivateKey string `json:"private_key"`
|
||||
CreateShareLinks bool `json:"create_share_links"`
|
||||
WrappedStart int `json:"wrapped_start"`
|
||||
WrappedEnd int `json:"wrapped_end"`
|
||||
WrappedDynamic bool `json:"wrapped_dynamic"`
|
||||
WrappedDynamicDays int `json:"wrapped_dynamic_days"`
|
||||
WrapperrPort int `json:"wrapperr_port"`
|
||||
PlexAuth bool `json:"plex_auth"`
|
||||
BasicAuth bool `json:"basic_auth"`
|
||||
WinterTheme bool `json:"winter_theme"`
|
||||
}
|
||||
|
||||
type WrapperrConfigLegacy struct {
|
||||
|
@ -47,17 +49,19 @@ type SetWrapperrConfig struct {
|
|||
TautulliConfig []TautulliConfig `json:"tautulli_config"`
|
||||
WrapperrCustomize WrapperrCustomize `json:"wrapperr_customize"`
|
||||
WrapperrData struct {
|
||||
UseCache bool `json:"use_cache"`
|
||||
UseLogs bool `json:"use_logs"`
|
||||
PlexAuth bool `json:"plex_auth"`
|
||||
BasicAuth bool `json:"basic_auth"`
|
||||
WrapperrRoot string `json:"wrapperr_root"`
|
||||
CreateShareLinks bool `json:"create_share_links"`
|
||||
Timezone string `json:"timezone"`
|
||||
ApplicationName string `json:"application_name"`
|
||||
ApplicationURL string `json:"application_url"`
|
||||
WrappedStart int `json:"wrapped_start"`
|
||||
WrappedEnd int `json:"wrapped_end"`
|
||||
WinterTheme bool `json:"winter_theme"`
|
||||
UseCache bool `json:"use_cache"`
|
||||
UseLogs bool `json:"use_logs"`
|
||||
PlexAuth bool `json:"plex_auth"`
|
||||
BasicAuth bool `json:"basic_auth"`
|
||||
WrapperrRoot string `json:"wrapperr_root"`
|
||||
CreateShareLinks bool `json:"create_share_links"`
|
||||
Timezone string `json:"timezone"`
|
||||
ApplicationName string `json:"application_name"`
|
||||
ApplicationURL string `json:"application_url"`
|
||||
WrappedStart int `json:"wrapped_start"`
|
||||
WrappedEnd int `json:"wrapped_end"`
|
||||
WinterTheme bool `json:"winter_theme"`
|
||||
WrappedDynamic bool `json:"wrapped_dynamic"`
|
||||
WrappedDynamicDays int `json:"wrapped_dynamic_days"`
|
||||
} `json:"wrapperr_data"`
|
||||
}
|
||||
|
|
|
@ -36,6 +36,12 @@ func GetWrapperStatistics(user_name string, user_friendlyname string, user_id in
|
|||
|
||||
log.Println("Cache stage completed for " + user_name + ".")
|
||||
|
||||
// Change wrapped start & end dates if dynamic setting is configured
|
||||
if config.WrappedDynamic {
|
||||
config.WrappedEnd = int(time.Now().Unix())
|
||||
config.WrappedStart = int(time.Now().AddDate(0, 0, -config.WrappedDynamicDays).Unix())
|
||||
}
|
||||
|
||||
// Download/refresh data-set from Tautulli
|
||||
wrapperr_data, wrapperr_data_complete, err := WrapperrDownloadDays(user_id, wrapperr_data, cacheLimit, config)
|
||||
if err != nil {
|
||||
|
|
|
@ -117,6 +117,8 @@ func ApiSetConfig(context *gin.Context) {
|
|||
config.ApplicationURL = config_payload.WrapperrData.ApplicationURL
|
||||
config.WrappedEnd = config_payload.WrapperrData.WrappedEnd
|
||||
config.WrappedStart = config_payload.WrapperrData.WrappedStart
|
||||
config.WrappedDynamic = config_payload.WrapperrData.WrappedDynamic
|
||||
config.WrappedDynamicDays = config_payload.WrapperrData.WrappedDynamicDays
|
||||
config.WinterTheme = config_payload.WrapperrData.WinterTheme
|
||||
|
||||
err = files.SaveConfig(config)
|
||||
|
|
|
@ -518,4 +518,12 @@ a {
|
|||
align-content: center;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.dynamic-enabled, .static-enabled {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.dynamic-disabled, .static-disabled {
|
||||
display: none;
|
||||
}
|
|
@ -81,6 +81,8 @@ var application_url_str = '';
|
|||
|
||||
var wrapped_start = '';
|
||||
var wrapped_end = '';
|
||||
var wrapped_dynamic = false;
|
||||
var wrapped_dynamic_days = 0;
|
||||
var create_share_links = '';
|
||||
var obfuscate_other_users = false;
|
||||
|
||||
|
|
|
@ -164,6 +164,9 @@ function get_config(cookie) {
|
|||
wrapped_end = new Date(0);
|
||||
wrapped_end.setUTCSeconds(result.data.wrapped_end);
|
||||
|
||||
wrapped_dynamic = result.data.wrapped_dynamic
|
||||
wrapped_dynamic_days = result.data.wrapped_dynamic_days
|
||||
|
||||
stats_order_by_plays = result.data.wrapperr_customize.stats_order_by_plays;
|
||||
stats_order_by_duration = result.data.wrapperr_customize.stats_order_by_duration;
|
||||
|
||||
|
|
|
@ -25,6 +25,20 @@ function loadAdminPage() {
|
|||
html += '<div class="warning">!<br>The more unique days in the wrapped period, the more Tautulli API calls. It is recommended to enable "Cache results for later use" to prevent long load times.</div>';
|
||||
html += '</div>';
|
||||
|
||||
html += '<div class="form-group">';
|
||||
html += '<label for="wrapped_dynamic" title="Whether the time frame is static or dynamic.">Dynamic time frame:<br>';
|
||||
html += '<input type="checkbox" class="form-control" id="wrapped_dynamic" onclick="toggleWrappedPeriod();" ';
|
||||
if(wrapped_dynamic) {
|
||||
html += 'checked="' + wrapped_dynamic + '" ';
|
||||
}
|
||||
html += '/><br>';
|
||||
html += '</div>';
|
||||
|
||||
html += '<div class="form-group newline">';
|
||||
html += '</div>';
|
||||
|
||||
html += '<div id="wrapped-static" class="wrapped-static static-enabled">';
|
||||
|
||||
html += '<div class="form-group">';
|
||||
html += '<label for="wrapped_start" title="The start of the period you want wrapped.">Start of wrapped period:<br>';
|
||||
html += '<input type="datetime-local" class="form-control" id="wrapped_start" value="' + temp_date + '" required /><br>';
|
||||
|
@ -45,6 +59,17 @@ function loadAdminPage() {
|
|||
html += '<input type="datetime-local" class="form-control" id="wrapped_end" value="' + temp_date + '" required /></label>';
|
||||
html += '</div>';
|
||||
|
||||
html += '</div>';
|
||||
|
||||
html += '<div id="wrapped-dynamic" class="wrapped-dynamic dynamic-disabled">';
|
||||
|
||||
html += '<div class="form-group">';
|
||||
html += '<label for="wrapped_dynamic_days" title="How many days into the past should be included in the time period?">Days in the past to include:<br>';
|
||||
html += '<input type="number" class="form-control" id="wrapped_dynamic_days" value="' + wrapped_dynamic_days + '" required /></label>';
|
||||
html += '</div>';
|
||||
|
||||
html += '</div>';
|
||||
|
||||
html += '<div class="form-group newline">';
|
||||
html += '<hr>';
|
||||
html += '</div>';
|
||||
|
@ -153,6 +178,10 @@ function loadAdminPage() {
|
|||
document.getElementById("setup").innerHTML = html;
|
||||
|
||||
getTimezones();
|
||||
|
||||
if(wrapped_dynamic) {
|
||||
toggleWrappedPeriod();
|
||||
}
|
||||
}
|
||||
|
||||
function set_wrapperr_settings_call() {
|
||||
|
@ -175,6 +204,8 @@ function set_wrapperr_settings_call() {
|
|||
timezone = document.getElementById('timezone').value;
|
||||
clear_cache = document.getElementById('clear_cache').checked;
|
||||
winter_theme = document.getElementById('winter_theme').checked;
|
||||
wrapped_dynamic = document.getElementById('wrapped_dynamic').checked;
|
||||
wrapped_dynamic_days = document.getElementById('wrapped_dynamic_days').value;
|
||||
|
||||
if(wrapperr_root_original !== wrapperr_root) {
|
||||
if(!confirm("You have changed the Wrapperr root/base URL. Wrapperr will attempt to restart and the interface to access this webpage will change. If you are using an URL base you must use a trailing '/' at the end of your new URL.")){
|
||||
|
@ -228,25 +259,27 @@ function set_wrapperr_settings_call() {
|
|||
}
|
||||
|
||||
wrapperr_settings_form = {
|
||||
"clear_cache" : clear_cache,
|
||||
"data_type" : "wrapperr_data",
|
||||
"tautulli_config" : [],
|
||||
"wrapperr_customize" : {},
|
||||
"wrapperr_data" : {
|
||||
"use_cache" : use_cache,
|
||||
"use_logs" : use_logs,
|
||||
"plex_auth" : plex_auth,
|
||||
"basic_auth" : basic_auth,
|
||||
"wrapperr_root" : wrapperr_root,
|
||||
"create_share_links" : create_share_links,
|
||||
"timezone" : timezone,
|
||||
"application_name" : application_name_str,
|
||||
"application_url" : application_url_str,
|
||||
"wrapped_start" : Math.round(wrapped_start.getTime() / 1000),
|
||||
"wrapped_end" : Math.round(wrapped_end.getTime() / 1000),
|
||||
"winter_theme" : winter_theme
|
||||
}
|
||||
};
|
||||
"clear_cache" : clear_cache,
|
||||
"data_type" : "wrapperr_data",
|
||||
"tautulli_config" : [],
|
||||
"wrapperr_customize" : {},
|
||||
"wrapperr_data" : {
|
||||
"use_cache" : use_cache,
|
||||
"use_logs" : use_logs,
|
||||
"plex_auth" : plex_auth,
|
||||
"basic_auth" : basic_auth,
|
||||
"wrapperr_root" : wrapperr_root,
|
||||
"create_share_links" : create_share_links,
|
||||
"timezone" : timezone,
|
||||
"application_name" : application_name_str,
|
||||
"application_url" : application_url_str,
|
||||
"wrapped_start" : Math.round(wrapped_start.getTime() / 1000),
|
||||
"wrapped_end" : Math.round(wrapped_end.getTime() / 1000),
|
||||
"wrapped_dynamic" : wrapped_dynamic,
|
||||
"wrapped_dynamic_days" : parseInt(wrapped_dynamic_days),
|
||||
"winter_theme" : winter_theme
|
||||
}
|
||||
};
|
||||
|
||||
var wrapperr_settings_data = JSON.stringify(wrapperr_settings_form);
|
||||
|
||||
|
@ -320,4 +353,29 @@ function placeTimezones(timezoneArray) {
|
|||
option.name = item;
|
||||
dataList.appendChild(option);
|
||||
});
|
||||
}
|
||||
|
||||
function toggleWrappedPeriod() {
|
||||
wrapped_dynamic = document.getElementById("wrapped-dynamic")
|
||||
wrapped_static = document.getElementById("wrapped-static")
|
||||
|
||||
if(wrapped_dynamic.classList.contains("dynamic-enabled")) {
|
||||
wrapped_dynamic.classList.remove("dynamic-enabled")
|
||||
wrapped_dynamic.classList.add("dynamic-disabled")
|
||||
} else if(wrapped_dynamic.classList.contains("dynamic-disabled")) {
|
||||
wrapped_dynamic.classList.add("dynamic-enabled")
|
||||
wrapped_dynamic.classList.remove("dynamic-disabled")
|
||||
} else {
|
||||
wrapped_dynamic.classList.add("dynamic-disabled")
|
||||
}
|
||||
|
||||
if(wrapped_static.classList.contains("static-enabled")) {
|
||||
wrapped_static.classList.remove("static-enabled")
|
||||
wrapped_static.classList.add("static-disabled")
|
||||
} else if(wrapped_static.classList.contains("static-disabled")) {
|
||||
wrapped_static.classList.add("static-enabled")
|
||||
wrapped_static.classList.remove("static-disabled")
|
||||
} else {
|
||||
wrapped_static.classList.add("static-enabled")
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue