mirror of
				https://github.com/dgtlmoon/changedetection.io.git
				synced 2025-11-04 08:34:57 +00:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			windows-mi
			...
			timezone-i
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					4c44958ef0 | 
@@ -84,7 +84,7 @@ csrf = CSRFProtect()
 | 
			
		||||
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:
 | 
			
		||||
@@ -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:
 | 
			
		||||
@@ -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'])
 | 
			
		||||
@@ -882,6 +900,7 @@ def changedetection_app(config=None, datastore_o=None):
 | 
			
		||||
    @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:
 | 
			
		||||
@@ -949,6 +968,13 @@ def changedetection_app(config=None, datastore_o=None):
 | 
			
		||||
            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),
 | 
			
		||||
@@ -956,7 +982,9 @@ def changedetection_app(config=None, datastore_o=None):
 | 
			
		||||
                                 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
 | 
			
		||||
@@ -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))
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -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") }}
 | 
			
		||||
 
 | 
			
		||||
@@ -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:
 | 
			
		||||
 
 | 
			
		||||
@@ -96,4 +96,3 @@ babel
 | 
			
		||||
# Needed for > 3.10, https://github.com/microsoft/playwright-python/issues/2096
 | 
			
		||||
greenlet >= 3.0.3
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user