forked from Shinonome/caelestia-cli
121 lines
3.8 KiB
Python
121 lines
3.8 KiB
Python
import json
|
|
from argparse import Namespace
|
|
|
|
from caelestia.utils.scheme import (
|
|
Scheme,
|
|
get_scheme,
|
|
get_scheme_flavours,
|
|
get_scheme_modes,
|
|
get_scheme_names,
|
|
scheme_variants,
|
|
)
|
|
from caelestia.utils.theme import apply_colours
|
|
|
|
|
|
class Set:
|
|
args: Namespace
|
|
|
|
def __init__(self, args: Namespace) -> None:
|
|
self.args = args
|
|
|
|
def run(self) -> None:
|
|
scheme = get_scheme()
|
|
|
|
if self.args.notify:
|
|
scheme.notify = True
|
|
|
|
if self.args.random:
|
|
scheme.set_random()
|
|
apply_colours(scheme.colours, scheme.mode)
|
|
elif self.args.name or self.args.flavour or self.args.mode or self.args.variant:
|
|
if self.args.name:
|
|
scheme.name = self.args.name
|
|
if self.args.flavour:
|
|
scheme.flavour = self.args.flavour
|
|
if self.args.mode:
|
|
scheme.mode = self.args.mode
|
|
if self.args.variant:
|
|
scheme.variant = self.args.variant
|
|
apply_colours(scheme.colours, scheme.mode)
|
|
else:
|
|
print("No args given. Use --name, --flavour, --mode, --variant or --random to set a scheme")
|
|
|
|
|
|
class Get:
|
|
args: Namespace
|
|
|
|
def __init__(self, args: Namespace) -> None:
|
|
self.args = args
|
|
|
|
def run(self) -> None:
|
|
scheme = get_scheme()
|
|
|
|
if self.args.name or self.args.flavour or self.args.mode or self.args.variant:
|
|
if self.args.name:
|
|
print(scheme.name)
|
|
if self.args.flavour:
|
|
print(scheme.flavour)
|
|
if self.args.mode:
|
|
print(scheme.mode)
|
|
if self.args.variant:
|
|
print(scheme.variant)
|
|
else:
|
|
print(scheme)
|
|
|
|
|
|
class List:
|
|
args: Namespace
|
|
|
|
def __init__(self, args: Namespace) -> None:
|
|
self.args = args
|
|
|
|
def run(self) -> None:
|
|
multiple = [self.args.names, self.args.flavours, self.args.modes, self.args.variants].count(True) > 1
|
|
|
|
if self.args.names or self.args.flavours or self.args.modes or self.args.variants:
|
|
if self.args.names:
|
|
if multiple:
|
|
print("Names:", *get_scheme_names())
|
|
else:
|
|
print("\n".join(get_scheme_names()))
|
|
if self.args.flavours:
|
|
if multiple:
|
|
print("Flavours:", *get_scheme_flavours())
|
|
else:
|
|
print("\n".join(get_scheme_flavours()))
|
|
if self.args.modes:
|
|
if multiple:
|
|
print("Modes:", *get_scheme_modes())
|
|
else:
|
|
print("\n".join(get_scheme_modes()))
|
|
if self.args.variants:
|
|
if multiple:
|
|
print("Variants:", *scheme_variants)
|
|
else:
|
|
print("\n".join(scheme_variants))
|
|
else:
|
|
current_scheme = get_scheme()
|
|
schemes = {}
|
|
for scheme in get_scheme_names():
|
|
schemes[scheme] = {}
|
|
for flavour in get_scheme_flavours(scheme):
|
|
s = Scheme(
|
|
{
|
|
"name": scheme,
|
|
"flavour": flavour,
|
|
"mode": current_scheme.mode,
|
|
"variant": current_scheme.variant,
|
|
"colours": current_scheme.colours,
|
|
}
|
|
)
|
|
modes = get_scheme_modes(scheme, flavour)
|
|
if s.mode not in modes:
|
|
s._mode = modes[0]
|
|
try:
|
|
s._update_colours()
|
|
schemes[scheme][flavour] = s.colours
|
|
except ValueError:
|
|
pass
|
|
|
|
print(json.dumps(schemes))
|