Files
swingmusic-extended/swingmusic/__main__.py
T
cwilvx dd76b8c7f8 add app version output to version.txt
+ refactor main entry point
+ add debug logging in image extraction
2025-06-18 14:38:43 +03:00

114 lines
2.9 KiB
Python

import os
import sys
import click
import pathlib
import multiprocessing
from PIL import Image
from swingmusic.start_swingmusic import start_swingmusic
from swingmusic.utils.xdg_utils import get_xdg_config_dir
from swingmusic.utils.filesystem import get_home_res_path
from swingmusic.arg_handler import handle_build, handle_password_reset
def create_image(width, height, color1, color2):
# Generate an image and draw a pattern
padding = 7
icon_path = get_home_res_path("assets/logo-fill.light.ico")
image = Image.open(icon_path)
# Calculate new size with padding
new_size = (width - 2 * padding, height - 2 * padding)
# Resize the image while maintaining aspect ratio
image.thumbnail(new_size, Image.Resampling.LANCZOS)
# Create a new image with padding
padded_image = Image.new("RGBA", (width, height), (0, 0, 0, 0))
# Calculate position to center the image
x = (width - image.width) // 2
y = (height - image.height) // 2
# Paste the resized image onto the padded image
padded_image.paste(image, (x, y), image)
return padded_image
def print_version(*args, **kwargs):
"""
Prints the version of the application.
"""
if not args[2]:
return
path = get_home_res_path("version.txt")
if not path:
click.echo("Version file not found.")
sys.exit(1)
with open(path, "r") as f:
version = f.read()
click.echo(version)
sys.exit(0)
@click.command(options_metavar="<options>", context_settings={"show_default": True})
@click.option(
"--build",
default=False,
help="Build the project.",
is_eager=True,
callback=handle_build,
is_flag=True,
)
@click.option("--host", default="0.0.0.0", help="Host to run the app on.")
@click.option("--port", default=1970, help="HTTP port to run the app on.")
@click.option(
"--config",
default=lambda: get_xdg_config_dir(),
show_default="XDG_CONFIG_HOME",
help="Path to the config file.",
type=click.Path(
exists=True,
file_okay=False,
dir_okay=True,
writable=True,
resolve_path=True,
allow_dash=False,
path_type=pathlib.Path,
),
)
@click.option(
"--password-reset",
is_flag=True,
help="Reset the password.",
is_eager=True,
callback=handle_password_reset,
)
@click.option(
"--version",
is_flag=True,
default=False,
callback=print_version,
help="Show the version and exit",
is_eager=True,
)
def run(*args, **kwargs):
"""
Swing Music entry point. All commandline arguments are handled
here by the click decorators and configuration.
"""
# INFO: Set the config dir as an environment variable
os.environ["SWINGMUSIC_XDG_CONFIG_DIR"] = str(
pathlib.Path(kwargs["config"]).resolve()
)
start_swingmusic(kwargs["host"], kwargs["port"])
if __name__ == "__main__":
multiprocessing.freeze_support()
run()