Only show folders that really are worlds
This commit is contained in:
		@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,7 @@ protected:
 | 
			
		||||
	BaseInstance *m_instance;
 | 
			
		||||
 | 
			
		||||
	qint64 pid(QProcess *process);
 | 
			
		||||
	QString getSave() const;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class BaseDetachedTool : public BaseExternalTool
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user