/** * Get information about an (optionally installed) add-on compared against the add-ons server. * * @param addon The add-ons server entry information. * @param t The local tracking status information. */ void get_addon_tracking_info(addon_info& addon, addon_tracking_info& t) { const std::string& id = addon.id; t.can_publish = have_addon_pbl_info(id); t.in_version_control = have_addon_in_vcs_tree(id); t.installed_version = version_info(); if(is_addon_installed(id)) { try { t.installed_version = get_addon_version_info(id); const version_info& remote_version = addon.version; if(remote_version == t.installed_version) { t.state = ADDON_INSTALLED; } else if(remote_version > t.installed_version) { t.state = ADDON_INSTALLED_UPGRADABLE; } else /* if(remote_version < t.installed_version) */ { t.state = ADDON_INSTALLED_OUTDATED; } } catch(version_info::not_sane_exception const&) { ERR_AC << "local add-on '" << name << "' has invalid or missing version info, skipping from updates check...\n"; t.state = ADDON_NOT_TRACKED; } } else { t.state = ADDON_NONE; } }