1
0
forked from BRT/arc
arc/android/black/ScreenXmlParser.h
trnsmkot 449fb70386 Add GetLastTransactionsScript and PayByCardScript implementations for Black app
Implemented `GetLastTransactionsScript` for automated retrieval of transactions, handling home screen navigation, "Ver más" button detection, and transaction list parsing with database storage. Introduced `PayByCardScript` for automated card payments, covering recipient selection, amount input, payment confirmation, and transaction logging. Added XML assets and updates to support these workflows.
2026-03-12 18:42:38 +07:00

119 lines
4.3 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 <QObject>
#include <QDomElement>
#include "android/xml/Node.h"
#include "db/AccountInfo.h"
#include "db/TransactionInfo.h"
namespace Black {
class ScreenXmlParser final : public QObject {
Q_OBJECT
public:
explicit ScreenXmlParser(QObject *parent = nullptr);
~ScreenXmlParser() override;
void parseAndSaveXml(const QString &xml);
const QList<Node> &findAllNodes() const;
Node findTextNode(const QString &text);
Node findNodeByContentDesc(const QString &contentDesc);
Node findNodeByContentDesc(const QString &contentDesc, bool contains);
Node findButtonNode(const QString &text, bool contains);
Node findFirstEditText();
// Определяет экран ввода PIN-кода по content-desc "¿Olvidaste tu PIN?"
bool isPinCodeScreen();
// Находит EditText с password=true для ввода PIN
Node findPinCodeEditText();
bool isHomeScreen();
// Определяет боковое меню по content-desc "Tu Información" + "Cerrar sesión"
bool isSideMenu();
// Находит кнопку "¡Hola!" (аватар с именем) на домашнем экране
Node findHolaButton();
// Парсит имя пользователя из content-desc "¡Hola!\nимя\nинициалы"
QString parseUserNameFromHomeScreen();
// Парсит баланс с домашнего экрана (content-desc "$0,00" после "Saldo disponible")
double parseBalanceFromHomeScreen();
// Определяет страницу профиля "Tu información"
bool isProfilePage();
// Парсит данные профиля по hint полей
QString parseProfileNombre(); // hint="Nombre"
QString parseProfileApellido(); // hint="Apellido"
QString parseProfileEmail(); // hint="E-mail"
QString parseProfilePhone(); // hint="Teléfono celular"
// Определяет экран CVU (окно поверх домашнего экрана)
bool isCVUScreen();
// Парсит номер CVU (22-значный номер после content-desc="CVU")
QString parseCVUNumber();
// Находит кнопку "Ver más" рядом с "Tu actividad" (для перехода на экран транзакций)
Node findVerMasAfterTuActividad();
// Определяет экран загрузки транзакций (заголовок "Tu Actividad", но транзакций ещё нет)
bool isTransactionLoadingScreen();
// Определяет экран списка транзакций (заголовок "Tu Actividad" + есть транзакции)
bool isTransactionListScreen();
// Парсит все транзакции из content-desc ImageView элементов
// Формат: "Transferencia\nDD de MES de YYYY - HH:MM\n$-1.857,\n00"
QList<TransactionInfo> parseTransactionItems();
// Парсит дату на испанском: "21 de febrero de 2026 - 09:39" → QDateTime
static QDateTime parseSpanishDate(const QString &dateStr);
// --- Экраны оплаты ---
// Экран ввода CBU/CVU/Alias (hint="Ingresar CBU, CVU o Alias")
bool isPayInputCardNumberScreen();
// Экран подтверждения получателя (кнопка "Transferir" + имя получателя)
bool isPayTransferConfirmScreen();
// Экран ввода суммы ("¿Cuánto vas a transferír" + EditText + "Continuar")
bool isPayInputSumScreen();
// Экран финального подтверждения ("Vas a transferir" + "Transferir")
bool isPayConfirmScreen();
// Экран успешного перевода ("Dinero enviado!")
bool isPaySuccessScreen();
// Парсит имя получателя из "Vas a transferir \na ИМЯ"
QString parseRecipientNameFromConfirm();
// Парсит дату/время с экрана успеха: "12/03/26 04:01"
QString parsePaySuccessDateTime();
// Парсит Id Coelsa с экрана успеха
QString parsePaySuccessCoelsaId();
// Находит EditText по hint
Node findEditTextByHint(const QString &hint);
private:
QList<Node> m_nodes;
QDomElement m_xml;
};
} // namespace Black