Improve the backup logic and add log file

master
kirbylife 2023-03-13 13:23:45 -06:00
parent fc374eab84
commit c647d6f347
2 changed files with 40 additions and 7 deletions

View File

@ -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){

View File

@ -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():