Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UI - Show local timezone info in settings (for future functionality) #2793

Merged
merged 1 commit into from
Nov 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 30 additions & 3 deletions changedetectionio/flask_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@
csrf.init_app(app)
notification_debug_log=[]

# get locale ready
# Locale for correct presentation of prices etc
default_locale = locale.getdefaultlocale()
logger.info(f"System locale default is {default_locale}")
try:
Expand Down Expand Up @@ -159,6 +159,21 @@ def _jinja2_filter_pagination_slice(arr, skip):

return arr

def app_get_system_time():
from zoneinfo import ZoneInfo # Built-in timezone support in Python 3.9+

system_timezone = datastore.data['settings']['application'].get('timezone')
if not system_timezone:
system_timezone = os.environ.get("TZ")

try:
system_zone = ZoneInfo(system_timezone)
except Exception as e:
logger.warning(f'Warning, unable to use timezone "{system_timezone}" defaulting to UTC- {str(e)}')
system_zone = ZoneInfo("UTC") # Fallback to UTC if the timezone is invalid

return system_zone

@app.template_filter('format_seconds_ago')
def _jinja2_filter_seconds_precise(timestamp):
if timestamp == False:
Expand Down Expand Up @@ -243,6 +258,9 @@ def changedetection_app(config=None, datastore_o=None):
# (instead of the global var)
app.config['DATASTORE'] = datastore_o

# Just to check (it will output some debug if not)
app_get_system_time()

login_manager = flask_login.LoginManager(app)
login_manager.login_view = 'login'
app.secret_key = init_app_secret(config['datastore_path'])
Expand Down Expand Up @@ -882,6 +900,7 @@ def edit_page(uuid):
@login_optionally_required
def settings_page():
from changedetectionio import forms
from datetime import datetime

default = deepcopy(datastore.data['settings'])
if datastore.proxy_list is not None:
Expand Down Expand Up @@ -949,14 +968,23 @@ def settings_page():
else:
flash("An error occurred, please see below.", "error")


system_timezone = app_get_system_time()
system_time = datetime.now(system_timezone)

# Fallback for locale formatting
formatted_system_time = system_time.strftime("%Y-%m-%d %H:%M:%S %Z%z") # Locale-aware time

output = render_template("settings.html",
api_key=datastore.data['settings']['application'].get('api_access_token'),
emailprefix=os.getenv('NOTIFICATION_MAIL_BUTTON_PREFIX', False),
extra_notification_token_placeholder_info=datastore.get_unique_notification_token_placeholders_available(),
form=form,
hide_remove_pass=os.getenv("SALTED_PASS", False),
min_system_recheck_seconds=int(os.getenv('MINIMUM_SECONDS_RECHECK_TIME', 3)),
settings_application=datastore.data['settings']['application']
settings_application=datastore.data['settings']['application'],
system_time=formatted_system_time,
timezone_name=system_timezone
)

return output
Expand Down Expand Up @@ -1709,7 +1737,6 @@ def notification_runner():
def ticker_thread_check_time_launch_checks():
import random
from changedetectionio import update_worker

proxy_last_called_time = {}

recheck_time_minimum_seconds = int(os.getenv('MINIMUM_SECONDS_RECHECK_TIME', 3))
Expand Down
3 changes: 2 additions & 1 deletion changedetectionio/model/App.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ class model(dict):
'schema_version' : 0,
'shared_diff_access': False,
'webdriver_delay': None , # Extra delay in seconds before extracting text
'tags': {} #@todo use Tag.model initialisers
'tags': {}, #@todo use Tag.model initialisers
'timezone': None,
}
}
}
Expand Down
4 changes: 4 additions & 0 deletions changedetectionio/templates/settings.html
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@
{{ render_checkbox_field(form.application.form.empty_pages_are_a_change) }}
<span class="pure-form-message-inline">When a request returns no content, or the HTML does not contain any text, is this considered a change?</span>
</div>
<div class="pure-control-group">
<p><strong>Local Time:</strong> {{ system_time }}</p>
<p><strong>Timezone:</strong> {{ timezone_name }}</p>
</div>
{% if form.requests.proxy %}
<div class="pure-control-group inline-radio">
{{ render_field(form.requests.form.proxy, class="fetch-backend-proxy") }}
Expand Down
3 changes: 3 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ services:
#
# For complete privacy if you don't want to use the 'check version' / telemetry service
# - DISABLE_VERSION_CHECK=true
#
# A valid timezone name to run as (for scheduling watch checking) see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
# - TZ=America/Los_Angeles

# Comment out ports: when using behind a reverse proxy , enable networks: etc.
ports:
Expand Down
1 change: 0 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -96,4 +96,3 @@ babel
# Needed for > 3.10, https://github.com/microsoft/playwright-python/issues/2096
greenlet >= 3.0.3


Loading