81 lines
3.4 KiB
C++
81 lines
3.4 KiB
C++
#include "LoginAndCheckAccountsScript.h"
|
||
|
||
#include <QThread>
|
||
|
||
#include "adb/AdbUtils.h"
|
||
#include "dao/BankProfileDAO.h"
|
||
#include "dao/DeviceDAO.h"
|
||
#include "dump/TaskDumpRecorder.h"
|
||
#include "AppLogger.h"
|
||
#include "GetProfileInfoScript.h"
|
||
|
||
namespace Dushanbe {
|
||
|
||
LoginAndCheckAccountsScript::LoginAndCheckAccountsScript(
|
||
QString deviceId,
|
||
QString appCode,
|
||
QObject *parent,
|
||
bool pinCheckOnly
|
||
) : CommonScript(parent),
|
||
m_deviceId(std::move(deviceId)),
|
||
m_appCode(std::move(appCode)),
|
||
m_pinCheckOnly(pinCheckOnly) {
|
||
}
|
||
|
||
LoginAndCheckAccountsScript::~LoginAndCheckAccountsScript() = default;
|
||
|
||
void LoginAndCheckAccountsScript::doStart() {
|
||
// Канонический ключ материала (device.id в БД) — для лукапов BankProfile;
|
||
// m_deviceId же перезаписываем ADB-серийником для команд.
|
||
const QString canonicalDeviceId = m_deviceId;
|
||
DeviceInfo device = DeviceDAO::getDeviceById(m_deviceId); if (device.id.isEmpty()) device = DeviceDAO::findByAdbSerial(m_deviceId); if (!device.adbSerial.isEmpty()) m_deviceId = device.adbSerial;
|
||
const BankProfileInfo app = BankProfileDAO::getApplication(device.id, m_appCode);
|
||
qDebug() << "[Dushanbe::Login] device.id=" << device.id << "adbSerial=" << device.adbSerial
|
||
<< "appCode=" << m_appCode << "app.id=" << app.id
|
||
<< "pinCode.length=" << app.pinCode.length() << "package=" << app.package;
|
||
|
||
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;
|
||
}
|
||
|
||
const TaskDumpMeta dumpMeta{{}, 0, {}, {}, app.bankProfileId, app.phone, device.id};
|
||
TaskDumpRecorder::Scope dumpScope("dushanbe", "FETCH_PROFILE", m_deviceId, dumpMeta, &m_error);
|
||
|
||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
|
||
|
||
if (!runAppAndGoToHomeScreen(m_deviceId, app.package, app.pinCode, device.screenWidth, device.screenHeight)) {
|
||
m_error = "Cant open the home screen: " + device.name + " (" + m_deviceId + ") " + m_appCode;
|
||
qWarning() << m_error;
|
||
m_resultScreenshot = AdbUtils::captureScreenshotBytes(m_deviceId);
|
||
if (!m_resultScreenshot.isEmpty()) emit screenshotReady(m_resultScreenshot);
|
||
AppLogger::log("dushanbe/LoginAndCheck", m_deviceId, m_error, {}, "FETCH_PROFILE");
|
||
BankProfileDAO::updateComment(app.id,
|
||
"Не прошла проверка " + QDateTime::currentDateTime().toString("dd.MM.yyyy HH:mm:ss"));
|
||
|
||
AdbUtils::tryToKillApplication(m_deviceId, app.package);
|
||
emit finishedWithResult(m_error);
|
||
return;
|
||
}
|
||
|
||
// Скриншот домашнего экрана — отправляем в мониторинг
|
||
m_resultScreenshot = AdbUtils::captureScreenshotBytes(m_deviceId);
|
||
if (!m_resultScreenshot.isEmpty()) emit screenshotReady(m_resultScreenshot);
|
||
|
||
if (m_pinCheckOnly) {
|
||
emit finishedWithResult(m_error);
|
||
return;
|
||
}
|
||
|
||
// В GetProfileInfoScript отдаём КАНОНИЧЕСКИЙ ключ материала, а не ADB-серийник,
|
||
// чтобы BankProfileDAO::getApplication нашла правильную запись с bank_profile_id.
|
||
GetProfileInfoScript profileScript(canonicalDeviceId, m_appCode);
|
||
profileScript.start();
|
||
|
||
emit finishedWithResult(m_error);
|
||
}
|
||
|
||
} // namespace Dushanbe
|