Translation downloading!
This commit is contained in:
		@@ -651,6 +651,10 @@ SET(MULTIMC_SOURCES
 | 
			
		||||
	logic/liteloader/LiteLoaderInstaller.cpp
 | 
			
		||||
	logic/liteloader/LiteLoaderVersionList.h
 | 
			
		||||
	logic/liteloader/LiteLoaderVersionList.cpp
 | 
			
		||||
 | 
			
		||||
	# Translations
 | 
			
		||||
	logic/trans/TranslationDownloader.h
 | 
			
		||||
	logic/trans/TranslationDownloader.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -47,6 +47,8 @@
 | 
			
		||||
#include "logger/QsLog.h"
 | 
			
		||||
#include "logger/QsLogDest.h"
 | 
			
		||||
 | 
			
		||||
#include "logic/trans/TranslationDownloader.h"
 | 
			
		||||
 | 
			
		||||
#ifdef Q_OS_WIN32
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
static const int APPDATA_BUFFER_SIZE = 1024;
 | 
			
		||||
@@ -213,6 +215,8 @@ MultiMC::MultiMC(int &argc, char **argv, bool root_override) : QApplication(argc
 | 
			
		||||
	// initialize the status checker
 | 
			
		||||
	m_statusChecker.reset(new StatusChecker());
 | 
			
		||||
 | 
			
		||||
	m_translationChecker.reset(new TranslationDownloader());
 | 
			
		||||
 | 
			
		||||
	// and instances
 | 
			
		||||
	auto InstDirSetting = m_settings->getSetting("InstanceDir");
 | 
			
		||||
	// instance path: check for problems with '!' in instance path and warn the user in the log
 | 
			
		||||
@@ -242,6 +246,8 @@ MultiMC::MultiMC(int &argc, char **argv, bool root_override) : QApplication(argc
 | 
			
		||||
	// create the global network manager
 | 
			
		||||
	m_qnam.reset(new QNetworkAccessManager(this));
 | 
			
		||||
 | 
			
		||||
	m_translationChecker->downloadTranslations();
 | 
			
		||||
 | 
			
		||||
	// init proxy settings
 | 
			
		||||
	updateProxySettings();
 | 
			
		||||
 | 
			
		||||
@@ -537,6 +543,7 @@ void MultiMC::initHttpMetaCache()
 | 
			
		||||
	m_metacache->addBase("liteloader", QDir("mods/liteloader").absolutePath());
 | 
			
		||||
	m_metacache->addBase("skins", QDir("accounts/skins").absolutePath());
 | 
			
		||||
	m_metacache->addBase("root", QDir(root()).absolutePath());
 | 
			
		||||
	m_metacache->addBase("translations", QDir("translations").absolutePath());
 | 
			
		||||
	m_metacache->Load();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -24,6 +24,7 @@ class StatusChecker;
 | 
			
		||||
class BaseProfilerFactory;
 | 
			
		||||
class BaseDetachedToolFactory;
 | 
			
		||||
class URNResolver;
 | 
			
		||||
class TranslationDownloader;
 | 
			
		||||
 | 
			
		||||
#if defined(MMC)
 | 
			
		||||
#undef MMC
 | 
			
		||||
@@ -40,7 +41,8 @@ enum UpdateFlag
 | 
			
		||||
Q_DECLARE_FLAGS(UpdateFlags, UpdateFlag);
 | 
			
		||||
Q_DECLARE_OPERATORS_FOR_FLAGS(UpdateFlags);
 | 
			
		||||
 | 
			
		||||
// Global var used by the crash handling system to determine if a log file should be included in a crash report.
 | 
			
		||||
// Global var used by the crash handling system to determine if a log file should be included in
 | 
			
		||||
// a crash report.
 | 
			
		||||
extern bool loggerInitialized;
 | 
			
		||||
 | 
			
		||||
class MultiMC : public QApplication
 | 
			
		||||
@@ -209,6 +211,7 @@ private:
 | 
			
		||||
	std::shared_ptr<MinecraftVersionList> m_minecraftlist;
 | 
			
		||||
	std::shared_ptr<JavaVersionList> m_javalist;
 | 
			
		||||
	std::shared_ptr<URNResolver> m_resolver;
 | 
			
		||||
	std::shared_ptr<TranslationDownloader> m_translationChecker;
 | 
			
		||||
 | 
			
		||||
	QMap<QString, std::shared_ptr<BaseProfilerFactory>> m_profilers;
 | 
			
		||||
	QMap<QString, std::shared_ptr<BaseDetachedToolFactory>> m_tools;
 | 
			
		||||
 
 | 
			
		||||
@@ -11,11 +11,13 @@ const QString LIBRARY_BASE("libraries.minecraft.net/");
 | 
			
		||||
const QString SKINS_BASE("skins.minecraft.net/MinecraftSkins/");
 | 
			
		||||
const QString AUTH_BASE("authserver.mojang.com/");
 | 
			
		||||
const QString FORGE_LEGACY_URL("http://files.minecraftforge.net/minecraftforge/json");
 | 
			
		||||
const QString FORGE_GRADLE_URL("http://files.minecraftforge.net/maven/net/minecraftforge/forge/json");
 | 
			
		||||
const QString
 | 
			
		||||
	FORGE_GRADLE_URL("http://files.minecraftforge.net/maven/net/minecraftforge/forge/json");
 | 
			
		||||
const QString MOJANG_STATUS_URL("http://status.mojang.com/check");
 | 
			
		||||
const QString MOJANG_STATUS_NEWS_URL("http://status.mojang.com/news");
 | 
			
		||||
const QString LITELOADER_URL("http://dl.liteloader.com/versions/versions.json");
 | 
			
		||||
const QString IMGUR_BASE_URL("https://api.imgur.com/3/");
 | 
			
		||||
const QString FMLLIBS_OUR_BASE_URL("http://files.multimc.org/fmllibs/");
 | 
			
		||||
const QString FMLLIBS_FORGE_BASE_URL("http://files.minecraftforge.net/fmllibs/");
 | 
			
		||||
const QString TRANSLATIONS_BASE_URL("http://files.multimc.org/translations/");
 | 
			
		||||
}
 | 
			
		||||
@@ -36,4 +36,5 @@ extern const QString LITELOADER_URL;
 | 
			
		||||
extern const QString IMGUR_BASE_URL;
 | 
			
		||||
extern const QString FMLLIBS_OUR_BASE_URL;
 | 
			
		||||
extern const QString FMLLIBS_FORGE_BASE_URL;
 | 
			
		||||
extern const QString TRANSLATIONS_BASE_URL;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										51
									
								
								logic/trans/TranslationDownloader.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								logic/trans/TranslationDownloader.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
#include "TranslationDownloader.h"
 | 
			
		||||
#include "logic/net/NetJob.h"
 | 
			
		||||
#include "logic/net/ByteArrayDownload.h"
 | 
			
		||||
#include "logic/net/CacheDownload.h"
 | 
			
		||||
#include "logic/net/URLConstants.h"
 | 
			
		||||
#include "MultiMC.h"
 | 
			
		||||
 | 
			
		||||
TranslationDownloader::TranslationDownloader()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
void TranslationDownloader::downloadTranslations()
 | 
			
		||||
{
 | 
			
		||||
	QLOG_DEBUG() << "Downloading Translations Index...";
 | 
			
		||||
	m_index_job.reset(new NetJob("Translations Index"));
 | 
			
		||||
	m_index_task = ByteArrayDownload::make(QUrl("http://files.multimc.org/translations/index"));
 | 
			
		||||
	m_index_job->addNetAction(m_index_task);
 | 
			
		||||
	connect(m_index_job.get(), &NetJob::failed, this, &TranslationDownloader::indexFailed);
 | 
			
		||||
	connect(m_index_job.get(), &NetJob::succeeded, this, &TranslationDownloader::indexRecieved);
 | 
			
		||||
	m_index_job->start();
 | 
			
		||||
}
 | 
			
		||||
void TranslationDownloader::indexRecieved()
 | 
			
		||||
{
 | 
			
		||||
	QLOG_DEBUG() << "Got translations index!";
 | 
			
		||||
	m_dl_job.reset(new NetJob("Translations"));
 | 
			
		||||
	QList<QByteArray> lines = m_index_task->m_data.split('\n');
 | 
			
		||||
	for (const auto line : lines)
 | 
			
		||||
	{
 | 
			
		||||
		if (!line.isEmpty())
 | 
			
		||||
		{
 | 
			
		||||
			CacheDownloadPtr dl = CacheDownload::make(
 | 
			
		||||
				QUrl(URLConstants::TRANSLATIONS_BASE_URL + line),
 | 
			
		||||
				MMC->metacache()->resolveEntry("translations", "mmc_" + line));
 | 
			
		||||
			m_dl_job->addNetAction(dl);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	connect(m_dl_job.get(), &NetJob::succeeded, this, &TranslationDownloader::dlGood);
 | 
			
		||||
	connect(m_dl_job.get(), &NetJob::failed, this, &TranslationDownloader::dlFailed);
 | 
			
		||||
	m_dl_job->start();
 | 
			
		||||
}
 | 
			
		||||
void TranslationDownloader::dlFailed()
 | 
			
		||||
{
 | 
			
		||||
	QLOG_ERROR() << "Translations Download Failed!";
 | 
			
		||||
}
 | 
			
		||||
void TranslationDownloader::dlGood()
 | 
			
		||||
{
 | 
			
		||||
	QLOG_DEBUG() << "Got translations!";
 | 
			
		||||
}
 | 
			
		||||
void TranslationDownloader::indexFailed()
 | 
			
		||||
{
 | 
			
		||||
	QLOG_ERROR() << "Translations Index Download Failed!";
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										30
									
								
								logic/trans/TranslationDownloader.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								logic/trans/TranslationDownloader.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <QList>
 | 
			
		||||
#include <QUrl>
 | 
			
		||||
#include <memory>
 | 
			
		||||
#include <QObject>
 | 
			
		||||
 | 
			
		||||
class ByteArrayDownload;
 | 
			
		||||
class NetJob;
 | 
			
		||||
 | 
			
		||||
class TranslationDownloader : public QObject
 | 
			
		||||
{
 | 
			
		||||
	Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	TranslationDownloader();
 | 
			
		||||
 | 
			
		||||
	void downloadTranslations();
 | 
			
		||||
 | 
			
		||||
private slots:
 | 
			
		||||
	void indexRecieved();
 | 
			
		||||
	void indexFailed();
 | 
			
		||||
	void dlFailed();
 | 
			
		||||
	void dlGood();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	std::shared_ptr<ByteArrayDownload> m_index_task;
 | 
			
		||||
	std::shared_ptr<NetJob> m_dl_job;
 | 
			
		||||
	std::shared_ptr<NetJob> m_index_job;
 | 
			
		||||
};
 | 
			
		||||
		Reference in New Issue
	
	Block a user