From 3fcd45763965195d9dad0ac7085304d9145f648b Mon Sep 17 00:00:00 2001 From: Oliver Hofmann Date: Sun, 17 May 2026 11:24:09 +0200 Subject: [PATCH] feat: main entry point wiring all components --- main.py | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 main.py diff --git a/main.py b/main.py new file mode 100644 index 0000000..5a3939b --- /dev/null +++ b/main.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +"""TeamPulse — Teams meeting chat audit tool. + +Usage: + .venv/bin/python main.py + +Opens a browser, navigates to Teams Web. Post !start "Presenter Name" and +!stop in the meeting chat to define a time window. A Markdown memo is +saved to the current directory when the window closes. +""" +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent / "src")) + +from playwright.sync_api import sync_playwright + +from teampulse.auth import create_context, ensure_logged_in +from teampulse.memo import generate_memo, save_memo +from teampulse.models import AuditEntry +from teampulse.monitor import Monitor +from teampulse.resolver import Resolver + +CACHE_PATH = Path.home() / ".teampulse" / "cache.json" + + +def main(): + with sync_playwright() as playwright: + print("Starte Browser...") + context = create_context(playwright, headless=False) + ensure_logged_in(context) + + page = context.new_page() + page.goto("https://teams.microsoft.com") + + monitor = Monitor(page=page, current_user="") + print("Lese eingeloggten Nutzer...") + current_user = monitor.get_current_user_display_name() + monitor._current_user = current_user + print(f"Eingeloggt als: {current_user}") + + print("\nNavigiere im Browser zur Meeting-Chat-Seite.") + print("Poste dann '!start \"Name des Vortragenden\"' im Chat.\n") + + window = monitor.run() + + resolver = Resolver(cache_path=CACHE_PATH, page=page) + print(f"\nLöse {len(window.entries)} E-Mail-Adresse(n) auf...") + resolved_entries = [] + for entry in window.entries: + email = resolver.resolve(entry.display_name) + print(f" {entry.display_name} → {email}") + resolved_entries.append(AuditEntry(display_name=entry.display_name, email=email)) + + window.entries = resolved_entries + + memo_content = generate_memo(window) + path = save_memo(memo_content) + + print(f"\nMemo gespeichert: {path}") + print("\n" + memo_content) + + context.close() + + +if __name__ == "__main__": + main()