Only show folders that really are worlds

This commit is contained in:
Jan Dalheimer 2014-02-16 12:08:39 +01:00
parent f5273ae2b1
commit f26b7dedad
3 changed files with 34 additions and 9 deletions

View File

@ -1,10 +1,16 @@
#include "BaseExternalTool.h"
#include <QProcess>
#include <QDir>
#include <QInputDialog>
#ifdef Q_OS_WIN
#include <windows.h>
#endif
#include "BaseInstance.h"
#include "MultiMC.h"
BaseExternalTool::BaseExternalTool(BaseInstance *instance, QObject *parent)
: QObject(parent), m_instance(instance)
{
@ -24,6 +30,30 @@ qint64 BaseExternalTool::pid(QProcess *process)
#endif
}
QString BaseExternalTool::getSave() const
{
QDir saves(m_instance->minecraftRoot() + "/saves");
QStringList worlds = saves.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
QMutableListIterator<QString> it(worlds);
while (it.hasNext())
{
it.next();
if (!QDir(saves.absoluteFilePath(it.value())).exists("level.dat"))
{
it.remove();
}
}
bool ok = true;
const QString save = QInputDialog::getItem(
MMC->activeWindow(), tr("MCEdit"), tr("Choose which world to open:"),
worlds, 0, false, &ok);
if (ok)
{
return saves.absoluteFilePath(save);
}
return QString();
}
BaseDetachedTool::BaseDetachedTool(BaseInstance *instance, QObject *parent)
: BaseExternalTool(instance, parent)

View File

@ -18,6 +18,7 @@ protected:
BaseInstance *m_instance;
qint64 pid(QProcess *process);
QString getSave() const;
};
class BaseDetachedTool : public BaseExternalTool

View File

@ -2,8 +2,6 @@
#include <QDir>
#include <QProcess>
#include <QFileDialog>
#include <QInputDialog>
#include "settingsobject.h"
#include "logic/BaseInstance.h"
@ -17,12 +15,8 @@ MCEditTool::MCEditTool(BaseInstance *instance, QObject *parent)
void MCEditTool::runImpl()
{
const QString mceditPath = MMC->settings()->get("MCEditPath").toString();
const QDir saves = QDir(m_instance->minecraftRoot() + "/saves");
bool ok = true;
const QString save = QInputDialog::getItem(
MMC->activeWindow(), tr("MCEdit"), tr("Choose which world to open:"),
saves.entryList(QDir::Dirs | QDir::NoDotAndDotDot), 0, false, &ok);
if (save.isEmpty() || !ok)
const QString save = getSave();
if (save.isNull())
{
return;
}
@ -36,7 +30,7 @@ void MCEditTool::runImpl()
{
program = mceditDir.absoluteFilePath("mcedit.exe");
}
QProcess::startDetached(program, QStringList() << saves.absoluteFilePath(save), mceditPath);
QProcess::startDetached(program, QStringList() << save, mceditPath);
}
void MCEditFactory::registerSettings(SettingsObject *settings)