#pragma once #include #include namespace Dushanbe { // «Трек» формата UI приложения Dushanbe City Bank. Экранные дампы и порядок // нод в content-desc менялись между версиями приложения; трек — это // нормализованный ярлык версии, по которому код выбирает версионно-зависимую // ветку парсинга (см. ScreenXmlParser::setVersionTrack). // // На момент введения каркаса форматы 3.2.33 и 3.2.38 практически идентичны, // поэтому отдельных веток ещё нет — трек служит явным швом для будущих // расхождений и читаемым маркером в логах/дампах. enum class AppVersionTrack { Legacy, // < 3.2.33 — старый blob-формат (один content-desc с "Версия:"/"Сборка:") V3_2_33, // 3.2.33 .. < 3.2.38 V3_2_38, // >= 3.2.38 (и новейший по умолчанию) }; // Резолвит трек из строки версии (например "3.2.38", полученной через // AdbUtils::getAppVersion → BankProfileInfo.appVersion). Сравнение — // через QVersionNumber, а не лексикографически по строке. // // Неизвестная/непарсящаяся версия, а также любая версия новее последнего // известного порога, трактуется как новейший известный трек (V3_2_38): свежие // апдейты по умолчанию должны идти по последнему формату, а не падать на Legacy. inline AppVersionTrack trackForVersion(const QString &appVersion) { static const QVersionNumber kV3_2_33(3, 2, 33); static const QVersionNumber kV3_2_38(3, 2, 38); qsizetype suffixIndex = 0; const QVersionNumber v = QVersionNumber::fromString(appVersion.trimmed(), &suffixIndex); if (v.isNull()) { // Не смогли распарсить — считаем новейшим известным форматом. return AppVersionTrack::V3_2_38; } if (v < kV3_2_33) return AppVersionTrack::Legacy; if (v < kV3_2_38) return AppVersionTrack::V3_2_33; return AppVersionTrack::V3_2_38; } // Человекочитаемое имя трека для логов. inline const char *trackName(AppVersionTrack track) { switch (track) { case AppVersionTrack::Legacy: return "Legacy(<3.2.33)"; case AppVersionTrack::V3_2_33: return "3.2.33"; case AppVersionTrack::V3_2_38: return "3.2.38"; } return "unknown"; } } // namespace Dushanbe