diff options
Diffstat (limited to 'api/logic/minecraft/ComponentList.h')
-rw-r--r-- | api/logic/minecraft/ComponentList.h | 93 |
1 files changed, 53 insertions, 40 deletions
diff --git a/api/logic/minecraft/ComponentList.h b/api/logic/minecraft/ComponentList.h index 0811a829..7971650d 100644 --- a/api/logic/minecraft/ComponentList.h +++ b/api/logic/minecraft/ComponentList.h @@ -23,19 +23,21 @@ #include "Library.h" #include "LaunchProfile.h" -#include "ProfilePatch.h" +#include "Component.h" #include "ProfileUtils.h" #include "BaseVersion.h" #include "MojangDownloadInfo.h" #include "multimc_logic_export.h" +#include "net/Mode.h" class MinecraftInstance; - +struct ComponentListData; +class ComponentUpdateTask; class MULTIMC_LOGIC_EXPORT ComponentList : public QAbstractListModel { Q_OBJECT - + friend ComponentUpdateTask; public: explicit ComponentList(MinecraftInstance * instance); virtual ~ComponentList(); @@ -46,6 +48,9 @@ public: virtual int columnCount(const QModelIndex &parent) const override; virtual Qt::ItemFlags flags(const QModelIndex &index) const override; + /// call this to explicitly mark the component list as loaded - this is used to build a new component list from scratch. + void buildingFromScratch(); + /// is this version unchanged by the user? bool isVanilla(); @@ -58,68 +63,76 @@ public: /// install a jar/zip as a replacement for the main jar void installCustomJar(QString selectedFile); - /// DEPRECATED, remove ASAP - int getFreeOrderNumber(); - enum MoveDirection { MoveUp, MoveDown }; - /// move patch file # up or down the list + /// move component file # up or down the list void move(const int index, const MoveDirection direction); - /// remove patch file # - including files/records + /// remove component file # - including files/records bool remove(const int index); - /// remove patch file by id - including files/records + /// remove component file by id - including files/records bool remove(const QString id); bool customize(int index); bool revertToBase(int index); - void resetOrder(); + /// reload the list, reload all components, resolve dependencies + void reload(Net::Mode netmode); - /// reload all profile patches from storage, clear the profile and apply the patches - void reload(); + // reload all components, resolve dependencies + void resolve(Net::Mode netmode); - /// apply the patches. Catches all the errors and returns true/false for success/failure - bool reapplyPatches(); + /// get current running task... + shared_qobject_ptr<Task> getCurrentTask(); std::shared_ptr<LaunchProfile> getProfile() const; - void clearProfile(); + + // NOTE: used ONLY by MinecraftInstance to provide legacy version mappings from instance config + void setOldConfigVersion(const QString &uid, const QString &version); + + QString getComponentVersion(const QString &uid) const; + + bool setComponentVersion(const QString &uid, const QString &version, bool important = false); + + QString patchFilePathForUid(const QString &uid) const; public: - /// get the profile patch by id - ProfilePatchPtr versionPatch(const QString &id); + /// get the profile component by id + ComponentPtr getComponent(const QString &id); + + /// get the profile component by index + ComponentPtr getComponent(int index); + +private: + void scheduleSave(); + bool saveIsScheduled() const; - /// get the profile patch by index - ProfilePatchPtr versionPatch(int index); + /// apply the component patches. Catches all the errors and returns true/false for success/failure + void invalidateLaunchProfile(); - /// save the current patch order - void saveCurrentOrder() const; + /// Add the component to the internal list of patches + void appendComponent(ComponentPtr component); + /// insert component so that its index is ideally the specified one (returns real index) + void insertComponent(size_t index, ComponentPtr component); - /// Remove all the patches - void clearPatches(); + QString componentsFilePath() const; + QString patchesPattern() const; - /// Add the patch object to the internal list of patches - void appendPatch(ProfilePatchPtr patch); +private slots: + void save(); + void updateSucceeded(); + void updateFailed(const QString & error); + void componentDataChanged(); private: - void load_internal(); - bool resetOrder_internal(); - bool saveOrder_internal(ProfileUtils::PatchOrder order) const; + bool load(); bool installJarMods_internal(QStringList filepaths); bool installCustomJar_internal(QString filepath); - bool removePatch_internal(ProfilePatchPtr patch); - bool customizePatch_internal(ProfilePatchPtr patch); - bool revertPatch_internal(ProfilePatchPtr patch); - void loadDefaultBuiltinPatches_internal(); - void loadUserPatches_internal(); - void upgradeDeprecatedFiles_internal(); + bool removeComponent_internal(ComponentPtr patch); -private: /* data */ - /// list of attached profile patches - QList<ProfilePatchPtr> m_patches; + bool migratePreComponentConfig(); - // the instance this belongs to - MinecraftInstance *m_instance; +private: /* data */ - std::shared_ptr<LaunchProfile> m_profile; + std::unique_ptr<ComponentListData> d; }; |