1
0
forked from BRT/arc
arc/android/dump/TaskDumpRecorder.h
slava 11e8f00e42 Add OCR utilities and backend integration for enhanced screen dump analysis:
- Introduce `OcrUtils` with fuzzy-matching logic for text recognition on screenshots.
- Implement dual-pass OCR to handle light-on-dark and dark-on-light text cases.
- Replace hardcoded "Подтверждаю" button tap logic with OCR-based detection and fallback geometry.
- Update `TaskDumpRecorder` to utilize `NetworkService` for uploading screen dumps, images, and metadata to the backend.
- Add support for `/monitoring/dump` endpoint in `NetworkService`.
- Enhance UI functionality with new error handling and progress feedback during dump creation and upload.
2026-04-30 19:17:17 +07:00

62 lines
2.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <QString>
class NetworkService;
// Мета-поля задачи. Пустые/нулевые значения не попадают в text дампа
// и в имя папки — выводятся только те, что релевантны конкретному типу задачи.
struct TaskDumpMeta {
QString materialId;
double amount = 0; // 0 = нет
QString phone; // пусто = нет
QString card; // пусто = нет
};
class TaskDumpRecorder {
public:
// NetworkService, через который дамп отправляется на бэкенд (/monitoring/dump).
// Вызывать один раз при старте приложения. Без него рекордер собирает дамп,
// но не отправляет его — только пишет warning в лог.
static void setNetworkService(NetworkService *service);
// Возвращает рекордер текущего потока (nullptr если задача не начата).
static TaskDumpRecorder* current();
// RAII-скоуп: при создании регистрирует рекордер на текущий поток,
// при разрушении — финализирует (успех/ошибка определяются по errorPtr).
class Scope {
public:
Scope(const QString &bank, const QString &taskKind,
const QString &adbDeviceId, const TaskDumpMeta &meta,
const QString *errorPtr);
~Scope();
Scope(const Scope &) = delete;
Scope &operator=(const Scope &) = delete;
private:
const QString *m_errorPtr;
};
// Сохраняет XML-дамп в папку задачи. Имя файла: NNNN_<screenTag>.xml.
void saveXml(int counter, const QString &xml);
private:
TaskDumpRecorder(const QString &bank, const QString &taskKind,
const QString &adbDeviceId, const TaskDumpMeta &meta);
static void begin(const QString &bank, const QString &taskKind,
const QString &adbDeviceId, const TaskDumpMeta &meta);
static void finish(const QString &errorMessage);
void finishInternal(const QString &errorMessage);
QString buildCaption(const QString &errorMessage) const;
QString m_folder;
QString m_bank;
QString m_taskKind;
QString m_adbDeviceIdRaw;
QString m_adbDeviceIdSafe;
TaskDumpMeta m_meta;
bool m_finished = false;
};