- 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.
62 lines
2.5 KiB
C++
62 lines
2.5 KiB
C++
#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;
|
||
};
|