2 // Copyright (C) 2007 Christoph Sommer <christoph.sommer@2007.expires.deltadevelopment.de>
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License
15 // along with this program. If not, see <http://www.gnu.org/licenses/>.
17 #ifndef HEADER_SUPERTUX_ADDON_ADDON_HPP
18 #define HEADER_SUPERTUX_ADDON_ADDON_HPP
22 #include "util/reader_fwd.hpp"
23 #include "util/writer_fwd.hpp"
26 * Represents an (available or installed) Add-on, e.g. a level set
36 std::string suggested_filename; /**< filename suggested by addon author, e.g. "pak0.zip" */
37 std::string installed_physfs_filename; /**< PhysFS filename on disk, e.g. "pak0.zip" */
38 std::string installed_absolute_filename; /**< complete path and filename on disk, e.g. "/home/sommer/.supertux2/pak0.zip" */
39 std::string stored_md5;
44 * Get MD5, based either on installed file's contents or stored value
46 std::string get_md5() const;
49 * Read additional information from given contents of a (supertux-addoninfo ...) block
51 void parse(const Reader& lisp);
54 * Read additional information from given file
56 void parse(std::string fname);
59 * Writes out Add-on metainformation to a Lisp Writer
61 void write(lisp::Writer& writer) const;
64 * Writes out Add-on metainformation to a file
66 void write(std::string fname) const;
69 * Checks if Add-on is the same as given one.
70 * If available, checks MD5 sum, else relies on kind, author and title alone.
72 bool operator==(Addon addon2) const;
75 friend class AddonManager;
77 mutable std::string calculated_md5;
86 installed_physfs_filename(),
87 installed_absolute_filename(),