#include "LoginAndCheckAccountsTossScript.h" #include #include "adb/AdbUtils.h" #include "dao/AccountDAO.h" #include "dao/ApplicationDAO.h" #include "dao/DeviceDAO.h" #include "dao/TransactionDAO.h" #include "time/DateUtils.h" LoginAndCheckAccountsTossScript::LoginAndCheckAccountsTossScript( QString deviceId, QString appCode, QObject *parent ) : CommonTossScript(parent), m_deviceId(std::move(deviceId)), m_appCode(std::move(appCode)) { } LoginAndCheckAccountsTossScript::~LoginAndCheckAccountsTossScript() = default; /** NongHyup KakaoBank Kookmin Toss Bank Shinhan Woori IBK Hana MG Busan Bank iM Bank(Daegu) Kbank Credit Union Postal Sav. SC Kyongnam Kwangju Suhyup Jeonbuk Savings Banks Jeju Bank Jeonbuk Savings Banks Jeju Bank Citibank KDB NFCF SBI Sav. BOA Bank of China HSBC ICBC Deutsche JPMorgan BNP Paribas CCB */ void LoginAndCheckAccountsTossScript::doStart() { const DeviceInfo device = DeviceDAO::getDeviceById(m_deviceId); const ApplicationInfo app = ApplicationDAO::getApplication(m_deviceId, m_appCode); if (true) { xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); // искать Transfer кнопку // Node transferText = xmlScreenParser.findTextContainsNode("토스뱅크 통장"); // if (transferText.isEmpty()) { // } Node transferText = xmlScreenParser.findFirstAccountLine(); if (!transferText.isEmpty()) { AdbUtils::makeTap(device.id, transferText.x(), transferText.y()); QThread::msleep(3000); xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); bool historyFound = false; for (int i = 0; i < 5; ++i) { Node topUpBtn = xmlScreenParser.findButtonNode("Top up", false); Node sendBtn = xmlScreenParser.findButtonNode("Send", false); if (!topUpBtn.isEmpty() && !sendBtn.isEmpty()) { // подгрузка истории идет QThread::msleep(2000); xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); QList transactions = xmlScreenParser.parsePositiveTransactions(); for (auto &transaction: transactions) { qDebug().noquote().nospace() << convertTransactionToString(transaction); } historyFound = true; break; } QThread::msleep(1000); xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); } if (!historyFound) { m_error = "Top up or send button not found: " + m_deviceId + " " + m_appCode; qWarning() << m_error; emit finishedWithResult(m_error); return; } } else { m_error = "Card not found: " + m_deviceId + " " + m_appCode; qWarning() << m_error; emit finishedWithResult(m_error); return; } } else { // "Maraqlı deyil" - не интересно 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)); if (!runAppAndGoToHomeScreen(device.id, app.package, app.pinCode, device.screenWidth, device.screenHeight)) { m_error = "Cant open the home screen: " + m_deviceId + " " + m_appCode; qWarning() << m_error; if (!ApplicationDAO::updatePinCodeStatus(app.id, "no", "Не прошла проверка [дата]")) { qWarning() << "Cant update the pincode: " << m_deviceId << " " << m_appCode; } AdbUtils::tryToKillApplication(m_deviceId, app.package); emit finishedWithResult(m_error); return; } else { if (!ApplicationDAO::updatePinCodeStatus(app.id, "yes", "")) { qWarning() << "Cant update the pincode: " << m_deviceId << " " << m_appCode; } Node mainAccount = xmlScreenParser.findTextContainsNode("Main account"); if (!mainAccount.isEmpty()) { // AdbUtils::makeTap(device.id, mainAccount.x(), mainAccount.y()); // QThread::msleep(1000); // for (int i = 0; i < 5; ++i) { // xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_account.deviceId, ++m_counter)); // Node mainAccount = xmlScreenParser.findTextContainsNode("Main account"); // if (!byDayTitle.isEmpty()) { // qWarning() << "--- beforeYesterdayTitle found!"; // break; // } // AdbUtils::makeSwipe( // m_account.deviceId, // device.screenWidth / 2, device.screenHeight / 4 * 3, // device.screenWidth / 2, device.screenHeight / 4 // ); // QThread::msleep(1000); // // } } QThread::msleep(2000); xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); QList oldAccounts = AccountDAO::getAccounts(m_deviceId, m_appCode); QMap accountMap; for (AccountInfo &oldAccount: oldAccounts) { if (oldAccount.status == AccountStatus::Active) { accountMap.insert(oldAccount.lastNumbers, oldAccount); } } QList accounts = xmlScreenParser.parseAccountsInfo(); if (accounts.length() == 1 && accountMap.size() == 1) { AccountInfo account = accounts[0]; account.deviceId = m_deviceId; account.appCode = m_appCode; account.lastNumbers = accountMap.first().lastNumbers; account.description = accountMap.first().description; account.currency = accountMap.first().currency; account.description = accountMap.first().description; account.status = AccountStatus::Active; if (!AccountDAO::upsertAccount(account)) { m_error = "Not updated: " + account.lastNumbers; qCritical() << m_error; } } // for (auto account: accounts) { // if (accountMap.contains(account.lastNumbers)) { // account.deviceId = m_deviceId; // account.appCode = m_appCode; // account.currency = accountMap[account.lastNumbers].currency; // account.description = accountMap[account.lastNumbers].description; // account.status = AccountStatus::Active; // if (!AccountDAO::upsertAccount(account)) { // m_error = "Not updated: " + account.lastNumbers; // qCritical() << m_error; // } // } // } QList savedAccounts = AccountDAO::getAccounts(m_deviceId, m_appCode); postAccountsData(savedAccounts); } AdbUtils::tryToKillApplication(m_deviceId, app.package); } emit finishedWithResult(m_error); }