summaryrefslogtreecommitdiffstats
path: root/backend/ModList.cpp
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2013-08-17 13:40:51 +0200
committerPetr Mrázek <peterix@gmail.com>2013-08-17 13:40:51 +0200
commit253067c782955380bbf66ac0475dc954375b1ff4 (patch)
treeca97e231fd3a764256d95b5fc8d08fc25ff72161 /backend/ModList.cpp
parent77e80665422c4e97e2286418ab55e20c4030023b (diff)
downloadMultiMC-253067c782955380bbf66ac0475dc954375b1ff4.tar
MultiMC-253067c782955380bbf66ac0475dc954375b1ff4.tar.gz
MultiMC-253067c782955380bbf66ac0475dc954375b1ff4.tar.lz
MultiMC-253067c782955380bbf66ac0475dc954375b1ff4.tar.xz
MultiMC-253067c782955380bbf66ac0475dc954375b1ff4.zip
Move all the things (YES. Move them.)
Also, implemented some basic modlist logic, to be wired up.
Diffstat (limited to 'backend/ModList.cpp')
-rw-r--r--backend/ModList.cpp418
1 files changed, 0 insertions, 418 deletions
diff --git a/backend/ModList.cpp b/backend/ModList.cpp
deleted file mode 100644
index 851eb940..00000000
--- a/backend/ModList.cpp
+++ /dev/null
@@ -1,418 +0,0 @@
-//
-// Copyright 2012 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 "ModList.h"
-#include "LegacyInstance.h"
-#include <pathutils.h>
-
-ModList::ModList ( const QString& dir ) : QObject(), m_dir(dir)
-{
- m_dir.setFilter(QDir::Readable | QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs | QDir::NoSymLinks);
- m_dir.setSorting(QDir::Name);
- update();
-}
-
-bool ModList::update()
-{
- if (!isValid())
- return false;
-
- bool initial = mods.empty();
-
- bool listChanged = false;
-
- auto list = m_dir.entryInfoList();
- for(auto entry: list)
- {
- Mod mod(entry);
- if (initial || !mods.contains(mod))
- {
- mods.push_back(mod);
- listChanged = true;
- }
- }
- return listChanged;
-}
-
-bool ModList::isValid()
-{
- return m_dir.exists() && m_dir.isReadable();
-}
-
-bool ModList::installMod ( const QFileInfo& filename, size_t index )
-{
- if(!filename.exists() || !filename.isReadable())
- {
- return false;
- }
- Mod m(filename);
- if(!m.valid())
- return false;
-
- // if it's already there, replace the original mod (in place)
- int idx = mods.indexOf(m);
- if(idx != -1)
- {
- if(mods[idx].replace(m))
- {
- emit changed();
- return true;
- }
- return false;
- }
-
- auto type = m.type();
- if(type == Mod::MOD_UNKNOWN)
- return false;
- if(type == Mod::MOD_SINGLEFILE || type == Mod::MOD_ZIPFILE)
- {
- QString newpath = PathCombine(m_dir.path(), filename.fileName());
- if(!QFile::copy(filename.filePath(), newpath))
- return false;
- m.repath(newpath);
- mods.append(m);
- emit changed();
- return true;
- }
- else if(type == Mod::MOD_FOLDER)
- {
- QString newpath = PathCombine(m_dir.path(), filename.fileName());
- if(!copyPath(filename.filePath(), newpath))
- return false;
- m.repath(newpath);
- mods.append(m);
- emit changed();
- return true;
- }
- return false;
-}
-
-bool ModList::deleteMod ( size_t index )
-{
- if(index >= mods.size())
- return false;
- Mod & m = mods[index];
- if(m.destroy())
- {
- mods.erase(mods.begin() + index);
- emit changed();
- return true;
- }
- return false;
-}
-
-
-/*
-ModList::ModList(const QString &dir)
- : modsFolder(dir)
-{
-
-}
-
-bool ModList::update(bool quickLoad)
-{
- bool listChanged = false;
-
- // Check for mods in the list whose files do not exist and remove them from the list.
- // If doing a quickLoad, erase the whole list.
- for (size_t i = 0; i < size(); i++)
- {
- if (quickLoad || !at(i).GetFileName().FileExists())
- {
- erase(begin() + i);
- i--;
- listChanged = true;
- }
- }
-
- // Add any mods in the mods folder that aren't already in the list.
- if (LoadModListFromDir(QString(), quickLoad))
- listChanged = true;
-
- return listChanged;
-}
-
-bool ModList::LoadModListFromDir(const QString& loadFrom, bool quickLoad)
-{
- QString dir(loadFrom.isEmpty() ? modsFolder : loadFrom);
-
- QDir modDir(dir);
- if (!modDir.exists())
- return false;
-
- bool listChanged = false;
-
- auto list = modDir.entryInfoList(QDir::Readable|QDir::NoDotAndDotDot, QDir::Name);
- for(auto currentFile: list)
- {
- if (currentFile.isFile())
- {
- if (quickLoad || FindByFilename(currentFile.absoluteFilePath()) == nullptr)
- {
- Mod mod(currentFile.absoluteFilePath());
- push_back(mod);
- listChanged = true;
- }
- }
- else if (currentFile.isDir())
- {
- if (LoadModListFromDir(currentFile.absoluteFilePath()))
- listChanged = true;
- }
- }
-
- return listChanged;
-}
-
-Mod *ModList::FindByFilename(const QString& filename)
-{
- // Search the list for a mod with the given filename.
- for (auto iter = begin(); iter != end(); ++iter)
- {
- if (iter->GetFileName() == QFileInfo(filename))
- return &(*iter);
- }
-
- // If nothing is found, return nullptr.
- return nullptr;
-}
-
-int ModList::FindIndexByFilename(const QString& filename)
-{
- // Search the list for a mod with the given filename.
- int i = 0;
- for (auto iter = begin(); iter != end(); ++iter, i++)
- {
- if (iter->GetFileName() == QFileInfo(filename))
- return i;
- }
-
- // If nothing is found, return nullptr.
- return -1;
-}
-
-Mod* ModList::FindByID(const QString& modID, const QString& modVersion)
-{
- // Search the list for a mod that matches
- for (auto iter = begin(); iter != end(); ++iter)
- {
- QString ID = iter->GetModID();
- QString version = iter->GetModVersion();
- if ( ID == modID && version == modVersion)
- return &(*iter);
- }
-
- // If nothing is found, return nullptr.
- return nullptr;
-}
-
-void ModList::LoadFromFile(const QString& file)
-{
- if (!wxFileExists(file))
- return;
-
- wxFFileInputStream inputStream(file);
- wxArrayString modListFile = ReadAllLines(inputStream);
-
- for (wxArrayString::iterator iter = modListFile.begin(); iter != modListFile.end(); iter++)
- {
- // Normalize the path to the instMods dir.
- wxFileName modFile(*iter);
- modFile.Normalize(wxPATH_NORM_ALL, modsFolder);
- modFile.MakeRelativeTo();
- // if the file is gone, do not load it
- if(!modFile.Exists())
- {
- continue;
- }
-
- if (FindByFilename(modFile.GetFullPath()) == nullptr)
- {
- push_back(Mod(modFile));
- }
- }
-}
-
-void ModList::SaveToFile(const QString& file)
-{
- QString text;
- for (iterator iter = begin(); iter != end(); ++iter)
- {
- wxFileName modFile = iter->GetFileName();
- modFile.MakeRelativeTo(modsFolder);
- text.append(modFile.GetFullPath());
- text.append("\n");
- }
-
- wxTempFileOutputStream out(file);
- WriteAllText(out, text);
- out.Commit();
-}
-
-bool ModList::InsertMod(size_t index, const QString &filename, const QString& saveToFile)
-{
- QFileInfo source(filename);
- QFileInfo dest(PathCombine(modsFolder, source.fileName()));
-
- if (source != dest)
- {
- QFile::copy(source.absoluteFilePath(), dest.absoluteFilePath());
- }
-
- int oldIndex = FindIndexByFilename(dest.absoluteFilePath());
-
- if (oldIndex != -1)
- {
- erase(begin() + oldIndex);
- }
-
- if (index >= size())
- push_back(Mod(dest));
- else
- insert(begin() + index, Mod(dest));
-
- if (!saveToFile.isEmpty())
- SaveToFile(saveToFile);
-
- return true;
-}
-
-bool ModList::DeleteMod(size_t index, const QString& saveToFile)
-{
- Mod *mod = &at(index);
- if(mod->GetModType() == Mod::MOD_FOLDER)
- {
- QDir dir(mod->GetFileName().absoluteFilePath());
- if(dir.removeRecursively())
- {
- erase(begin() + index);
-
- if (!saveToFile.isEmpty())
- SaveToFile(saveToFile);
-
- return true;
- }
- else
- {
- // wxLogError(_("Failed to delete mod."));
- }
- }
- else if (QFile(mod->GetFileName().absoluteFilePath()).remove())
- {
- erase(begin() + index);
-
- if (!saveToFile.isEmpty())
- SaveToFile(saveToFile);
-
- return true;
- }
- else
- {
- // wxLogError(_("Failed to delete mod."));
- }
- return false;
-}
-
-bool JarModList::InsertMod(size_t index, const QString &filename, const QString& saveToFile)
-{
- QString saveFile = saveToFile;
- if (saveToFile.isEmpty())
- saveFile = m_inst->GetModListFile().GetFullPath();
-
- if (ModList::InsertMod(index, filename, saveFile))
- {
- m_inst->setLWJGLVersion(true);
- return true;
- }
- return false;
-}
-
-bool JarModList::DeleteMod(size_t index, const QString& saveToFile)
-{
- QString saveFile = saveToFile;
- if (saveToFile.IsEmpty())
- saveFile = m_inst->GetModListFile().GetFullPath();
-
- if (ModList::DeleteMod(index, saveFile))
- {
- m_inst->SetNeedsRebuild();
- return true;
- }
- return false;
-}
-
-bool JarModList::UpdateModList(bool quickLoad)
-{
- if (ModList::UpdateModList(quickLoad))
- {
- m_inst->SetNeedsRebuild();
- return true;
- }
- return false;
-}
-
-bool FolderModList::LoadModListFromDir(const QString& loadFrom, bool quickLoad)
-{
- QString dir(loadFrom.IsEmpty() ? modsFolder : loadFrom);
-
- if (!wxDirExists(dir))
- return false;
-
- bool listChanged = false;
- wxDir modDir(dir);
-
- if (!modDir.IsOpened())
- {
- wxLogError(_("Failed to open directory: ") + dir);
- return false;
- }
-
- QString currentFile;
- if (modDir.GetFirst(&currentFile))
- {
- do
- {
- wxFileName modFile(Path::Combine(dir, currentFile));
-
- if (wxFileExists(modFile.GetFullPath()) || wxDirExists(modFile.GetFullPath()))
- {
- if (quickLoad || FindByFilename(modFile.GetFullPath()) == nullptr)
- {
- Mod mod(modFile.GetFullPath());
- push_back(mod);
- listChanged = true;
- }
- }
- } while (modDir.GetNext(&currentFile));
- }
-
- return listChanged;
-}
-
-bool ModNameSort (const Mod & i,const Mod & j)
-{
- if(i.GetModType() == j.GetModType())
- return (i.GetName().toLower() < j.GetName().toLower());
- return (i.GetModType() < j.GetModType());
-}
-
-bool FolderModList::UpdateModList ( bool quickLoad )
-{
- bool changed = ModList::UpdateModList(quickLoad);
- std::sort(begin(),end(),ModNameSort);
- return changed;
-}
-*/