X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Faddon.cpp;h=1b6dbdc2cfd912bad9b412477007e58a8461b60b;hb=45635d47cba9d7d4359a717b810c5d4e6b4a2848;hp=9f023572343cf22bfe4150e282377394b4c7ffbb;hpb=7ee27c4c9687de567f6cc9e811b6b962d6a62f39;p=supertux.git diff --git a/src/addon.cpp b/src/addon.cpp index 9f0235723..1b6dbdc2c 100644 --- a/src/addon.cpp +++ b/src/addon.cpp @@ -19,20 +19,84 @@ // 02111-1307, USA. // +#include +#include #include "addon.hpp" #include "addon_manager.hpp" void -Addon::install() +Addon::install() { AddonManager& adm = AddonManager::get_instance(); adm.install(*this); } void -Addon::remove() +Addon::remove() { AddonManager& adm = AddonManager::get_instance(); adm.remove(*this); } + +void +Addon::parse(const lisp::Lisp& lisp) +{ + try { + lisp.get("kind", kind); + lisp.get("title", title); + lisp.get("author", author); + lisp.get("license", license); + lisp.get("http-url", http_url); + lisp.get("file", file); + lisp.get("md5", md5); + } catch(std::exception& e) { + std::stringstream msg; + msg << "Problem when parsing addoninfo: " << e.what(); + throw std::runtime_error(msg.str()); + } +} + +void +Addon::parse(std::string fname) +{ + try { + lisp::Parser parser; + const lisp::Lisp* root = parser.parse(fname); + const lisp::Lisp* addon = root->get_lisp("supertux-addoninfo"); + if(!addon) throw std::runtime_error("file is not a supertux-addoninfo file."); + parse(*addon); + } catch(std::exception& e) { + std::stringstream msg; + msg << "Problem when reading addoninfo '" << fname << "': " << e.what(); + throw std::runtime_error(msg.str()); + } +} + +void +Addon::write(lisp::Writer& writer) const +{ + writer.start_list("supertux-addoninfo"); + if (kind != "") writer.write_string("kind", kind); + if (title != "") writer.write_string("title", title); + if (author != "") writer.write_string("author", author); + if (license != "") writer.write_string("license", license); + if (http_url != "") writer.write_string("http-url", http_url); + if (file != "") writer.write_string("file", file); + if (md5 != "") writer.write_string("md5", md5); + writer.end_list("supertux-addoninfo"); +} + +void +Addon::write(std::string fname) const +{ + lisp::Writer writer(fname); + write(writer); +} + +bool +Addon::equals(const Addon& addon2) const +{ + if ((this->md5 == "") || (addon2.md5 == "")) return (this->title == addon2.title); + return (this->md5 == addon2.md5); +}