CoolFace
Apppublic

fred-dev/comfy_ui_ali

sourceHugging Facemitupdated 1y agoView on Hugging Face
0likes
terminal_service.py61 linesDownload Raw Back to services
1from app.logger import on_flush2import os3import shutil4 5 6class TerminalService:7    def __init__(self, server):8        self.server = server9        self.cols = None10        self.rows = None11        self.subscriptions = set()12        on_flush(self.send_messages)13 14    def get_terminal_size(self):15        try:16            size = os.get_terminal_size()17            return (size.columns, size.lines)18        except OSError:19            try:20                size = shutil.get_terminal_size()21                return (size.columns, size.lines)22            except OSError:23                return (80, 24)  # fallback to 80x2424 25    def update_size(self):26        columns, lines = self.get_terminal_size()27        changed = False28 29        if columns != self.cols:30            self.cols = columns31            changed = True32 33        if lines != self.rows:34            self.rows = lines35            changed = True36 37        if changed:38            return {"cols": self.cols, "rows": self.rows}39 40        return None41 42    def subscribe(self, client_id):43        self.subscriptions.add(client_id)44 45    def unsubscribe(self, client_id):46        self.subscriptions.discard(client_id)47 48    def send_messages(self, entries):49        if not len(entries) or not len(self.subscriptions):50            return51 52        new_size = self.update_size()53 54        for client_id in self.subscriptions.copy(): # prevent: Set changed size during iteration55            if client_id not in self.server.sockets:56                # Automatically unsub if the socket has disconnected57                self.unsubscribe(client_id)58                continue59 60            self.server.send_sync("logs", {"entries": entries, "size": new_size}, client_id)61