From f629b65d481c1ea102c568784a40dbbffcd6872f Mon Sep 17 00:00:00 2001 From: dgtlmoon Date: Fri, 17 Nov 2023 15:43:20 +0100 Subject: [PATCH] Closes #1982 --- changedetectionio/__init__.py | 4 ++-- changedetectionio/model/Watch.py | 19 +++++++++++++++++++ .../templates/watch-overview.html | 13 +++++++++++-- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/changedetectionio/__init__.py b/changedetectionio/__init__.py index 9edea3cc..6a95b156 100644 --- a/changedetectionio/__init__.py +++ b/changedetectionio/__init__.py @@ -961,7 +961,7 @@ def changedetection_app(config=None, datastore_o=None): # Read as binary and force decode as UTF-8 # Windows may fail decode in python if we just use 'r' mode (chardet decode exception) from_version = request.args.get('from_version') - from_version_index = -2 # second newest + from_version_index = -2 # second newest if from_version and from_version in dates: from_version_index = dates.index(from_version) else: @@ -970,7 +970,7 @@ def changedetection_app(config=None, datastore_o=None): try: from_version_file_contents = watch.get_history_snapshot(dates[from_version_index]) except Exception as e: - from_version_file_contents = "Unable to read to-version at index{}.\n".format(dates[from_version_index]) + from_version_file_contents = f"Unable to read to-version at index {dates[from_version_index]}.\n" to_version = request.args.get('to_version') to_version_index = -1 diff --git a/changedetectionio/model/Watch.py b/changedetectionio/model/Watch.py index 90858e39..8d58ca46 100644 --- a/changedetectionio/model/Watch.py +++ b/changedetectionio/model/Watch.py @@ -262,6 +262,25 @@ class model(dict): bump = self.history return self.__newest_history_key + # Given an arbitrary timestamp, find the closest next key + # For example, last_viewed = 1000 so it should return the next 1001 timestamp + # + # used for the [diff] button so it can preset a smarter from_version + @property + def get_next_snapshot_key_to_last_viewed(self): + + """Unfortunately for now timestamp is stored as string key""" + keys = list(self.history.keys()) + last_viewed = self.get('last_viewed') + prev_k=keys[0] + for k in sorted(keys, key=lambda x: int(x)): + if int(k) >= int(last_viewed): + return prev_k + prev_k = k + + #@check this, return last if not found? + return keys[-1] + def get_history_snapshot(self, timestamp): import brotli filepath = self.history[timestamp] diff --git a/changedetectionio/templates/watch-overview.html b/changedetectionio/templates/watch-overview.html index 4b04ead0..85620356 100644 --- a/changedetectionio/templates/watch-overview.html +++ b/changedetectionio/templates/watch-overview.html @@ -82,12 +82,15 @@ {% endif %} {% for watch in (watches|sort(attribute=sort_attribute, reverse=sort_order == 'asc'))|pagination_slice(skip=pagination.skip) %} + + {% set is_unviewed = watch.newest_history_key| int > watch.last_viewed and watch.history_n>=2 %} + {{ loop.index+pagination.skip }} @@ -167,7 +170,13 @@ class="recheck pure-button pure-button-primary">{% if watch.uuid in queued_uuids %}Queued{% else %}Recheck{% endif %} Edit {% if watch.history_n >= 2 %} - Diff + + {% if is_unviewed %} + Diff + {% else %} + Diff + {% endif %} + {% else %} {% if watch.history_n == 1 or (watch.history_n ==0 and watch.error_text_ctime )%} Preview