diff --git a/changedetectionio/processors/restock_diff/forms.py b/changedetectionio/processors/restock_diff/forms.py index 1ab01e6e..3b89d523 100644 --- a/changedetectionio/processors/restock_diff/forms.py +++ b/changedetectionio/processors/restock_diff/forms.py @@ -13,7 +13,8 @@ class processor_settings_form(processor_text_json_diff_form): render_kw={"placeholder": "No limit", "size": "10"}) price_change_max = FloatField('Maximum amount to trigger notification', [validators.Optional()], render_kw={"placeholder": "No limit", "size": "10"}) - price_change_threshold_percent = FloatField('Threshold in % for price changes', validators=[ + price_change_threshold_percent = FloatField('Threshold in % for price changes since the original price', validators=[ + validators.Optional(), validators.NumberRange(min=0, max=100, message="Should be between 0 and 100"), ], render_kw={"placeholder": "0%", "size": "5"}) @@ -37,12 +38,13 @@ class processor_settings_form(processor_text_json_diff_form):
{{ render_checkbox_field(form.in_stock_only) }} - Only trigger notifications when page changes from out of stock to back in stock + Only trigger re-stock notification when page changes from out of stock to back in stock
{{ render_checkbox_field(form.follow_price_changes) }} Changes in price should trigger a notification - When OFF - only care about restock detection +
+ When OFF - Only care about restock detection
{{ render_field(form.price_change_min, placeholder=watch['restock']['price']) }} @@ -55,7 +57,7 @@ class processor_settings_form(processor_text_json_diff_form):
{{ render_field(form.price_change_threshold_percent) }} Price must change more than this % to trigger a change.
- For example, If the product is $1,000 USD, 2% would mean it has to change more than $20 since the first check.
+ For example, If the product is $1,000 USD originally, 2% would mean it has to change more than $20 since the first check.
""" \ No newline at end of file diff --git a/changedetectionio/processors/text_json_diff/processor.py b/changedetectionio/processors/text_json_diff/processor.py index 1dc501a2..1de5bafb 100644 --- a/changedetectionio/processors/text_json_diff/processor.py +++ b/changedetectionio/processors/text_json_diff/processor.py @@ -338,12 +338,6 @@ class perform_site_check(difference_detection_processor): if blocked: changed_detected = False - # Extract title as title - if is_html: - if self.datastore.data['settings']['application'].get('extract_title_as_title') or watch['extract_title_as_title']: - if not watch['title'] or not len(watch['title']): - update_obj['title'] = html_tools.extract_element(find='title', html_content=self.fetcher.content) - logger.debug(f"Watch UUID {watch.get('uuid')} content check - Previous MD5: {watch.get('previous_md5')}, Fetched MD5 {fetched_md5}") if changed_detected: diff --git a/changedetectionio/static/styles/scss/styles.scss b/changedetectionio/static/styles/scss/styles.scss index aa805285..b720b6d4 100644 --- a/changedetectionio/static/styles/scss/styles.scss +++ b/changedetectionio/static/styles/scss/styles.scss @@ -1118,6 +1118,11 @@ ul { color: #fff; opacity: 0.7; } + + svg { + vertical-align: middle; + } + @extend .inline-tag; } diff --git a/changedetectionio/static/styles/styles.css b/changedetectionio/static/styles/styles.css index b9469fd0..4f3fec10 100644 --- a/changedetectionio/static/styles/styles.css +++ b/changedetectionio/static/styles/styles.css @@ -1194,6 +1194,11 @@ ul { color: #fff; opacity: 0.7; } + +.restock-label svg { + vertical-align: middle; } + + #chrome-extension-link { padding: 9px; border: 1px solid var(--color-grey-800); diff --git a/changedetectionio/update_worker.py b/changedetectionio/update_worker.py index a5af5c2b..fee09c5d 100644 --- a/changedetectionio/update_worker.py +++ b/changedetectionio/update_worker.py @@ -505,6 +505,16 @@ class update_worker(threading.Thread): if update_handler.xpath_data: watch.save_xpath_data(data=update_handler.xpath_data) + # Extract as title if possible/requested. + if self.datastore.data['settings']['application'].get('extract_title_as_title') or watch['extract_title_as_title']: + if not watch['title'] or not len(watch['title']): + try: + update_obj['title'] = html_tools.extract_element(find='title', html_content=update_handler.fetcher.content) + logger.info(f"UUID: {uuid} Extract <title> updated title to '{update_obj['title']}") + except Exception as e: + logger.warning(f"UUID: {uuid} Extract <title> as watch title was enabled, but couldn't find a <title>.") + + # Now update after running everything try: self.datastore.update_watch(uuid=uuid, update_obj=update_obj)