diff --git a/android/black/GetCardInfoScript.cpp b/android/black/GetCardInfoScript.cpp index 15d19ad..b184e92 100644 --- a/android/black/GetCardInfoScript.cpp +++ b/android/black/GetCardInfoScript.cpp @@ -9,6 +9,7 @@ #include "dao/MaterialDAO.h" #include "dao/BankProfileDAO.h" #include "dao/DeviceDAO.h" +#include "dump/TaskDumpRecorder.h" #include "net/NetworkService.h" namespace Black { @@ -35,6 +36,9 @@ void GetCardInfoScript::doStart() { return; } + const TaskDumpMeta dumpMeta{}; + TaskDumpRecorder::Scope dumpScope("black", "FETCH_CARDS", m_deviceId, dumpMeta, &m_error); + // Читаем текущий экран xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); diff --git a/android/black/GetProfileInfoScript.cpp b/android/black/GetProfileInfoScript.cpp index 8251fa7..a51a519 100644 --- a/android/black/GetProfileInfoScript.cpp +++ b/android/black/GetProfileInfoScript.cpp @@ -8,6 +8,7 @@ #include "dao/MaterialDAO.h" #include "dao/BankProfileDAO.h" #include "dao/DeviceDAO.h" +#include "dump/TaskDumpRecorder.h" #include "net/NetworkService.h" namespace Black { @@ -34,6 +35,9 @@ void GetProfileInfoScript::doStart() { return; } + const TaskDumpMeta dumpMeta{}; + TaskDumpRecorder::Scope dumpScope("black", "FETCH_PROFILE_INFO", m_deviceId, dumpMeta, &m_error); + // Читаем текущий экран xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); diff --git a/android/black/LoginAndCheckAccountsScript.cpp b/android/black/LoginAndCheckAccountsScript.cpp index af22548..2596222 100644 --- a/android/black/LoginAndCheckAccountsScript.cpp +++ b/android/black/LoginAndCheckAccountsScript.cpp @@ -5,6 +5,7 @@ #include "adb/AdbUtils.h" #include "dao/BankProfileDAO.h" #include "dao/DeviceDAO.h" +#include "dump/TaskDumpRecorder.h" #include "AppLogger.h" #include "GetProfileInfoScript.h" @@ -35,6 +36,9 @@ void LoginAndCheckAccountsScript::doStart() { return; } + const TaskDumpMeta dumpMeta{}; + TaskDumpRecorder::Scope dumpScope("black", "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)) { diff --git a/android/dump/TaskDumpRecorder.cpp b/android/dump/TaskDumpRecorder.cpp index 949cc9e..75dcc7a 100644 --- a/android/dump/TaskDumpRecorder.cpp +++ b/android/dump/TaskDumpRecorder.cpp @@ -289,10 +289,18 @@ void TaskDumpRecorder::finishInternal(const QString &errorMessage) { TaskDumpRecorder::Scope::Scope(const QString &bank, const QString &taskKind, const QString &adbDeviceId, const TaskDumpMeta &meta, const QString *errorPtr) - : m_errorPtr(errorPtr) { - TaskDumpRecorder::begin(bank, taskKind, adbDeviceId, meta); + : m_errorPtr(errorPtr), m_owned(false) { + // Вложенные скоупы не перетирают рекордер родителя — иначе внутренний + // скрипт прервал бы запись внешней задачи и сгенерировал ложный дамп + // с пометкой "interrupted". + if (TaskDumpRecorder::current() == nullptr) { + TaskDumpRecorder::begin(bank, taskKind, adbDeviceId, meta); + m_owned = true; + } } TaskDumpRecorder::Scope::~Scope() { - TaskDumpRecorder::finish(m_errorPtr ? *m_errorPtr : QString()); + if (m_owned) { + TaskDumpRecorder::finish(m_errorPtr ? *m_errorPtr : QString()); + } } diff --git a/android/dump/TaskDumpRecorder.h b/android/dump/TaskDumpRecorder.h index 9cdda65..9aab596 100644 --- a/android/dump/TaskDumpRecorder.h +++ b/android/dump/TaskDumpRecorder.h @@ -29,6 +29,9 @@ public: // RAII-скоуп: при создании регистрирует рекордер на текущий поток, // при разрушении — финализирует (успех/ошибка определяются по errorPtr). + // Если в текущем потоке уже есть активный рекордер (вложенный вызов из + // другого скрипта), новый скоуп становится no-op — родитель остаётся + // владельцем дампа, а внутренние скрины пишутся в его папку. class Scope { public: Scope(const QString &bank, const QString &taskKind, @@ -39,6 +42,7 @@ public: Scope &operator=(const Scope &) = delete; private: const QString *m_errorPtr; + bool m_owned; }; // Сохраняет XML-дамп в папку задачи. Имя файла: NNNN_.xml. diff --git a/android/dushanbe/GetCardInfoScript.cpp b/android/dushanbe/GetCardInfoScript.cpp index d820d5b..1020128 100644 --- a/android/dushanbe/GetCardInfoScript.cpp +++ b/android/dushanbe/GetCardInfoScript.cpp @@ -8,6 +8,7 @@ #include "dao/MaterialDAO.h" #include "dao/BankProfileDAO.h" #include "dao/DeviceDAO.h" +#include "dump/TaskDumpRecorder.h" #include "net/NetworkService.h" namespace Dushanbe { @@ -34,6 +35,9 @@ void GetCardInfoScript::doStart() { return; } + const TaskDumpMeta dumpMeta{}; + TaskDumpRecorder::Scope dumpScope("dushanbe", "FETCH_CARDS", m_deviceId, dumpMeta, &m_error); + xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); if (!xmlScreenParser.isHomeScreen()) { diff --git a/android/dushanbe/GetProfileInfoScript.cpp b/android/dushanbe/GetProfileInfoScript.cpp index f4b8b44..591a49e 100644 --- a/android/dushanbe/GetProfileInfoScript.cpp +++ b/android/dushanbe/GetProfileInfoScript.cpp @@ -9,6 +9,7 @@ #include "dao/MaterialDAO.h" #include "dao/BankProfileDAO.h" #include "dao/DeviceDAO.h" +#include "dump/TaskDumpRecorder.h" #include "net/NetworkService.h" namespace Dushanbe { @@ -35,6 +36,9 @@ void GetProfileInfoScript::doStart() { return; } + const TaskDumpMeta dumpMeta{}; + TaskDumpRecorder::Scope dumpScope("dushanbe", "FETCH_PROFILE_INFO", m_deviceId, dumpMeta, &m_error); + xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); if (!xmlScreenParser.isHomeScreen()) { diff --git a/android/dushanbe/LoginAndCheckAccountsScript.cpp b/android/dushanbe/LoginAndCheckAccountsScript.cpp index a798f29..e774313 100644 --- a/android/dushanbe/LoginAndCheckAccountsScript.cpp +++ b/android/dushanbe/LoginAndCheckAccountsScript.cpp @@ -5,6 +5,7 @@ #include "adb/AdbUtils.h" #include "dao/BankProfileDAO.h" #include "dao/DeviceDAO.h" +#include "dump/TaskDumpRecorder.h" #include "AppLogger.h" #include "GetProfileInfoScript.h" @@ -40,6 +41,9 @@ void LoginAndCheckAccountsScript::doStart() { return; } + const TaskDumpMeta dumpMeta{}; + 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)) { diff --git a/android/ozon/GetCardInfoScript.cpp b/android/ozon/GetCardInfoScript.cpp index dc55000..bc98deb 100644 --- a/android/ozon/GetCardInfoScript.cpp +++ b/android/ozon/GetCardInfoScript.cpp @@ -11,6 +11,7 @@ #include "dao/BankProfileDAO.h" #include "dao/DeviceDAO.h" #include "dao/SettingsDAO.h" +#include "dump/TaskDumpRecorder.h" #include "net/NetworkService.h" #include "AppLogger.h" @@ -40,6 +41,9 @@ void GetCardInfoScript::doStart() { return; } + const TaskDumpMeta dumpMeta{}; + TaskDumpRecorder::Scope dumpScope("ozon", "FETCH_CARDS", m_deviceId, dumpMeta, &m_error); + // Читаем текущий экран xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); @@ -526,7 +530,7 @@ void GetCardInfoScript::doStart() { QJsonObject materialBody; materialBody["bank_profile_id"] = updatedApp.bankProfileId; materialBody["card_number"] = dbCard.cardNumber; - materialBody["account_number"] = dbCard.accountNumber; + // materialBody["account_number"] = dbCard.accountNumber; materialBody["name"] = updatedApp.fullName; materialBody["state"] = materialStatusToString(dbCard.status) == "active" ? "enabled" : "disabled"; materialBody["currency"] = currencyCodes.value(dbCard.currency.toUpper(), 643); diff --git a/android/ozon/GetProfileInfoScript.cpp b/android/ozon/GetProfileInfoScript.cpp index 56dfccc..851353e 100644 --- a/android/ozon/GetProfileInfoScript.cpp +++ b/android/ozon/GetProfileInfoScript.cpp @@ -10,6 +10,7 @@ #include "dao/MaterialDAO.h" #include "dao/BankProfileDAO.h" #include "dao/DeviceDAO.h" +#include "dump/TaskDumpRecorder.h" #include "net/NetworkService.h" #include "AppLogger.h" @@ -36,6 +37,9 @@ void GetProfileInfoScript::doStart() { return; } + const TaskDumpMeta dumpMeta{}; + TaskDumpRecorder::Scope dumpScope("ozon", "FETCH_PROFILE_INFO", m_deviceId, dumpMeta, &m_error); + // Читаем текущий экран xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); diff --git a/android/ozon/LoginAndCheckAccountsScript.cpp b/android/ozon/LoginAndCheckAccountsScript.cpp index b21bf51..377f4e1 100644 --- a/android/ozon/LoginAndCheckAccountsScript.cpp +++ b/android/ozon/LoginAndCheckAccountsScript.cpp @@ -6,6 +6,7 @@ #include "dao/MaterialDAO.h" #include "dao/BankProfileDAO.h" #include "dao/DeviceDAO.h" +#include "dump/TaskDumpRecorder.h" #include "AppLogger.h" #include "GetCardInfoScript.h" @@ -39,6 +40,9 @@ void LoginAndCheckAccountsScript::doStart() { return; } + const TaskDumpMeta dumpMeta{}; + TaskDumpRecorder::Scope dumpScope("ozon", "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)) {