Closes: #39 Mostly done with rebranding now. We just need to translate some services to PolyMC.
		
			
				
	
	
		
			219 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			219 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| #include <QString>
 | |
| #include <net/NetAction.h>
 | |
| #include <QPair>
 | |
| #include <QList>
 | |
| #include <QStringList>
 | |
| #include <QMap>
 | |
| #include <QDir>
 | |
| #include <QUrl>
 | |
| #include <memory>
 | |
| 
 | |
| #include "Rule.h"
 | |
| #include "minecraft/OpSys.h"
 | |
| #include "GradleSpecifier.h"
 | |
| #include "MojangDownloadInfo.h"
 | |
| 
 | |
| class Library;
 | |
| class MinecraftInstance;
 | |
| 
 | |
| typedef std::shared_ptr<Library> LibraryPtr;
 | |
| 
 | |
| class Library
 | |
| {
 | |
|     friend class OneSixVersionFormat;
 | |
|     friend class MojangVersionFormat;
 | |
|     friend class LibraryTest;
 | |
| public:
 | |
|     Library()
 | |
|     {
 | |
|     }
 | |
|     Library(const QString &name)
 | |
|     {
 | |
|         m_name = name;
 | |
|     }
 | |
|     /// limited copy without some data. TODO: why?
 | |
|     static LibraryPtr limitedCopy(LibraryPtr base)
 | |
|     {
 | |
|         auto newlib = std::make_shared<Library>();
 | |
|         newlib->m_name = base->m_name;
 | |
|         newlib->m_repositoryURL = base->m_repositoryURL;
 | |
|         newlib->m_hint = base->m_hint;
 | |
|         newlib->m_absoluteURL = base->m_absoluteURL;
 | |
|         newlib->m_extractExcludes = base->m_extractExcludes;
 | |
|         newlib->m_nativeClassifiers = base->m_nativeClassifiers;
 | |
|         newlib->m_rules = base->m_rules;
 | |
|         newlib->m_storagePrefix = base->m_storagePrefix;
 | |
|         newlib->m_mojangDownloads = base->m_mojangDownloads;
 | |
|         newlib->m_filename = base->m_filename;
 | |
|         return newlib;
 | |
|     }
 | |
| 
 | |
| public: /* methods */
 | |
|     /// Returns the raw name field
 | |
|     const GradleSpecifier & rawName() const
 | |
|     {
 | |
|         return m_name;
 | |
|     }
 | |
| 
 | |
|     void setRawName(const GradleSpecifier & spec)
 | |
|     {
 | |
|         m_name = spec;
 | |
|     }
 | |
| 
 | |
|     void setClassifier(const QString & spec)
 | |
|     {
 | |
|         m_name.setClassifier(spec);
 | |
|     }
 | |
| 
 | |
|     /// returns the full group and artifact prefix
 | |
|     QString artifactPrefix() const
 | |
|     {
 | |
|         return m_name.artifactPrefix();
 | |
|     }
 | |
| 
 | |
|     /// get the artifact ID
 | |
|     QString artifactId() const
 | |
|     {
 | |
|         return m_name.artifactId();
 | |
|     }
 | |
| 
 | |
|     /// get the artifact version
 | |
|     QString version() const
 | |
|     {
 | |
|         return m_name.version();
 | |
|     }
 | |
| 
 | |
|     /// Returns true if the library is native
 | |
|     bool isNative() const
 | |
|     {
 | |
|         return m_nativeClassifiers.size() != 0;
 | |
|     }
 | |
| 
 | |
|     void setStoragePrefix(QString prefix = QString());
 | |
| 
 | |
|     /// Set the url base for downloads
 | |
|     void setRepositoryURL(const QString &base_url)
 | |
|     {
 | |
|         m_repositoryURL = base_url;
 | |
|     }
 | |
| 
 | |
|     void getApplicableFiles(OpSys system, QStringList & jar, QStringList & native,
 | |
|                             QStringList & native32, QStringList & native64, const QString & overridePath) const;
 | |
| 
 | |
|     void setAbsoluteUrl(const QString &absolute_url)
 | |
|     {
 | |
|         m_absoluteURL = absolute_url;
 | |
|     }
 | |
| 
 | |
|     void setFilename(const QString &filename)
 | |
|     {
 | |
|         m_filename = filename;
 | |
|     }
 | |
| 
 | |
|     /// Get the file name of the library
 | |
|     QString filename(OpSys system) const;
 | |
| 
 | |
|     // DEPRECATED: set a display name, used by jar mods only
 | |
|     void setDisplayName(const QString & displayName)
 | |
|     {
 | |
|         m_displayname = displayName;
 | |
|     }
 | |
| 
 | |
|     /// Get the file name of the library
 | |
|     QString displayName(OpSys system) const;
 | |
| 
 | |
|     void setMojangDownloadInfo(MojangLibraryDownloadInfo::Ptr info)
 | |
|     {
 | |
|         m_mojangDownloads = info;
 | |
|     }
 | |
| 
 | |
|     void setHint(const QString &hint)
 | |
|     {
 | |
|         m_hint = hint;
 | |
|     }
 | |
| 
 | |
|     /// Set the load rules
 | |
|     void setRules(QList<std::shared_ptr<Rule>> rules)
 | |
|     {
 | |
|         m_rules = rules;
 | |
|     }
 | |
| 
 | |
|     /// Returns true if the library should be loaded (or extracted, in case of natives)
 | |
|     bool isActive() const;
 | |
| 
 | |
|     /// Returns true if the library is contained in an instance and false if it is shared
 | |
|     bool isLocal() const;
 | |
| 
 | |
|     /// Returns true if the library is to always be checked for updates
 | |
|     bool isAlwaysStale() const;
 | |
| 
 | |
|     /// Return true if the library requires forge XZ hacks
 | |
|     bool isForge() const;
 | |
| 
 | |
|     // Get a list of downloads for this library
 | |
|     QList<NetAction::Ptr> getDownloads(OpSys system, class HttpMetaCache * cache,
 | |
|                                      QStringList & failedLocalFiles, const QString & overridePath) const;
 | |
| 
 | |
| private: /* methods */
 | |
|     /// the default storage prefix used by PolyMC
 | |
|     static QString defaultStoragePrefix();
 | |
| 
 | |
|     /// Get the prefix - root of the storage to be used
 | |
|     QString storagePrefix() const;
 | |
| 
 | |
|     /// Get the relative file path where the library should be saved
 | |
|     QString storageSuffix(OpSys system) const;
 | |
| 
 | |
|     QString hint() const
 | |
|     {
 | |
|         return m_hint;
 | |
|     }
 | |
| 
 | |
| protected: /* data */
 | |
|     /// the basic gradle dependency specifier.
 | |
|     GradleSpecifier m_name;
 | |
| 
 | |
|     /// DEPRECATED URL prefix of the maven repo where the file can be downloaded
 | |
|     QString m_repositoryURL;
 | |
| 
 | |
|     /// DEPRECATED: PolyMC-specific absolute URL. takes precedence over the implicit maven repo URL, if defined
 | |
|     QString m_absoluteURL;
 | |
| 
 | |
|     /// PolyMC extension - filename override
 | |
|     QString m_filename;
 | |
| 
 | |
|     /// DEPRECATED PolyMC extension - display name
 | |
|     QString m_displayname;
 | |
| 
 | |
|     /**
 | |
|      * PolyMC-specific type hint - modifies how the library is treated
 | |
|      */
 | |
|     QString m_hint;
 | |
| 
 | |
|     /**
 | |
|      * storage - by default the local libraries folder in polymc, but could be elsewhere
 | |
|      * PolyMC specific, because of FTB.
 | |
|      */
 | |
|     QString m_storagePrefix;
 | |
| 
 | |
|     /// true if the library had an extract/excludes section (even empty)
 | |
|     bool m_hasExcludes = false;
 | |
| 
 | |
|     /// a list of files that shouldn't be extracted from the library
 | |
|     QStringList m_extractExcludes;
 | |
| 
 | |
|     /// native suffixes per OS
 | |
|     QMap<OpSys, QString> m_nativeClassifiers;
 | |
| 
 | |
|     /// true if the library had a rules section (even empty)
 | |
|     bool applyRules = false;
 | |
| 
 | |
|     /// rules associated with the library
 | |
|     QList<std::shared_ptr<Rule>> m_rules;
 | |
| 
 | |
|     /// MOJANG: container with Mojang style download info
 | |
|     MojangLibraryDownloadInfo::Ptr m_mojangDownloads;
 | |
| };
 | |
| 
 |