diff --git a/gallery/themes/default/manifest.json b/gallery/themes/default/manifest.json new file mode 100644 index 0000000..6a1fbfb --- /dev/null +++ b/gallery/themes/default/manifest.json @@ -0,0 +1,7 @@ +{ + "name": "default", + "version": "23.04.03", + "author": "MichaƂ Gdula", + "description": "Default theme for OnlyLegs", + "uses": "sass" +} \ No newline at end of file diff --git a/gallery/utils/theme_manager.py b/gallery/utils/theme_manager.py index c6e8f5f..c54f3c4 100644 --- a/gallery/utils/theme_manager.py +++ b/gallery/utils/theme_manager.py @@ -6,6 +6,7 @@ import sys import shutil from datetime import datetime import sass +import json def compile_theme(theme_name, app_path): @@ -16,7 +17,7 @@ def compile_theme(theme_name, app_path): # Set Paths theme_source = os.path.join(app_path, 'themes', theme_name) - theme_destination = os.path.join(app_path, 'static', 'theme') + theme_target = os.path.join(app_path, 'static', 'theme') # If the theme doesn't exist, exit if not os.path.exists(theme_source): @@ -24,16 +25,31 @@ def compile_theme(theme_name, app_path): sys.exit(1) # If the destination folder doesn't exist, create it - if not os.path.exists(theme_destination): - os.makedirs(theme_destination) + if not os.path.exists(theme_target): + os.makedirs(theme_target) # Theme source file doesn't exist, exit if not os.path.join(theme_source, 'style.sass'): print("No sass file found!") sys.exit(1) + # Check if the theme has a manifest.json file + if os.path.exists(os.path.join(theme_source, 'manifest.json')): + source_info = json.load(open(os.path.join(theme_source, 'manifest.json'), encoding='utf-8', mode='r')) + else: + print("Theme lacks a manifest.json file, exiting as its required!") + sys.exit(1) + + # Check if the theme is upto date + if os.path.exists(os.path.join(theme_target, 'manifest.json')): + target_info = json.load(open(os.path.join(theme_target, 'manifest.json'), encoding='utf-8', mode='r')) + + if source_info['version'] == target_info['version'] and source_info['name'] == target_info['name']: + print("Theme is up to date!") + return + # Compile the theme - with open(os.path.join(theme_destination, 'style.css'), + with open(os.path.join(theme_target, 'style.css'), encoding='utf-8', mode='w+') as file: try: file.write(sass.compile(filename=os.path.join(theme_source, 'style.sass'), @@ -44,12 +60,17 @@ def compile_theme(theme_name, app_path): print("Compiled successfully!") # If the destination folder exists, remove it - if os.path.exists(os.path.join(theme_destination, 'fonts')): - shutil.rmtree(os.path.join(theme_destination, 'fonts')) + if os.path.exists(os.path.join(theme_target, 'fonts')): + shutil.rmtree(os.path.join(theme_target, 'fonts')) # Copy the fonts shutil.copytree(os.path.join(theme_source, 'fonts'), - os.path.join(theme_destination, 'fonts')) + os.path.join(theme_target, 'fonts')) print("Fonts copied successfully!") + + # Copy the manifest + shutil.copyfile(os.path.join(theme_source, 'manifest.json'), + os.path.join(theme_target, 'manifest.json')) + print("Manifest copied successfully!") print(f"{datetime.now().hour}:{datetime.now().minute}:{datetime.now().second} - Done!\n")