#pragma once #include // Headless-варианты сборки и отправки в Telegram-relay архива из application.log. // Используется EventHandler-ом для авто-отправки при ошибках задач. // FileLogWindow по-прежнему имеет свою UI-обвязку для ручной отправки (включает БД). namespace LogArchiveSender { // Собирает архив и постит через свежий NetworkService::postMonitoringDump // в собственных background-потоках (worker для zip + thread для HTTP). // `label` — короткий тег ("TASK_ERROR" и т.п.), попадает в caption и в имя файла. // `eventId` (если > 0) тоже уходит в имя файла для трассировки. // `extraCaptionHtml` (если не пусто) — дополнительные строки caption'а // (Profile/Material/Phone), уже экранированные; нужны чтобы по общему // api-токену различать операторов. // Возвращает true если задача поставлена в очередь; реальный результат отправки // не отслеживается (fire-and-forget, как у sendMonitoringLog). // `sourceLogPath` (если не пусто) — путь к конкретному лог-файлу: он шлётся // целиком, без обрезки по последнему часу. Нужен для отправки лога прошлой // сессии (application.prev.log), сохранённого до усечения при старте. bool dispatch(const QString &label, int eventId = -1, const QString &extraCaptionHtml = {}, const QString &sourceLogPath = {}); // Копирует лог в destDir (создаёт каталог при необходимости). // Возвращает true, если файл скопирован. // Если `sourceLogPath` пуст — берётся текущий application.log рядом с exe и // обрезается по последнему часу (поведение для дампов задач). Если задан — // указанный файл копируется целиком. // Используется TaskDumpRecorder, чтобы вложить логи прямо в архив дампа // задачи и слать всё одним файлом, а не двумя отдельными архивами. bool collectInto(const QString &destDir, const QString &sourceLogPath = {}); }