From f463d3ec6d1d8d29d2cfc2b63fb851734e50c64f Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 10 Sep 2019 01:21:44 +0300 Subject: [PATCH] Divide autoupdate paths for OS versions. --- Telegram/SourceFiles/core/update_checker.cpp | 28 +++++++------------ .../SourceFiles/platform/linux/info_linux.cpp | 14 ++++++++++ Telegram/SourceFiles/platform/mac/info_mac.mm | 17 +++++++++++ Telegram/SourceFiles/platform/platform_info.h | 2 ++ .../SourceFiles/platform/win/info_win.cpp | 11 ++++++++ 5 files changed, 54 insertions(+), 18 deletions(-) diff --git a/Telegram/SourceFiles/core/update_checker.cpp b/Telegram/SourceFiles/core/update_checker.cpp index aa55ec1fe..76551517b 100644 --- a/Telegram/SourceFiles/core/update_checker.cpp +++ b/Telegram/SourceFiles/core/update_checker.cpp @@ -499,21 +499,7 @@ bool ParseCommonMap( return false; } const auto platforms = document.object(); - const auto platform = [&] { - if (Platform::IsWindows()) { - return "win"; - } else if (Platform::IsMacOldBuild()) { - return "mac32"; - } else if (Platform::IsMac()) { - return "mac"; - } else if (Platform::IsLinux32Bit()) { - return "linux32"; - } else if (Platform::IsLinux64Bit()) { - return "linux"; - } else { - Unexpected("Platform in ParseCommonMap."); - } - }(); + const auto platform = Platform::AutoUpdateKey(); const auto it = platforms.constFind(platform); if (it == platforms.constEnd()) { LOG(("Update Error: MTP platform '%1' not found in response." @@ -621,7 +607,11 @@ HttpChecker::HttpChecker(bool testing) : Checker(testing) { } void HttpChecker::start() { - auto url = QUrl(Local::readAutoupdatePrefix() + qstr("/current")); + const auto updaterVersion = Platform::AutoUpdateVersion(); + const auto path = Local::readAutoupdatePrefix() + + qstr("/current") + + (updaterVersion > 1 ? QString::number(updaterVersion) : QString()); + auto url = QUrl(path); DEBUG_LOG(("Update Info: requesting update state")); const auto request = QNetworkRequest(url); _manager = std::make_unique(); @@ -896,8 +886,10 @@ void MtpChecker::start() { crl::on_main(this, [=] { fail(); }); return; } - constexpr auto kFeed = "tdhbcfeed"; - MTP::ResolveChannel(&_mtp, kFeed, [=](const MTPInputChannel &channel) { + const auto updaterVersion = Platform::AutoUpdateVersion(); + const auto feed = "tdhbcfeed" + + (updaterVersion > 1 ? QString::number(updaterVersion) : QString()); + MTP::ResolveChannel(&_mtp, feed, [=](const MTPInputChannel &channel) { _mtp.send( MTPmessages_GetHistory( MTP_inputPeerChannel( diff --git a/Telegram/SourceFiles/platform/linux/info_linux.cpp b/Telegram/SourceFiles/platform/linux/info_linux.cpp index 255fd79d9..8d5e66764 100644 --- a/Telegram/SourceFiles/platform/linux/info_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/info_linux.cpp @@ -42,4 +42,18 @@ QDate WhenSystemBecomesOutdated() { return QDate(); } +int AutoUpdateVersion() { + return 2; +} + +QString AutoUpdateKey() { + if (IsLinux32Bit()) { + return "linux32"; + } else if (IsLinux64Bit()) { + return "linux"; + } else { + Unexpected("Platform in AutoUpdateKey."); + } +} + } // namespace Platform diff --git a/Telegram/SourceFiles/platform/mac/info_mac.mm b/Telegram/SourceFiles/platform/mac/info_mac.mm index 1a6504f1c..7a34eca46 100644 --- a/Telegram/SourceFiles/platform/mac/info_mac.mm +++ b/Telegram/SourceFiles/platform/mac/info_mac.mm @@ -122,6 +122,23 @@ QDate WhenSystemBecomesOutdated() { return QDate(); } +int AutoUpdateVersion() { + if (!IsMac10_10OrGreater()) { + return 1; + } + return 2; +} + +QString AutoUpdateKey() { + if (IsMacOldBuild()) { + return "mac32"; + } else if (!IsMac10_12OrGreater()) { + return "osx"; + } else { + return "mac"; + } +} + bool IsMac10_6OrGreater() { return IsMacThatOrGreater<6>(); } diff --git a/Telegram/SourceFiles/platform/platform_info.h b/Telegram/SourceFiles/platform/platform_info.h index c8193c53c..3fe92ea28 100644 --- a/Telegram/SourceFiles/platform/platform_info.h +++ b/Telegram/SourceFiles/platform/platform_info.h @@ -14,6 +14,8 @@ namespace Platform { [[nodiscard]] QString SystemCountry(); [[nodiscard]] QString SystemLanguage(); [[nodiscard]] QDate WhenSystemBecomesOutdated(); +[[nodiscard]] int AutoUpdateVersion(); +[[nodiscard]] QString AutoUpdateKey(); [[nodiscard]] constexpr bool IsWindows(); [[nodiscard]] constexpr bool IsWindowsStoreBuild(); diff --git a/Telegram/SourceFiles/platform/win/info_win.cpp b/Telegram/SourceFiles/platform/win/info_win.cpp index d1af4befb..6a5a45fe1 100644 --- a/Telegram/SourceFiles/platform/win/info_win.cpp +++ b/Telegram/SourceFiles/platform/win/info_win.cpp @@ -218,6 +218,17 @@ QDate WhenSystemBecomesOutdated() { return QDate(); } +int AutoUpdateVersion() { + if (!IsWindows7OrGreater()) { + return 1; + } + return 2; +} + +QString AutoUpdateKey() { + return "win"; +} + bool IsWindowsXPOrGreater() { static const auto result = ::IsWindowsXPOrGreater(); return result;