#include "GetLastTransactionsScript.h" #include #include "adb/AdbUtils.h" #include "dao/ApplicationDAO.h" #include "dao/DeviceDAO.h" namespace Ozon { GetLastTransactionsScript::GetLastTransactionsScript( QString deviceId, QString appCode, QObject *parent ) : CommonScript(parent), m_deviceId(std::move(deviceId)), m_appCode(std::move(appCode)) { } GetLastTransactionsScript::~GetLastTransactionsScript() = default; void GetLastTransactionsScript::doStart() { const DeviceInfo device = DeviceDAO::getDeviceById(m_deviceId); const ApplicationInfo app = ApplicationDAO::getApplication(m_deviceId, m_appCode); if (device.id.isEmpty() || app.id == -1) { m_error = "Device or app not found: " + m_deviceId + " " + m_appCode; qCritical() << m_error; emit finishedWithResult(m_error); return; } xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); // Закрываем рекламный bottom sheet, если открыт if (Node adNode = xmlScreenParser.tryToFindAdBanner(); !adNode.isEmpty()) { qDebug() << "[GetLastTransactions] Ad banner detected, closing..."; AdbUtils::makeTap(m_deviceId, adNode.x(), adNode.y()); QThread::msleep(1000); xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); } xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); // Если не на домашнем экране — перезапускаем приложение if (!xmlScreenParser.isHomeScreen()) { qDebug() << "[GetLastTransactions] Not on home screen, restarting app..."; if (!runAppAndGoToHomeScreen(device.id, app.package, app.pinCode, device.screenWidth, device.screenHeight)) { m_error = "Cannot reach home screen: " + m_deviceId; qWarning() << m_error; AdbUtils::tryToKillApplication(m_deviceId, app.package); emit finishedWithResult(m_error); return; } xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); } // Закрываем баннеры на главной tryToCloseAllBannersOnHomePage(m_deviceId, device.screenWidth, device.screenHeight); QThread::msleep(500); xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); // Скроллим вниз до кнопки "Все" и тапаем по ней Node allBtn = swipeToButton(m_deviceId, "Все", m_counter, device.screenWidth, device.screenHeight); if (allBtn.isEmpty()) { m_error = "Button 'Все' not found after scrolling: " + m_deviceId; qWarning() << m_error; AdbUtils::tryToKillApplication(m_deviceId, app.package); emit finishedWithResult(m_error); return; } qDebug() << "[GetLastTransactions] Found 'Все' at" << allBtn.x() << allBtn.y(); AdbUtils::makeTap(m_deviceId, allBtn.x(), allBtn.y()); QThread::msleep(2000); // Парсим транзакции за сегодня и вчера xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); QList transactions = xmlScreenParser.parseTodayAndYesterdayHistory(); qDebug() << "[GetLastTransactions] Found" << transactions.size() << "transactions"; for (const TransactionInfo &tx : transactions) { qDebug() << "[GetLastTransactions]" << tx.description << tx.amount << tx.bankTime; } AdbUtils::tryToKillApplication(m_deviceId, app.package); emit finishedWithResult(m_error); } } // namespace Ozon