from mail import MailBox, Logger import time from threading import Thread from subprocess import Popen, PIPE import sys import json class MailWatcher(Thread): def __init__(self, account, interval, creds, sensitivity, thresh, logger): Thread.__init__(self) self.account = account self.interval = interval self.threshold = thresh self.creds = creds self.sensitivity = sensitivity self.running = True self.stopped = False self.logger = logger def run(self): mailbox_obj = MailBox(self.account["uname"], self.account["password"], self.account["server"], self.account["port"],self.creds, self.sensitivity, self.threshold, self.logger) while 1 and self.running: time.sleep(self.interval/100) mailbox_obj.refresh_new_mails() self.stopped = True def stop(self): self.running = False def thread_done(thread:MailWatcher): return thread.stopped conf = json.loads(sys.stdin.readline()) workdir = sys.stdin.readline() threads = [] loggers = [] mysql_creds = {} main_log = Logger(workdir[:-1] + "/logs/main_process") main_log.info("Started main process") for i in conf: if i.startswith("mysql"): mysql_creds[i] = conf[i] for i in conf["accounts"]: loggers.append(Logger(workdir[:-1] + "/logs/" + i["uname"])) threads.append(MailWatcher(i, conf["refresh_millis"], mysql_creds, conf["sensitivity"], conf["threshold"], loggers[-1])) threads[-1].start() main_log.info("Created listeners") while str(input()) != "0": continue main_log.info("Detected interrupt. Stopping!") for thread in threads: thread.stop() main_log.info("Sent stop signal to all threads!") while not all(map(thread_done,threads)): continue main_log.info("All threads stopped!") for logger in loggers: logger.stop() exit(0)