mirror of
https://github.com/ksyasuda/dotfiles.git
synced 2025-05-22 21:05:52 -07:00
76 lines
2.2 KiB
Python
Executable File
76 lines
2.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import logging
|
|
from pathlib import Path
|
|
from subprocess import Popen
|
|
from sys import argv
|
|
from sys import exit as sysexit
|
|
|
|
from rofi import Rofi
|
|
|
|
DEFAULT = Path.home().expanduser() / "Videos" / "sauce"
|
|
|
|
logger = logging.getLogger("rofi-syncfin")
|
|
logger.setLevel(logging.DEBUG)
|
|
sh = logging.StreamHandler()
|
|
sh.setFormatter(
|
|
logging.Formatter("%(asctime)s | %(name)s | %(levelname)s | %(message)s")
|
|
)
|
|
logger.addHandler(sh)
|
|
|
|
|
|
def notification(title: str, message: str) -> None:
|
|
"""Sends a notification."""
|
|
Popen(["dunstify", title, message])
|
|
|
|
|
|
def run_syncfin(pth: Path | str) -> None:
|
|
"""Runs syncfin in the given path."""
|
|
pth = Path(pth)
|
|
if not pth.exists() or not pth.is_dir():
|
|
notification("Syncfin:", f"Path {pth} does not exist.")
|
|
logger.error("Invalid path: %s", pth)
|
|
sysexit(1)
|
|
with Popen(["/home/sudacode/.bin/syncfin", pth]) as proc:
|
|
ret = proc.wait()
|
|
if ret != 0:
|
|
notification("Syncfin:", f"Syncfin failed with exit code {ret}.")
|
|
logger.error("syncfin returned non-zero exit code: %s", ret)
|
|
sysexit(1)
|
|
|
|
|
|
def get_dirs(in_pth: Path | str) -> list[Path]:
|
|
"""Returns a list of directories in the given path."""
|
|
path = Path(in_pth)
|
|
return [x for x in path.iterdir() if x.is_dir()]
|
|
|
|
|
|
if __name__ == "__main__":
|
|
rofi = Rofi(
|
|
rofi_args=[
|
|
"-dmenu",
|
|
"-i",
|
|
"-config",
|
|
"/home/sudacode/.config/aniwrapper/themes/aniwrapper-nord2.rasi",
|
|
"-dpi",
|
|
"144",
|
|
],
|
|
theme_str="window { width: 85%; } listview { lines: 10; }",
|
|
)
|
|
logger.debug("Starting rofi-syncfin.py")
|
|
logger.debug("HOME: %s", DEFAULT)
|
|
dirs = get_dirs(DEFAULT)
|
|
dirs = [x.name for x in dirs]
|
|
choice, status = rofi.select("Select a directory", dirs)
|
|
if status == -1:
|
|
notification("rofi-syncfin", "Failed")
|
|
sysexit(1)
|
|
else:
|
|
logger.debug("Selected dir: %s", choice)
|
|
logger.info("Running syncfin on %s", dirs[choice])
|
|
pth = str(DEFAULT / dirs[choice])
|
|
logger.debug("Path: %s", pth)
|
|
notification("rofi-syncfin:", f"Syncing {dirs[choice]}")
|
|
run_syncfin(pth)
|
|
notification("rofi-syncfin", f"Finished syncing {dirs[choice]}")
|