mirror of
https://github.com/imarkoff/Marble-shell-theme.git
synced 2025-09-16 16:28:39 -07:00
94 lines
3.8 KiB
Python
94 lines
3.8 KiB
Python
import os
|
|
|
|
from scripts.utils.files_labeler import FilesLabelerFactory
|
|
from scripts.utils.global_theme.gdm_theme_prepare import GDMThemePrepare
|
|
from scripts.utils.gresource.gresource import Gresource
|
|
from scripts.utils.logger.logger import LoggerFactory
|
|
from scripts.utils.theme.gnome_shell_theme_builder import GnomeShellThemeBuilder
|
|
|
|
|
|
class GDMThemePreparer:
|
|
"""
|
|
GDM theme preparation module.
|
|
|
|
This module contains classes responsible for extracting and processing
|
|
GDM theme resources for later compilation and installation.
|
|
|
|
The main class, GDMThemePreparer, orchestrates the extraction process
|
|
and creates GDMThemePrepare objects representing processable themes.
|
|
"""
|
|
def __init__(self, temp_folder: str, default_mode: str | None, is_filled: bool,
|
|
gresource: Gresource,
|
|
theme_builder: GnomeShellThemeBuilder,
|
|
logger_factory: LoggerFactory,
|
|
files_labeler_factory: FilesLabelerFactory):
|
|
"""
|
|
:param temp_folder: Temporary folder for extracted theme files
|
|
:param default_mode: Default theme mode to use if not specified in CSS filename
|
|
:param is_filled: Whether to generate filled (True) or dimmed (False) styles
|
|
:param gresource: Gresource instance for managing gresource files
|
|
:param theme_builder: Theme builder instance for creating themes
|
|
:param logger_factory: Logger factory for logging messages
|
|
:param files_labeler_factory: Factory for creating FilesLabeler instances
|
|
"""
|
|
self.temp_folder = temp_folder
|
|
self.gresource_temp_folder = gresource.temp_folder
|
|
|
|
self.default_mode = default_mode
|
|
self.is_filled = is_filled
|
|
|
|
self.gresource = gresource
|
|
self.theme_builder = theme_builder
|
|
self.logger_factory = logger_factory
|
|
self.files_labeler_factory = files_labeler_factory
|
|
|
|
def use_backup_as_source(self):
|
|
"""Use backup gresource file for extraction"""
|
|
self.gresource.use_backup_gresource()
|
|
self.logger_factory.create_logger().info("Using backup gresource file for extraction...")
|
|
|
|
def prepare(self) -> list[GDMThemePrepare]:
|
|
"""
|
|
Extract and prepare GDM themes for processing.
|
|
:return: List of prepared theme objects ready for compilation
|
|
"""
|
|
self.gresource.extract()
|
|
return self._find_themes()
|
|
|
|
def _find_themes(self) -> list[GDMThemePrepare]:
|
|
extracted_files = os.listdir(self.gresource_temp_folder)
|
|
allowed_css = {"gnome-shell-dark.css", "gnome-shell-light.css", "gnome-shell.css"}
|
|
|
|
themes = [
|
|
self._create_theme(file_name)
|
|
for file_name in extracted_files
|
|
if file_name in allowed_css
|
|
]
|
|
return themes
|
|
|
|
def _create_theme(self, file_name: str) -> GDMThemePrepare:
|
|
"""Helper to create and prepare a theme"""
|
|
mode = file_name.split("-")[-1].replace(".css", "")
|
|
mode = mode if mode in {"dark", "light"} else self.default_mode
|
|
|
|
self._setup_theme_builder(file_name, mode)
|
|
|
|
theme = self.theme_builder.build()
|
|
theme.prepare()
|
|
|
|
theme_file = os.path.join(self.gresource_temp_folder, file_name)
|
|
files_labeler = self.files_labeler_factory.create(
|
|
theme.temp_folder, theme.main_styles)
|
|
return GDMThemePrepare(
|
|
theme=theme, theme_file=theme_file, label=mode, files_labeler=files_labeler)
|
|
|
|
def _setup_theme_builder(self, file_name: str, mode: str):
|
|
theme_name = file_name.replace(".css", "")
|
|
|
|
(self.theme_builder
|
|
.with_temp_folder(self.temp_folder)
|
|
.with_theme_name(theme_name)
|
|
.with_mode(mode)
|
|
.filled(self.is_filled)
|
|
.with_logger_factory(self.logger_factory)
|
|
.with_reset_dependencies()) |