From c647d6f3478155c2958df5ed35be84ac5da2e39f Mon Sep 17 00:00:00 2001 From: kirbylife Date: Mon, 13 Mar 2023 13:23:45 -0600 Subject: [PATCH] Improve the backup logic and add log file --- qml/Icon.qml | 4 +++- src/main.py | 43 +++++++++++++++++++++++++++++++++++++------ 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/qml/Icon.qml b/qml/Icon.qml index cadd08b..e87ec16 100644 --- a/qml/Icon.qml +++ b/qml/Icon.qml @@ -68,7 +68,9 @@ Page { anchors.topMargin: 10 text: "Save" onClicked: { - iconEditor.attrs.old_icon = iconEditor.attrs.Icon.toString() + if(iconEditor.attrs.old_icon === undefined) { + iconEditor.attrs.old_icon = iconEditor.attrs.Icon.toString() + } iconEditor.attrs.Icon = icon.source.toString() py.importModule("main", function(){ py.call("main.save_icon", [iconEditor.attrs], function(result){ diff --git a/src/main.py b/src/main.py index 37b3a3d..236a4e5 100644 --- a/src/main.py +++ b/src/main.py @@ -1,13 +1,29 @@ import pyotherside -from PIL import Image, ImageOps, ImageDraw, ImageChops +from PIL import Image, ImageDraw, ImageChops +from PIL.Image import Image as ImageType from io import BytesIO from glob import glob from collections import Counter +import requests import base64 import os import shutil +import logging -def base64_to_img(base64_bytes: bytes) -> Image: +logging_filename = os.path.join(os.getenv("HOME"), + ".local", + "share", + "org.git.kirbylife.harbour-muchkin", + "muchkin.log") +logging.basicConfig(filename=logging_filename, filemode="w", level=logging.DEBUG) + +def download_icon(url) -> ImageType: + response = requests.get(url) + img = Image.open(BytesIO(response.content)) + img = img.convert("RGBA") + return img + +def base64_to_img(base64_bytes: bytes) -> ImageType: img_bytes = base64.b64decode(base64_bytes) img_buffer = BytesIO(img_bytes) img = Image.open(img_buffer) @@ -24,7 +40,7 @@ def avg_colors(img): counter[pixel] += 1 return counter.most_common(1)[0][0] -def add_background(img: Image, bg_tuple: tuple) -> Image: +def add_background(img: ImageType, bg_tuple: tuple) -> ImageType: bg = Image.new("RGBA", img.size, bg_tuple) bg.paste(img, (0, 0), img) return bg @@ -80,8 +96,18 @@ def get_web_icons(): return list(map(parse_file, apps)) def sailify(raw_str, pattern): - base64_bytes = raw_str.replace("data:image/png;base64,", "", 1).encode() - img = base64_to_img(base64_bytes) + try: + # New versions of Sailfish has the url on the icons + img = download_icon(raw_str) + logging.info("Downloaded from url: " + raw_str) + except requests.exceptions.InvalidSchema: + # The old ones converted the icon to base64 + base64_bytes = raw_str.replace("data:image/png;base64,", "", 1).encode() + img = base64_to_img(base64_bytes) + logging.info("Converted from base64") + except Exception as e: + logging.error(e) + raise e bg_tuple = avg_colors(img) img = add_background(img, bg_tuple) img = crop_to_circle(img, pattern) @@ -93,12 +119,17 @@ def sailify(raw_str, pattern): def backup_icon(app): if not os.path.exists(app["path"] + "backup"): - shutil.copyfile(app["path"], app["path"] + "_backup") + backup_path = app["path"] + "_backup" + shutil.copyfile(app["path"], backup_path) + logging.info("Icon backed up on: " + backup_path) + else: + logging.info("Backup already exists") def save_icon(app): new_content = deparse_file(app) with open(app["path"], "w") as f: f.write(new_content) + logging.info("Icon saved on: " + app["path"]) return True def main():