#pragma once #include #include #include "android/xml/Node.h" #include "db/AccountInfo.h" #include "db/TransactionInfo.h" namespace Ozon { class ScreenXmlParser final : public QObject { Q_OBJECT public: explicit ScreenXmlParser(QObject *parent = nullptr); ~ScreenXmlParser() override; Node tryToFindBannerOrDialog(int width, int height); Node tryToFindSecurityBanner(); Node tryToFindSelectBottomSheet(); Node findTextNode(const QString &text); Node findTextNode(const QString &text, int x1, int y1, int x2, int y2); Node findFirstEditText(); Node findButtonNode(const QString &text, bool contains); QList findAllButtons(); const QList &findAllNodes() const; Node findNodeByContentDesc(const QString &contentDesc); bool isHomeScreen(); Node tryToFindAdBanner(); Node tryToFindGooglePlayBanner(); // Returns a Button node whose text is exactly 4 digits (card last numbers) Node findCardButtonOnHomeScreen(); // Finds a card button whose text ends with the given last 4 digits Node findCardButtonByLastNumbers(const QString &lastNumbers); // Returns all cards visible on the home screen as AccountInfo stubs // (lastNumbers, description, amount filled; id=-1, cardNumber empty) QList parseCardsOnHomeScreen(); bool isProfileScreen(); Node findUserNameOnHomeScreen(int screenHeight); QString parseProfileFullName(); QString parseProfilePhone(); QList tryToFindPinCode(const QString &pinCode, const QString &title); QList getLast2DaysTransactions(); void parseAndSaveXml(const QString &xml); TransactionInfo parseTransactionInfoHistory(int screenWidth, int screenHeight); TransactionInfo parseTransactionInfo(int screenWidth, int screenHeight); QList parseTodayAndYesterdayReportHistory(); QList parseTodayAndYesterdayHistory(); QList > parseAccountsInfo(); // Finds a TextView with full card number (format "XXXX XXXX XXXX XXXX") QString findFullCardNumber(); bool isTransactionListScreen(); // Возвращает кнопки транзакций на экране "Операции" (до maxCount штук) QList findTransactionButtons(int maxCount); // Парсит имя и сумму из текста кнопки: "NAME + 150 ₽ CATEGORY" TransactionInfo parseTransactionButtonText(const QString &text); // Парсит детали транзакции: дату, имя отправителя, телефон TransactionInfo parseTransactionDetail(); void test(); private: QList m_nodes; QDomElement m_xml; QList findPinCodeNodes(const QString &pinCode); }; } // namespace Ozon