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.
119 lines
4.3 KiB
C++
119 lines
4.3 KiB
C++
#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
|