diff options
author | Petr Mrázek <peterix@gmail.com> | 2013-07-24 23:44:00 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2013-07-24 23:44:00 +0200 |
commit | 97cf08f964ceebf4cb98b46f473bf952007a8a21 (patch) | |
tree | 5fcc5c482c2803c7f8e91132cff2818272fcdfc4 /libmultimc/include/library.h | |
parent | 18853ca3fa185f5fe5288a1d0c8ed6cf8c678007 (diff) | |
download | MultiMC-97cf08f964ceebf4cb98b46f473bf952007a8a21.tar MultiMC-97cf08f964ceebf4cb98b46f473bf952007a8a21.tar.gz MultiMC-97cf08f964ceebf4cb98b46f473bf952007a8a21.tar.lz MultiMC-97cf08f964ceebf4cb98b46f473bf952007a8a21.tar.xz MultiMC-97cf08f964ceebf4cb98b46f473bf952007a8a21.zip |
Parsing the version files, part II
Diffstat (limited to 'libmultimc/include/library.h')
-rw-r--r-- | libmultimc/include/library.h | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/libmultimc/include/library.h b/libmultimc/include/library.h index 10ecb9f3..30270bc1 100644 --- a/libmultimc/include/library.h +++ b/libmultimc/include/library.h @@ -15,4 +15,121 @@ #pragma once +#include <QtCore> +class Library; + +enum RuleAction +{ + Allow, + Disallow, + Defer +}; + +RuleAction RuleAction_fromString(QString); + +class Rule +{ +protected: + RuleAction m_result; + virtual bool applies(Library * parent) = 0; +public: + Rule(RuleAction result) + :m_result(result) {} + virtual ~Rule(){}; + RuleAction apply(Library * parent) + { + if(applies(parent)) + return m_result; + else + return Defer; + }; +}; + +enum OpSys +{ + Os_Windows, + Os_Linux, + Os_OSX, + Os_Other +}; + +OpSys OpSys_fromString(QString); + +#ifdef Q_OS_MAC + #define currentSystem Os_OSX +#endif + +#ifdef Q_OS_LINUX + #define currentSystem Os_Linux +#endif + +#ifdef Q_OS_WIN32 + #define currentSystem Os_Windows +#endif + +#ifndef currentSystem + #define currentSystem Os_Other +#endif + + +class OsRule : public Rule +{ +private: + // the OS + OpSys m_system; + // the OS version regexp + QString m_version_regexp; +protected: + virtual bool applies ( Library* ) + { + return (m_system == currentSystem); + } +public: + OsRule(RuleAction result, OpSys system, QString version_regexp) + : Rule(result), m_system(system), m_version_regexp(version_regexp) {} +}; + +class ImplicitRule : public Rule +{ +protected: + virtual bool applies ( Library* ) + { + return true; + } +public: + ImplicitRule(RuleAction result) + : Rule(result) {} +}; + +class Library +{ +public: + QString base_url; + QString name; + QList<QSharedPointer<Rule> > rules; + QMap<OpSys, QString> natives; + QStringList extract_excludes; + + void AddRule(RuleAction result) + { + rules.append(QSharedPointer<Rule>(new ImplicitRule(result))); + } + void AddRule(RuleAction result, OpSys system, QString version_regexp) + { + rules.append(QSharedPointer<Rule>(new OsRule(result, system, version_regexp))); + } + bool applies() + { + if(rules.empty()) + return true; + RuleAction result = Disallow; + for(auto rule: rules) + { + RuleAction temp = rule->apply( this ); + if(temp != Defer) + result = temp; + } + return result == Allow; + } +}; |