1
0
forked from BRT/arc
arc/android/dushanbe/AppVersionTrack.h

55 lines
2.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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