#!/usr/bin/env python3 import datetime import os import subprocess import time programs = ["firefox-bin", "Discord"] timeout_file = "/tmp/timeout" max_timeout = 60 time_format = "%H:%M" work_hours = [("00:15", "11:00")] refresh_interval = 15 skipped_until = datetime.datetime.now() def kill(): for program in programs: try: subprocess.run(["killall", program], check=True, stderr=subprocess.DEVNULL) print(f"killed {program}") except subprocess.CalledProcessError as e: if e.returncode != 1: print(f"failed to kill {program}: {e}") def in_shift(shift, time): start = datetime.datetime.strptime(shift[0], time_format) end = datetime.datetime.strptime(shift[1], time_format) return start.time() <= time <= end.time() while True: current_time = datetime.datetime.now() try: with open(timeout_file) as f: x = min(abs(int(f.readline().strip())), max_timeout) skipped_until = current_time + datetime.timedelta(minutes=x) print(f"Recieved timeout request, sleeping until: {skipped_until}") os.remove(timeout_file) except FileNotFoundError: pass if current_time > skipped_until: for shift in work_hours: if in_shift(shift, current_time.time()): kill() break time.sleep(refresh_interval)