diff options
author | Petr Mrázek <peterix@gmail.com> | 2018-11-15 00:36:47 +0100 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2018-11-15 00:36:47 +0100 |
commit | a8e77f0ecc2f6e15896b1d6171fd66c73478d5e8 (patch) | |
tree | 9ef4104434793e8847277c0bcbc6d49af9185545 /api/logic | |
parent | 5603133822880d7c00507e2eed26f0b2f5d1a164 (diff) | |
download | MultiMC-a8e77f0ecc2f6e15896b1d6171fd66c73478d5e8.tar MultiMC-a8e77f0ecc2f6e15896b1d6171fd66c73478d5e8.tar.gz MultiMC-a8e77f0ecc2f6e15896b1d6171fd66c73478d5e8.tar.lz MultiMC-a8e77f0ecc2f6e15896b1d6171fd66c73478d5e8.tar.xz MultiMC-a8e77f0ecc2f6e15896b1d6171fd66c73478d5e8.zip |
NOISSUE remove some nonsense and dead code
Diffstat (limited to 'api/logic')
-rw-r--r-- | api/logic/CMakeLists.txt | 4 | ||||
-rw-r--r-- | api/logic/minecraft/MinecraftInstance.cpp | 11 | ||||
-rw-r--r-- | api/logic/minecraft/ModsModel.cpp | 374 | ||||
-rw-r--r-- | api/logic/minecraft/ModsModel.h | 123 | ||||
-rw-r--r-- | api/logic/minecraft/SimpleModList.cpp | 41 |
5 files changed, 8 insertions, 545 deletions
diff --git a/api/logic/CMakeLists.txt b/api/logic/CMakeLists.txt index 5d20b7a9..b8e45b30 100644 --- a/api/logic/CMakeLists.txt +++ b/api/logic/CMakeLists.txt @@ -275,8 +275,6 @@ set(MINECRAFT_SOURCES minecraft/VersionFilterData.cpp minecraft/Mod.h minecraft/Mod.cpp - minecraft/ModsModel.h - minecraft/ModsModel.cpp minecraft/SimpleModList.h minecraft/SimpleModList.cpp minecraft/World.h @@ -471,6 +469,8 @@ set(LOGIC_SOURCES ${FLAME_SOURCES} ) +message(STATUS "FOO! ${LOGIC_SOURCES}") + add_library(MultiMC_logic SHARED ${LOGIC_SOURCES}) set_target_properties(MultiMC_logic PROPERTIES CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN 1) diff --git a/api/logic/minecraft/MinecraftInstance.cpp b/api/logic/minecraft/MinecraftInstance.cpp index 77647960..f649a744 100644 --- a/api/logic/minecraft/MinecraftInstance.cpp +++ b/api/logic/minecraft/MinecraftInstance.cpp @@ -26,7 +26,6 @@ #include "meta/VersionList.h" #include "SimpleModList.h" -#include "ModsModel.h" #include "WorldList.h" #include "icons/IIconList.h" @@ -896,16 +895,6 @@ std::shared_ptr<SimpleModList> MinecraftInstance::loaderModList() const return m_loader_mod_list; } -std::shared_ptr<ModsModel> MinecraftInstance::modsModel() const -{ - if (!m_mods_model) - { - m_mods_model.reset(new ModsModel(loaderModsDir(), coreModsDir(), modsCacheLocation())); - } - m_mods_model->update(); - return m_mods_model; -} - std::shared_ptr<SimpleModList> MinecraftInstance::coreModList() const { if (!m_core_mod_list) diff --git a/api/logic/minecraft/ModsModel.cpp b/api/logic/minecraft/ModsModel.cpp deleted file mode 100644 index e401618a..00000000 --- a/api/logic/minecraft/ModsModel.cpp +++ /dev/null @@ -1,374 +0,0 @@ -/* Copyright 2013-2018 MultiMC Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "ModsModel.h" -#include <FileSystem.h> -#include <QMimeData> -#include <QUrl> -#include <QUuid> -#include <QString> -#include <QFileSystemWatcher> -#include <QDebug> - -ModsModel::ModsModel(const QString &mainDir, const QString &coreDir, const QString &cacheLocation) - :QAbstractListModel(), m_mainDir(mainDir), m_coreDir(coreDir) -{ - FS::ensureFolderPathExists(m_mainDir.absolutePath()); - m_mainDir.setFilter(QDir::Readable | QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs | - QDir::NoSymLinks); - m_mainDir.setSorting(QDir::Name | QDir::IgnoreCase | QDir::LocaleAware); - m_watcher = new QFileSystemWatcher(this); - connect(m_watcher, SIGNAL(directoryChanged(QString)), this, SLOT(directoryChanged(QString))); -} - -void ModsModel::startWatching() -{ - if(is_watching) - return; - - update(); - - is_watching = m_watcher->addPath(m_mainDir.absolutePath()); - if (is_watching) - { - qDebug() << "Started watching " << m_mainDir.absolutePath(); - } - else - { - qDebug() << "Failed to start watching " << m_mainDir.absolutePath(); - } -} - -void ModsModel::stopWatching() -{ - if(!is_watching) - return; - - is_watching = !m_watcher->removePath(m_mainDir.absolutePath()); - if (!is_watching) - { - qDebug() << "Stopped watching " << m_mainDir.absolutePath(); - } - else - { - qDebug() << "Failed to stop watching " << m_mainDir.absolutePath(); - } -} - -bool ModsModel::update() -{ - if (!isValid()) - return false; - - QList<Mod> orderedMods; - QList<Mod> newMods; - m_mainDir.refresh(); - auto folderContents = m_mainDir.entryInfoList(); - bool orderOrStateChanged = false; - - // if there are any untracked files... - if (folderContents.size()) - { - // the order surely changed! - for (auto entry : folderContents) - { - newMods.append(Mod(entry)); - } - orderedMods.append(newMods); - orderOrStateChanged = true; - } - // otherwise, if we were already tracking some mods - else if (mods.size()) - { - // if the number doesn't match, order changed. - if (mods.size() != orderedMods.size()) - orderOrStateChanged = true; - // if it does match, compare the mods themselves - else - for (int i = 0; i < mods.size(); i++) - { - if (!mods[i].strongCompare(orderedMods[i])) - { - orderOrStateChanged = true; - break; - } - } - } - beginResetModel(); - mods.swap(orderedMods); - endResetModel(); - if (orderOrStateChanged) - { - emit changed(); - } - return true; -} - -void ModsModel::directoryChanged(QString path) -{ - update(); -} - -bool ModsModel::isValid() -{ - return m_mainDir.exists() && m_mainDir.isReadable(); -} - -bool ModsModel::installMod(const QString &filename) -{ - // NOTE: fix for GH-1178: remove trailing slash to avoid issues with using the empty result of QFileInfo::fileName - QFileInfo fileinfo(FS::NormalizePath(filename)); - - qDebug() << "installing: " << fileinfo.absoluteFilePath(); - - if (!fileinfo.exists() || !fileinfo.isReadable()) - { - return false; - } - Mod m(fileinfo); - if (!m.valid()) - return false; - - auto type = m.type(); - if (type == Mod::MOD_UNKNOWN) - return false; - if (type == Mod::MOD_SINGLEFILE || type == Mod::MOD_ZIPFILE || type == Mod::MOD_LITEMOD) - { - QString newpath = FS::PathCombine(m_mainDir.path(), fileinfo.fileName()); - if (!QFile::copy(fileinfo.filePath(), newpath)) - return false; - FS::updateTimestamp(newpath); - m.repath(newpath); - update(); - return true; - } - else if (type == Mod::MOD_FOLDER) - { - QString from = fileinfo.filePath(); - QString to = FS::PathCombine(m_mainDir.path(), fileinfo.fileName()); - if (!FS::copy(from, to)()) - return false; - m.repath(to); - update(); - return true; - } - return false; -} - -bool ModsModel::enableMods(const QModelIndexList& indexes, bool enable) -{ - if(indexes.isEmpty()) - return true; - - for (auto i: indexes) - { - Mod &m = mods[i.row()]; - m.enable(enable); - emit dataChanged(i, i); - } - emit changed(); - return true; -} - -bool ModsModel::deleteMods(const QModelIndexList& indexes) -{ - if(indexes.isEmpty()) - return true; - - for (auto i: indexes) - { - Mod &m = mods[i.row()]; - m.destroy(); - } - emit changed(); - return true; -} - -int ModsModel::columnCount(const QModelIndex &parent) const -{ - return NUM_COLUMNS; -} - -QVariant ModsModel::data(const QModelIndex &index, int role) const -{ - if (!index.isValid()) - return QVariant(); - - int row = index.row(); - int column = index.column(); - - if (row < 0 || row >= mods.size()) - return QVariant(); - - switch (role) - { - case Qt::DisplayRole: - switch (column) - { - case NameColumn: - return mods[row].name(); - case VersionColumn: - return mods[row].version(); - case DateColumn: - return mods[row].dateTimeChanged(); - case LocationColumn: - return "Unknown"; - - default: - return QVariant(); - } - - case Qt::ToolTipRole: - return mods[row].mmc_id(); - - case Qt::CheckStateRole: - switch (column) - { - case ActiveColumn: - return mods[row].enabled() ? Qt::Checked : Qt::Unchecked; - default: - return QVariant(); - } - default: - return QVariant(); - } -} - -bool ModsModel::setData(const QModelIndex &index, const QVariant &value, int role) -{ - if (index.row() < 0 || index.row() >= rowCount(index) || !index.isValid()) - { - return false; - } - - if (role == Qt::CheckStateRole) - { - auto &mod = mods[index.row()]; - if (mod.enable(!mod.enabled())) - { - emit dataChanged(index, index); - return true; - } - } - return false; -} - -QVariant ModsModel::headerData(int section, Qt::Orientation orientation, int role) const -{ - switch (role) - { - case Qt::DisplayRole: - switch (section) - { - case ActiveColumn: - return QString(); - case NameColumn: - return tr("Name"); - case VersionColumn: - return tr("Version"); - case DateColumn: - return tr("Last changed"); - case LocationColumn: - return tr("Location"); - default: - return QVariant(); - } - - case Qt::ToolTipRole: - switch (section) - { - case ActiveColumn: - return tr("Is the mod enabled?"); - case NameColumn: - return tr("The name of the mod."); - case VersionColumn: - return tr("The version of the mod."); - case DateColumn: - return tr("The date and time this mod was last changed (or added)."); - case LocationColumn: - return tr("Where the mod is located (inside or outside the instance)."); - default: - return QVariant(); - } - default: - return QVariant(); - } - return QVariant(); -} - -Qt::ItemFlags ModsModel::flags(const QModelIndex &index) const -{ - Qt::ItemFlags defaultFlags = QAbstractListModel::flags(index); - if (index.isValid()) - return Qt::ItemIsUserCheckable | Qt::ItemIsDropEnabled | - defaultFlags; - else - return Qt::ItemIsDropEnabled | defaultFlags; -} - -Qt::DropActions ModsModel::supportedDropActions() const -{ - // copy from outside, move from within and other mod lists - return Qt::CopyAction | Qt::MoveAction; -} - -QStringList ModsModel::mimeTypes() const -{ - QStringList types; - types << "text/uri-list"; - return types; -} - -bool ModsModel::dropMimeData(const QMimeData* data, Qt::DropAction action, int, int, const QModelIndex&) -{ - if (action == Qt::IgnoreAction) - { - return true; - } - - // check if the action is supported - if (!data || !(action & supportedDropActions())) - { - return false; - } - - // files dropped from outside? - if (data->hasUrls()) - { - bool was_watching = is_watching; - if (was_watching) - { - stopWatching(); - } - auto urls = data->urls(); - for (auto url : urls) - { - // only local files may be dropped... - if (!url.isLocalFile()) - { - continue; - } - // TODO: implement not only copy, but also move - // FIXME: handle errors here - installMod(url.toLocalFile()); - } - if (was_watching) - { - startWatching(); - } - return true; - } - return false; -} diff --git a/api/logic/minecraft/ModsModel.h b/api/logic/minecraft/ModsModel.h deleted file mode 100644 index b8980ac4..00000000 --- a/api/logic/minecraft/ModsModel.h +++ /dev/null @@ -1,123 +0,0 @@ -/* Copyright 2013-2018 MultiMC Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include <QList> -#include <QString> -#include <QDir> -#include <QAbstractListModel> - -#include "minecraft/Mod.h" - -#include "multimc_logic_export.h" - -class LegacyInstance; -class BaseInstance; -class QFileSystemWatcher; - -/** - * A legacy mod list. - * Backed by a folder. - */ -class MULTIMC_LOGIC_EXPORT ModsModel : public QAbstractListModel -{ - Q_OBJECT -public: - enum Columns - { - ActiveColumn = 0, - NameColumn, - DateColumn, - VersionColumn, - LocationColumn, - NUM_COLUMNS - }; - ModsModel(const QString &mainDir, const QString &coreDir, const QString &cacheFile); - - virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; - virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; - Qt::DropActions supportedDropActions() const override; - - /// flags, mostly to support drag&drop - virtual Qt::ItemFlags flags(const QModelIndex &index) const override; - QStringList mimeTypes() const override; - bool dropMimeData(const QMimeData * data, Qt::DropAction action, int row, int column, const QModelIndex & parent) override; - - virtual int rowCount(const QModelIndex &) const override - { - return size(); - } - ; - virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; - virtual int columnCount(const QModelIndex &parent) const override; - - size_t size() const - { - return mods.size(); - } - ; - bool empty() const - { - return size() == 0; - } - Mod &operator[](size_t index) - { - return mods[index]; - } - - /// Reloads the mod list and returns true if the list changed. - virtual bool update(); - - /** - * Adds the given mod to the list at the given index - if the list supports custom ordering - */ - bool installMod(const QString& filename); - - /// Deletes all the selected mods - virtual bool deleteMods(const QModelIndexList &indexes); - - /// Enable or disable listed mods - virtual bool enableMods(const QModelIndexList &indexes, bool enable = true); - - void startWatching(); - void stopWatching(); - - virtual bool isValid(); - - QDir dir() - { - return m_mainDir; - } - - const QList<Mod> & allMods() - { - return mods; - } - -private -slots: - void directoryChanged(QString path); - -signals: - void changed(); - -protected: - QFileSystemWatcher *m_watcher; - bool is_watching = false; - QDir m_mainDir; - QDir m_coreDir; - QList<Mod> mods; -}; diff --git a/api/logic/minecraft/SimpleModList.cpp b/api/logic/minecraft/SimpleModList.cpp index adab5ba4..147be72a 100644 --- a/api/logic/minecraft/SimpleModList.cpp +++ b/api/logic/minecraft/SimpleModList.cpp @@ -71,47 +71,18 @@ bool SimpleModList::update() if (!isValid()) return false; - QList<Mod> orderedMods; QList<Mod> newMods; m_dir.refresh(); - auto folderContents = m_dir.entryInfoList(); - bool orderOrStateChanged = false; - - // if there are any untracked files... - if (folderContents.size()) + for (auto entry : m_dir.entryInfoList()) { - // the order surely changed! - for (auto entry : folderContents) - { - newMods.append(Mod(entry)); - } - orderedMods.append(newMods); - orderOrStateChanged = true; - } - // otherwise, if we were already tracking some mods - else if (mods.size()) - { - // if the number doesn't match, order changed. - if (mods.size() != orderedMods.size()) - orderOrStateChanged = true; - // if it does match, compare the mods themselves - else - for (int i = 0; i < mods.size(); i++) - { - if (!mods[i].strongCompare(orderedMods[i])) - { - orderOrStateChanged = true; - break; - } - } + newMods.append(Mod(entry)); } + beginResetModel(); - mods.swap(orderedMods); + mods.swap(newMods); endResetModel(); - if (orderOrStateChanged) - { - emit changed(); - } + + emit changed(); return true; } |