diff --git a/launcher/modManager/modstate.cpp b/launcher/modManager/modstate.cpp index 7f1ec22d5..61b17b613 100644 --- a/launcher/modManager/modstate.cpp +++ b/launcher/modManager/modstate.cpp @@ -217,7 +217,7 @@ bool ModState::isInstalled() const bool ModState::isUpdateAvailable() const { - return getInstalledVersion() != getRepositoryVersion() && !getRepositoryVersion().isEmpty() && !getInstalledVersion().isEmpty(); + return impl.isUpdateAvailable(); } bool ModState::isCompatible() const diff --git a/lib/modding/ModDescription.cpp b/lib/modding/ModDescription.cpp index 32e035283..d27253ea3 100644 --- a/lib/modding/ModDescription.cpp +++ b/lib/modding/ModDescription.cpp @@ -216,4 +216,18 @@ bool ModDescription::affectsGameplay() const return false; } +bool ModDescription::isUpdateAvailable() const +{ + if (getRepositoryValue("version").isNull()) + return false; + + if (getLocalValue("version").isNull()) + return false; + + auto localVersion = CModVersion::fromString(getLocalValue("version").String()); + auto repositoryVersion = CModVersion::fromString(getRepositoryValue("version").String()); + + return localVersion < repositoryVersion; +} + VCMI_LIB_NAMESPACE_END diff --git a/lib/modding/ModDescription.h b/lib/modding/ModDescription.h index 0f7324a6a..225cf953e 100644 --- a/lib/modding/ModDescription.h +++ b/lib/modding/ModDescription.h @@ -58,6 +58,7 @@ public: ModVerificationInfo getVerificationInfo() const; bool isCompatible() const; + bool isUpdateAvailable() const; bool affectsGameplay() const; bool isCompatibility() const;