diff --git a/builder/__init__.py b/builder/__init__.py index 0b1e1743..f9024696 100644 --- a/builder/__init__.py +++ b/builder/__init__.py @@ -2,6 +2,6 @@ # -*- coding: utf-8 -*- from .cursor import CursorBuilder -from .provider import ConfigsProvider +from .config import ConfigProvider __version__: str = "1.0.1" diff --git a/builder/provider.py b/builder/config.py similarity index 86% rename from builder/provider.py rename to builder/config.py index 20fc984d..9b470753 100644 --- a/builder/provider.py +++ b/builder/config.py @@ -6,21 +6,22 @@ import log import sys import json import builder +import tempfile from os import path, listdir import shutil -class ConfigsProvider(): +class ConfigProvider(): """ Configure `Bibata` building process. """ # Build Config - __delay = 35 - __sizes = [22, 24, 28, 32, 40, 48, 56, 64, 72, 80, 88, 96] + delay = 35 + sizes = [22, 24, 28, 32, 40, 48, 56, 64, 72, 80, 88, 96] # Windows Cursors Config - __windows_cursors = { + windows_cursors = { "left_ptr_watch.ani": "AppStarting.ani", "left_ptr.cur": "Arrow.cur", "crosshair.cur": "Cross.cur", @@ -52,8 +53,9 @@ class ConfigsProvider(): os.mkdir(out_dir) - self.__bitmaps_dir: str = bitmaps_dir - self.__out_dir: str = out_dir + self.bitmaps_dir: str = bitmaps_dir + self.temp_out_dir: str = tempfile.mkdtemp() + self.out_dir: str = out_dir # read hotspots file with open(path.join(builder.__path__[0], "hotspots.json")) as hotspot_file: diff --git a/builder/cursor.py b/builder/cursor.py index d8bbba6d..c72ee21a 100644 --- a/builder/cursor.py +++ b/builder/cursor.py @@ -1,16 +1,94 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -import builder -from .provider import ConfigsProvider +import tempfile +import shutil +from os import path, listdir, rename, remove, makedirs + +from .config import ConfigProvider +from clickgen import build_x11_cursor_theme, build_cursor_theme, build_win_cursor_theme class CursorBuilder(): """ - docstring + Bibata cursors builder 🚀 """ - def __init__(self, configs: ConfigsProvider): + def __init__(self, name: str, config: ConfigProvider): + self.__config = config + self.__name = name + self.__x11_out = name + self.__windows_out = name + "-" + "Windows" + self.__temp_out_dir = tempfile.mkdtemp() - print("⚡ Bibata Builder Version %s" % builder.__version__) - self.__configs = configs + def __window_bundle(self, win_out_dir: str): + # Remove & Rename cursors + # If Key found => Rename else Remove + for cursor in listdir(win_out_dir): + old_path = path.join(win_out_dir, cursor) + + try: + new_path = path.join( + win_out_dir, self.__config.windows_cursors[cursor]) + rename(old_path, new_path) + except KeyError: + remove(old_path) + + # creating install.inf file + install_inf_path = path.join(win_out_dir, "install.inf") + with open(install_inf_path, "w") as file: + file.write(self.__config.get_windows_script( + theme_name=self.__name, author="Kaiz Khatri")) + + def __pack_win(self): + win_out_dir = path.join(self.__config.out_dir, self.__windows_out) + shutil.move(path.join(self.__temp_out_dir, + self.__name, "win"), win_out_dir) + + # create install.inf file in Windows Theme + self.__window_bundle(win_out_dir) + + def __pack_x11(self): + x11_out_dir = path.join(self.__config.out_dir, self.__x11_out) + shutil.move(path.join(self.__temp_out_dir, + self.__name, "x11"), x11_out_dir) + + def build_x11_cursors(self): + print('🌈 Building %s Theme ...' % self.__name) + build_x11_cursor_theme( + name=self.__name, + image_dir=self.__config.bitmaps_dir, + cursor_sizes=self.__config.sizes, + hotspots=self.__config.hotspots, + out_path=self.__temp_out_dir, + archive=False, + delay=self.__config.delay + ) + self.__pack_x11() + + def build_win_cursors(self): + print('🌈 Building %s Theme ...' % self.__name) + build_win_cursor_theme( + name=self.__name, + image_dir=self.__config.bitmaps_dir, + cursor_sizes=self.__config.sizes, + hotspots=self.__config.hotspots, + out_path=self.__temp_out_dir, + archive=False, + delay=self.__config.delay + ) + self.__pack_win() + + def build_cursors(self): + print('🌈 Building %s Theme ...' % self.__name) + build_cursor_theme( + name=self.__name, + image_dir=self.__config.bitmaps_dir, + cursor_sizes=self.__config.sizes, + hotspots=self.__config.hotspots, + out_path=self.__temp_out_dir, + archive=False, + delay=self.__config.delay + ) + self.__pack_x11() + self.__pack_win() diff --git a/builder/packager.py b/builder/packager.py deleted file mode 100644 index 1279fac5..00000000 --- a/builder/packager.py +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -from .provider import ConfigsProvider - - -class Packager(): - """ - Create Crisp 📦 Packages for Windows & X11 Cursor Theme. - """ - - def __init__(self, configs: ConfigsProvider): - self.__configs = configs