55 lines
2.8 KiB
C++
55 lines
2.8 KiB
C++
#pragma once
|
||
|
||
#include <QString>
|
||
#include <QVersionNumber>
|
||
|
||
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
|