aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MultiMC.cpp2
-rw-r--r--gui/ConsoleWindow.cpp7
-rw-r--r--gui/dialogs/VersionSelectDialog.cpp4
-rw-r--r--logic/LegacyInstance.cpp5
-rw-r--r--logic/LegacyInstance.h1
-rw-r--r--logic/LegacyUpdate.cpp169
-rw-r--r--logic/LegacyUpdate.h13
-rw-r--r--logic/net/URLConstants.cpp2
-rw-r--r--logic/net/URLConstants.h2
-rw-r--r--translations/mmc_de.ts197
-rw-r--r--translations/mmc_fr.ts3808
11 files changed, 4180 insertions, 30 deletions
diff --git a/MultiMC.cpp b/MultiMC.cpp
index ddc1fca7..a0ff8b66 100644
--- a/MultiMC.cpp
+++ b/MultiMC.cpp
@@ -412,6 +412,7 @@ void MultiMC::initGlobalSettings()
// Console
m_settings->registerSetting("ShowConsole", true);
+ m_settings->registerSetting("RaiseConsole", true);
m_settings->registerSetting("AutoCloseConsole", true);
m_settings->registerSetting("LogPrePostOutput", true);
@@ -470,6 +471,7 @@ void MultiMC::initHttpMetaCache()
m_metacache->addBase("versions", QDir("versions").absolutePath());
m_metacache->addBase("libraries", QDir("libraries").absolutePath());
m_metacache->addBase("minecraftforge", QDir("mods/minecraftforge").absolutePath());
+ m_metacache->addBase("fmllibs", QDir("mods/minecraftforge/libs").absolutePath());
m_metacache->addBase("liteloader", QDir("mods/liteloader").absolutePath());
m_metacache->addBase("skins", QDir("accounts/skins").absolutePath());
m_metacache->addBase("root", QDir(root()).absolutePath());
diff --git a/gui/ConsoleWindow.cpp b/gui/ConsoleWindow.cpp
index 621f035f..18a617e0 100644
--- a/gui/ConsoleWindow.cpp
+++ b/gui/ConsoleWindow.cpp
@@ -265,6 +265,13 @@ void ConsoleWindow::onEnded(BaseInstance *instance, int code, QProcess::ExitStat
*/
if (!isVisible())
show();
+
+ // Raise Window
+ if (MMC->settings()->get("RaiseConsole").toBool())
+ {
+ raise();
+ activateWindow();
+ }
}
void ConsoleWindow::onLaunchFailed(BaseInstance *instance)
diff --git a/gui/dialogs/VersionSelectDialog.cpp b/gui/dialogs/VersionSelectDialog.cpp
index 3277fd2f..f4d314b6 100644
--- a/gui/dialogs/VersionSelectDialog.cpp
+++ b/gui/dialogs/VersionSelectDialog.cpp
@@ -100,7 +100,9 @@ void VersionSelectDialog::on_refreshButton_clicked()
void VersionSelectDialog::setFilter(int column, QString filter)
{
m_proxyModel->setFilterKeyColumn(column);
- m_proxyModel->setFilterFixedString(filter);
+ // m_proxyModel->setFilterFixedString(filter);
+ m_proxyModel->setFilterRegExp(QRegExp(QString("^%1$").arg(filter.replace(".", "\\.")),
+ Qt::CaseInsensitive, QRegExp::RegExp));
/*
QStringList filteredTypes;
if (!ui->filterSnapshotsCheckbox->isChecked())
diff --git a/logic/LegacyInstance.cpp b/logic/LegacyInstance.cpp
index 4f2dfd9b..d06b8827 100644
--- a/logic/LegacyInstance.cpp
+++ b/logic/LegacyInstance.cpp
@@ -159,6 +159,11 @@ QString LegacyInstance::binDir() const
return PathCombine(minecraftRoot(), "bin");
}
+QString LegacyInstance::libDir() const
+{
+ return PathCombine(minecraftRoot(), "lib");
+}
+
QString LegacyInstance::savesDir() const
{
return PathCombine(minecraftRoot(), "saves");
diff --git a/logic/LegacyInstance.h b/logic/LegacyInstance.h
index 636addeb..badaf7e3 100644
--- a/logic/LegacyInstance.h
+++ b/logic/LegacyInstance.h
@@ -41,6 +41,7 @@ public:
std::shared_ptr<ModList> texturePackList();
////// Directories //////
+ QString libDir() const;
QString savesDir() const;
QString texturePacksDir() const;
QString jarModsDir() const;
diff --git a/logic/LegacyUpdate.cpp b/logic/LegacyUpdate.cpp
index 5d82a76b..15c99234 100644
--- a/logic/LegacyUpdate.cpp
+++ b/logic/LegacyUpdate.cpp
@@ -26,9 +26,56 @@
#include <JlCompress.h>
#include "logger/QsLog.h"
#include "logic/net/URLConstants.h"
+#include <QStringList>
LegacyUpdate::LegacyUpdate(BaseInstance *inst, QObject *parent) : Task(parent), m_inst(inst)
{
+ // 1.3 - 1.3.2
+ auto libs13 = QList<FMLlib>{
+ {"argo-2.25.jar", "bb672829fde76cb163004752b86b0484bd0a7f4b", false},
+ {"guava-12.0.1.jar", "b8e78b9af7bf45900e14c6f958486b6ca682195f", false},
+ {"asm-all-4.0.jar", "98308890597acb64047f7e896638e0d98753ae82", false}};
+
+ fmlLibsMapping["1.3.2"] = libs13;
+
+ auto libs14 = QList<FMLlib>{
+ {"argo-2.25.jar", "bb672829fde76cb163004752b86b0484bd0a7f4b", false},
+ {"guava-12.0.1.jar", "b8e78b9af7bf45900e14c6f958486b6ca682195f", false},
+ {"asm-all-4.0.jar", "98308890597acb64047f7e896638e0d98753ae82", false},
+ {"bcprov-jdk15on-147.jar", "b6f5d9926b0afbde9f4dbe3db88c5247be7794bb", false}};
+
+ fmlLibsMapping["1.4"] = libs14;
+ fmlLibsMapping["1.4.1"] = libs14;
+ fmlLibsMapping["1.4.2"] = libs14;
+ fmlLibsMapping["1.4.3"] = libs14;
+ fmlLibsMapping["1.4.4"] = libs14;
+ fmlLibsMapping["1.4.5"] = libs14;
+ fmlLibsMapping["1.4.6"] = libs14;
+ fmlLibsMapping["1.4.7"] = libs14;
+
+ fmlLibsMapping["1.5"] = QList<FMLlib>{
+ {"argo-small-3.2.jar", "58912ea2858d168c50781f956fa5b59f0f7c6b51", false},
+ {"guava-14.0-rc3.jar", "931ae21fa8014c3ce686aaa621eae565fefb1a6a", false},
+ {"asm-all-4.1.jar", "054986e962b88d8660ae4566475658469595ef58", false},
+ {"bcprov-jdk15on-148.jar", "960dea7c9181ba0b17e8bab0c06a43f0a5f04e65", true},
+ {"deobfuscation_data_1.5.zip", "5f7c142d53776f16304c0bbe10542014abad6af8", false},
+ {"scala-library.jar", "458d046151ad179c85429ed7420ffb1eaf6ddf85", true}};
+
+ fmlLibsMapping["1.5.1"] = QList<FMLlib>{
+ {"argo-small-3.2.jar", "58912ea2858d168c50781f956fa5b59f0f7c6b51", false},
+ {"guava-14.0-rc3.jar", "931ae21fa8014c3ce686aaa621eae565fefb1a6a", false},
+ {"asm-all-4.1.jar", "054986e962b88d8660ae4566475658469595ef58", false},
+ {"bcprov-jdk15on-148.jar", "960dea7c9181ba0b17e8bab0c06a43f0a5f04e65", true},
+ {"deobfuscation_data_1.5.1.zip", "22e221a0d89516c1f721d6cab056a7e37471d0a6", false},
+ {"scala-library.jar", "458d046151ad179c85429ed7420ffb1eaf6ddf85", true}};
+
+ fmlLibsMapping["1.5.2"] = QList<FMLlib>{
+ {"argo-small-3.2.jar", "58912ea2858d168c50781f956fa5b59f0f7c6b51", false},
+ {"guava-14.0-rc3.jar", "931ae21fa8014c3ce686aaa621eae565fefb1a6a", false},
+ {"asm-all-4.1.jar", "054986e962b88d8660ae4566475658469595ef58", false},
+ {"bcprov-jdk15on-148.jar", "960dea7c9181ba0b17e8bab0c06a43f0a5f04e65", true},
+ {"deobfuscation_data_1.5.2.zip", "446e55cd986582c70fcf12cb27bc00114c5adfd9", false},
+ {"scala-library.jar", "458d046151ad179c85429ed7420ffb1eaf6ddf85", true}};
}
void LegacyUpdate::executeTask()
@@ -50,10 +97,130 @@ void LegacyUpdate::executeTask()
else
{
*/
- lwjglStart();
+ fmllibsStart();
//}
}
+void LegacyUpdate::fmllibsStart()
+{
+ // Get the mod list
+ LegacyInstance *inst = (LegacyInstance *)m_inst;
+ auto modList = inst->jarModList();
+
+ bool forge_present = false;
+
+ QString version = inst->intendedVersionId();
+ if (!fmlLibsMapping.contains(version))
+ {
+ lwjglStart();
+ return;
+ }
+
+ auto &libList = fmlLibsMapping[version];
+
+ // determine if we need some libs for FML or forge
+ setStatus(tr("Checking for FML libraries..."));
+ for (unsigned i = 0; i < modList->size(); i++)
+ {
+ auto &mod = modList->operator[](i);
+
+ // do not use disabled mods.
+ if (!mod.enabled())
+ continue;
+
+ if (mod.type() != Mod::MOD_ZIPFILE)
+ continue;
+
+ if (mod.mmc_id().contains("forge", Qt::CaseInsensitive))
+ {
+ forge_present = true;
+ break;
+ }
+ if (mod.mmc_id().contains("fml", Qt::CaseInsensitive))
+ {
+ forge_present = true;
+ break;
+ }
+ }
+ // we don't...
+ if (!forge_present)
+ {
+ lwjglStart();
+ return;
+ }
+
+ // now check the lib folder inside the instance for files.
+ for (auto &lib : libList)
+ {
+ QFileInfo libInfo(PathCombine(inst->libDir(), lib.name));
+ if (libInfo.exists())
+ continue;
+ fmlLibsToProcess.append(lib);
+ }
+
+ // if everything is in place, there's nothing to do here...
+ if (fmlLibsToProcess.isEmpty())
+ {
+ lwjglStart();
+ return;
+ }
+
+ // download missing libs to our place
+ setStatus(tr("Dowloading FML libraries..."));
+ auto dljob = new NetJob("FML libraries");
+ auto metacache = MMC->metacache();
+ for (auto &lib : fmlLibsToProcess)
+ {
+ auto entry = metacache->resolveEntry("fmllibs", lib.name);
+ QString urlString = lib.ours ? URLConstants::FMLLIBS_OUR_BASE_URL + lib.name
+ : URLConstants::FMLLIBS_FORGE_BASE_URL + lib.name;
+ dljob->addNetAction(CacheDownload::make(QUrl(urlString), entry));
+ }
+
+ connect(dljob, SIGNAL(succeeded()), SLOT(fmllibsFinished()));
+ connect(dljob, SIGNAL(failed()), SLOT(fmllibsFailed()));
+ connect(dljob, SIGNAL(progress(qint64, qint64)), SIGNAL(progress(qint64, qint64)));
+ legacyDownloadJob.reset(dljob);
+ legacyDownloadJob->start();
+}
+
+void LegacyUpdate::fmllibsFinished()
+{
+ legacyDownloadJob.reset();
+ if(!fmlLibsToProcess.isEmpty())
+ {
+ setStatus(tr("Copying FML libraries into the instance..."));
+ LegacyInstance *inst = (LegacyInstance *)m_inst;
+ auto metacache = MMC->metacache();
+ int index = 0;
+ for (auto &lib : fmlLibsToProcess)
+ {
+ progress(index, fmlLibsToProcess.size());
+ auto entry = metacache->resolveEntry("fmllibs", lib.name);
+ auto path = PathCombine(inst->libDir(), lib.name);
+ if(!ensureFilePathExists(path))
+ {
+ emitFailed(tr("Failed creating FML library folder inside the instance."));
+ return;
+ }
+ if (!QFile::copy(entry->getFullPath(), PathCombine(inst->libDir(), lib.name)))
+ {
+ emitFailed(tr("Failed copying Forge/FML library: %1.").arg(lib.name));
+ return;
+ }
+ index++;
+ }
+ progress(index, fmlLibsToProcess.size());
+ }
+ lwjglStart();
+}
+
+void LegacyUpdate::fmllibsFailed()
+{
+ emitFailed("Game update failed: it was impossible to fetch the required FML libraries.");
+ return;
+}
+
void LegacyUpdate::lwjglStart()
{
LegacyInstance *inst = (LegacyInstance *)m_inst;
diff --git a/logic/LegacyUpdate.h b/logic/LegacyUpdate.h
index 613eb1f9..5b073cb7 100644
--- a/logic/LegacyUpdate.h
+++ b/logic/LegacyUpdate.h
@@ -27,6 +27,13 @@ class BaseInstance;
class QuaZip;
class Mod;
+struct FMLlib
+{
+ QString name;
+ QString checksum;
+ bool ours;
+};
+
class LegacyUpdate : public Task
{
Q_OBJECT
@@ -44,6 +51,10 @@ slots:
void jarFinished();
void jarFailed();
+ void fmllibsStart();
+ void fmllibsFinished();
+ void fmllibsFailed();
+
void extractLwjgl();
void ModTheJar();
@@ -72,4 +83,6 @@ private:
private:
NetJobPtr legacyDownloadJob;
BaseInstance *m_inst = nullptr;
+ QList<FMLlib> fmlLibsToProcess;
+ QMap<QString, QList<FMLlib>> fmlLibsMapping;
};
diff --git a/logic/net/URLConstants.cpp b/logic/net/URLConstants.cpp
index 14b28085..de919448 100644
--- a/logic/net/URLConstants.cpp
+++ b/logic/net/URLConstants.cpp
@@ -16,4 +16,6 @@ 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/");
} \ No newline at end of file
diff --git a/logic/net/URLConstants.h b/logic/net/URLConstants.h
index c1064115..392d7362 100644
--- a/logic/net/URLConstants.h
+++ b/logic/net/URLConstants.h
@@ -34,4 +34,6 @@ extern const QString MOJANG_STATUS_URL;
extern const QString MOJANG_STATUS_NEWS_URL;
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;
}
diff --git a/translations/mmc_de.ts b/translations/mmc_de.ts
index 2ad9f351..6ff523cf 100644
--- a/translations/mmc_de.ts
+++ b/translations/mmc_de.ts
@@ -816,7 +816,32 @@ p, li { white-space: pre-wrap; }
<context>
<name>AuthenticateTask</name>
<message>
- <location filename="../logic/auth/flows/AuthenticateTask.cpp" line="+197"/>
+ <location filename="../logic/auth/flows/AuthenticateTask.cpp" line="+87"/>
+ <source>Authentication server didn&apos;t send a client token.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Authentication server attempted to change the client token. This isn&apos;t supported.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>Authentication server didn&apos;t send an access token.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+45"/>
+ <source>Authentication server didn&apos;t specify a currently selected profile. The account exists, but likely isn&apos;t premium.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Authentication server specified a selected profile that wasn&apos;t in the available profiles list.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+37"/>
<source>Authenticating: Sending request...</source>
<translation>Authentifizierung: Sende Anfrage...</translation>
</message>
@@ -1429,7 +1454,32 @@ p, li { white-space: pre-wrap; }
<context>
<name>LegacyUpdate</name>
<message>
- <location filename="../logic/LegacyUpdate.cpp" line="+80"/>
+ <location filename="../logic/LegacyUpdate.cpp" line="+122"/>
+ <source>Checking for FML libraries...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+47"/>
+ <source>Dowloading FML libraries...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+23"/>
+ <source>Copying FML libraries into the instance...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>Failed creating FML library folder inside the instance.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Failed copying Forge/FML library: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+39"/>
<source>Downloading new LWJGL...</source>
<translation>LWJGL wird heruntergeladen...</translation>
</message>
@@ -1609,7 +1659,7 @@ p, li { white-space: pre-wrap; }
<translation>Haupt-Werkzeugleiste</translation>
</message>
<message>
- <location line="+41"/>
+ <location line="+42"/>
<source>Instance Toolbar</source>
<translation>Instanz-Werkzeugleiste</translation>
</message>
@@ -1626,12 +1676,12 @@ p, li { white-space: pre-wrap; }
<message>
<location line="+3"/>
<location line="+3"/>
- <location line="+342"/>
+ <location line="+358"/>
<source>Add a new instance.</source>
<translation>Neue Instanz erstellen.</translation>
</message>
<message>
- <location line="-332"/>
+ <location line="-348"/>
<source>View Instance Folder</source>
<translation>Instanzordner öffnen</translation>
</message>
@@ -1676,12 +1726,12 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location line="+10"/>
- <location line="+136"/>
+ <location line="+152"/>
<source>Settings</source>
<translation>Einstellungen</translation>
</message>
<message>
- <location line="-133"/>
+ <location line="-149"/>
<location line="+3"/>
<source>Change settings.</source>
<translation>Einstellungen ändern.</translation>
@@ -1706,7 +1756,7 @@ p, li { white-space: pre-wrap; }
<translation type="vanished">Den MultiMC-Entwicklerblog öffnen, um Neuigkeiten über MultiMC zu erhalten.</translation>
</message>
<message>
- <location line="+10"/>
+ <location line="+26"/>
<source>More News</source>
<translation>Mehr Nachrichten</translation>
</message>
@@ -1912,13 +1962,24 @@ p, li { white-space: pre-wrap; }
<translation>Kopiere Instanz</translation>
</message>
<message>
+ <location line="-243"/>
+ <source>Support us on Patreon!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
<location line="+3"/>
+ <source>Open the MultiMC Patreon page.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+240"/>
<source>Copy the selected instance.</source>
<translation>Kopiere die ausgewählte Instanz.</translation>
</message>
<message>
<location line="+8"/>
- <location filename="../gui/MainWindow.cpp" line="+241"/>
+ <location filename="../gui/MainWindow.cpp" line="+248"/>
<source>Manage Accounts</source>
<translation>Verwalte Konten</translation>
</message>
@@ -1959,18 +2020,33 @@ You are using the latest version.</source>
Du verwendest bereits die neueste Version.</translation>
</message>
<message>
- <location line="+41"/>
+ <location line="+45"/>
<source>Rename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+20"/>
- <location line="+929"/>
+ <location line="+3"/>
+ <source>Copy instance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>MultiMC</source>
+ <translation type="unfinished">MultiMC</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Create instance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+23"/>
+ <location line="+934"/>
<source>Launch</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-927"/>
+ <location line="-932"/>
<source>Profilers</source>
<translation type="unfinished"></translation>
</message>
@@ -2030,14 +2106,14 @@ Du verwendest bereits die neueste Version.</translation>
<location line="+37"/>
<location line="+7"/>
<location line="+7"/>
- <location line="+424"/>
+ <location line="+429"/>
<location line="+30"/>
<location line="+80"/>
<source>Error</source>
<translation>Fehler</translation>
</message>
<message>
- <location line="-613"/>
+ <location line="-618"/>
<location line="+71"/>
<source>Failed to create the instance directory.</source>
<translation type="unfinished"></translation>
@@ -2050,14 +2126,14 @@ Du verwendest bereits die neueste Version.</translation>
</message>
<message>
<location line="-49"/>
- <location line="+585"/>
+ <location line="+590"/>
<source>MultiMC cannot download Minecraft or update instances unless you have at least one account added.
Please add your Mojang or Minecraft account.</source>
<translation>MultiMC kann Minecraft nicht herunterladen und keine Instanzen aktualisieren, solange du kein Konto erstellt hast.
Bitte füge dein Mojang- oder Minecraft-Konto hinzu.</translation>
</message>
<message>
- <location line="-473"/>
+ <location line="-478"/>
<source>Group name</source>
<translation>Gruppenname</translation>
</message>
@@ -2067,7 +2143,7 @@ Bitte füge dein Mojang- oder Minecraft-Konto hinzu.</translation>
<translation>Neuen Gruppennamen eingeben.</translation>
</message>
<message>
- <location line="+92"/>
+ <location line="+97"/>
<source>CAREFUL</source>
<translation>ACHTUNG</translation>
</message>
@@ -2747,7 +2823,15 @@ Die folgende Instanz löschen:</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+76"/>
+ <location line="+66"/>
+ <source>Some libraries marked as &apos;local&apos; are missing their jar files:
+%1
+
+You&apos;ll have to correct this problem manually. If this is an externally tracked instance, make sure to run it at least once outside of MultiMC.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+28"/>
<source>Failed to download the following files:
%1
@@ -2898,7 +2982,27 @@ Diese Mitteilung wird so lange angezeigt, bis du die Option entfernt hast.</tran
<context>
<name>RefreshTask</name>
<message>
- <location filename="../logic/auth/flows/RefreshTask.cpp" line="+146"/>
+ <location filename="../logic/auth/flows/RefreshTask.cpp" line="+76"/>
+ <source>Authentication server didn&apos;t send a client token.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Authentication server attempted to change the client token. This isn&apos;t supported.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Authentication server didn&apos;t send an access token.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Authentication server didn&apos;t specify the same prefile as expected.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+39"/>
<source>Refreshing login token...</source>
<translation>Erneuerung des Login-Tokens...</translation>
</message>
@@ -3566,7 +3670,7 @@ Diese Mitteilung wird so lange angezeigt, bis du die Option entfernt hast.</tran
<context>
<name>ValidateTask</name>
<message>
- <location filename="../logic/auth/flows/ValidateTask.cpp" line="+58"/>
+ <location filename="../logic/auth/flows/ValidateTask.cpp" line="+57"/>
<source>Validating access token: Sending request...</source>
<translation>Validiere Zugriffstoken: Sende Anfrage...</translation>
</message>
@@ -3635,22 +3739,40 @@ Diese Mitteilung wird so lange angezeigt, bis du die Option entfernt hast.</tran
<context>
<name>YggdrasilTask</name>
<message>
- <location filename="../logic/auth/YggdrasilTask.cpp" line="+104"/>
+ <location filename="../logic/auth/YggdrasilTask.cpp" line="+119"/>
<source>&lt;b&gt;SSL Handshake failed.&lt;/b&gt;&lt;br/&gt;There might be a few causes for it:&lt;br/&gt;&lt;ul&gt;&lt;li&gt;You use Windows XP and need to &lt;a href=&quot;http://www.microsoft.com/en-us/download/details.aspx?id=38918&quot;&gt;update your root certificates&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Some device on your network is interfering with SSL traffic. In that case, you have bigger worries than Minecraft not starting.&lt;/li&gt;&lt;li&gt;Possibly something else. Check the MultiMC log file for details&lt;/li&gt;&lt;/ul&gt;</source>
<translation>&lt;b&gt;SSL-Handshake fehlgeschlagen.&lt;/b&gt;&lt;br/&gt;Es kann mehrere Erklärungen geben:&lt;br/&gt;&lt;ul&gt;&lt;li&gt;Du benutzt Windows XP und musst &lt;a href=&quot;http://www.microsoft.com/en-us/download/details.aspx?id=38918&quot;&gt;dein Stammzertifikat aktualisieren&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Ein Gerät in deinem Netzwerk mischt sich in den SSL-Verkehr ein. In diesem Fall hast du größere Probleme, als das, dass Minecraft nicht gestartet werden kann.&lt;/li&gt;&lt;li&gt;Möglicherweise etwas anderes. Prüfe die MultiMC-Logdatei für Details&lt;/li&gt;&lt;/ul&gt;</translation>
</message>
<message>
- <location line="+47"/>
<source>An unknown error occurred when processing the response from the authentication server.</source>
- <translation>Ein unbekannter Fehler ist beim Bearbeiten der Antwort des Authentifizierungs-Servers aufgetreten.</translation>
+ <translation type="vanished">Ein unbekannter Fehler ist beim Bearbeiten der Antwort des Authentifizierungs-Servers aufgetreten.</translation>
</message>
<message>
- <location line="+5"/>
<source>Failed to parse Yggdrasil JSON response: %1 at offset %2.</source>
- <translation>Fehler beim Bearbeiten der Yggdrasil-JSON-Antwort: %1 bei %2.</translation>
+ <translation type="vanished">Fehler beim Bearbeiten der Yggdrasil-JSON-Antwort: %1 bei %2.</translation>
+ </message>
+ <message>
+ <location line="-8"/>
+ <source>Authentication operation timed out.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Authentication operation cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+20"/>
+ <source>Authentication operation failed due to a network error: %1 (%2)</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location line="+26"/>
+ <source>Failed to parse authentication server response JSON response: %1 at offset %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+29"/>
<source>An unknown error occurred when trying to communicate with the authentication server: %1</source>
<translation>Ein unbekannter Fehler ist bei der Kommunikation mit den Authentifizierungs-Servern aufgetreten: %1</translation>
</message>
@@ -3660,7 +3782,7 @@ Diese Mitteilung wird so lange angezeigt, bis du die Option entfernt hast.</tran
<translation>Ein unbekannter Yggdrasil-Fehler ist aufgetreten.</translation>
</message>
<message>
- <location line="+9"/>
+ <location line="+11"/>
<source>Sending request to auth servers...</source>
<translation>Sende Anfrage an die Authentifizierungs-Server...</translation>
</message>
@@ -3671,8 +3793,27 @@ Diese Mitteilung wird so lange angezeigt, bis du die Option entfernt hast.</tran
</message>
<message>
<location line="+2"/>
+ <source>Authentication task succeeded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Failed to contact the authentication server.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Failed to authenticate.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>...</source>
+ <translation type="unfinished">...</translation>
+ </message>
+ <message>
<source>Processing. Please wait...</source>
- <translation>Bearbeite. Bitte warten...</translation>
+ <translation type="vanished">Bearbeite. Bitte warten...</translation>
</message>
</context>
</TS>
diff --git a/translations/mmc_fr.ts b/translations/mmc_fr.ts
new file mode 100644
index 00000000..dbdcdbac
--- /dev/null
+++ b/translations/mmc_fr.ts
@@ -0,0 +1,3808 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="fr_FR" sourcelanguage="en">
+<context>
+ <name>AboutDialog</name>
+ <message>
+ <source>Dialog</source>
+ <translation type="vanished">Dialogue</translation>
+ </message>
+ <message>
+ <source>MultiMC</source>
+ <translation type="vanished">MultiMC</translation>
+ </message>
+ <message>
+ <location filename="../gui/dialogs/AboutDialog.ui" line="+111"/>
+ <source>About</source>
+ <translation>À propos</translation>
+ </message>
+ <message>
+ <source>MultiMC is a custom launcher that makes managing Minecraft easier by allowing you to have multiple installations of Minecraft at once.</source>
+ <translation type="vanished">MultiMC est un lanceur personalisé qui permet de configurer minecraft plus facilement en permettant l&apos;installation de plusieures instances de minecraft en une.</translation>
+ </message>
+ <message>
+ <location line="-91"/>
+ <source>About MultiMC</source>
+ <translation>À propos de MultiMC</translation>
+ </message>
+ <message>
+ <location line="+69"/>
+ <source>MultiMC 5</source>
+ <translation>MultiMC 5</translation>
+ </message>
+ <message>
+ <location line="+28"/>
+ <source>Version:</source>
+ <translation>Version:</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Version Type:</source>
+ <translation>Type de version:</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Platform:</source>
+ <translation>Plateforme:</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Build Number:</source>
+ <translation>Build numéro:</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Channel:</source>
+ <translation>Canal:</translation>
+ </message>
+ <message>
+ <location line="+13"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;MultiMC is a custom launcher that makes managing Minecraft easier by allowing you to have multiple instances of Minecraft at once.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;MultiMC est un lanceur personalisé qui permet de configurer minecraft plus facilement en permettant l&apos;installation de plusieures instances de minecraft en une.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location line="+19"/>
+ <source>© 2013 MultiMC Contributors</source>
+ <translation>© 2013 MultiMC Contributeurs</translation>
+ </message>
+ <message>
+ <location line="+15"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;http://github.com/MultiMC/MultiMC5&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://github.com/MultiMC/MultiMC5&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location line="+41"/>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Bitstream Vera Sans&apos;; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:10pt; font-weight:600;&quot;&gt;MultiMC&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:10pt;&quot;&gt;Andrew Okin &amp;lt;&lt;/span&gt;&lt;a href=&quot;mailto:forkk@forkk.net&quot;&gt;&lt;span style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:10pt; text-decoration: underline; color:#0000ff;&quot;&gt;forkk@forkk.net&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:10pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:10pt;&quot;&gt;Petr Mrázek &amp;lt;&lt;/span&gt;&lt;a href=&quot;mailto:peterix@gmail.com&quot;&gt;&lt;span