mirror of
https://github.com/UltimMC/Launcher.git
synced 2025-12-24 20:34:59 +00:00
Parsing the version files, part II
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
|
||||
class Library;
|
||||
|
||||
class FullVersion
|
||||
{
|
||||
@@ -40,7 +41,7 @@ public:
|
||||
QString mainClass;
|
||||
|
||||
// the list of libs. just the names for now. expand to full-blown strutures!
|
||||
QStringList libraries;
|
||||
QList<QSharedPointer<Library> > libraries;
|
||||
|
||||
// is this actually a legacy version? if so, none of the other stuff here will be ever used.
|
||||
// added by FullVersionFactory
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user