mirror of
https://github.com/ksyasuda/dotfiles.git
synced 2025-12-05 14:53:38 -08:00
update
This commit is contained in:
75
.config/rofi/scripts/rofi-syncfin.py
Executable file
75
.config/rofi/scripts/rofi-syncfin.py
Executable file
@@ -0,0 +1,75 @@
|
||||
#!/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]}")
|
||||
Reference in New Issue
Block a user