X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Faddon%2Faddon.hpp;h=37da2982504aaeac6b47b6e4f84264bd82bb17fb;hb=d27bb6ddfcb9911da9058430497b72a0386b1225;hp=033b14f7b87efbe08f4e079eeedc34a4e06f3c36;hpb=08813a74da6ac1fd045a105e4e8105f1d7f716f0;p=supertux.git diff --git a/src/addon/addon.hpp b/src/addon/addon.hpp index 033b14f7b..37da29825 100644 --- a/src/addon/addon.hpp +++ b/src/addon/addon.hpp @@ -1,5 +1,6 @@ // SuperTux - Add-on // Copyright (C) 2007 Christoph Sommer +// 2014 Ingo Ruhnke // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -17,79 +18,64 @@ #ifndef HEADER_SUPERTUX_ADDON_ADDON_HPP #define HEADER_SUPERTUX_ADDON_ADDON_HPP +#include +#include #include #include "util/reader_fwd.hpp" -#include "util/writer_fwd.hpp" -/** - * Represents an (available or installed) Add-on, e.g. a level set - */ class Addon { public: - std::string kind; - std::string title; - std::string author; - std::string license; - std::string http_url; - std::string suggested_filename; /**< filename suggested by addon author, e.g. "pak0.zip" */ - std::string installed_physfs_filename; /**< PhysFS filename on disk, e.g. "pak0.zip" */ - std::string installed_absolute_filename; /**< complete path and filename on disk, e.g. "/home/sommer/.supertux2/pak0.zip" */ - std::string stored_md5; - bool installed; - bool loaded; - - /** - * Get MD5, based either on installed file's contents or stored value - */ - std::string get_md5() const; - - /** - * Read additional information from given contents of a (supertux-addoninfo ...) block - */ - void parse(const Reader& lisp); - - /** - * Read additional information from given file - */ - void parse(std::string fname); - - /** - * Writes out Add-on metainformation to a Lisp Writer - */ - void write(lisp::Writer& writer) const; - - /** - * Writes out Add-on metainformation to a file - */ - void write(std::string fname) const; - - /** - * Checks if Add-on is the same as given one. - * If available, checks MD5 sum, else relies on kind, author and title alone. - */ - bool operator==(Addon addon2) const; - -protected: - friend class AddonManager; - - mutable std::string calculated_md5; - - Addon() : - kind(), - title(), - author(), - license(), - http_url(), - suggested_filename(), - installed_physfs_filename(), - installed_absolute_filename(), - stored_md5(), - installed(), - loaded(), - calculated_md5() - {}; + static std::unique_ptr parse(const Reader& lisp); + static std::unique_ptr parse(const std::string& fname); + + enum Type { WORLD, WORLDMAP, LEVELSET }; + +private: + // fields provided by the addon.zip itself + std::string m_id; + int m_version; + Type m_type; + std::string m_title; + std::string m_author; + std::string m_license; + + // additional fields provided for addons from an addon repository + std::string m_url; + std::string m_md5; + + // fields filled by the AddonManager + std::string m_install_filename; + bool m_enabled; + +private: + Addon(); + +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; } + std::string get_author() const { return m_author; } + std::string get_license() const { return m_license; } + + std::string get_url() const { return m_url; } + std::string get_md5() const { return m_md5; } + + std::string get_filename() const; + std::string get_install_filename() const; + + bool is_installed() const; + bool is_enabled() const; + + void set_install_filename(const std::string& absolute_filename, const std::string& md5); + void set_enabled(bool v); + +private: + Addon(const Addon&) = delete; + Addon& operator=(const Addon&) = delete; }; #endif