Added check for MD5 and version number to Addon online check
authorIngo Ruhnke <grumbel@gmail.com>
Sat, 23 Aug 2014 18:37:11 +0000 (20:37 +0200)
committerIngo Ruhnke <grumbel@gmail.com>
Mon, 25 Aug 2014 07:52:11 +0000 (09:52 +0200)
src/addon/addon.hpp
src/supertux/menu/addon_menu.cpp

index e7a3c9f..81cf349 100644 (file)
@@ -54,6 +54,7 @@ private:
 
 public:
   std::string get_id() const { return m_id; }
+  int get_version() const { return m_version; }
 
   Type get_type() const { return m_type; }
   std::string get_title() const { return m_title; }
index 615305d..d2e6c5b 100644 (file)
@@ -138,9 +138,29 @@ AddonMenu::rebuild_menu()
     for (const auto& addon_id : m_repository_addons)
     {
       const Addon& addon = m_addon_manager.get_repository_addon(addon_id);
-      std::string text = generate_menu_item_text(addon);
-      add_entry(MAKE_REPOSITORY_MENU_ID(idx), "Install " + text);
-      idx += 1;
+      try
+      {
+        // addon is already installed, so check if they are the same
+        Addon& installed_addon = m_addon_manager.get_installed_addon(addon_id);
+        if (installed_addon.get_md5() == addon.get_md5() ||
+            installed_addon.get_version() > addon.get_version())
+        {
+          // addon alredy present, ignore it
+        }
+        else
+        {
+          std::string text = generate_menu_item_text(addon);
+          add_entry(MAKE_REPOSITORY_MENU_ID(idx), "Install " + text + "*NEW*");
+          idx += 1;
+        }
+      }
+      catch(const std::exception& err)
+      {
+        // addon is not installed
+        std::string text = generate_menu_item_text(addon);
+        add_entry(MAKE_REPOSITORY_MENU_ID(idx), "Install " + text);
+        idx += 1;
+      }
     }
   }