From 225d435423888c38e0c75f63c1d7a41283839bd5 Mon Sep 17 00:00:00 2001 From: Saturneric Date: Sat, 7 Jan 2023 22:20:07 +0800 Subject: feat: add advanced gnupg operations 1.fix some issues 2. add advanced gnupg operations 3. add configurations information in Gnupg Help Tab --- src/ui/struct/SoftwareVersion.cpp | 67 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) (limited to 'src/ui/struct/SoftwareVersion.cpp') diff --git a/src/ui/struct/SoftwareVersion.cpp b/src/ui/struct/SoftwareVersion.cpp index ecccf7c0..0059715a 100644 --- a/src/ui/struct/SoftwareVersion.cpp +++ b/src/ui/struct/SoftwareVersion.cpp @@ -27,3 +27,70 @@ */ #include "SoftwareVersion.h" + +int GpgFrontend::UI::SoftwareVersion::version_compare(const std::string& a, + const std::string& b) { + + auto temp_a = a, temp_b = b; + + if (!temp_a.empty() && temp_a.front() == 'v') { + temp_a = temp_a.erase(0, 1); + LOG(INFO) << "real version a" << temp_a; + } + + if (!temp_b.empty() && temp_b.front() == 'v') { + temp_b.erase(0, 1); + LOG(INFO) << "real version b" << temp_b; + } + + // First, split the string. + std::vector va, vb; + boost::split(va, temp_a, boost::is_any_of(".")); + boost::split(vb, temp_b, boost::is_any_of(".")); + + // Compare the numbers step by step, but only as deep as the version + // with the least elements allows. + const int depth = + std::min(static_cast(va.size()), static_cast(vb.size())); + int ia = 0, ib = 0; + for (int i = 0; i < depth; ++i) { + try { + ia = boost::lexical_cast(va[i]); + ib = boost::lexical_cast(vb[i]); + } catch (boost::bad_lexical_cast& ignored) { + break; + } + if (ia != ib) break; + } + + // Return the required number. + if (ia > ib) + return 1; + else if (ia < ib) + return -1; + else { + // In case of equal versions, assumes that the version + // with the most elements is the highest version. + if (va.size() > vb.size()) + return 1; + else if (va.size() < vb.size()) + return -1; + } + + // Everything is equal, return 0. + return 0; +} + +bool GpgFrontend::UI::SoftwareVersion::NeedUpgrade() const { + return load_info_done && !latest_prerelease && !latest_draft && + version_compare(current_version, latest_version) < 0; +} + +bool GpgFrontend::UI::SoftwareVersion::VersionWithDrawn() const { + return load_info_done && !current_version_found && current_prerelease && + !current_draft; +} + +bool GpgFrontend::UI::SoftwareVersion::CurrentVersionReleased() const { + return load_info_done && current_version_found; +} -- cgit v1.2.3