#ifndef HEADER_SUPERTUX_ADDON_ADDON_MANAGER_HPP
#define HEADER_SUPERTUX_ADDON_ADDON_MANAGER_HPP
+#include <functional>
#include <memory>
#include <string>
#include <vector>
#include "addon/downloader.hpp"
+#include "supertux/gameconfig.hpp"
#include "util/currenton.hpp"
#include "util/reader_fwd.hpp"
#include "util/writer_fwd.hpp"
class Addon;
class AddonRepository;
+class TransferStatus;
+using TransferStatusPtr = std::shared_ptr<TransferStatus>;
typedef std::string AddonId;
class AddonManager : public Currenton<AddonManager>
{
private:
- typedef std::vector<std::unique_ptr<Addon> > AddonList;
+ using AddonList = std::vector<std::unique_ptr<Addon> >;
Downloader m_downloader;
std::string m_addon_directory;
std::string m_repository_url;
- std::vector<std::string>& m_ignored_addon_ids;
+ std::vector<Config::Addon>& m_addon_config;
AddonList m_installed_addons;
AddonList m_repository_addons;
+ bool m_has_been_updated;
+
+ TransferStatusPtr m_transfer_status;
+
public:
AddonManager(const std::string& addon_directory,
- std::vector<std::string>& enabled_addons_);
+ std::vector<Config::Addon>& addon_config);
~AddonManager();
bool has_online_support() const;
+ bool has_been_updated() const;
void check_online();
+ TransferStatusPtr request_check_online();
std::vector<AddonId> get_repository_addons() const;
std::vector<AddonId> get_installed_addons() const;
Addon& get_repository_addon(const AddonId& addon);
Addon& get_installed_addon(const AddonId& addon);
+ TransferStatusPtr request_install_addon(const AddonId& addon_id);
void install_addon(const AddonId& addon_id);
void uninstall_addon(const AddonId& addon_id);
void enable_addon(const AddonId& addon_id);
void disable_addon(const AddonId& addon_id);
+ void update();
+
private:
std::vector<std::string> scan_for_archives() const;
void add_installed_addons();
- AddonList parse_addon_infos(const std::string& addoninfos) const;
+ AddonList parse_addon_infos(const std::string& filename) const;
/** add \a archive, given as physfs path, to the list of installed
archives */