mirror of
https://github.com/dgtlmoon/changedetection.io.git
synced 2025-12-09 09:35:33 +00:00
Notification screenshot should be JPEG to save on bandwidth
This commit is contained in:
@@ -251,6 +251,26 @@ class model(dict):
|
|||||||
# False is not an option for AppRise, must be type None
|
# False is not an option for AppRise, must be type None
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def get_screenshot_as_jpeg(self):
|
||||||
|
"""Best used in notifications due to its smaller size"""
|
||||||
|
png_fname = os.path.join(self.watch_data_dir, "last-screenshot.png")
|
||||||
|
jpg_fname = os.path.join(self.watch_data_dir, "last-screenshot.jpg")
|
||||||
|
|
||||||
|
if os.path.isfile(jpg_fname):
|
||||||
|
return jpg_fname
|
||||||
|
|
||||||
|
if os.path.isfile(png_fname) and not os.path.isfile(jpg_fname):
|
||||||
|
# Doesnt exist, so create the JPEG from the PNG
|
||||||
|
from PIL import Image
|
||||||
|
im1 = Image.open(png_fname)
|
||||||
|
im1.convert('RGB').save(jpg_fname)
|
||||||
|
return jpg_fname
|
||||||
|
|
||||||
|
|
||||||
|
# False is not an option for AppRise, must be type None
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def __get_file_ctime(self, filename):
|
def __get_file_ctime(self, filename):
|
||||||
fname = os.path.join(self.watch_data_dir, filename)
|
fname = os.path.join(self.watch_data_dir, filename)
|
||||||
if os.path.isfile(fname):
|
if os.path.isfile(fname):
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import json
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
import re
|
import re
|
||||||
@@ -20,7 +21,6 @@ def test_setup(live_server):
|
|||||||
# Hard to just add more live server URLs when one test is already running (I think)
|
# Hard to just add more live server URLs when one test is already running (I think)
|
||||||
# So we add our test here (was in a different file)
|
# So we add our test here (was in a different file)
|
||||||
def test_check_notification(client, live_server):
|
def test_check_notification(client, live_server):
|
||||||
|
|
||||||
set_original_response()
|
set_original_response()
|
||||||
|
|
||||||
# Give the endpoint time to spin up
|
# Give the endpoint time to spin up
|
||||||
@@ -70,13 +70,14 @@ def test_check_notification(client, live_server):
|
|||||||
# Give the thread time to pick up the first version
|
# Give the thread time to pick up the first version
|
||||||
time.sleep(3)
|
time.sleep(3)
|
||||||
|
|
||||||
testimage = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='
|
# We write the PNG to disk, but a JPEG should appear in the notification
|
||||||
|
testimage_png = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='
|
||||||
# Write the last screenshot png
|
# Write the last screenshot png
|
||||||
|
|
||||||
uuid = extract_UUID_from_client(client)
|
uuid = extract_UUID_from_client(client)
|
||||||
datastore = 'test-datastore'
|
datastore = 'test-datastore'
|
||||||
with open(os.path.join(datastore, str(uuid), 'last-screenshot.png'), 'wb') as f:
|
with open(os.path.join(datastore, str(uuid), 'last-screenshot.png'), 'wb') as f:
|
||||||
f.write(base64.b64decode(testimage))
|
f.write(base64.b64decode(testimage_png))
|
||||||
|
|
||||||
# Goto the edit page, add our ignore text
|
# Goto the edit page, add our ignore text
|
||||||
# Add our URL to the import page
|
# Add our URL to the import page
|
||||||
@@ -153,7 +154,15 @@ def test_check_notification(client, live_server):
|
|||||||
assert "preview/" in notification_submission
|
assert "preview/" in notification_submission
|
||||||
assert ":-)" in notification_submission
|
assert ":-)" in notification_submission
|
||||||
assert "New ChangeDetection.io Notification - {}".format(test_url) in notification_submission
|
assert "New ChangeDetection.io Notification - {}".format(test_url) in notification_submission
|
||||||
assert testimage in notification_submission
|
|
||||||
|
# Check the attachment was added, and that it is a JPEG from the original PNG
|
||||||
|
notification_submission_object = json.loads(notification_submission)
|
||||||
|
assert notification_submission_object['attachments'][0]['filename'] == 'last-screenshot.jpg'
|
||||||
|
assert len(notification_submission_object['attachments'][0]['base64'])
|
||||||
|
assert notification_submission_object['attachments'][0]['mimetype'] == 'image/jpeg'
|
||||||
|
jpeg_in_attachment = base64.b64decode(notification_submission_object['attachments'][0]['base64'])
|
||||||
|
assert b'JFIF' in jpeg_in_attachment
|
||||||
|
assert testimage_png not in notification_submission
|
||||||
|
|
||||||
if env_base_url:
|
if env_base_url:
|
||||||
# Re #65 - did we see our BASE_URl ?
|
# Re #65 - did we see our BASE_URl ?
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ class update_worker(threading.Thread):
|
|||||||
n_object.update({
|
n_object.update({
|
||||||
'watch_url': watch['url'],
|
'watch_url': watch['url'],
|
||||||
'uuid': watch_uuid,
|
'uuid': watch_uuid,
|
||||||
'screenshot': watch.get_screenshot() if watch.get('notification_screenshot') else None,
|
'screenshot': watch.get_screenshot_as_jpeg() if watch.get('notification_screenshot') else None,
|
||||||
'current_snapshot': snapshot_contents.decode('utf-8'),
|
'current_snapshot': snapshot_contents.decode('utf-8'),
|
||||||
'diff': diff.render_diff(watch_history[dates[-2]], watch_history[dates[-1]], line_feed_sep=line_feed_sep),
|
'diff': diff.render_diff(watch_history[dates[-2]], watch_history[dates[-1]], line_feed_sep=line_feed_sep),
|
||||||
'diff_full': diff.render_diff(watch_history[dates[-2]], watch_history[dates[-1]], True, line_feed_sep=line_feed_sep)
|
'diff_full': diff.render_diff(watch_history[dates[-2]], watch_history[dates[-1]], True, line_feed_sep=line_feed_sep)
|
||||||
|
|||||||
Reference in New Issue
Block a user