From dfca8be71b15bc13997110cc8777dd5a84a1fde7 Mon Sep 17 00:00:00 2001 From: Tannin Date: Sat, 21 Sep 2013 19:25:33 +0200 Subject: - esp reader now handles invalid files more gracefully - files moved will now also be treated as "deleted" in the old location so a newly created file with that same name is not created in overwrite - introduced a mechanism by which MO can recognize if it crashed before when attempting to load a plugin. That plugin can be blacklisted so it doesn't get loaded again - plugins can now programaticaly change their settings - plugins can now store data persistently without exposing that data as settings - requesting an unset-setting from a plugin is no longer treated as a bug - clarified warning message for when files are in overwrite directory - the proxyPython plugin will now discover if python initialization crashed MO on a previous session and give the user a chance to fix it or disable the plugin - bugfix: GetModuleFileName modified the buffer past the zero termination. While this doesn't violate the API documentation it is different from the regular windows implementation - bugfix: proxy plugins couldn't access the parent widget - bugfix: when moving a file from overwrite to a mod the in-memory file structure wasn't updated - bugfix: name input dialog for profiles allowed names that weren't valid directory names - bugfix: profile dialog wasn't able to delete profiles if the name started or ended in whitespaces - bugfix: The name-cells for plugin settings could be changed (without effect) - removed a few obsolete files from the repository --- src/settings.h | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) (limited to 'src/settings.h') diff --git a/src/settings.h b/src/settings.h index bf17d162..51ee6b92 100644 --- a/src/settings.h +++ b/src/settings.h @@ -57,6 +57,7 @@ public: /** * @brief register plugin to be configurable * @param plugin the plugin to register + * @return true if the plugin may be registered, false if it is blacklisted */ void registerPlugin(MOBase::IPlugin *plugin); @@ -195,10 +196,37 @@ public: * @param pluginName name of the plugin * @param key name of the setting to retrieve * @return the requested value as a QVariant - * @throws an exception is thrown if this setting doesn't exist + * @note an invalid QVariant is returned if the the plugin/setting is not declared */ QVariant pluginSetting(const QString &pluginName, const QString &key) const; + /** + * @brief set a setting for one of the installed mods + * @param pluginName name of the plugin + * @param key name of the setting to change + * @param value the new value to set + * @throw an exception is thrown if pluginName is invalid + */ + void setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value); + + /** + * @brief retrieve a persistent value for a plugin + * @param pluginName name of the plugin to store data for + * @param key id of the value to retrieve + * @param def default value to return if the value is not set + * @return the requested value + */ + QVariant pluginPersistent(const QString &pluginName, const QString &key, const QVariant &def) const; + + /** + * @brief set a persistent value for a plugin + * @param pluginName name of the plugin to store data for + * @param key id of the value to retrieve + * @param value value to set + * @throw an exception is thrown if pluginName is invalid + */ + void setPluginPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync); + /** * @return short code of the configured language (corresponding to the translation files) */ @@ -210,6 +238,19 @@ public: */ void updateServers(const QList &servers); + /** + * @brief add a plugin that is to be blacklisted + * @param fileName name of the plugin to blacklist + */ + void addBlacklistPlugin(const QString &fileName); + + /** + * @brief test if a plugin is blacklisted and shouldn't be loaded + * @param fileName name of the plugin + * @return true if the file is blacklisted + */ + bool pluginBlacklisted(const QString &fileName) const; + private: QString obfuscate(const QString &password) const; @@ -219,6 +260,8 @@ private: void addStyles(QComboBox *styleBox); bool isNXMHandler(bool *modifyable); void setNXMHandlerActive(bool active, bool writable); + void readPluginBlacklist(); + void writePluginBlacklist(); private slots: @@ -241,6 +284,8 @@ private: QMap > m_PluginSettings; + QSet m_PluginBlacklist; + }; #endif // WORKAROUNDS_H -- cgit v1.3.1 From f1515193ca82c229a712f067f61f1c26e9b83400 Mon Sep 17 00:00:00 2001 From: Tannin Date: Wed, 27 Nov 2013 20:25:24 +0100 Subject: - plugins can now be localized too - fixes to the installer script - extended build scripts to fetch translations from pootle server automatically --- src/mainwindow.cpp | 63 ++++---- src/mainwindow.h | 9 +- src/organizer.pro | 7 +- src/organizer_cs.ts | 407 ++++++++++++++++++++++++------------------------- src/organizer_de.ts | 407 ++++++++++++++++++++++++------------------------- src/organizer_es.ts | 407 ++++++++++++++++++++++++------------------------- src/organizer_fr.ts | 407 ++++++++++++++++++++++++------------------------- src/organizer_ru.ts | 407 ++++++++++++++++++++++++------------------------- src/organizer_tr.ts | 407 ++++++++++++++++++++++++------------------------- src/organizer_zh_CN.ts | 407 ++++++++++++++++++++++++------------------------- src/organizer_zh_TW.ts | 407 ++++++++++++++++++++++++------------------------- src/settings.h | 5 + 12 files changed, 1655 insertions(+), 1685 deletions(-) (limited to 'src/settings.h') diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 31ee1ae7..5c487e7a 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -144,8 +144,7 @@ MainWindow::MainWindow(const QString &exeName, QSettings &initSettings, QWidget m_DirectoryStructure(new DirectoryEntry(L"data", NULL, 0)), m_ModList(this), m_ModListGroupingProxy(NULL), m_ModListSortProxy(NULL), m_PluginList(this), m_OldExecutableIndex(-1), m_GamePath(ToQString(GameInfo::instance().getGameDirectory())), - m_DownloadManager(NexusInterface::instance(), this), - m_InstallationManager(this), m_Translator(NULL), m_TranslatorQt(NULL), + m_DownloadManager(NexusInterface::instance(), this), m_InstallationManager(this), m_Updater(NexusInterface::instance(), this), m_CategoryFactory(CategoryFactory::instance()), m_CurrentProfile(NULL), m_AskForNexusPW(false), m_LoginAttempted(false), m_ArchivesInit(false), m_ContextItem(NULL), m_ContextAction(NULL), m_CurrentSaveView(NULL), @@ -975,7 +974,7 @@ void MainWindow::registerPluginTool(IPluginTool *tool) } -bool MainWindow::registerPlugin(QObject *plugin) +bool MainWindow::registerPlugin(QObject *plugin, const QString &fileName) { { // generic treatment for all plugins IPlugin *pluginObj = qobject_cast(plugin); @@ -983,6 +982,7 @@ bool MainWindow::registerPlugin(QObject *plugin) qDebug("not an IPlugin"); return false; } + plugin->setProperty("filename", fileName); m_Settings.registerPlugin(pluginObj); } @@ -1017,7 +1017,7 @@ bool MainWindow::registerPlugin(QObject *plugin) try { QObject *proxiedPlugin = proxy->instantiate(pluginName); if (proxiedPlugin != NULL) { - if (registerPlugin(proxiedPlugin)) { + if (registerPlugin(proxiedPlugin, pluginName)) { qDebug("loaded plugin \"%s\"", QDir::toNativeSeparators(pluginName).toUtf8().constData()); } else { qWarning("plugin \"%s\" failed to load", pluginName.toUtf8().constData()); @@ -1052,7 +1052,7 @@ void MainWindow::loadPlugins() m_Settings.clearPlugins(); foreach (QObject *plugin, QPluginLoader::staticInstances()) { - registerPlugin(plugin); + registerPlugin(plugin, ""); } QFile loadCheck(QCoreApplication::applicationDirPath() + "/plugin_loadcheck.tmp"); @@ -1095,7 +1095,7 @@ void MainWindow::loadPlugins() qCritical("failed to load plugin %s: %s", pluginName.toUtf8().constData(), pluginLoader.errorString().toUtf8().constData()); } else { - if (registerPlugin(pluginLoader.instance())) { + if (registerPlugin(pluginLoader.instance(), pluginName)) { qDebug("loaded plugin \"%s\"", QDir::toNativeSeparators(pluginName).toUtf8().constData()); } else { m_UnloadedPlugins.push_back(pluginName); @@ -3998,35 +3998,40 @@ void MainWindow::downloadRequested(QNetworkReply *reply, int modID, const QStrin } -void MainWindow::languageChange(const QString &newLanguage) +QTranslator *MainWindow::installTranslator(const QString &name) { - if (m_Translator != NULL) { - QCoreApplication::removeTranslator(m_Translator); - delete m_Translator; - m_Translator = NULL; + QTranslator *translator = new QTranslator(this); + QString fileName = name + "_" + m_CurrentLanguage; + if (!translator->load(fileName, qApp->applicationDirPath() + "/translations")) { + qWarning("localization file %s not found", qPrintable(fileName)); } - if (m_TranslatorQt != NULL) { - QCoreApplication::removeTranslator(m_TranslatorQt); - delete m_TranslatorQt; - m_TranslatorQt = NULL; + qApp->installTranslator(translator); + return translator; +} + + +void MainWindow::languageChange(const QString &newLanguage) +{ + foreach (QTranslator *trans, m_Translators) { + qApp->removeTranslator(trans); } + m_Translators.clear(); - if (newLanguage != "en_US") { - // add our own translations - m_Translator = new QTranslator(this); - QString locFile = ToQString(AppConfig::translationPrefix()) + "_" + newLanguage; - if (!m_Translator->load(locFile, QCoreApplication::applicationDirPath() + "/translations")) { - qDebug("localization %s not found", locFile.toUtf8().constData()); - } - QCoreApplication::installTranslator(m_Translator); + m_CurrentLanguage = newLanguage; - // also add the translations for qt default strings - m_TranslatorQt = new QTranslator(this); - locFile = QString("qt_") + newLanguage; - if (!m_TranslatorQt->load(locFile, QCoreApplication::applicationDirPath() + "/translations")) { - qDebug("localization %s not found", locFile.toUtf8().constData()); + if (newLanguage != "en_US") { + installTranslator("qt"); + installTranslator(ToQString(AppConfig::translationPrefix())); + foreach(IPlugin *plugin, m_Settings.plugins()) { + QObject *pluginObj = dynamic_cast(plugin); + if (pluginObj != NULL) { + QVariant fileNameVariant = pluginObj->property("filename"); + if (fileNameVariant.isValid()) { + QString fileName = QFileInfo(fileNameVariant.toString()).baseName(); + m_Translators.push_back(installTranslator(fileName)); + } + } } - QCoreApplication::installTranslator(m_TranslatorQt); } ui->retranslateUi(this); ui->profileBox->setItemText(0, QObject::tr("")); diff --git a/src/mainwindow.h b/src/mainwindow.h index dfd2e571..5a8278f9 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -197,7 +197,7 @@ private: void actionToToolButton(QAction *&sourceAction); bool verifyPlugin(MOBase::IPlugin *plugin); void registerPluginTool(MOBase::IPluginTool *tool); - bool registerPlugin(QObject *pluginObj); + bool registerPlugin(QObject *pluginObj, const QString &fileName); void updateToolBar(); void activateSelectedProfile(); @@ -272,6 +272,7 @@ private: static void setupNetworkProxy(bool activate); void activateProxy(bool activate); + QTranslator *installTranslator(const QString &name); private: @@ -318,9 +319,6 @@ private: DownloadManager m_DownloadManager; InstallationManager m_InstallationManager; - QTranslator *m_Translator; - QTranslator *m_TranslatorQt; - SelfUpdater m_Updater; CategoryFactory &m_CategoryFactory; @@ -352,6 +350,9 @@ private: SignalAboutToRunApplication m_AboutToRun; + QString m_CurrentLanguage; + std::vector m_Translators; + private slots: void showMessage(const QString &message); diff --git a/src/organizer.pro b/src/organizer.pro index f4be6f80..30454ea8 100644 --- a/src/organizer.pro +++ b/src/organizer.pro @@ -207,13 +207,12 @@ CONFIG += embed_manifest_exe # QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'highestAvailable\' uiAccess=\'false\'\" TRANSLATIONS = organizer_de.ts \ - organizer_es.ts \ - organizer_fr.ts \ - organizer_zh_TW.ts \ + organizer_es.ts \ + organizer_fr.ts \ + organizer_zh_TW.ts \ organizer_zh_CN.ts \ organizer_cs.ts \ organizer_tr.ts \ - organizer_en.ts \ organizer_ru.ts !isEmpty(TRANSLATIONS) { diff --git a/src/organizer_cs.ts b/src/organizer_cs.ts index 10c5f555..59f8b52b 100644 --- a/src/organizer_cs.ts +++ b/src/organizer_cs.ts @@ -267,11 +267,6 @@ p, li { white-space: pre-wrap; } Placeholder #Placeholder - - - KB - - @@ -1563,8 +1558,8 @@ BSAs checked here are loaded in such a way that your installation order is obeye - - + + Refresh Znovunačíst @@ -1744,7 +1739,7 @@ p, li { white-space: pre-wrap; } - + Update @@ -1755,7 +1750,7 @@ p, li { white-space: pre-wrap; } - + No Problems Žádné problémy @@ -1788,7 +1783,7 @@ V současnosti má omezenou funkcionalitu - + Endorse Mod Organizer @@ -1808,17 +1803,17 @@ V současnosti má omezenou funkcionalitu - + Problems Problémy - + There are potential problems with your setup Existují potenciální problémy s programem - + Everything seems to be in order Všechno se jeví v pořádku @@ -1835,22 +1830,22 @@ V současnosti má omezenou funkcionalitu <li>dotNet není nainstalován nebo je neaktuální. Tohle vyžaduje NCC. Najděte ho zde: <a href="%1">%1</a></li> - + Help on UI Pomoc s programem - + Documentation Wiki Dokumentace wiki - + Report Issue Nahlásit chybu - + Tutorials @@ -1859,431 +1854,431 @@ V současnosti má omezenou funkcionalitu pořadí načtení se nezdařilo uložit - + failed to save load order: %1 zlyhalo uložení pořadí načtení: %1 - + failed to save archives order, do you have write access to "%1"? zlyhal zápis pořadí archivů, máte administrátorsky povoleno zapisovat na "%1"? - + Name Jméno - + Please enter a name for the new profile Prosím zadej jméno pro nový profil - + failed to create profile: %1 Zlyhalo vytvoření profilu: %1 - + Show tutorial? - + You are starting Mod Organizer for the first time. Do you want to show a tutorial of its basic features? If you choose no you can always start the tutorial from the "Help"-menu. - + Downloads in progress Probíhá stahování - + There are still downloads in progress, do you really want to quit? Pořád probíhá stahování, určitě chcete skončit (zruší stahování)? - + failed to read savegame: %1 nezdařilo se načíst pozici: %1 - + Plugin "%1" failed: %2 - + Plugin error - + It appears the plugin "%1" failed to load last startup and caused MO to crash. Do you want to disable it? (Please note: If this is the first time you see this message for this plugin you may want to give it another try. The plugin may be able to recover from the problem) - + Failed to start "%1" Zlyhal start "%1" - + Waiting Čekání - + Please press OK once you're logged into steam. Stiskni OK až budeš přihlášen do Steamu. - + "%1" not found "%1" nenalezeno - + Start Steam? Spustit Steam? - + Steam is required to be running already to correctly start the game. Should MO try to start steam now? Steam by měl běžet aby se podařilo spustit hru. Má se MO pokusit spustit steam teď? - + Also in: <br> Také v: <br> - + No conflict Žádné konflikty - + <Edit...> <Edit...> - + Failed to refresh list of esps: %s - + This bsa is enabled in the ini file so it may be required! Tenhle BSA soubor je aktivován v ini souboru, tak zřejmě je vyžadován! - + This archive will still be loaded since there is a plugin of the same name but its files will not follow installation order! Tento archív se stejně načte, protože existuje plugin se stejným jménem ale jeho soubory nebudou zodpovídat pořadí nainstalování! - + Activating Network Proxy - - + + Installation successful Instalace úspěšná - - + + Configure Mod Konfigurace Modu - - + + This mod contains ini tweaks. Do you want to configure them now? Tenhle mod obsahuje ini úpravy. Chcete je nastavovat teď? - - + + mod "%1" not found mod "%1" nenalezen - - + + Installation cancelled Instalace zrušena - - + + The mod was not installed completely. Tento mod se nenainstaloval úplne. - + Some plugins could not be loaded - + Too many esps and esms enabled - - + + Description missing - + Choose Mod Vyber Mod - + Mod Archive Archív Modu - + Start Tutorial? - + You're about to start a tutorial. For technical reasons it's not possible to end the tutorial early. Continue? - - + + Download started Stahování začalo - + failed to update mod list: %1 nezdařilo se aktualizovat seznam modů: %1 - + failed to spawn notepad.exe: %1 zlyhalo otevření notepad.exe: %1 - + failed to open %1 - + failed to change origin name: %1 Nezdařilo se změnit původní jméno: %1 - + Multiple esps activated, please check that they don't conflict. - - + + Create Mod... - + This will move all files from overwrite into a new, regular mod. Please enter a name: - + A mod with this name already exists - + Continue? - + The versioning scheme decides which version is considered newer than another. This function will guess the versioning scheme under the assumption that the installed version is outdated. - + Sorry - + I don't know a versioning scheme where %1 is newer than %2. - + <All> <Všechny> - + <Checked> <Aktivované> - + Plugin "%1" failed - + failed to init plugin %1: %2 - + The following plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version: - + The game doesn't allow more than 256 active plugins (including the official ones) to be loaded. You have to disable some unused plugins or merge some plugins into one. You can find a guide here: <a href="http://wiki.step-project.com/Guide:Merging_Plugins">http://wiki.step-project.com/Guide:Merging_Plugins</a> - + Failed to move "%1" from mod "%2" to "%3": %4 - + <Unchecked> <Neaktivované> - + <Update> <Aktualizace> - + <No category> <Bez kategorie> - + <Conflicted> - + <Not Endorsed> - + failed to rename mod: %1 Nezdařilo se přejmenovat mod: %1 - + Overwrite? - + This will replace the existing mod "%1". Continue? - + failed to remove mod "%1" - - - + + + failed to rename "%1" to "%2" Nezdařilo se přejmenovat "%1" na "%2" - - - + + + Confirm Potvrdit - + Remove the following mods?<br><ul>%1</ul> - + failed to remove mod: %1 Nezdařilo se odstranit mod: %1 - - + + Failed Zlyhání - + Installation file no longer exists Instalační soubor již neexistuje - + Mods installed with old versions of MO can't be reinstalled in this way. Mody nainstalovány staršími verzemi MO nemůžou být přeinstalovány tímto spůsobem. - - + + You need to be logged in with Nexus to endorse - - + + Extract BSA Extrakce BSA - + This mod contains at least one BSA. Do you want to unpack it? (This removes the BSA after completion. If you don't know about BSAs, just select no) Tento mod obsahuje alespoň jeden BSA soubor. Chcete rozpakovat i jeho obsah? (BSA se po úspěšném rozpakování odstrání. Pokud nevíte, co je BSA, zvolte možnost Ne) - - - + + + failed to read %1: %2 - - + + This archive contains invalid hashes. Some files may be broken. Tento archiv má neplatné identifikační součty. Nekteré soubory mohou být poškozeny. - + Nexus ID for this Mod is unknown Nexus ID pro tento Mod není známo @@ -2296,391 +2291,391 @@ This function will guess the versioning scheme under the assumption that the ins Zvol Prioritu - + Really enable all visible mods? Opravdu aktivovat všechny zobrazené mody? - + Really disable all visible mods? Opravdu deaktivovat všechny zobrazené mody? - + Choose what to export - + Everything - + All installed mods are included in the list - + Active Mods - + Only active (checked) mods from your current profile are included - + Visible - + All mods visible in the mod list are included - + export failed: %1 - + Install Mod... Instaluj Mod... - + Enable all visible Aktivuj všechny v seznamu - + Disable all visible Deaktivuj všechny v seznamu - + Check all for update Skontroluj všechny pro aktualizaci - + Export to csv... - + Sync to Mods... Synchronizuj s Mody... - + Restore Backup - + Remove Backup... - + Set Category Označ Kategorii - + Primary Category - + Change versioning scheme - + Un-ignore update - + Ignore update - + Rename Mod... Přejmenuj Mod... - + Remove Mod... Odstranit Mod... - + Reinstall Mod Přeinstaluj Mod - + Un-Endorse - - + + Endorse - + Won't endorse - + Endorsement state unknown - + Ignore missing data - + Visit on Nexus Navštiv na Nexusu - + Open in explorer Otevři v prohlížeči - + Information... Informace... - - + + Exception: Výnimky: - - + + Unknown exception Neznámá výnimka - + <Multiple> - + Fix Mods... Oprav Mody... - - + + failed to remove %1 - - + + failed to create %1 - + Can't change download directory while downloads are in progress! Není možné změnit cíl pro stahování když probíhá stahování! - + Download failed Stahování zlyhalo - + failed to write to file %1 Nezdařil se zápis do souboru %1 - + %1 written %1 zapsáno - + Select binary Vyber binární soubor - + Binary Soubor - + Enter Name Zadej jméno - + Please enter a name for the executable Prosím zadej jméno pro spouštění - + Not an executable Není spustitelný - + This is not a recognized executable. Tenhle soubor není rozpoznán jako spustitelný. - - + + Replace file? Nahradit soubor? - + There already is a hidden version of this file. Replace it? Už existuje skrytá verze tohto souboru. Nahradit? - - + + File operation failed Operace se souborem zlyhala - - + + Failed to remove "%1". Maybe you lack the required file permissions? Nepodařilo se odstranit "%1". Možná nejsou k dispozici požadována práva? - + There already is a visible version of this file. Replace it? Už existuje viditelná verze tohto souboru. Nahradit? - + Update available Aktualizace k dispozici - + Open/Execute Otevřít/Spustit - + Add as Executable Přidat Spouštení - + Un-Hide Odekrýt - + Hide Skrýt - + Write To File... Zápis do souboru... - + Do you want to endorse Mod Organizer on %1 now? - + Remove - + Unlock load order - + Lock load order - + Request to Nexus failed: %1 - - + + login successful - + login failed: %1. Trying to download anyway přihlášení zlyhalo: %1. Pokouším se beztak stahovat - + login failed: %1 přihlášení zlyhalo: %1 - + login failed: %1. You need to log-in with Nexus to update MO. přihlášení zlyhalo: %1. Na aktualizaci MO je potřebné přihlášení k Nexusu. - + Error Chyba - + failed to extract %1 (errorcode %2) zlyhala extrakce %1 (errorcode %2) - + Extract... Extrakce... - + Edit Categories... Editovat Kategorie... - + Enable all - + Disable all @@ -5349,18 +5344,18 @@ p, li { white-space: pre-wrap; } - + Please use "Help" from the toolbar to get usage instructions to all elements Prosím použijte "Pomoc" z panelu nástrojú pro instrukce ke všem elementům - - + + <Manage...> <Manage...> - + failed to parse profile %1: %2 Nezdařilo se rozebrat profil %1: %2 diff --git a/src/organizer_de.ts b/src/organizer_de.ts index 68af9c3a..a80d3156 100644 --- a/src/organizer_de.ts +++ b/src/organizer_de.ts @@ -267,11 +267,6 @@ p, li { white-space: pre-wrap; } Placeholder Platzhalter - - - KB - - @@ -1567,8 +1562,8 @@ BSAs checked here are loaded in such a way that your installation order is obeye - - + + Refresh Neu laden @@ -1748,7 +1743,7 @@ p, li { white-space: pre-wrap; } - + Update Aktualisierung @@ -1759,7 +1754,7 @@ p, li { white-space: pre-wrap; } - + No Problems Keine Probleme @@ -1790,7 +1785,7 @@ Diese Funktion ist noch in arbeit und ist sehr eingeschränkt. - + Endorse Mod Organizer @@ -1810,17 +1805,17 @@ Diese Funktion ist noch in arbeit und ist sehr eingeschränkt. - + Problems Probleme - + There are potential problems with your setup Es bestehen möglicherweise Probleme mit Ihrer Konfiguration - + Everything seems to be in order Alles in bester Ordnung @@ -1837,22 +1832,22 @@ Diese Funktion ist noch in arbeit und ist sehr eingeschränkt. <li>dotNet ist nicht installiert oder veraltet. Dies wird benötigt um NCC nutzen zu können. Laden Sie die korrekte Version von <a href="%1">%1</a> herunter</li> - + Help on UI Hilfe zur Oberfläche - + Documentation Wiki Wiki Dokumentation - + Report Issue Fehler melden - + Tutorials @@ -1861,431 +1856,431 @@ Diese Funktion ist noch in arbeit und ist sehr eingeschränkt. Ladereihenfolge konnte nicht gespeichert werden - + failed to save load order: %1 Reihenfolge konnt nicht gespeichert werden: %1 - + failed to save archives order, do you have write access to "%1"? - + Name Name - + Please enter a name for the new profile Bitte geben Sie einen Namen für das neue Profil an - + failed to create profile: %1 Erstellen des Profils fehlgeschlagen: %1 - + Show tutorial? - + You are starting Mod Organizer for the first time. Do you want to show a tutorial of its basic features? If you choose no you can always start the tutorial from the "Help"-menu. - + Downloads in progress Download in Bearbeitung - + There are still downloads in progress, do you really want to quit? Es gibt noch unfertige Downloads, wollen Sie wirklich das Programm beenden? - + failed to read savegame: %1 Spielstand konnte nicht gelesen werden: %1 - + Plugin "%1" failed: %2 - + Plugin error - + It appears the plugin "%1" failed to load last startup and caused MO to crash. Do you want to disable it? (Please note: If this is the first time you see this message for this plugin you may want to give it another try. The plugin may be able to recover from the problem) - + Failed to start "%1" - + Waiting Warte - + Please press OK once you're logged into steam. Bitte drücken sie OK sobald sie bei Steam angemeldet sind. - + "%1" not found "%1" nicht gefunden - + Start Steam? - + Steam is required to be running already to correctly start the game. Should MO try to start steam now? Steam muss laufen um das Spiel korrekt zu starten. Soll MO versuchen Steam zu starten? - + Also in: <br> Auch in: <br> - + No conflict Keine Konflikte - + <Edit...> <Bearbeiten...> - + Failed to refresh list of esps: %s - + This bsa is enabled in the ini file so it may be required! Dieses Archiv ist in der ini Konfiguration gelistet, daher ist es möglicherweise erforderlich! - + This archive will still be loaded since there is a plugin of the same name but its files will not follow installation order! Dieses Archiv wird vom Spiel geladen werden da ein Plugin mit dem selben Namen aktiv ist aber die enthaltenen Dateien werden sich nicht an Ihre Installations-Reihenfolge halten! - + Activating Network Proxy - - + + Installation successful Installation erfolgreich - - + + Configure Mod Mod konfigurieren - - + + This mod contains ini tweaks. Do you want to configure them now? Diese Mod enthält Anpassungen für die Ini datei. Wollen Sie diese nun konfigurieren? - - + + mod "%1" not found mod "%1" nicht gefunden - - + + Installation cancelled Installation abgebrochen - - + + The mod was not installed completely. Die mod wurde nicht erfolgreich installiert. - + Some plugins could not be loaded - + Too many esps and esms enabled - - + + Description missing - + Choose Mod Mod wählen - + Mod Archive Mod Archiv - + Start Tutorial? - + You're about to start a tutorial. For technical reasons it's not possible to end the tutorial early. Continue? - - + + Download started Download gestartet - + failed to update mod list: %1 Aktualisieren der Modliste fehlgeschlagen: %1 - + failed to spawn notepad.exe: %1 notepad.exe konnte nicht aufgerufen werden: %1 - + failed to open %1 %1 konnte nicht geöffnet werden - + failed to change origin name: %1 konnte den Namen der Dateiquelle nicht ändern: %1 - + Multiple esps activated, please check that they don't conflict. - - + + Create Mod... - + This will move all files from overwrite into a new, regular mod. Please enter a name: - + A mod with this name already exists - + Continue? - + The versioning scheme decides which version is considered newer than another. This function will guess the versioning scheme under the assumption that the installed version is outdated. - + Sorry - + I don't know a versioning scheme where %1 is newer than %2. - + <All> <Alle> - + <Checked> <Markierte> - + Plugin "%1" failed - + failed to init plugin %1: %2 - + The following plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version: - + The game doesn't allow more than 256 active plugins (including the official ones) to be loaded. You have to disable some unused plugins or merge some plugins into one. You can find a guide here: <a href="http://wiki.step-project.com/Guide:Merging_Plugins">http://wiki.step-project.com/Guide:Merging_Plugins</a> - + Failed to move "%1" from mod "%2" to "%3": %4 - + <Unchecked> <Nicht markierte> - + <Update> <Update> - + <No category> <Ohne Kategorie> - + <Conflicted> - + <Not Endorsed> - + failed to rename mod: %1 konnte die Mod nicht umbenennen: %1 - + Overwrite? - + This will replace the existing mod "%1". Continue? - + failed to remove mod "%1" - - - + + + failed to rename "%1" to "%2" - - - + + + Confirm Bestätigen - + Remove the following mods?<br><ul>%1</ul> - + failed to remove mod: %1 konnte die mod nicht entfernen: %1 - - + + Failed Fehlgeschlagen - + Installation file no longer exists Installationsdatei existiert nicht mehr - + Mods installed with old versions of MO can't be reinstalled in this way. Mods die mit alten Versionen von MO installiert wurden können nicht auf diese Weise neu-installiert werden. - - + + You need to be logged in with Nexus to endorse - - + + Extract BSA BSA extrahieren - + This mod contains at least one BSA. Do you want to unpack it? (This removes the BSA after completion. If you don't know about BSAs, just select no) Diese mod enthält mindestens eine BSA datei. Soll sie entpackt werden? (Das BSA wird danach gelöscht. Wenn Sie nicht wissen was BSAs sind wählen Sie am besten \"nein\") - - - + + + failed to read %1: %2 - - + + This archive contains invalid hashes. Some files may be broken. Dieses Archiv enthält ungültige Prüfsummen. Einige Dateien sind evtl. defekt. - + Nexus ID for this Mod is unknown Nexus ID für diese Mod unbekannt @@ -2298,391 +2293,391 @@ This function will guess the versioning scheme under the assumption that the ins Priorität wählen - + Really enable all visible mods? Alle angezeigten Mods aktivieren? - + Really disable all visible mods? Alle angezeigten Mods deaktivieren? - + Choose what to export - + Everything - + All installed mods are included in the list - + Active Mods - + Only active (checked) mods from your current profile are included - + Visible - + All mods visible in the mod list are included - + export failed: %1 - + Install Mod... Mod installieren... - + Enable all visible Alle sichtbaren aktvieren - + Disable all visible Alle sichtbaren deaktvieren - + Check all for update Alle auf Aktualisierungen überprüfen - + Export to csv... - + Sync to Mods... Mods synchronisieren... - + Restore Backup - + Remove Backup... - + Set Category Kategorie festlegen - + Primary Category - + Change versioning scheme - + Un-ignore update - + Ignore update - + Rename Mod... Mod umbenennen... - + Remove Mod... Mod entfernen... - + Reinstall Mod Mod neu installieren - + Un-Endorse - - + + Endorse - + Won't endorse - + Endorsement state unknown - + Ignore missing data - + Visit on Nexus Auf Nexus besuchen - + Open in explorer In Explorer öffnen - + Information... Informationen... - - + + Exception: Ausnahme: - - + + Unknown exception Unbekannte Ausnahme - + <Multiple> - + Fix Mods... Mods reparieren... - - + + failed to remove %1 %1 konnte nicht entfernt werden - - + + failed to create %1 %1 konnte nicht erstellt werden - + Can't change download directory while downloads are in progress! Das download verzeichnis kann nicht geändert werden solange Downloads laufen! - + Download failed Download fehlgeschlagen - + failed to write to file %1 Speichern in Datei "%1" fehlgeschlagen - + %1 written "%1" gespeichert - + Select binary Binary wählen - + Binary Ausführbare Datei - + Enter Name Namen eingeben - + Please enter a name for the executable Bitte geben Sie einen Namen für die Anwendungsdatei ein - + Not an executable Datei ist nicht ausführbar - + This is not a recognized executable. - - + + Replace file? Datei ersetzen? - + There already is a hidden version of this file. Replace it? Es existiert bereits eine versteckte Variante von dieser Datei. Soll diese ersetzt werden? - - + + File operation failed Dateioperation fehlgeschlagen - - + + Failed to remove "%1". Maybe you lack the required file permissions? Konnte "%1" nicht löschen. Fehlen Ihnen evtl. die nötigen Berechtigungen? - + There already is a visible version of this file. Replace it? Es existiert bereits eine sichtbare Variante dieser Datei. Soll diese ersetzt werden? - + Update available Aktualisierung verfügbar - + Open/Execute Öffnen/Ausführen - + Add as Executable Als Anwendung hinzufügen - + Un-Hide Sichtbar machen - + Hide Verstecken - + Write To File... In Datei speichern... - + Do you want to endorse Mod Organizer on %1 now? - + Remove - + Unlock load order - + Lock load order - + Request to Nexus failed: %1 - - + + login successful - + login failed: %1. Trying to download anyway login fehlgeschlagen: %1. Der Download scheitert vermutlich - + login failed: %1 login fehlgeschlagen: %1 - + login failed: %1. You need to log-in with Nexus to update MO. - + Error Fehler - + failed to extract %1 (errorcode %2) konnte "%1" nicht extrahieren (fehlercode %2) - + Extract... Extrahieren... - + Edit Categories... - + Enable all - + Disable all @@ -5454,7 +5449,7 @@ p, li { white-space: pre-wrap; } "%1" nicht gefunden - + Please use "Help" from the toolbar to get usage instructions to all elements Bitte verwenden Sie die "Hilfe" Funktion um Hinweise zu Nutzung aller Elemete zu bekommen @@ -5473,13 +5468,13 @@ p, li { white-space: pre-wrap; } Konnte "%1" nicht finden - - + + <Manage...> <Verwalten...> - + failed to parse profile %1: %2 Konnte Profil %1 nicht verarbeiten: %2 diff --git a/src/organizer_es.ts b/src/organizer_es.ts index ed278075..ba096644 100644 --- a/src/organizer_es.ts +++ b/src/organizer_es.ts @@ -260,11 +260,6 @@ p, li { white-space: pre-wrap; } Placeholder Marcador de posicion - - - KB - - @@ -1426,8 +1421,8 @@ BSAs checked here are loaded in such a way that your installation order is obeye - - + + Refresh Recargar @@ -1601,7 +1596,7 @@ p, li { white-space: pre-wrap; } - + Update @@ -1612,7 +1607,7 @@ p, li { white-space: pre-wrap; } - + No Problems @@ -1642,7 +1637,7 @@ Right now this has very limited functionality - + Endorse Mod Organizer @@ -1662,465 +1657,465 @@ Right now this has very limited functionality - + Problems - + There are potential problems with your setup - + Everything seems to be in order - + Help on UI - + Documentation Wiki - + Report Issue - + Tutorials - + failed to save load order: %1 Fallo guardando el orden de carga: %1 - + failed to save archives order, do you have write access to "%1"? - + Name Nombre - + Please enter a name for the new profile Por favor introduzca un nombre para el nuevo perfil - + failed to create profile: %1 Fallo al crear el perfil: %1 - + Show tutorial? - + You are starting Mod Organizer for the first time. Do you want to show a tutorial of its basic features? If you choose no you can always start the tutorial from the "Help"-menu. - + Downloads in progress Descarga en progreso - + There are still downloads in progress, do you really want to quit? Aun hay descargas en progreso, estas seguro que quieres salir? - + failed to read savegame: %1 Fallo al leer la partida guardada: %1 - + Plugin "%1" failed: %2 - + Plugin error - + It appears the plugin "%1" failed to load last startup and caused MO to crash. Do you want to disable it? (Please note: If this is the first time you see this message for this plugin you may want to give it another try. The plugin may be able to recover from the problem) - + Failed to start "%1" - + Waiting - + Please press OK once you're logged into steam. - + "%1" not found "%1" no encontrado - + Start Steam? - + Steam is required to be running already to correctly start the game. Should MO try to start steam now? - + Also in: <br> - + No conflict Sin conflictos - + <Edit...> <Editar...> - + Failed to refresh list of esps: %s - + This bsa is enabled in the ini file so it may be required! - + This archive will still be loaded since there is a plugin of the same name but its files will not follow installation order! - + Activating Network Proxy - - + + Installation successful Instalacion completada - - + + Configure Mod Configurar Mod - - + + This mod contains ini tweaks. Do you want to configure them now? Este mod contiene modificaciones del Ini. Quieres configurarlas ahora? - - + + mod "%1" not found - - + + Installation cancelled - - + + The mod was not installed completely. - + Some plugins could not be loaded - + Too many esps and esms enabled - - + + Description missing - + Choose Mod Seleccione Mod - + Mod Archive Fichero Mod - + Start Tutorial? - + You're about to start a tutorial. For technical reasons it's not possible to end the tutorial early. Continue? - - + + Download started Descarga comenzada - + failed to update mod list: %1 Fallo al actualizar la lista de Mods: %1 - + failed to spawn notepad.exe: %1 Fallo al cargar el Bloc de notas: %1 - + failed to open %1 Fallo al abrir %1 - + failed to change origin name: %1 fallo al cambiar el nombre original del fichero %1 - + Multiple esps activated, please check that they don't conflict. - - + + Create Mod... - + This will move all files from overwrite into a new, regular mod. Please enter a name: - + A mod with this name already exists - + Continue? - + The versioning scheme decides which version is considered newer than another. This function will guess the versioning scheme under the assumption that the installed version is outdated. - + Sorry - + I don't know a versioning scheme where %1 is newer than %2. - + <All> <Todos> - + <Checked> <Marcado> - + Plugin "%1" failed - + failed to init plugin %1: %2 - + The following plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version: - + The game doesn't allow more than 256 active plugins (including the official ones) to be loaded. You have to disable some unused plugins or merge some plugins into one. You can find a guide here: <a href="http://wiki.step-project.com/Guide:Merging_Plugins">http://wiki.step-project.com/Guide:Merging_Plugins</a> - + Failed to move "%1" from mod "%2" to "%3": %4 - + <Unchecked> <Desmarcado> - + <Update> <Actualizacion> - + <No category> - + <Conflicted> - + <Not Endorsed> - + failed to rename mod: %1 fallo al cambiar el nombre al mod: %1 - + Overwrite? - + This will replace the existing mod "%1". Continue? - + failed to remove mod "%1" - - - + + + failed to rename "%1" to "%2" - - - + + + Confirm Confirma - + Remove the following mods?<br><ul>%1</ul> - + failed to remove mod: %1 - - + + Failed - + Installation file no longer exists - + Mods installed with old versions of MO can't be reinstalled in this way. - - + + You need to be logged in with Nexus to endorse - - + + Extract BSA - + This mod contains at least one BSA. Do you want to unpack it? (This removes the BSA after completion. If you don't know about BSAs, just select no) - - - + + + failed to read %1: %2 - - + + This archive contains invalid hashes. Some files may be broken. - + Nexus ID for this Mod is unknown @@ -2133,391 +2128,391 @@ This function will guess the versioning scheme under the assumption that the ins Selecciona Prioridad - + Really enable all visible mods? - + Really disable all visible mods? - + Choose what to export - + Everything - + All installed mods are included in the list - + Active Mods - + Only active (checked) mods from your current profile are included - + Visible - + All mods visible in the mod list are included - + export failed: %1 - + Install Mod... Instalar Mod... - + Enable all visible Activar todos los visibles - + Disable all visible Desactivar todos los visibles - + Check all for update Buscar Actualizaciones - + Export to csv... - + Sync to Mods... - + Restore Backup - + Remove Backup... - + Set Category Definir Categoria - + Primary Category - + Change versioning scheme - + Un-ignore update - + Ignore update - + Rename Mod... Cambiar nombre... - + Remove Mod... Quitar Mod... - + Reinstall Mod - + Un-Endorse - - + + Endorse - + Won't endorse - + Endorsement state unknown - + Ignore missing data - + Visit on Nexus - + Open in explorer - + Information... Informacion... - - + + Exception: - - + + Unknown exception - + <Multiple> - + Fix Mods... Activar Mods faltantes... - - + + failed to remove %1 Fallo eliminando %1 - - + + failed to create %1 - + Can't change download directory while downloads are in progress! - + Download failed - + failed to write to file %1 Fallo de escritura en el fichero %1 - + %1 written %1 escrito - + Select binary - + Binary Fichero - + Enter Name - + Please enter a name for the executable - + Not an executable - + This is not a recognized executable. - - + + Replace file? - + There already is a hidden version of this file. Replace it? - - + + File operation failed - - + + Failed to remove "%1". Maybe you lack the required file permissions? - + There already is a visible version of this file. Replace it? - + Update available Disponible actualización - + Open/Execute - + Add as Executable - + Un-Hide - + Hide - + Write To File... Escribir al fichero... - + Do you want to endorse Mod Organizer on %1 now? - + Remove - + Unlock load order - + Lock load order - + Request to Nexus failed: %1 - - + + login successful - + login failed: %1. Trying to download anyway - + login failed: %1 - + login failed: %1. You need to log-in with Nexus to update MO. - + Error Error - + failed to extract %1 (errorcode %2) - + Extract... - + Edit Categories... - + Enable all - + Disable all @@ -4820,7 +4815,7 @@ p, li { white-space: pre-wrap; } "%1" no encontrado - + Please use "Help" from the toolbar to get usage instructions to all elements Por favor utilice "Ayuda" en la barra superior para obtener informacion sobre todos los elementos @@ -4839,13 +4834,13 @@ p, li { white-space: pre-wrap; } fallo al encontrar %1 - - + + <Manage...> <Definir...> - + failed to parse profile %1: %2 no se pudo analizar el perfil % 1: %2 diff --git a/src/organizer_fr.ts b/src/organizer_fr.ts index 1bf335ce..58c871d7 100644 --- a/src/organizer_fr.ts +++ b/src/organizer_fr.ts @@ -268,11 +268,6 @@ p, li { white-space: pre-wrap; } Placeholder Signet - - - KB - - @@ -1466,8 +1461,8 @@ BSAs checked here are loaded in such a way that your installation order is obeye - - + + Refresh Actualiser @@ -1647,7 +1642,7 @@ p, li { white-space: pre-wrap; } - + Update @@ -1658,7 +1653,7 @@ p, li { white-space: pre-wrap; } - + No Problems @@ -1688,7 +1683,7 @@ Right now this has very limited functionality - + Endorse Mod Organizer @@ -1708,465 +1703,465 @@ Right now this has very limited functionality - + Problems - + There are potential problems with your setup - + Everything seems to be in order - + Help on UI - + Documentation Wiki - + Report Issue - + Tutorials - + failed to save load order: %1 impossible d'enregistrer l'ordre de chargement: %1 - + failed to save archives order, do you have write access to "%1"? - + Name Nom - + Please enter a name for the new profile Veuillez inscrire un nom pour le nouveau profil - + failed to create profile: %1 impossible de créer le profil: %1 - + Show tutorial? - + You are starting Mod Organizer for the first time. Do you want to show a tutorial of its basic features? If you choose no you can always start the tutorial from the "Help"-menu. - + Downloads in progress Téléchargements en cours - + There are still downloads in progress, do you really want to quit? Il encore des téléchargements en cours, voulez-vous vraiment quitter? - + failed to read savegame: %1 impossible de lire la sauvegarde: %1 - + Plugin "%1" failed: %2 - + Plugin error - + It appears the plugin "%1" failed to load last startup and caused MO to crash. Do you want to disable it? (Please note: If this is the first time you see this message for this plugin you may want to give it another try. The plugin may be able to recover from the problem) - + Failed to start "%1" - + Waiting Attente - + Please press OK once you're logged into steam. Veuillez cliquer OK une fois connecté à steam. - + "%1" not found "%1" introuvable - + Start Steam? - + Steam is required to be running already to correctly start the game. Should MO try to start steam now? - + Also in: <br> - + No conflict Aucun conflit - + <Edit...> <Modifier...> - + Failed to refresh list of esps: %s - + This bsa is enabled in the ini file so it may be required! - + This archive will still be loaded since there is a plugin of the same name but its files will not follow installation order! - + Activating Network Proxy - - + + Installation successful Installation réussie - - + + Configure Mod Configurer mod - - + + This mod contains ini tweaks. Do you want to configure them now? Ce mod contient des ajustement pour les fichiers ini. Désirez-vous les configurer maintenant? - - + + mod "%1" not found - - + + Installation cancelled - - + + The mod was not installed completely. - + Some plugins could not be loaded - + Too many esps and esms enabled - - + + Description missing - + Choose Mod Choisir mod - + Mod Archive Archive de mod - + Start Tutorial? - + You're about to start a tutorial. For technical reasons it's not possible to end the tutorial early. Continue? - - + + Download started Téléchargement commencé - + failed to update mod list: %1 impossible de mettre à jour la liste de mods: %1 - + failed to spawn notepad.exe: %1 impossible de lancer notepad.exe: %1 - + failed to open %1 impossible d'ouvrir %1 - + failed to change origin name: %1 impossible de changer le nom d'origine: %1 - + Multiple esps activated, please check that they don't conflict. - - + + Create Mod... - + This will move all files from overwrite into a new, regular mod. Please enter a name: - + A mod with this name already exists - + Continue? - + The versioning scheme decides which version is considered newer than another. This function will guess the versioning scheme under the assumption that the installed version is outdated. - + Sorry - + I don't know a versioning scheme where %1 is newer than %2. - + <All> <Tous> - + <Checked> <Cochés> - + Plugin "%1" failed - + failed to init plugin %1: %2 - + The following plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version: - + The game doesn't allow more than 256 active plugins (including the official ones) to be loaded. You have to disable some unused plugins or merge some plugins into one. You can find a guide here: <a href="http://wiki.step-project.com/Guide:Merging_Plugins">http://wiki.step-project.com/Guide:Merging_Plugins</a> - + Failed to move "%1" from mod "%2" to "%3": %4 - + <Unchecked> <Décochés> - + <Update> <Rafraichir> - + <No category> - + <Conflicted> - + <Not Endorsed> - + failed to rename mod: %1 impossible de renommer le mod: %1 - + Overwrite? - + This will replace the existing mod "%1". Continue? - + failed to remove mod "%1" - - - + + + failed to rename "%1" to "%2" - - - + + + Confirm Confirmer - + Remove the following mods?<br><ul>%1</ul> - + failed to remove mod: %1 - - + + Failed - + Installation file no longer exists - + Mods installed with old versions of MO can't be reinstalled in this way. - - + + You need to be logged in with Nexus to endorse - - + + Extract BSA - + This mod contains at least one BSA. Do you want to unpack it? (This removes the BSA after completion. If you don't know about BSAs, just select no) - - - + + + failed to read %1: %2 Échec de lecture %1: %2 - - + + This archive contains invalid hashes. Some files may be broken. - + Nexus ID for this Mod is unknown @@ -2179,391 +2174,391 @@ This function will guess the versioning scheme under the assumption that the ins Choisir priorité - + Really enable all visible mods? - + Really disable all visible mods? - + Choose what to export - + Everything - + All installed mods are included in the list - + Active Mods - + Only active (checked) mods from your current profile are included - + Visible - + All mods visible in the mod list are included - + export failed: %1 - + Install Mod... Installer mod... - + Enable all visible Activer tous les mods visibles - + Disable all visible Désactiver tous les mods visibles - + Check all for update Vérifier toutes les mises à jour - + Export to csv... - + Sync to Mods... - + Restore Backup - + Remove Backup... - + Set Category Assigner catégorie - + Primary Category - + Change versioning scheme - + Un-ignore update - + Ignore update - + Rename Mod... Renommer mod... - + Remove Mod... Supprimer mod... - + Reinstall Mod - + Un-Endorse - - + + Endorse - + Won't endorse - + Endorsement state unknown - + Ignore missing data - + Visit on Nexus - + Open in explorer - + Information... Information... - - + + Exception: - - + + Unknown exception - + <Multiple> - + Fix Mods... Réparer mods... - - + + failed to remove %1 Impossible de supprimer %1 - - + + failed to create %1 impossible de créer %1 - + Can't change download directory while downloads are in progress! - + Download failed - + failed to write to file %1 impossible d'écrire dans le fichier %1 - + %1 written %1 écrit - + Select binary - + Binary Programme - + Enter Name - + Please enter a name for the executable - + Not an executable - + This is not a recognized executable. - - + + Replace file? - + There already is a hidden version of this file. Replace it? - - + + File operation failed - - + + Failed to remove "%1". Maybe you lack the required file permissions? - + There already is a visible version of this file. Replace it? - + Update available Mise à jour disponible - + Open/Execute - + Add as Executable - + Un-Hide - + Hide - + Write To File... Écriture du fichier... - + Do you want to endorse Mod Organizer on %1 now? - + Remove Supprimer - + Unlock load order - + Lock load order - + Request to Nexus failed: %1 - - + + login successful - + login failed: %1. Trying to download anyway - + login failed: %1 - + login failed: %1. You need to log-in with Nexus to update MO. - + Error Erreur - + failed to extract %1 (errorcode %2) - + Extract... - + Edit Categories... - + Enable all - + Disable all @@ -4929,18 +4924,18 @@ p, li { white-space: pre-wrap; } "%1" introuvable - + Please use "Help" from the toolbar to get usage instructions to all elements Veuillez utiliser l'aide dans la barre d'outil pour obtenir des instructions à propos de tous les éléments - - + + <Manage...> <Gérer...> - + failed to parse profile %1: %2 impossible d'analyser le profil %1: %2 diff --git a/src/organizer_ru.ts b/src/organizer_ru.ts index d377c1e0..f7518508 100644 --- a/src/organizer_ru.ts +++ b/src/organizer_ru.ts @@ -263,11 +263,6 @@ p, li { white-space: pre-wrap; } Placeholder Заполнитель - - - KB - - @@ -1359,8 +1354,8 @@ BSA, отмеченные здесь, загружаются так, чтобы - - + + Refresh Обновить @@ -1540,7 +1535,7 @@ p, li { white-space: pre-wrap; } - + Update Обновление @@ -1551,7 +1546,7 @@ p, li { white-space: pre-wrap; } - + No Problems Проблем не обнаружено @@ -1584,7 +1579,7 @@ Right now this has very limited functionality - + Endorse Mod Organizer Одобрить Mod Organizer @@ -1604,219 +1599,219 @@ Right now this has very limited functionality Меню Пуск - + Problems Проблемы - + There are potential problems with your setup Есть возможные проблемы с вашей установкой - + Everything seems to be in order Кажется всё в порядке - + Help on UI Справка по интерфейсу - + Documentation Wiki Wiki-документация - + Report Issue Сообщить о проблеме - + Tutorials Уроки - + failed to save archives order, do you have write access to "%1"? не удалось сохранить порядок архивов, у вас имеется доступ на запись к "%1"? - + failed to save load order: %1 не удалось сохранить порядок загрузки: %1 - + Name Имя - + Please enter a name for the new profile Введите имя нового профиля - + failed to create profile: %1 не удалось создать профиль: %1 - + Show tutorial? Показать урок? - + You are starting Mod Organizer for the first time. Do you want to show a tutorial of its basic features? If you choose no you can always start the tutorial from the "Help"-menu. Вы запустили Mod Organizer впервые. Вы хотите просмотреть уроки по основным возможностям? В случае отказа вы всегда можете открыть уроки из меню "Помощь". - + Downloads in progress Загрузки в процессе - + There are still downloads in progress, do you really want to quit? Загрузки всё ещё в процессе, вы правда хотите выйти? - + failed to read savegame: %1 не удалось прочесть сохранение: %1 - + Plugin "%1" failed: %2 Плагин "%1" не удалось: %2 - + Plugin "%1" failed Плагин "%1" не удалось - + failed to init plugin %1: %2 не удалось инициализировать плагин %1: %2 - + Plugin error - + It appears the plugin "%1" failed to load last startup and caused MO to crash. Do you want to disable it? (Please note: If this is the first time you see this message for this plugin you may want to give it another try. The plugin may be able to recover from the problem) - + Failed to start "%1" Не удалось запустить "%1" - + Waiting Ожидание - + Please press OK once you're logged into steam. Нажмите OK как только вы войдете в Steam. - + "%1" not found "%1" не найден - + Start Steam? Запустить Steam? - + Steam is required to be running already to correctly start the game. Should MO try to start steam now? Требуется запущенный Steam, для корректного запуска игры. Должен ли MO попытаться запустить Steam сейчас? - + Also in: <br> Также в: <br> - + No conflict Конфликтов нет - + <Edit...> <Правка...> - + Failed to refresh list of esps: %s - + This bsa is enabled in the ini file so it may be required! Этот bsa подключен через ini, так что он может быть необходим! - + This archive will still be loaded since there is a plugin of the same name but its files will not follow installation order! Этот архив все равно будет загружен, так как есть плагин с одноименным названием, но его файлы не будут следовать порядку установки! - + Activating Network Proxy Подключение сетевого прокси - - + + Installation successful Установка завершена - - + + Configure Mod Настройка мода - - + + This mod contains ini tweaks. Do you want to configure them now? Этот мод включает настройки ini. Вы хотите настроить их сейчас? - - + + mod "%1" not found мод "%1" не найден - - + + Installation cancelled Установка отменена - - + + The mod was not installed completely. Мод не был установлен полностью. - + Some plugins could not be loaded Некоторые плагины не могут быть загружены @@ -1825,639 +1820,639 @@ Right now this has very limited functionality Следующие плагины не могут быть загружены. Причина может быть в отсутствующих зависимостях (таких как python) или в устаревшей версии:<ul> - + Too many esps and esms enabled - - + + Description missing - + The following plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version: - + The game doesn't allow more than 256 active plugins (including the official ones) to be loaded. You have to disable some unused plugins or merge some plugins into one. You can find a guide here: <a href="http://wiki.step-project.com/Guide:Merging_Plugins">http://wiki.step-project.com/Guide:Merging_Plugins</a> - + Choose Mod Выберете мод - + Mod Archive Архив мода - + Start Tutorial? Начать обучение? - + You're about to start a tutorial. For technical reasons it's not possible to end the tutorial early. Continue? Вы собираетесь открыть обучение. По техническим причинам будет невозможно досрочно закончить обучение. Продолжить? - - + + Download started Загрузка начата - + failed to update mod list: %1 не удалось обновить список модов: %1 - + failed to spawn notepad.exe: %1 не удалось вызвать notepad.exe: %1 - + failed to open %1 не удалось открыть %1 - + failed to change origin name: %1 не удалось изменить оригинальное имя: %1 - + Failed to move "%1" from mod "%2" to "%3": %4 - + <Checked> <Подключен> - + <Unchecked> <Отключен> - + <Update> <Обновлен> - + <No category> <Без категории> - + <Conflicted> <Конфликтует> - + <Not Endorsed> - + failed to rename mod: %1 не удалось переименовать мод: %1 - + Overwrite? Перезаписать? - + This will replace the existing mod "%1". Continue? Это заменит существующий мод "%1". Продолжить? - + failed to remove mod "%1" не удалось удалить мод "%1" - - - + + + failed to rename "%1" to "%2" не удалось переименовать "%1" в "%2" - + Multiple esps activated, please check that they don't conflict. Подключено несколько esp, выберете из них не конфликтующие. - - - + + + Confirm Подтверждение - + Remove the following mods?<br><ul>%1</ul> Удалить следующие моды?<br><ul>%1</ul> - + failed to remove mod: %1 не удалось удалить мод: %1 - - + + Failed Неудача - + Installation file no longer exists Установочный файл больше не существует - + Mods installed with old versions of MO can't be reinstalled in this way. Моды, установленные с использованием старых версий MO не могут быть перестановленны таким образом. - - + + You need to be logged in with Nexus to endorse Вы должны быть авторизированы на Nexus, чтобы одобрять. - - + + Extract BSA Извлечь BSA - + This mod contains at least one BSA. Do you want to unpack it? (This removes the BSA after completion. If you don't know about BSAs, just select no) Этот мод включает как минимум один BSA. Вы хотите распаковать их? (Это удалит BSA после завершения. Если вы не знаете ничего о BSAs, просто откажитесь) - - - + + + failed to read %1: %2 не удалось прочесть %1: %2 - - + + This archive contains invalid hashes. Some files may be broken. Архив содержит неверные хеши. Некоторые файлы могут быть испорчены. - + Nexus ID for this Mod is unknown Nexus ID для этого мода неизвестен - - + + Create Mod... Создать мод... - + This will move all files from overwrite into a new, regular mod. Please enter a name: Это переместит все файлы от перезаписи в новый, отдельный мод. Пожалуйста, введите имя: - + A mod with this name already exists Мод с таким именем уже существует - + Continue? - + The versioning scheme decides which version is considered newer than another. This function will guess the versioning scheme under the assumption that the installed version is outdated. - + Sorry - + I don't know a versioning scheme where %1 is newer than %2. - + Really enable all visible mods? Действительно подключить все видимые моды? - + Really disable all visible mods? Действительно отключить все видимые моды? - + Choose what to export Выберете, что экспортировать - + Everything Всё - + All installed mods are included in the list Все установленные моды, включенные в список - + Active Mods Активные моды - + Only active (checked) mods from your current profile are included Включены все активные (подключенные) моды вашего текущего профиля - + Visible Видимые - + All mods visible in the mod list are included Включены все моды, видимые в списке модов - + export failed: %1 экспорт не удался: %1 - + Install Mod... Установить мод... - + Enable all visible Включить все видимые - + Disable all visible Отключить все видимые - + Check all for update Проверить все на обновления - + Export to csv... Экспорт в csv... - + Sync to Mods... Синхронизировать с модами... - + Restore Backup Восстановить из резервной копии - + Remove Backup... Удалить резервную копию... - + Set Category Задать категорию - + Primary Category Основная категория - + Change versioning scheme - + Un-ignore update - + Ignore update - + Rename Mod... Переименовать мод... - + Remove Mod... Удалить мод... - + Reinstall Mod Переустановить мод - + Un-Endorse Отменить одобрение - - + + Endorse Одобрить - + Won't endorse Не одобрять - + Endorsement state unknown Статус одобрения неизвестен - + Ignore missing data Игнорировать отсутствующие данные - + Visit on Nexus Перейти на Nexus - + Open in explorer Открыть в проводнике - + Information... Информация... - - + + Exception: Исключение: - - + + Unknown exception Неизвестное исключение - + <All> <Все> - + <Multiple> <Несколько> - + Fix Mods... Исправить моды... - - + + failed to remove %1 не удалось удалить %1 - - + + failed to create %1 не удалось создать %1 - + Can't change download directory while downloads are in progress! Нельзя изменить каталог для загрузок, когда загрузки ещё не завершены! - + Download failed Загрузка не удалась - + failed to write to file %1 ошибка записи в файл %1 - + %1 written %1 записан - + Select binary Выбрать исполняемый файл - + Binary Исполняемый файл - + Enter Name Введите имя - + Please enter a name for the executable Введите название для программы - + Not an executable Не является исполняемым - + This is not a recognized executable. Это неверный исполняемый файл. - - + + Replace file? Заменить файл? - + There already is a hidden version of this file. Replace it? Уже существует скрытая версия этого файла. Заменить? - - + + File operation failed Операция с файлом не удалась - - + + Failed to remove "%1". Maybe you lack the required file permissions? Не удалось удалить "%1". Может быть, вам не хватает необходимых прав доступа к файлу? - + There already is a visible version of this file. Replace it? Видимая версия этого файла уже существует. Заменить? - + Update available Доступно обновление - + Open/Execute Открыть/Выполнить - + Add as Executable Добавить как исполняемый - + Un-Hide Показать - + Hide Скрыть - + Write To File... Записать в файл... - + Do you want to endorse Mod Organizer on %1 now? Вы хотите одобрить Mod Organizer на %1 сейчас? - + Request to Nexus failed: %1 Запрос на Nexus не удался: %1 - - + + login successful успешный вход - + login failed: %1. Trying to download anyway вход не удался: %1. Пытаюсь загрузить всё равно - + login failed: %1 войти не удалось: %1 - + login failed: %1. You need to log-in with Nexus to update MO. войти не удалось: %1. Вам нужно войти на Nexus, чтобы обновить MO. - + Error Ошибка - + failed to extract %1 (errorcode %2) не удалось извлечь %1 (код ошибки %2) - + Extract... Распаковка... - + Edit Categories... Изменить категории... - + Remove - + Enable all Включить все - + Disable all Отключить все - + Unlock load order Разблокировать порядок загрузки - + Lock load order Заблокировать порядок загрузки @@ -4033,18 +4028,18 @@ p, li { white-space: pre-wrap; } - + Please use "Help" from the toolbar to get usage instructions to all elements Используйте пункт "Справка" на панели инструментов, чтобы получить инструкции по использованию всех элементов. - - + + <Manage...> <Управлять...> - + failed to parse profile %1: %2 не удалось обработать профиль %1: %2 diff --git a/src/organizer_tr.ts b/src/organizer_tr.ts index c23ee738..92e0b7b9 100644 --- a/src/organizer_tr.ts +++ b/src/organizer_tr.ts @@ -269,11 +269,6 @@ p, li { white-space: pre-wrap; } Placeholder Yer tutucu - - - KB - - @@ -1508,8 +1503,8 @@ BSAs checked here are loaded in such a way that your installation order is obeye - - + + Refresh @@ -1683,7 +1678,7 @@ p, li { white-space: pre-wrap; } - + Update @@ -1694,7 +1689,7 @@ p, li { white-space: pre-wrap; } - + No Problems @@ -1724,7 +1719,7 @@ Right now this has very limited functionality - + Endorse Mod Organizer @@ -1744,854 +1739,854 @@ Right now this has very limited functionality - + Problems - + There are potential problems with your setup - + Everything seems to be in order - + Help on UI - + Documentation Wiki - + Report Issue - + Tutorials - + failed to save load order: %1 - + failed to save archives order, do you have write access to "%1"? - + Name İsim - + Please enter a name for the new profile - + failed to create profile: %1 - + Show tutorial? - + You are starting Mod Organizer for the first time. Do you want to show a tutorial of its basic features? If you choose no you can always start the tutorial from the "Help"-menu. - + Downloads in progress - + There are still downloads in progress, do you really want to quit? - + failed to read savegame: %1 - + Plugin "%1" failed: %2 - + Failed to start "%1" - + Waiting - + Please press OK once you're logged into steam. - + "%1" not found - + Start Steam? - + Steam is required to be running already to correctly start the game. Should MO try to start steam now? - + Also in: <br> - + No conflict - + <Edit...> - + This bsa is enabled in the ini file so it may be required! - + This archive will still be loaded since there is a plugin of the same name but its files will not follow installation order! - + Activating Network Proxy - - + + Installation successful - - + + Configure Mod - - + + This mod contains ini tweaks. Do you want to configure them now? - - + + mod "%1" not found - - + + Installation cancelled - - + + The mod was not installed completely. - + Some plugins could not be loaded - + Choose Mod - + Mod Archive - + Start Tutorial? - + You're about to start a tutorial. For technical reasons it's not possible to end the tutorial early. Continue? - - + + Download started - + failed to update mod list: %1 - + failed to spawn notepad.exe: %1 - + failed to open %1 - + failed to change origin name: %1 - + Multiple esps activated, please check that they don't conflict. - - + + Create Mod... - + This will move all files from overwrite into a new, regular mod. Please enter a name: - + A mod with this name already exists - + <All> - + <Checked> - + Plugin "%1" failed - + failed to init plugin %1: %2 - + Plugin error - + It appears the plugin "%1" failed to load last startup and caused MO to crash. Do you want to disable it? (Please note: If this is the first time you see this message for this plugin you may want to give it another try. The plugin may be able to recover from the problem) - + Failed to refresh list of esps: %s - + Too many esps and esms enabled - - + + Description missing - + The following plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version: - + The game doesn't allow more than 256 active plugins (including the official ones) to be loaded. You have to disable some unused plugins or merge some plugins into one. You can find a guide here: <a href="http://wiki.step-project.com/Guide:Merging_Plugins">http://wiki.step-project.com/Guide:Merging_Plugins</a> - + Failed to move "%1" from mod "%2" to "%3": %4 - + <Unchecked> - + <Update> - + <No category> - + <Conflicted> - + <Not Endorsed> - + failed to rename mod: %1 - + Overwrite? - + This will replace the existing mod "%1". Continue? - + failed to remove mod "%1" - - - + + + failed to rename "%1" to "%2" "%1"yi "%2" olarak yeniden adlandırma başarılı olamadı. - - - + + + Confirm Onayla - + Remove the following mods?<br><ul>%1</ul> - + failed to remove mod: %1 - - + + Failed - + Installation file no longer exists - + Mods installed with old versions of MO can't be reinstalled in this way. - - + + You need to be logged in with Nexus to endorse - - + + Extract BSA - + This mod contains at least one BSA. Do you want to unpack it? (This removes the BSA after completion. If you don't know about BSAs, just select no) - - - + + + failed to read %1: %2 %1: %2 okunamadı - - + + This archive contains invalid hashes. Some files may be broken. - + Nexus ID for this Mod is unknown - + Continue? - + The versioning scheme decides which version is considered newer than another. This function will guess the versioning scheme under the assumption that the installed version is outdated. - + Sorry - + I don't know a versioning scheme where %1 is newer than %2. - + Really enable all visible mods? - + Really disable all visible mods? - + Choose what to export - + Everything - + All installed mods are included in the list - + Active Mods - + Only active (checked) mods from your current profile are included - + Visible - + All mods visible in the mod list are included - + export failed: %1 - + Install Mod... - + Enable all visible - + Disable all visible - + Check all for update - + Export to csv... - + Sync to Mods... - + Restore Backup - + Remove Backup... - + Set Category - + Primary Category - + Change versioning scheme - + Un-ignore update - + Ignore update - + Rename Mod... - + Remove Mod... - + Reinstall Mod - + Un-Endorse - - + + Endorse - + Won't endorse - + Endorsement state unknown - + Ignore missing data - + Visit on Nexus - + Open in explorer - + Information... - - + + Exception: - - + + Unknown exception - + <Multiple> - + Fix Mods... - - + + failed to remove %1 - - + + failed to create %1 - + Can't change download directory while downloads are in progress! - + Download failed - + failed to write to file %1 - + %1 written - + Select binary - + Binary İkili değer - + Enter Name - + Please enter a name for the executable - + Not an executable - + This is not a recognized executable. - - + + Replace file? - + There already is a hidden version of this file. Replace it? - - + + File operation failed - - + + Failed to remove "%1". Maybe you lack the required file permissions? - + There already is a visible version of this file. Replace it? - + Update available - + Open/Execute - + Add as Executable - + Un-Hide - + Hide - + Write To File... - + Do you want to endorse Mod Organizer on %1 now? - + Remove - + Unlock load order - + Lock load order - + Request to Nexus failed: %1 - - + + login successful - + login failed: %1. Trying to download anyway - + login failed: %1 - + login failed: %1. You need to log-in with Nexus to update MO. - + Error - + failed to extract %1 (errorcode %2) - + Extract... - + Edit Categories... - + Enable all - + Disable all @@ -4084,18 +4079,18 @@ p, li { white-space: pre-wrap; } - + Please use "Help" from the toolbar to get usage instructions to all elements - - + + <Manage...> - + failed to parse profile %1: %2 diff --git a/src/organizer_zh_CN.ts b/src/organizer_zh_CN.ts index 5ef313be..74918970 100644 --- a/src/organizer_zh_CN.ts +++ b/src/organizer_zh_CN.ts @@ -268,11 +268,6 @@ p, li { white-space: pre-wrap; } Placeholder 占位符 - - - KB - - @@ -1554,8 +1549,8 @@ BSAs checked here are loaded in such a way that your installation order is obeye - - + + Refresh 刷新 @@ -1735,7 +1730,7 @@ p, li { white-space: pre-wrap; } - + Update 更新 @@ -1746,7 +1741,7 @@ p, li { white-space: pre-wrap; } - + No Problems 没有问题 @@ -1779,7 +1774,7 @@ Right now this has very limited functionality - + Endorse Mod Organizer @@ -1799,17 +1794,17 @@ Right now this has very limited functionality - + Problems 问题 - + There are potential problems with your setup 您的安装中存在潜在的问题 - + Everything seems to be in order 一切井然有序 @@ -1826,22 +1821,22 @@ Right now this has very limited functionality <li>.Net 未安装或版本过旧。想要运行 NCC 您必须先安装 .Net,您可以在以下地址中获取: <a href="%1">%1</a></li> - + Help on UI 界面帮助 - + Documentation Wiki 说明文档 (维基) - + Report Issue 报告问题 - + Tutorials @@ -1850,431 +1845,431 @@ Right now this has very limited functionality 无法保存加载顺序 - + failed to save load order: %1 无法保存加载顺序: %1 - + failed to save archives order, do you have write access to "%1"? 无法保存档案顺序,您确定您有权限更改 "%1"? - + Name 名称 - + Please enter a name for the new profile - + failed to create profile: %1 无法创建配置文件: %1 - + Show tutorial? - + You are starting Mod Organizer for the first time. Do you want to show a tutorial of its basic features? If you choose no you can always start the tutorial from the "Help"-menu. - + Downloads in progress 正在下载 - + There are still downloads in progress, do you really want to quit? 仍有正在进行中的下载,您确定要退出吗? - + failed to read savegame: %1 无法读取存档: %1 - + Plugin "%1" failed: %2 - + Plugin error - + It appears the plugin "%1" failed to load last startup and caused MO to crash. Do you want to disable it? (Please note: If this is the first time you see this message for this plugin you may want to give it another try. The plugin may be able to recover from the problem) - + Failed to start "%1" 无法启动 "%1" - + Waiting 稍等 - + Please press OK once you're logged into steam. 当您登录 Steam 时请点击确定。 - + "%1" not found "%1" 未找到 - + Start Steam? 启动 Steam? - + Steam is required to be running already to correctly start the game. Should MO try to start steam now? 想要正确地启动遊戲,Steam 必须处于运行状态。MO 要立即启动 Steam 吗? - + Also in: <br> 也在: <br> - + No conflict 没有冲突 - + <Edit...> <编辑...> - + Failed to refresh list of esps: %s - + This bsa is enabled in the ini file so it may be required! 该 BSA 已在 Ini 文件中启用,因此它可能是必需的。 - + This archive will still be loaded since there is a plugin of the same name but its files will not follow installation order! 此档案还是会被加载,因为存在同名插件。不过它所包含的的文件不会遵循安装顺序! - + Activating Network Proxy - - + + Installation successful 安装成功 - - + + Configure Mod 配置 Mod - - + + This mod contains ini tweaks. Do you want to configure them now? 此 Mod 中包含 Ini 设定文件,您想现在就对它们进行配置吗? - - + + mod "%1" not found Mod "%1" 未找到 - - + + Installation cancelled 安装已取消 - - + + The mod was not installed completely. Mod 没有完全安装。 - + Some plugins could not be loaded - + Too many esps and esms enabled - - + + Description missing - + Choose Mod 选择 Mod - + Mod Archive Mod 压缩包 - + Start Tutorial? - + You're about to start a tutorial. For technical reasons it's not possible to end the tutorial early. Continue? - - + + Download started 开始下载 - + failed to update mod list: %1 无法更新 Mod 列表: %1 - + failed to spawn notepad.exe: %1 无法生成 notepad.exe: %1 - + failed to open %1 无法打开 %1 - + failed to change origin name: %1 无法更改原始文件名: %1 - + Multiple esps activated, please check that they don't conflict. - - + + Create Mod... - + This will move all files from overwrite into a new, regular mod. Please enter a name: - + A mod with this name already exists - + Continue? - + The versioning scheme decides which version is considered newer than another. This function will guess the versioning scheme under the assumption that the installed version is outdated. - + Sorry - + I don't know a versioning scheme where %1 is newer than %2. - + <All> <全部> - + <Checked> <已勾选> - + Plugin "%1" failed - + failed to init plugin %1: %2 - + The following plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version: - + The game doesn't allow more than 256 active plugins (including the official ones) to be loaded. You have to disable some unused plugins or merge some plugins into one. You can find a guide here: <a href="http://wiki.step-project.com/Guide:Merging_Plugins">http://wiki.step-project.com/Guide:Merging_Plugins</a> - + Failed to move "%1" from mod "%2" to "%3": %4 - + <Unchecked> <未勾选> - + <Update> <有更新> - + <No category> <无类别> - + <Conflicted> - + <Not Endorsed> - + failed to rename mod: %1 无法重命名 Mod: %1 - + Overwrite? - + This will replace the existing mod "%1". Continue? - + failed to remove mod "%1" - - - + + + failed to rename "%1" to "%2" - - - + + + Confirm 确认 - + Remove the following mods?<br><ul>%1</ul> - + failed to remove mod: %1 无法移动 Mod: %1 - - + + Failed 失败 - + Installation file no longer exists 安装文件不复存在 - + Mods installed with old versions of MO can't be reinstalled in this way. 旧版 MO 安装的 Mod 无法使用此方法重新安装。 - - + + You need to be logged in with Nexus to endorse - - + + Extract BSA 解压 BSA - + This mod contains at least one BSA. Do you want to unpack it? (This removes the BSA after completion. If you don't know about BSAs, just select no) 此 Mod 中至少包含一个 BSA。您确定要解压吗? (解压完成后,BSA 文件将会被删除。如果您不了解 BSA 的话,请选择“否”) - - - + + + failed to read %1: %2 无法读取 %1: %2 - - + + This archive contains invalid hashes. Some files may be broken. 压缩包 Hash 值错误。部分文件可能已经损坏。 - + Nexus ID for this Mod is unknown 此 Mod 的N网 ID 未知 @@ -2287,391 +2282,391 @@ This function will guess the versioning scheme under the assumption that the ins 选择优先级 - + Really enable all visible mods? 确定要启用全部可见的 Mod 吗? - + Really disable all visible mods? 确定要禁用全部可见的 Mod 吗? - + Choose what to export - + Everything - + All installed mods are included in the list - + Active Mods - + Only active (checked) mods from your current profile are included - + Visible - + All mods visible in the mod list are included - + export failed: %1 - + Install Mod... 安装 Mod... - + Enable all visible 启用所有可见项目 - + Disable all visible 禁用所有可见项目 - + Check all for update 检查更新 - + Export to csv... - + Sync to Mods... 同步到 Mod... - + Restore Backup - + Remove Backup... - + Set Category 设置类别 - + Primary Category - + Change versioning scheme - + Un-ignore update - + Ignore update - + Rename Mod... 重命名... - + Remove Mod... 移除 Mod... - + Reinstall Mod 重新安装 Mod - + Un-Endorse - - + + Endorse - + Won't endorse - + Endorsement state unknown - + Ignore missing data - + Visit on Nexus 在N网上浏览 - + Open in explorer 在资源管理器中打开 - + Information... 信息... - - + + Exception: 例外: - - + + Unknown exception 未知的例外 - + <Multiple> - + Fix Mods... 修复 Mod... - - + + failed to remove %1 无法删除 %1 - - + + failed to create %1 无法创建 %1 - + Can't change download directory while downloads are in progress! 下载文件时不能修改下载目录! - + Download failed 下载失败 - + failed to write to file %1 无法写入文件 %1 - + %1 written 已写入 %1 - + Select binary 选择可执行文件 - + Binary - + Enter Name 输入名称 - + Please enter a name for the executable 请为程序输入一个名称 - + Not an executable 不是可执行程序 - + This is not a recognized executable. 无法识别的可执行文件 - - + + Replace file? 替换文件? - + There already is a hidden version of this file. Replace it? 已存在同名文件,但该文件被隐藏了。确定要覆盖吗? - - + + File operation failed 文件操作错误 - - + + Failed to remove "%1". Maybe you lack the required file permissions? - + There already is a visible version of this file. Replace it? - + Update available 更新可用 - + Open/Execute 打开/执行 - + Add as Executable 添加为可执行文件 - + Un-Hide 取消隐藏 - + Hide 隐藏 - + Write To File... 写入文件... - + Do you want to endorse Mod Organizer on %1 now? - + Remove 移除 - + Unlock load order - + Lock load order - + Request to Nexus failed: %1 - - + + login successful 登录成功 - + login failed: %1. Trying to download anyway 登录失败: %1,请尝试使用别的方法下载 - + login failed: %1 无法登录: %1 - + login failed: %1. You need to log-in with Nexus to update MO. 登录失败: %1。您需要登录到N网才能更新 MO - + Error 错误 - + failed to extract %1 (errorcode %2) 无法解压 %1 (错误代码 %2) - + Extract... 解压... - + Edit Categories... 编辑类别... - + Enable all 全部启用 - + Disable all 全部禁用 @@ -5303,18 +5298,18 @@ p, li { white-space: pre-wrap; } - + Please use "Help" from the toolbar to get usage instructions to all elements 请使用工具栏上的“帮助”来获得所有元素的使用说明 - - + + <Manage...> <管理...> - + failed to parse profile %1: %2 无法解析配置文件 %1: %2 diff --git a/src/organizer_zh_TW.ts b/src/organizer_zh_TW.ts index 70b41e50..76e0d658 100644 --- a/src/organizer_zh_TW.ts +++ b/src/organizer_zh_TW.ts @@ -268,11 +268,6 @@ p, li { white-space: pre-wrap; } Placeholder 占位符 - - - KB - - @@ -1554,8 +1549,8 @@ BSAs checked here are loaded in such a way that your installation order is obeye - - + + Refresh 重新整理 @@ -1735,7 +1730,7 @@ p, li { white-space: pre-wrap; } - + Update 更新 @@ -1746,7 +1741,7 @@ p, li { white-space: pre-wrap; } - + No Problems 沒有問題 @@ -1779,7 +1774,7 @@ Right now this has very limited functionality - + Endorse Mod Organizer @@ -1799,17 +1794,17 @@ Right now this has very limited functionality - + Problems 問題 - + There are potential problems with your setup 您的安裝中存在潛在的問題 - + Everything seems to be in order 一切井然有序 @@ -1826,22 +1821,22 @@ Right now this has very limited functionality <li>.Net 未安裝或版本過舊。想要運行 NCC 您必須先安裝 .Net,您可以在以下地址中獲取: <a href="%1">%1</a></li> - + Help on UI 介面幫助 - + Documentation Wiki 說明文檔 (維基) - + Report Issue 報告問題 - + Tutorials @@ -1850,431 +1845,431 @@ Right now this has very limited functionality 無法儲存加載順序 - + failed to save load order: %1 無法儲存加載順序: %1 - + failed to save archives order, do you have write access to "%1"? 無法儲存檔案順序,您確定您有權限更改 "%1"? - + Name 名稱 - + Please enter a name for the new profile - + failed to create profile: %1 無法建立配置檔案: %1 - + Show tutorial? - + You are starting Mod Organizer for the first time. Do you want to show a tutorial of its basic features? If you choose no you can always start the tutorial from the "Help"-menu. - + Downloads in progress 正在下載 - + There are still downloads in progress, do you really want to quit? 仍有正在進行中的下載,您確定要退出嗎? - + failed to read savegame: %1 無法讀取存檔: %1 - + Plugin "%1" failed: %2 - + Plugin error - + It appears the plugin "%1" failed to load last startup and caused MO to crash. Do you want to disable it? (Please note: If this is the first time you see this message for this plugin you may want to give it another try. The plugin may be able to recover from the problem) - + Failed to start "%1" 無法啟動 "%1" - + Waiting 稍等 - + Please press OK once you're logged into steam. 當您登入 Steam 時請點擊確定。 - + "%1" not found "%1" 未找到 - + Start Steam? 啟動 Steam? - + Steam is required to be running already to correctly start the game. Should MO try to start steam now? 想要正確地啟動遊戲,Steam 必須處於運行狀態,MO 要立即啟動 Steam 嗎? - + Also in: <br> 也在: <br> - + No conflict 沒有衝突 - + <Edit...> <編輯...> - + Failed to refresh list of esps: %s - + This bsa is enabled in the ini file so it may be required! 該 BSA 已在 Ini 檔案中啟用,因此它可能是必需的。 - + This archive will still be loaded since there is a plugin of the same name but its files will not follow installation order! 此檔案還是會被加載,因為存在同名插件。不過它所包含的的檔案不會遵循安裝順序! - + Activating Network Proxy - - + + Installation successful 安裝成功 - - + + Configure Mod 配置 Mod - - + + This mod contains ini tweaks. Do you want to configure them now? 此 Mod 中包含 Ini 設定檔案,您想現在就對它們進行配置嗎? - - + + mod "%1" not found Mod "%1" 未找到 - - + + Installation cancelled 安裝已取消 - - + + The mod was not installed completely. Mod 沒有完全安裝。 - + Some plugins could not be loaded - + Too many esps and esms enabled - - + + Description missing - + Choose Mod 選擇 Mod - + Mod Archive Mod 壓縮包 - + Start Tutorial? - + You're about to start a tutorial. For technical reasons it's not possible to end the tutorial early. Continue? - - + + Download started 開始下載 - + failed to update mod list: %1 無法更新 Mod 列表: %1 - + failed to spawn notepad.exe: %1 無法生成 notepad.exe: %1 - + failed to open %1 無法開啟 %1 - + failed to change origin name: %1 無法更改原始檔案名: %1 - + Multiple esps activated, please check that they don't conflict. - - + + Create Mod... - + This will move all files from overwrite into a new, regular mod. Please enter a name: - + A mod with this name already exists - + Continue? - + The versioning scheme decides which version is considered newer than another. This function will guess the versioning scheme under the assumption that the installed version is outdated. - + Sorry - + I don't know a versioning scheme where %1 is newer than %2. - + <All> <全部> - + <Checked> <已勾選> - + Plugin "%1" failed - + failed to init plugin %1: %2 - + The following plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version: - + The game doesn't allow more than 256 active plugins (including the official ones) to be loaded. You have to disable some unused plugins or merge some plugins into one. You can find a guide here: <a href="http://wiki.step-project.com/Guide:Merging_Plugins">http://wiki.step-project.com/Guide:Merging_Plugins</a> - + Failed to move "%1" from mod "%2" to "%3": %4 - + <Unchecked> <未勾選> - + <Update> <有更新> - + <No category> <無類別> - + <Conflicted> - + <Not Endorsed> - + failed to rename mod: %1 無法重新命名 Mod: %1 - + Overwrite? - + This will replace the existing mod "%1". Continue? - + failed to remove mod "%1" - - - + + + failed to rename "%1" to "%2" - - - + + + Confirm 確認 - + Remove the following mods?<br><ul>%1</ul> - + failed to remove mod: %1 無法移動 Mod: %1 - - + + Failed 失敗 - + Installation file no longer exists 安裝檔案不複存在 - + Mods installed with old versions of MO can't be reinstalled in this way. 舊版 MO 安裝的 Mod 無法使用此方法重新安裝。 - - + + You need to be logged in with Nexus to endorse - - + + Extract BSA 解壓 BSA - + This mod contains at least one BSA. Do you want to unpack it? (This removes the BSA after completion. If you don't know about BSAs, just select no) 此 Mod 中至少包含一個 BSA。您確定要解壓嗎? (解壓完成後,BSA 檔案將會被刪除。如果您不瞭解 BSA 的話,請選擇“否”) - - - + + + failed to read %1: %2 無法讀取 %1: %2 - - + + This archive contains invalid hashes. Some files may be broken. 壓縮包 Hash 值錯誤。部分檔案可能已經損壞。 - + Nexus ID for this Mod is unknown 此 Mod 的N網 ID 未知 @@ -2287,391 +2282,391 @@ This function will guess the versioning scheme under the assumption that the ins 選擇優先級 - + Really enable all visible mods? 確定要啟用全部可見的 Mod 嗎? - + Really disable all visible mods? 確定要禁用全部可見的 Mod 嗎? - + Choose what to export - + Everything - + All installed mods are included in the list - + Active Mods - + Only active (checked) mods from your current profile are included - + Visible - + All mods visible in the mod list are included - + export failed: %1 - + Install Mod... 安裝 Mod... - + Enable all visible 啟用所有可見項目 - + Disable all visible 禁用所有可見項目 - + Check all for update 檢查更新 - + Export to csv... - + Sync to Mods... 同步到 Mod... - + Restore Backup - + Remove Backup... - + Set Category 設定類別 - + Primary Category - + Change versioning scheme - + Un-ignore update - + Ignore update - + Rename Mod... 重新命名... - + Remove Mod... 移除 Mod... - + Reinstall Mod 重新安裝 Mod - + Un-Endorse - - + + Endorse - + Won't endorse - + Endorsement state unknown - + Ignore missing data - + Visit on Nexus 在N網上流覽 - + Open in explorer 在檔案總管中開啟 - + Information... 訊息... - - + + Exception: 例外: - - + + Unknown exception 未知的例外 - + <Multiple> - + Fix Mods... 修復 Mod... - - + + failed to remove %1 無法刪除 %1 - - + + failed to create %1 無法建立 %1 - + Can't change download directory while downloads are in progress! 下載檔案時不能修改下載目錄! - + Download failed 下載失敗 - + failed to write to file %1 無法寫入檔案 %1 - + %1 written 已寫入 %1 - + Select binary 選擇可執行檔案 - + Binary - + Enter Name 輸入名稱 - + Please enter a name for the executable 請為程式輸入一個名稱 - + Not an executable 不是可執行程式 - + This is not a recognized executable. 無法識別的可執行檔案 - - + + Replace file? 取代檔案? - + There already is a hidden version of this file. Replace it? 已存在同名檔案,但該檔案被隱藏了。確定要覆蓋嗎? - - + + File operation failed 檔案操作錯誤 - - + + Failed to remove "%1". Maybe you lack the required file permissions? - + There already is a visible version of this file. Replace it? - + Update available 更新可用 - + Open/Execute 開啟/執行 - + Add as Executable 添加為可執行檔案 - + Un-Hide 取消隱藏 - + Hide 隱藏 - + Write To File... 寫入檔案... - + Do you want to endorse Mod Organizer on %1 now? - + Remove 移除 - + Unlock load order - + Lock load order - + Request to Nexus failed: %1 - - + + login successful 登入成功 - + login failed: %1. Trying to download anyway 登入失敗: %1,請嘗試使用別的方法下載 - + login failed: %1 無法登入: %1 - + login failed: %1. You need to log-in with Nexus to update MO. 登入失敗: %1。您需要登入到N網才能更新 MO - + Error 錯誤 - + failed to extract %1 (errorcode %2) 無法解壓 %1 (錯誤代碼 %2) - + Extract... 解壓... - + Edit Categories... 編輯類別... - + Enable all 全部啟用 - + Disable all 全部禁用 @@ -5303,18 +5298,18 @@ p, li { white-space: pre-wrap; } - + Please use "Help" from the toolbar to get usage instructions to all elements 請使用工具列上的“幫助”來獲得所有元素的使用說明 - - + + <Manage...> <管理...> - + failed to parse profile %1: %2 無法解析配置檔案 %1: %2 diff --git a/src/settings.h b/src/settings.h index 51ee6b92..abffc94b 100644 --- a/src/settings.h +++ b/src/settings.h @@ -251,6 +251,11 @@ public: */ bool pluginBlacklisted(const QString &fileName) const; + /** + * @return all loaded MO plugins + */ + std::vector plugins() const { return m_Plugins; } + private: QString obfuscate(const QString &password) const; -- cgit v1.3.1 From 4dc3538a7d14dd0f1aaa2e6c172745b63e251c86 Mon Sep 17 00:00:00 2001 From: Tannin Date: Sat, 4 Jan 2014 15:57:14 +0100 Subject: - nxmhandler will now ask before registering itself - downloads from nexus are now displayed before file information is retrieved - logging from the ui is now a bit more informative - download list now scrolls to bottom automatically --- src/downloadlist.cpp | 19 ++-- src/downloadlistsortproxy.cpp | 22 +++-- src/downloadlistwidget.cpp | 179 +++++++++++++++++++++----------------- src/downloadlistwidget.h | 3 + src/downloadlistwidgetcompact.cpp | 148 ++++++++++++++++++------------- src/downloadlistwidgetcompact.h | 2 + src/downloadmanager.cpp | 49 ++++++++++- src/downloadmanager.h | 25 ++++++ src/logbuffer.cpp | 15 +++- src/logbuffer.h | 2 + src/mainwindow.cpp | 12 ++- src/messagedialog.cpp | 1 + src/settings.cpp | 9 ++ src/settings.h | 7 ++ src/settingsdialog.cpp | 6 ++ src/settingsdialog.h | 2 + src/settingsdialog.ui | 44 +++++++--- 17 files changed, 368 insertions(+), 177 deletions(-) (limited to 'src/settings.h') diff --git a/src/downloadlist.cpp b/src/downloadlist.cpp index fe021a27..d280cdb6 100644 --- a/src/downloadlist.cpp +++ b/src/downloadlist.cpp @@ -34,9 +34,10 @@ DownloadList::DownloadList(DownloadManager *manager, QObject *parent) int DownloadList::rowCount(const QModelIndex&) const { - return m_Manager->numTotalDownloads(); + return m_Manager->numTotalDownloads() + m_Manager->numPendingDownloads(); } + int DownloadList::columnCount(const QModelIndex&) const { return 3; @@ -75,14 +76,18 @@ QVariant DownloadList::data(const QModelIndex &index, int role) const if (role == Qt::DisplayRole) { return index.row(); } else if (role == Qt::ToolTipRole) { - QString text = m_Manager->getFileName(index.row()) + "\n"; - if (m_Manager->isInfoIncomplete(index.row())) { - text += tr("Information missing, please select \"Query Info\" from the context menu to re-retrieve."); + if (index.row() < m_Manager->numTotalDownloads()) { + QString text = m_Manager->getFileName(index.row()) + "\n"; + if (m_Manager->isInfoIncomplete(index.row())) { + text += tr("Information missing, please select \"Query Info\" from the context menu to re-retrieve."); + } else { + NexusInfo info = m_Manager->getNexusInfo(index.row()); + text += QString("%1 (ID %2) %3").arg(info.m_ModName).arg(m_Manager->getModID(index.row())).arg(info.m_Version); + } + return text; } else { - NexusInfo info = m_Manager->getNexusInfo(index.row()); - text += QString("%1 (ID %2) %3").arg(info.m_ModName).arg(m_Manager->getModID(index.row())).arg(info.m_Version); + return tr("pending download"); } - return text; } else { return QVariant(); } diff --git a/src/downloadlistsortproxy.cpp b/src/downloadlistsortproxy.cpp index fc743574..7abe8579 100644 --- a/src/downloadlistsortproxy.cpp +++ b/src/downloadlistsortproxy.cpp @@ -37,13 +37,16 @@ bool DownloadListSortProxy::lessThan(const QModelIndex &left, { int leftIndex = sourceModel()->data(left).toInt(); int rightIndex = sourceModel()->data(right).toInt(); - - if (left.column() == DownloadList::COL_NAME) { - return m_Manager->getFileName(leftIndex).compare(m_Manager->getFileName(rightIndex), Qt::CaseInsensitive) < 0; - } else if (left.column() == DownloadList::COL_FILETIME) { - return m_Manager->getFileTime(leftIndex) < m_Manager->getFileTime(rightIndex); - } else if (left.column() == DownloadList::COL_STATUS) { - return m_Manager->getState(leftIndex) < m_Manager->getState(rightIndex); + if (leftIndex < m_Manager->numTotalDownloads()) { + if (left.column() == DownloadList::COL_NAME) { + return m_Manager->getFileName(leftIndex).compare(m_Manager->getFileName(rightIndex), Qt::CaseInsensitive) < 0; + } else if (left.column() == DownloadList::COL_FILETIME) { + return m_Manager->getFileTime(leftIndex) < m_Manager->getFileTime(rightIndex); + } else if (left.column() == DownloadList::COL_STATUS) { + return m_Manager->getState(leftIndex) < m_Manager->getState(rightIndex); + } else { + return leftIndex < rightIndex; + } } else { return leftIndex < rightIndex; } @@ -54,6 +57,9 @@ bool DownloadListSortProxy::filterAcceptsRow(int source_row, const QModelIndex&) { if (m_CurrentFilter.length() == 0) { return true; + } else if (source_row < m_Manager->numTotalDownloads()) { + return m_Manager->getFileName(source_row).contains(m_CurrentFilter, Qt::CaseInsensitive); + } else { + return false; } - return m_Manager->getFileName(source_row).contains(m_CurrentFilter, Qt::CaseInsensitive); } diff --git a/src/downloadlistwidget.cpp b/src/downloadlistwidget.cpp index b4d40799..68dd2adf 100644 --- a/src/downloadlistwidget.cpp +++ b/src/downloadlistwidget.cpp @@ -82,80 +82,100 @@ void DownloadListWidgetDelegate::drawCache(QPainter *painter, const QStyleOption } -void DownloadListWidgetDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const +void DownloadListWidgetDelegate::paintPendingDownload(int downloadIndex) const { - try { - auto iter = m_Cache.find(index.row()); - if (iter != m_Cache.end()) { - drawCache(painter, option, *iter); - return; - } - - m_ItemWidget->resize(QSize(m_View->columnWidth(0) + m_View->columnWidth(1) + m_View->columnWidth(2), option.rect.height())); + std::pair nexusids = m_Manager->getPendingDownload(downloadIndex); + m_NameLabel->setText(tr("< mod %1 file %2 >").arg(nexusids.first).arg(nexusids.second)); + m_SizeLabel->setText("???"); + m_InstallLabel->setVisible(true); + m_InstallLabel->setText(tr("Pending")); + m_Progress->setVisible(false); +} - int downloadIndex = index.data().toInt(); - QString name = m_Manager->getFileName(downloadIndex); - if (name.length() > 53) { - name.truncate(50); - name.append("..."); - } - m_NameLabel->setText(name); - m_SizeLabel->setText(QString::number(m_Manager->getFileSize(downloadIndex) / 1024)); - DownloadManager::DownloadState state = m_Manager->getState(downloadIndex); - if ((state == DownloadManager::STATE_PAUSED) || (state == DownloadManager::STATE_ERROR)) { - QPalette labelPalette; - m_InstallLabel->setVisible(true); - m_Progress->setVisible(false); +void DownloadListWidgetDelegate::paintRegularDownload(int downloadIndex) const +{ + QString name = m_Manager->getFileName(downloadIndex); + if (name.length() > 53) { + name.truncate(50); + name.append("..."); + } + m_NameLabel->setText(name); + m_SizeLabel->setText(QString::number(m_Manager->getFileSize(downloadIndex) / 1024)); + DownloadManager::DownloadState state = m_Manager->getState(downloadIndex); + if ((state == DownloadManager::STATE_PAUSED) || (state == DownloadManager::STATE_ERROR)) { + QPalette labelPalette; + m_InstallLabel->setVisible(true); + m_Progress->setVisible(false); #if QT_VERSION >= QT_VERSION_CHECK(5,0,0) - m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Paused - Double Click to resume", 0)); + m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Paused - Double Click to resume", 0)); #else - m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Paused - Double Click to resume", 0, QApplication::UnicodeUTF8)); + m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Paused - Double Click to resume", 0, QApplication::UnicodeUTF8)); #endif - labelPalette.setColor(QPalette::WindowText, Qt::darkRed); - m_InstallLabel->setPalette(labelPalette); - } else if (state == DownloadManager::STATE_FETCHINGMODINFO) { - m_InstallLabel->setText(tr("Fetching Info 1")); - m_Progress->setVisible(false); - } else if (state == DownloadManager::STATE_FETCHINGFILEINFO) { - m_InstallLabel->setText(tr("Fetching Info 2")); - m_Progress->setVisible(false); - } else if (state >= DownloadManager::STATE_READY) { - QPalette labelPalette; - m_InstallLabel->setVisible(true); - m_Progress->setVisible(false); - if (state == DownloadManager::STATE_INSTALLED) { - // the tr-macro doesn't work here, maybe because the translation is actually associated with DownloadListWidget instead - // of DownloadListWidgetDelegate? + labelPalette.setColor(QPalette::WindowText, Qt::darkRed); + m_InstallLabel->setPalette(labelPalette); + } else if (state == DownloadManager::STATE_FETCHINGMODINFO) { + m_InstallLabel->setText(tr("Fetching Info 1")); + m_Progress->setVisible(false); + } else if (state == DownloadManager::STATE_FETCHINGFILEINFO) { + m_InstallLabel->setText(tr("Fetching Info 2")); + m_Progress->setVisible(false); + } else if (state >= DownloadManager::STATE_READY) { + QPalette labelPalette; + m_InstallLabel->setVisible(true); + m_Progress->setVisible(false); + if (state == DownloadManager::STATE_INSTALLED) { + // the tr-macro doesn't work here, maybe because the translation is actually associated with DownloadListWidget instead + // of DownloadListWidgetDelegate? #if QT_VERSION >= QT_VERSION_CHECK(5,0,0) - m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Installed - Double Click to re-install", 0)); + m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Installed - Double Click to re-install", 0)); #else - m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Installed - Double Click to re-install", 0, QApplication::UnicodeUTF8)); + m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Installed - Double Click to re-install", 0, QApplication::UnicodeUTF8)); #endif - labelPalette.setColor(QPalette::WindowText, Qt::darkGray); - } else if (state == DownloadManager::STATE_UNINSTALLED) { + labelPalette.setColor(QPalette::WindowText, Qt::darkGray); + } else if (state == DownloadManager::STATE_UNINSTALLED) { #if QT_VERSION >= QT_VERSION_CHECK(5,0,0) - m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Uninstalled - Double Click to re-install", 0)); + m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Uninstalled - Double Click to re-install", 0)); #else - m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Uninstalled - Double Click to re-install", 0, QApplication::UnicodeUTF8)); + m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Uninstalled - Double Click to re-install", 0, QApplication::UnicodeUTF8)); #endif - labelPalette.setColor(QPalette::WindowText, Qt::lightGray); - } else { + labelPalette.setColor(QPalette::WindowText, Qt::lightGray); + } else { #if QT_VERSION >= QT_VERSION_CHECK(5,0,0) - m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Done - Double Click to install", 0)); + m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Done - Double Click to install", 0)); #else - m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Done - Double Click to install", 0, QApplication::UnicodeUTF8)); + m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Done - Double Click to install", 0, QApplication::UnicodeUTF8)); #endif - labelPalette.setColor(QPalette::WindowText, Qt::darkGreen); - } - m_InstallLabel->setPalette(labelPalette); - if (m_Manager->isInfoIncomplete(downloadIndex)) { - m_NameLabel->setText(" " + m_NameLabel->text()); - } + labelPalette.setColor(QPalette::WindowText, Qt::darkGreen); + } + m_InstallLabel->setPalette(labelPalette); + if (m_Manager->isInfoIncomplete(downloadIndex)) { + m_NameLabel->setText(" " + m_NameLabel->text()); + } + } else { + m_InstallLabel->setVisible(false); + m_Progress->setVisible(true); + m_Progress->setValue(m_Manager->getProgress(downloadIndex)); + } +} + +void DownloadListWidgetDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + try { + auto iter = m_Cache.find(index.row()); + if (iter != m_Cache.end()) { + drawCache(painter, option, *iter); + return; + } + + m_ItemWidget->resize(QSize(m_View->columnWidth(0) + m_View->columnWidth(1) + m_View->columnWidth(2), option.rect.height())); + + int downloadIndex = index.data().toInt(); + + if (downloadIndex >= m_Manager->numTotalDownloads()) { + paintPendingDownload(downloadIndex - m_Manager->numTotalDownloads()); } else { - m_InstallLabel->setVisible(false); - m_Progress->setVisible(true); - m_Progress->setValue(m_Manager->getProgress(downloadIndex)); + paintRegularDownload(downloadIndex); } #pragma message("caching disabled because changes in the list (including resorting) doesn't work correctly") @@ -280,29 +300,32 @@ bool DownloadListWidgetDelegate::editorEvent(QEvent *event, QAbstractItemModel * QMouseEvent *mouseEvent = static_cast(event); if (mouseEvent->button() == Qt::RightButton) { QMenu menu(m_View); + bool hidden = false; m_ContextRow = qobject_cast(model)->mapToSource(index).row(); - DownloadManager::DownloadState state = m_Manager->getState(m_ContextRow); - bool hidden = m_Manager->isHidden(m_ContextRow); - if (state >= DownloadManager::STATE_READY) { - menu.addAction(tr("Install"), this, SLOT(issueInstall())); - if (m_Manager->isInfoIncomplete(m_ContextRow)) { - menu.addAction(tr("Query Info"), this, SLOT(issueQueryInfo())); + if (m_ContextRow < m_Manager->numTotalDownloads()) { + DownloadManager::DownloadState state = m_Manager->getState(m_ContextRow); + hidden = m_Manager->isHidden(m_ContextRow); + if (state >= DownloadManager::STATE_READY) { + menu.addAction(tr("Install"), this, SLOT(issueInstall())); + if (m_Manager->isInfoIncomplete(m_ContextRow)) { + menu.addAction(tr("Query Info"), this, SLOT(issueQueryInfo())); + } + menu.addAction(tr("Delete"), this, SLOT(issueDelete())); + if (hidden) { + menu.addAction(tr("Un-Hide"), this, SLOT(issueRestoreToView())); + } else { + menu.addAction(tr("Remove from View"), this, SLOT(issueRemoveFromView())); + } + } else if (state == DownloadManager::STATE_DOWNLOADING){ + menu.addAction(tr("Cancel"), this, SLOT(issueCancel())); + menu.addAction(tr("Pause"), this, SLOT(issuePause())); + } else if ((state == DownloadManager::STATE_PAUSED) || (state == DownloadManager::STATE_ERROR)) { + menu.addAction(tr("Remove"), this, SLOT(issueDelete())); + menu.addAction(tr("Resume"), this, SLOT(issueResume())); } - menu.addAction(tr("Delete"), this, SLOT(issueDelete())); - if (hidden) { - menu.addAction(tr("Un-Hide"), this, SLOT(issueRestoreToView())); - } else { - menu.addAction(tr("Remove from View"), this, SLOT(issueRemoveFromView())); - } - } else if (state == DownloadManager::STATE_DOWNLOADING){ - menu.addAction(tr("Cancel"), this, SLOT(issueCancel())); - menu.addAction(tr("Pause"), this, SLOT(issuePause())); - } else if ((state == DownloadManager::STATE_PAUSED) || (state == DownloadManager::STATE_ERROR)) { - menu.addAction(tr("Remove"), this, SLOT(issueDelete())); - menu.addAction(tr("Resume"), this, SLOT(issueResume())); - } - menu.addSeparator(); + menu.addSeparator(); + } menu.addAction(tr("Delete Installed..."), this, SLOT(issueDeleteCompleted())); menu.addAction(tr("Delete All..."), this, SLOT(issueDeleteAll())); if (!hidden) { diff --git a/src/downloadlistwidget.h b/src/downloadlistwidget.h index f5bfdbaa..80c4430a 100644 --- a/src/downloadlistwidget.h +++ b/src/downloadlistwidget.h @@ -60,6 +60,9 @@ public: virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; + void paintPendingDownload(int downloadIndex) const; + void paintRegularDownload(int downloadIndex) const; + signals: void installDownload(int index); diff --git a/src/downloadlistwidgetcompact.cpp b/src/downloadlistwidgetcompact.cpp index d2a71dd5..e2fbcd24 100644 --- a/src/downloadlistwidgetcompact.cpp +++ b/src/downloadlistwidgetcompact.cpp @@ -82,6 +82,66 @@ void DownloadListWidgetCompactDelegate::drawCache(QPainter *painter, const QStyl } +void DownloadListWidgetCompactDelegate::paintPendingDownload(int downloadIndex) const +{ + std::pair nexusids = m_Manager->getPendingDownload(downloadIndex); + m_NameLabel->setText(tr("< mod %1 file %2 >").arg(nexusids.first).arg(nexusids.second)); + if (m_SizeLabel != NULL) { + m_SizeLabel->setText("???"); + } + m_DoneLabel->setVisible(true); + m_DoneLabel->setText(tr("Pending")); + m_Progress->setVisible(false); +} + + +void DownloadListWidgetCompactDelegate::paintRegularDownload(int downloadIndex) const +{ + QString name = m_Manager->getFileName(downloadIndex); + if (name.length() > 53) { + name.truncate(50); + name.append("..."); + } + m_NameLabel->setText(name); + + DownloadManager::DownloadState state = m_Manager->getState(downloadIndex); + + if ((m_SizeLabel != NULL) && (state >= DownloadManager::STATE_READY)) { + m_SizeLabel->setText(QString::number(m_Manager->getFileSize(downloadIndex) / 1048576)); + } + + if ((state == DownloadManager::STATE_PAUSED) || (state == DownloadManager::STATE_ERROR)) { + m_DoneLabel->setVisible(true); + m_Progress->setVisible(false); + m_DoneLabel->setText(tr("Paused")); + m_DoneLabel->setForegroundRole(QPalette::Link); + } else if (state == DownloadManager::STATE_FETCHINGMODINFO) { + m_DoneLabel->setText(tr("Fetching Info 1")); + } else if (state == DownloadManager::STATE_FETCHINGFILEINFO) { + m_DoneLabel->setText(tr("Fetching Info 2")); + } else if (state >= DownloadManager::STATE_READY) { + m_DoneLabel->setVisible(true); + m_Progress->setVisible(false); + if (state == DownloadManager::STATE_INSTALLED) { + m_DoneLabel->setText(tr("Installed")); + m_DoneLabel->setForegroundRole(QPalette::Mid); + } else if (state == DownloadManager::STATE_UNINSTALLED) { + m_DoneLabel->setText(tr("Uninstalled")); + m_DoneLabel->setForegroundRole(QPalette::Dark); + } else { + m_DoneLabel->setText(tr("Done")); + m_DoneLabel->setForegroundRole(QPalette::WindowText); + } + if (m_Manager->isInfoIncomplete(downloadIndex)) { + m_NameLabel->setText(" " + m_NameLabel->text()); + } + } else { + m_DoneLabel->setVisible(false); + m_Progress->setVisible(true); + m_Progress->setValue(m_Manager->getProgress(downloadIndex)); + } +} + void DownloadListWidgetCompactDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { #pragma message("This is quite costy - room for optimization?") @@ -100,49 +160,10 @@ void DownloadListWidgetCompactDelegate::paint(QPainter *painter, const QStyleOpt } int downloadIndex = index.data().toInt(); - - QString name = m_Manager->getFileName(downloadIndex); - if (name.length() > 53) { - name.truncate(50); - name.append("..."); - } - m_NameLabel->setText(name); - - DownloadManager::DownloadState state = m_Manager->getState(downloadIndex); - - if ((m_SizeLabel != NULL) && (state >= DownloadManager::STATE_READY)) { - m_SizeLabel->setText(QString::number(m_Manager->getFileSize(downloadIndex) / 1048576)); - } - - if ((state == DownloadManager::STATE_PAUSED) || (state == DownloadManager::STATE_ERROR)) { - m_DoneLabel->setVisible(true); - m_Progress->setVisible(false); - m_DoneLabel->setText(tr("Paused")); - m_DoneLabel->setForegroundRole(QPalette::Link); - } else if (state == DownloadManager::STATE_FETCHINGMODINFO) { - m_DoneLabel->setText(tr("Fetching Info 1")); - } else if (state == DownloadManager::STATE_FETCHINGFILEINFO) { - m_DoneLabel->setText(tr("Fetching Info 2")); - } else if (state >= DownloadManager::STATE_READY) { - m_DoneLabel->setVisible(true); - m_Progress->setVisible(false); - if (state == DownloadManager::STATE_INSTALLED) { - m_DoneLabel->setText(tr("Installed")); - m_DoneLabel->setForegroundRole(QPalette::Mid); - } else if (state == DownloadManager::STATE_UNINSTALLED) { - m_DoneLabel->setText(tr("Uninstalled")); - m_DoneLabel->setForegroundRole(QPalette::Dark); - } else { - m_DoneLabel->setText(tr("Done")); - m_DoneLabel->setForegroundRole(QPalette::WindowText); - } - if (m_Manager->isInfoIncomplete(downloadIndex)) { - m_NameLabel->setText(" " + m_NameLabel->text()); - } + if (downloadIndex >= m_Manager->numTotalDownloads()) { + paintPendingDownload(downloadIndex - m_Manager->numTotalDownloads()); } else { - m_DoneLabel->setVisible(false); - m_Progress->setVisible(true); - m_Progress->setValue(m_Manager->getProgress(downloadIndex)); + paintRegularDownload(downloadIndex); } #pragma message("caching disabled because changes in the list (including resorting) doesn't work correctly") @@ -268,29 +289,32 @@ bool DownloadListWidgetCompactDelegate::editorEvent(QEvent *event, QAbstractItem QMouseEvent *mouseEvent = static_cast(event); if (mouseEvent->button() == Qt::RightButton) { QMenu menu; + bool hidden = false; m_ContextIndex = qobject_cast(model)->mapToSource(index); - DownloadManager::DownloadState state = m_Manager->getState(m_ContextIndex.row()); - bool hidden = m_Manager->isHidden(m_ContextIndex.row()); - if (state >= DownloadManager::STATE_READY) { - menu.addAction(tr("Install"), this, SLOT(issueInstall())); - if (m_Manager->isInfoIncomplete(m_ContextIndex.row())) { - menu.addAction(tr("Query Info"), this, SLOT(issueQueryInfo())); - } - menu.addAction(tr("Delete"), this, SLOT(issueDelete())); - if (hidden) { - menu.addAction(tr("Un-Hide"), this, SLOT(issueRestoreToView())); - } else { - menu.addAction(tr("Remove from View"), this, SLOT(issueRemoveFromView())); + if (m_ContextIndex.row() < m_Manager->numTotalDownloads()) { + DownloadManager::DownloadState state = m_Manager->getState(m_ContextIndex.row()); + hidden = m_Manager->isHidden(m_ContextIndex.row()); + if (state >= DownloadManager::STATE_READY) { + menu.addAction(tr("Install"), this, SLOT(issueInstall())); + if (m_Manager->isInfoIncomplete(m_ContextIndex.row())) { + menu.addAction(tr("Query Info"), this, SLOT(issueQueryInfo())); + } + menu.addAction(tr("Delete"), this, SLOT(issueDelete())); + if (hidden) { + menu.addAction(tr("Un-Hide"), this, SLOT(issueRestoreToView())); + } else { + menu.addAction(tr("Remove from View"), this, SLOT(issueRemoveFromView())); + } + } else if (state == DownloadManager::STATE_DOWNLOADING){ + menu.addAction(tr("Cancel"), this, SLOT(issueCancel())); + menu.addAction(tr("Pause"), this, SLOT(issuePause())); + } else if ((state == DownloadManager::STATE_PAUSED) || (state == DownloadManager::STATE_ERROR)) { + menu.addAction(tr("Remove"), this, SLOT(issueDelete())); + menu.addAction(tr("Resume"), this, SLOT(issueResume())); } - } else if (state == DownloadManager::STATE_DOWNLOADING){ - menu.addAction(tr("Cancel"), this, SLOT(issueCancel())); - menu.addAction(tr("Pause"), this, SLOT(issuePause())); - } else if ((state == DownloadManager::STATE_PAUSED) || (state == DownloadManager::STATE_ERROR)) { - menu.addAction(tr("Remove"), this, SLOT(issueDelete())); - menu.addAction(tr("Resume"), this, SLOT(issueResume())); - } - menu.addSeparator(); + menu.addSeparator(); + } menu.addAction(tr("Delete Installed..."), this, SLOT(issueDeleteCompleted())); menu.addAction(tr("Delete All..."), this, SLOT(issueDeleteAll())); if (!hidden) { diff --git a/src/downloadlistwidgetcompact.h b/src/downloadlistwidgetcompact.h index 05d00b9d..4d7f40de 100644 --- a/src/downloadlistwidgetcompact.h +++ b/src/downloadlistwidgetcompact.h @@ -78,6 +78,8 @@ protected: private: void drawCache(QPainter *painter, const QStyleOptionViewItem &option, const QPixmap &cache) const; + void paintPendingDownload(int downloadIndex) const; + void paintRegularDownload(int downloadIndex) const; private slots: diff --git a/src/downloadmanager.cpp b/src/downloadmanager.cpp index 48484d24..61c5113c 100644 --- a/src/downloadmanager.cpp +++ b/src/downloadmanager.cpp @@ -323,6 +323,7 @@ bool DownloadManager::addDownload(QNetworkReply *reply, const QStringList &URLs, (QMessageBox::question(NULL, tr("Download again?"), tr("A file with the same name has already been downloaded. " "Do you want to download it again? The new file will receive a different name."), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No)) { + removePending(modID, fileID); delete newDownload; return false; } @@ -331,11 +332,24 @@ bool DownloadManager::addDownload(QNetworkReply *reply, const QStringList &URLs, startDownload(reply, newDownload, false); - emit update(-1); +// emit update(-1); return true; } +void DownloadManager::removePending(int modID, int fileID) +{ + emit aboutToUpdate(); + for (auto iter = m_PendingDownloads.begin(); iter != m_PendingDownloads.end(); ++iter) { + if ((iter->first == modID) && (iter->second == fileID)) { + m_PendingDownloads.erase(iter); + break; + } + } + emit update(-1); +} + + void DownloadManager::startDownload(QNetworkReply *reply, DownloadInfo *newDownload, bool resume) { newDownload->m_Reply = reply; @@ -365,11 +379,14 @@ void DownloadManager::startDownload(QNetworkReply *reply, DownloadInfo *newDownl if (!resume) { newDownload->m_PreResumeSize = newDownload->m_Output.size(); + removePending(newDownload->m_ModID, newDownload->m_FileID); + emit aboutToUpdate(); m_ActiveDownloads.append(newDownload); emit update(-1); + emit downloadAdded(); } } @@ -379,14 +396,21 @@ void DownloadManager::addNXMDownload(const QString &url) NXMUrl nxmInfo(url); QString managedGame = ToQString(MOShared::GameInfo::instance().getGameShortName()); - + qDebug("add nxm download", qPrintable(url)); if (nxmInfo.game().compare(managedGame, Qt::CaseInsensitive) != 0) { + qDebug("download requested for wrong game (game: %s, url: %s)", qPrintable(managedGame), qPrintable(nxmInfo.game())); QMessageBox::information(NULL, tr("Wrong Game"), tr("The download link is for a mod for \"%1\" but this instance of MO " "has been set up for \"%2\".").arg(nxmInfo.game()).arg(managedGame), QMessageBox::Ok); return; } - m_RequestIDs.insert(m_NexusInterface->requestFileInfo(nxmInfo.getModId(), nxmInfo.getFileId(), this, QVariant())); + emit aboutToUpdate(); + + m_PendingDownloads.append(std::make_pair(nxmInfo.modId(), nxmInfo.fileId())); + + emit update(-1); + emit downloadAdded(); + m_RequestIDs.insert(m_NexusInterface->requestFileInfo(nxmInfo.modId(), nxmInfo.fileId(), this, QVariant())); } @@ -628,6 +652,19 @@ int DownloadManager::numTotalDownloads() const return m_ActiveDownloads.size(); } +int DownloadManager::numPendingDownloads() const +{ + return m_PendingDownloads.size(); +} + +std::pair DownloadManager::getPendingDownload(int index) +{ + if ((index < 0) || (index >= m_PendingDownloads.size())) { + throw MyException(tr("invalid index")); + } + + return m_PendingDownloads.at(index); +} QString DownloadManager::getFilePath(int index) const { @@ -1025,8 +1062,8 @@ void DownloadManager::nxmFileInfoAvailable(int modID, int fileID, QVariant userD NexusInfo info; QVariantMap result = resultData.toMap(); - info.m_Name = result["name"].toString(); + qDebug("file info received for %s", qPrintable(info.m_Name)); info.m_Version = result["version"].toString(); if (info.m_Version.isEmpty()) { info.m_Version = info.m_NewestVersion; @@ -1121,9 +1158,12 @@ void DownloadManager::nxmDownloadURLsAvailable(int modID, int fileID, QVariant u m_RequestIDs.erase(idIter); } + qDebug("download urls received (modid %d, fileid %d)", modID, fileID); + NexusInfo info = userData.value(); QVariantList resultList = resultData.toList(); if (resultList.length() == 0) { + removePending(modID, fileID); emit showMessage(tr("No download server available. Please try again later.")); return; } @@ -1282,3 +1322,4 @@ void DownloadManager::directoryChanged(const QString&) { refreshList(); } + diff --git a/src/downloadmanager.h b/src/downloadmanager.h index 099e6084..62396666 100644 --- a/src/downloadmanager.h +++ b/src/downloadmanager.h @@ -205,6 +205,19 @@ public: **/ int numTotalDownloads() const; + /** + * @brief retrieve number of pending downloads (nexus downloads for which we don't know the name and url yet) + * @return number of pending downloads + */ + int numPendingDownloads() const; + + /** + * @brief retrieve the info of a pending download + * @param index index of the pending download (index in the range [0, numPendingDownloads()[) + * @return pair of modid, fileid + */ + std::pair getPendingDownload(int index); + /** * @brief retrieve the full path to the download specified by index * @@ -357,6 +370,11 @@ signals: */ void downloadSpeed(const QString &serverName, int bytesPerSecond); + /** + * @brief emitted whenever a new download is added to the list + */ + void downloadAdded(); + public slots: /** @@ -440,6 +458,8 @@ private: QDateTime matchDate(const QString &timeString); + void removePending(int modID, int fileID); + private: static const int AUTOMATIC_RETRIES = 3; @@ -447,6 +467,9 @@ private: private: NexusInterface *m_NexusInterface; + + QVector > m_PendingDownloads; + QVector m_ActiveDownloads; QString m_OutputDirectory; @@ -465,4 +488,6 @@ private: }; + + #endif // DOWNLOADMANAGER_H diff --git a/src/logbuffer.cpp b/src/logbuffer.cpp index a3b6f1b5..f930cf10 100644 --- a/src/logbuffer.cpp +++ b/src/logbuffer.cpp @@ -112,13 +112,26 @@ void LogBuffer::log(QtMsgType type, const QMessageLogContext &context, const QSt #else + +char LogBuffer::msgTypeID(QtMsgType type) +{ + switch (type) { + case QtDebugMsg: return 'D'; + case QtWarningMsg: return 'W'; + case QtCriticalMsg: return 'C'; + case QtFatalMsg: return 'F'; + } +} + +#include + void LogBuffer::log(QtMsgType type, const char *message) { QMutexLocker guard(&s_Mutex); if (!s_Instance.isNull()) { s_Instance->logMessage(type, message); } - fprintf(stdout, "%s\n", message); + fprintf(stdout, "[%c] %s: %s\n", msgTypeID(type), qPrintable(QTime::currentTime().toString()), message); fflush(stdout); } diff --git a/src/logbuffer.h b/src/logbuffer.h index de5e887f..68753996 100644 --- a/src/logbuffer.h +++ b/src/logbuffer.h @@ -60,6 +60,8 @@ private: void write() const; + static char msgTypeID(QtMsgType type); + private: static QScopedPointer s_Instance; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 3a543e0b..ee7ee139 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -230,9 +230,9 @@ MainWindow::MainWindow(const QString &exeName, QSettings &initSettings, QWidget ui->savegameList->installEventFilter(this); ui->savegameList->setMouseTracking(true); - connect(&m_DownloadManager, SIGNAL(showMessage(QString)), this, SLOT(showMessage(QString))); connect(&m_DownloadManager, SIGNAL(downloadSpeed(QString,int)), this, SLOT(downloadSpeed(QString,int))); + connect(&m_DownloadManager, SIGNAL(downloadAdded()), ui->downloadView, SLOT(scrollToBottom())); connect(ui->savegameList, SIGNAL(itemEntered(QListWidgetItem*)), this, SLOT(saveSelectionChanged(QListWidgetItem*))); @@ -780,6 +780,8 @@ void MainWindow::showEvent(QShowEvent *event) ui->groupCombo->setCurrentIndex(grouping); allowListResize(); + + m_Settings.registerAsNXMHandler(false); } @@ -4024,15 +4026,10 @@ void MainWindow::on_actionSettings_triggered() NexusInterface::instance()->setNMMVersion(m_Settings.getNMMVersion()); } + void MainWindow::on_actionNexus_triggered() { - std::wstring nxmPath = ToWString(QApplication::applicationDirPath() + "/nxmhandler.exe"); - std::wstring executable = ToWString(QApplication::applicationFilePath()); - ::ShellExecuteW(NULL, L"open", nxmPath.c_str(), - (std::wstring(L"reg ") + GameInfo::instance().getGameShortName() + L" \"" + executable + L"\"").c_str(), NULL, SW_SHOWNORMAL); - ::ShellExecuteW(NULL, L"open", GameInfo::instance().getNexusPage(false).c_str(), NULL, NULL, SW_SHOWNORMAL); - ui->tabWidget->setCurrentIndex(4); } @@ -4052,6 +4049,7 @@ void MainWindow::linkClicked(const QString &url) void MainWindow::downloadRequestedNXM(const QString &url) { QString username, password; + qDebug("download requested: %s", qPrintable(url)); if (!m_LoginAttempted && !NexusInterface::instance()->getAccessManager()->loggedIn() && (m_Settings.getNexusLogin(username, password) || diff --git a/src/messagedialog.cpp b/src/messagedialog.cpp index 4a1ef0d6..8cef1b7c 100644 --- a/src/messagedialog.cpp +++ b/src/messagedialog.cpp @@ -81,6 +81,7 @@ void MessageDialog::resizeEvent(QResizeEvent *event) void MessageDialog::showMessage(const QString &text, QWidget *reference) { + qDebug("%s", qPrintable(text)); if (reference != NULL) { MessageDialog *dialog = new MessageDialog(text, reference); dialog->show(); diff --git a/src/settings.cpp b/src/settings.cpp index 8086672a..895094f7 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -102,6 +102,15 @@ bool Settings::pluginBlacklisted(const QString &fileName) const return m_PluginBlacklist.contains(fileName); } +void Settings::registerAsNXMHandler(bool force) +{ + std::wstring nxmPath = ToWString(QCoreApplication::applicationDirPath() + "/nxmhandler.exe"); + std::wstring executable = ToWString(QCoreApplication::applicationFilePath()); + std::wstring mode = force ? L"forcereg" : L"reg"; + ::ShellExecuteW(NULL, L"open", nxmPath.c_str(), + (mode + L" " + GameInfo::instance().getGameShortName() + L" \"" + executable + L"\"").c_str(), NULL, SW_SHOWNORMAL); +} + void Settings::registerPlugin(IPlugin *plugin) { m_Plugins.push_back(plugin); diff --git a/src/settings.h b/src/settings.h index abffc94b..81174440 100644 --- a/src/settings.h +++ b/src/settings.h @@ -256,6 +256,13 @@ public: */ std::vector plugins() const { return m_Plugins; } + /** + * @brief register MO as the handler for nxm links + * @param force set to true to enforce the registration dialog to show up, + * even if the user said earlier not to + */ + void registerAsNXMHandler(bool force); + private: QString obfuscate(const QString &password) const; diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp index c8908ddb..bf1f95dc 100644 --- a/src/settingsdialog.cpp +++ b/src/settingsdialog.cpp @@ -29,6 +29,7 @@ along with Mod Organizer. If not, see . #include #define WIN32_LEAN_AND_MEAN #include +#include "settings.h" using namespace MOBase; @@ -165,3 +166,8 @@ void SettingsDialog::deleteBlacklistItem() { ui->pluginBlacklist->takeItem(ui->pluginBlacklist->currentIndex().row()); } + +void SettingsDialog::on_associateButton_clicked() +{ + Settings::instance().registerAsNXMHandler(true); +} diff --git a/src/settingsdialog.h b/src/settingsdialog.h index 718574a0..0bd9fd23 100644 --- a/src/settingsdialog.h +++ b/src/settingsdialog.h @@ -75,6 +75,8 @@ private slots: void deleteBlacklistItem(); + void on_associateButton_clicked(); + private: Ui::SettingsDialog *ui; }; diff --git a/src/settingsdialog.ui b/src/settingsdialog.ui index 39d49a39..bda6726c 100644 --- a/src/settingsdialog.ui +++ b/src/settingsdialog.ui @@ -275,32 +275,29 @@ p, li { white-space: pre-wrap; } - - - QFormLayout::AllNonFixedFieldsGrow - - + + Username - + false - + Password - + false @@ -342,13 +339,40 @@ p, li { white-space: pre-wrap; } - + + + + + Associate with "Download with manager" links + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + 4 + - Known Servers (Dynamically updated every download) + Known Servers (updated on download) -- cgit v1.3.1