63 lines
3.0 KiB
C++
63 lines
3.0 KiB
C++
#pragma once
|
||
#include "CommonScript.h"
|
||
#include <QDateTime>
|
||
#include <QJsonObject>
|
||
#include <QList>
|
||
#include <QPair>
|
||
#include <QPoint>
|
||
#include "db/DeviceInfo.h"
|
||
#include "db/BankProfileInfo.h"
|
||
|
||
namespace Dushanbe {
|
||
|
||
class GetLastTransactionsScript final : public CommonScript {
|
||
Q_OBJECT
|
||
|
||
public:
|
||
explicit GetLastTransactionsScript(
|
||
QString deviceId,
|
||
QString appCode,
|
||
QList<QPair<double, QDateTime>> targets = {},
|
||
QString materialId = {},
|
||
QObject *parent = nullptr
|
||
);
|
||
|
||
~GetLastTransactionsScript() override;
|
||
|
||
signals:
|
||
// Испускается на КАЖДУЮ найденную транзакцию из списка целей.
|
||
// EventHandler использует эти данные напрямую для task_result вместо
|
||
// повторного чтения из БД.
|
||
void transactionParsed(const QJsonObject &tx);
|
||
|
||
protected:
|
||
void doStart() override;
|
||
|
||
private:
|
||
// Single-pass поиск ВСЕХ целей за один проход вниз по "Выписке": на каждом
|
||
// экране сверяем видимые транзакции со всем набором оставшихся целей,
|
||
// найденные эмитим через transactionParsed и убираем из pending, затем
|
||
// пере-сканируем тот же экран. Это убирает N-кратный перескролл (раньше
|
||
// каждая цель искалась отдельным searchOne с возвратом к началу списка → при
|
||
// многих целях упор в 10-мин watchdog). По завершении в pending остаются
|
||
// только ненайденные цели. Прерывание выставляет m_error="Interrupted".
|
||
void searchAll(const DeviceInfo &device, int accountId,
|
||
QList<QPair<double, QDateTime>> &pending);
|
||
|
||
// Координаты тапа по табу НИЖНЕГО меню. Сначала пробуем реальные bounds из
|
||
// дерева доступности; если узел отсутствует или вырожден ([0,0][0,0] —
|
||
// гибридный UI на части устройств, напр. Infinix XOS, не отдаёт bounds
|
||
// нижнего бара, хотя он отрисован у самого низа экрана), падаем на геометрию
|
||
// (доли ширины/высоты). Возвращает {-1,-1}, если таб неизвестен.
|
||
QPoint bottomNavPoint(const QString &label, const DeviceInfo &device);
|
||
|
||
QString m_deviceId;
|
||
const QString m_appCode;
|
||
// Список целей: пары (сумма в сомони со знаком, примерное время UTC).
|
||
const QList<QPair<double, QDateTime>> m_targets;
|
||
const QString m_materialId; // UUID задачи (для сохранения дампов)
|
||
QString m_error;
|
||
};
|
||
|
||
} // namespace Dushanbe
|