Compare commits

...
51 Commits
Author SHA1 Message Date
Brian Munro d869d99785 Version bump. 2017-01-13 09:15:43 +02:00
Brian Munro bfeda873c4 Merge remote-tracking branch 'ZackHaber-upstream/new_vfs_library' into new_vfs_library 2017-01-13 08:16:23 +02:00
Brian Munro c9766b6e1a Fixes the error code 5/6 issues 2017-01-11 15:47:09 +02:00
Brian Munro 03328e9f55 Update selfupdater.cpp
Reverted Tabs to spaces
2017-01-03 19:36:15 +02:00
Brian Munro c48d1c36b7 Update mainwindow.ui
Reverted Tabs to spaces
2017-01-03 19:34:56 +02:00
ZachHaber 866a004438 Fixed pluginListPath to allow spaces
lootcli was failing on FO4 b/c it was passing in a space.
2016-12-28 03:37:14 -06:00
Zanoth 8b8ddc8163 Got rid of some unnecesarry code
Removed some parameters that were being sent to lootcli.exe that aren't
relevant anymore, commented out the report viewing, and set the
masterlist update boolean to switch only when there was no error.
2016-12-27 22:18:49 -06:00
ZachHaber 5dc1ee3da6 Adding *.bak to .gitignore
*.bak is winmerge's backup files, no point in adding that to git by
accident again.
2016-12-27 22:14:06 -06:00
ZachHaber dd653c3752 Remove excess file
Shouldn't have been committed.
2016-12-27 16:55:55 -06:00
ZachHaber a8556eacb6 Added preliminary support for changes to lootcli project
Hopefully re-enabled lootcli report. Added new argument for lootcli.exe:
pluginListPath, so it can determine what to read and thus change.
Need to figure out how to determine the current language in a format
that's easily understood.
2016-12-27 16:41:12 -06:00
ZachHaber f0810bfa43 Merge pull request #1 from LePresidente/new_vfs_library
Updating from LePresidente's changes
2016-12-27 14:53:03 -06:00
Brian Munro 7432f7870b Reverted Change
Reverted silly edit.
2016-12-21 13:11:23 +02:00
Brian Munro 71f9c4f69d Update organizercore.cpp
Shoud be an "or" query instead of "and",
2016-12-21 11:46:10 +02:00
LePresidente 71b4911c8c Build Number Version Bump. 2016-12-21 00:55:51 -08:00
LePresidente d1ed7ae5d7 Migrate to version numbers with buildnumber.
Added Comment for removal of ModBase::isOneof
2016-12-21 00:54:41 -08:00
LePresidente 1cf368c126 Reverted use of MOBase::isOneOf was causing the lock to fail. 2016-12-20 03:18:43 -08:00
TanninOne a3671a5557 Merge pull request #1031 from LePresidente/new_vfs_library
New vfs library
2016-12-12 19:58:29 +01:00
LePresidente afa0cb9446 Version Bump,
Basic SkyrimSE changes
2016-12-12 05:12:20 -08:00
lepresidente 0657774e2e Use my repo for the updates for now. 2016-12-12 08:26:19 +02:00
lepresidente 695593968b updated email for dump reports. 2016-12-04 18:15:59 +02:00
lepresidente 61edeb12f1 gameShortName has been replaced by gameNexusName due to syrimse on nexus using skyrimspecialediton. 2016-12-04 17:56:07 +02:00
TanninOne 5ae681e6d5 Merge pull request #1023 from LePresidente/new_vfs_library
Updated icu libs to 54 in release build.
2016-11-30 20:53:52 +01:00
lepresidente db6b536fb1 Updated icu libs to 54 in release build. 2016-11-30 20:38:24 +02:00
Tannin 64590a10d7 Merge branch 'master' into new_vfs_library 2016-06-30 22:15:50 +02:00
TanninOne 4a582e524d Merge pull request #837 from ThosRTanner/issue/309
Changes for TanninOne/modorganizer#309 (3 of 3)
2016-06-30 19:03:45 +02:00
Tannin a00cda607c updated to changed usvfs api 2016-06-30 18:56:41 +02:00
Thomas Tanner 42407866e9 Some include-what-you-use suggested changes 2016-06-27 21:21:54 +01:00
Thomas Tanner c3a8a0b9eb Moved QuestionBoxMemory clearance from settings into QuestionBoxMemory 2016-06-26 20:27:50 +01:00
Thomas Tanner 607b2a10aa Restore commented out code 2016-06-26 20:27:13 +01:00
Thomas Tanner 6b60d54853 Extra question box functionality 2016-06-25 14:03:37 +01:00
Thomas Tanner c7101be7d8 Some refactoring of the spawn code and to make waitForApplication get the right error code (usually)
A note: It is possible for the executed program to completely exit before MO attempts to get hold of the pid from the job handle,
in which case strangeness will happen (this has always been an issue)
2016-06-25 11:47:15 +01:00
Thomas Tanner d80a77a4cb Fix a small bug in listing forward references 2016-06-25 09:47:28 +01:00
Tannin 33b544112c fixed categories list didn't get updated on switching instance 2016-06-23 21:38:54 +02:00
Tannin 8a3af93b39 fixed creation of data paths after changing paths in settings and update of profile list after change 2016-06-23 21:00:46 +02:00
Tannin 352975e757 updated to use the unmanaged-mod game plugin feature 2016-06-19 16:01:51 +02:00
Tannin cd83f4e732 reduced number of mod content icons a bit because they take too much space 2016-06-19 16:01:15 +02:00
Tannin 4f25a0689f updated translation 2016-06-19 16:00:13 +02:00
Tannin 3d642563cb usvfs log level can now be changed without a restart 2016-06-19 15:59:50 +02:00
Tannin 0100c86887 download list and data tree now also maintain their layout between sessions 2016-06-19 15:58:37 +02:00
Tannin 8d04c77c29 updated version number and translation file 2016-06-05 14:23:27 +02:00
Tannin b935ce3862 bugfix: unnecessary repeat of delayed operations 2016-06-05 14:20:49 +02:00
Tannin fcebf21c44 fixed startup errors 2016-06-05 14:16:55 +02:00
Tannin 3d1dfadb40 automatic update of translation file during build 2016-06-04 15:29:52 +02:00
Tannin c2c48bd39a testing the hook for updating the translation-page 2016-06-04 14:33:24 +02:00
Tannin 9163a6dc34 added transifex configuration 2016-06-04 11:40:06 +02:00
Tannin 8bf3037d4b bugfix: changing from local language to english doesn't stick 2016-06-03 18:49:48 +02:00
Tannin 4f1bb36933 fixed some filename/modname handling for names received from nexus 2016-06-02 19:45:04 +02:00
Tannin cbdea13a9c minor cleanup 2016-06-01 19:34:01 +02:00
Tannin b36c666899 fixed: mandatory esms could get disabled without a way in the ui to re-enable them 2016-06-01 19:33:37 +02:00
Thomas Tanner a625acd17b Merge remote-tracking branch 'refs/remotes/TanninOne/master' 2016-05-15 12:23:55 +01:00
Thomas Tanner f5a815185f Updates for QT5.5 2016-05-15 11:03:43 +01:00
46 changed files with 6710 additions and 421 deletions
+1
View File
@@ -4,6 +4,7 @@ src/moc_*.cpp
src/ui_*.h
src/*.qrc.depends
src/Modorganizer.*
src/*.bak
CMakeLists.txt.user
edit
stderr.log
+82
View File
@@ -0,0 +1,82 @@
[main]
host = https://www.transifex.com
[mod-organizer.organizer]
file_filter = organizer/organizer_<lang>.ts
source_file = organizer/organizer_en.ts
source_lang = en
[mod-organizer.diagnosebasic]
file_filter = plugins/diagnoseBasic/diagnoseBasic_<lang>.ts
source_file = plugins/diagnoseBasic/diagnoseBasic_en.ts
source_lang = en
[mod-organizer.bsaextractor]
file_filter = plugins/bsaExtractor/bsaExtractor_<lang>.ts
source_file = plugins/bsaExtractor/bsaExtractor_en.ts
source_lang = en
[mod-organizer.checkfnis]
file_filter = plugins/checkFNIS/checkFNIS_<lang>.ts
source_file = plugins/checkFNIS/checkFNIS_en.ts
source_lang = en
[mod-organizer.inieditor]
file_filter = plugins/iniEditor/iniEditor_<lang>.ts
source_file = plugins/iniEditor/iniEditor_en.ts
source_lang = en
[mod-organizer.installerbain]
file_filter = plugins/installerBAIN/installerBAIN_<lang>.ts
source_file = plugins/installerBAIN/installerBAIN_en.ts
source_lang = en
[mod-organizer.installerbundle]
file_filter = plugins/installerBundle/installerBundle_<lang>.ts
source_file = plugins/installerBundle/installerBundle_en.ts
source_lang = en
[mod-organizer.installerfomod]
file_filter = plugins/installerFomod/installerFomod_<lang>.ts
source_file = plugins/installerFomod/installerFomod_en.ts
source_lang = en
[mod-organizer.installermanual]
file_filter = plugins/installerManual/installerManual_<lang>.ts
source_file = plugins/installerManual/installerManual_en.ts
source_lang = en
[mod-organizer.installerncc]
file_filter = plugins/installerNCC/installerNCC_<lang>.ts
source_file = plugins/installerNCC/installerNCC_en.ts
source_lang = en
[mod-organizer.installerquick]
file_filter = plugins/installerQuick/installerQuick_<lang>.ts
source_file = plugins/installerQuick/installerQuick_en.ts
source_lang = en
[mod-organizer.nmmimport]
file_filter = plugins/NMMImport/NMMImport_<lang>.ts
source_file = plugins/NMMImport/NMMImport_en.ts
source_lang = en
[mod-organizer.previewbase]
file_filter = plugins/previewBase/previewBase_<lang>.ts
source_file = plugins/previewBase/previewBase_en.ts
source_lang = en
[mod-organizer.previewdds]
file_filter = plugins/previewDDS/previewDDS_<lang>.ts
source_file = plugins/previewDDS/previewDDS_en.ts
source_lang = en
[mod-organizer.proxypython]
file_filter = plugins/proxyPython/proxyPython_<lang>.ts
source_file = plugins/proxyPython/proxyPython_en.ts
source_lang = en
[mod-organizer.configurator]
file_filter = plugins/pyniEdit/pyniEdit_<lang>.ts
source_file = plugins/pyniEdit/pyniEdit_en.ts
source_lang = en
+3 -1
View File
@@ -669,7 +669,9 @@ if qt_env['QT_MAJOR_VERSION'] > 4:
dlls_to_install += [
os.path.join(env['QTDIR'],
'bin',
'icu%s%d%d.dll' % (lib, qt_env['QT_MAJOR_VERSION'], qt_env['QT_MINOR_VERSION'] - 1))
'icu%s%d%d.dll' % (lib,
qt_env['QT_MAJOR_VERSION'],
qt_env['QT_MINOR_VERSION'] - 1))
for lib in ('dt','in', 'uc')
]
+13 -10
View File
@@ -35,7 +35,7 @@ removing = None
includes = dict()
adding = None
added = dict()
added = defaultdict(list)
lcadded = dict()
foundline = None
@@ -70,10 +70,10 @@ def process_next_line(line, outfile):
elif adding:
m = re.match(r'.*class (.*);', line)
if m:
added[m.group(1)] = (adding, line)
added[m.group(1)].append((adding, line))
lcadded[m.group(1).lower() + '.h'] = m.group(1)
else:
added[line] = (adding, line)
added[line].append((adding, line))
elif removing:
# Really we should stash these so that if we get a 'class xxx' in
# the add lines we can print it here. also we could do the case
@@ -88,10 +88,12 @@ def process_next_line(line, outfile):
if clname in lcadded:
clname = lcadded[clname]
if clname in added:
messages[removing].append(
'%s(%s) : warning I0004: Replace include of %s with '
'forward reference %s' % (
removing, m.group(2), m.group(1), added[clname][1]))
for item in added[clname]:
if removing == item[0]:
messages[removing].append(
'%s(%s) : warning I0004: Replace include of %s'
' with forward reference %s' % (
removing, m.group(2), m.group(1), item[1]))
del added[clname]
else:
messages[removing].append(
@@ -140,9 +142,10 @@ if foundline is None:
foundline = '1'
for add in added:
messages[added[add][0]].append(
'%s(%s) : warning I0003: Need to include %s' % (
added[add][0], foundline, added[add][1]))
for item in added[add]:
messages[item[0]].append(
'%s(%s) : warning I0003: Need to include %s' % (
item[0], foundline, item[1]))
for file in sorted(messages.keys(), reverse = True):
for line in messages[file]:
+3 -1
View File
@@ -237,8 +237,10 @@ FIND_PACKAGE(Qt5Declarative REQUIRED)
FIND_PACKAGE(Qt5Network REQUIRED)
FIND_PACKAGE(Qt5WinExtras REQUIRED)
FIND_PACKAGE(Qt5WebKitWidgets REQUIRED)
FIND_PACKAGE(Qt5LinguistTools)
QT5_WRAP_UI(organizer_UIHDRS ${organizer_UIS})
QT5_ADD_RESOURCES(organizer_RCCPPS ${organizer_QRCS})
QT5_CREATE_TRANSLATION(organizer_translations_qm ${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/src/organizer_en.ts)
INCLUDE_DIRECTORIES(${Qt5Declarative_INCLUDES})
@@ -295,7 +297,7 @@ ELSE()
SET(usvfs_name usvfs_x86)
ENDIF()
ADD_EXECUTABLE(ModOrganizer WIN32 ${organizer_HDRS} ${organizer_SRCS} ${organizer_UIHDRS} ${organizer_RCS} ${organizer_RCCPPS})
ADD_EXECUTABLE(ModOrganizer WIN32 ${organizer_HDRS} ${organizer_SRCS} ${organizer_UIHDRS} ${organizer_RCS} ${organizer_RCCPPS} ${organizer_translations_qm})
TARGET_LINK_LIBRARIES(ModOrganizer
Qt5::Widgets Qt5::WinExtras Qt5::WebKitWidgets
${Boost_LIBRARIES}
+3 -3
View File
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>746</width>
<width>604</width>
<height>369</height>
</rect>
</property>
@@ -151,7 +151,7 @@
</widget>
<widget class="QWidget" name="credits">
<attribute name="title">
<string>Credits</string>
<string>Thanks</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
@@ -239,7 +239,7 @@
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Others</string>
<string>Other Supporter</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
+4
View File
@@ -44,6 +44,10 @@ QString CategoryFactory::categoriesFilePath()
CategoryFactory::CategoryFactory()
{
atexit(&cleanup);
}
void CategoryFactory::loadCategories()
{
reset();
QFile categoryFile(categoriesFilePath());
+5
View File
@@ -75,6 +75,11 @@ public:
**/
void reset();
/**
* @brief read categories from file
*/
void loadCategories();
/**
* @brief save the categories to the categories.dat file
**/
+6 -10
View File
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>282</width>
<width>294</width>
<height>156</height>
</rect>
</property>
@@ -25,29 +25,25 @@
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Username</string>
</property>
</widget>
</item>
<item>
<item row="0" column="1">
<widget class="QLineEdit" name="usernameEdit"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Password</string>
</property>
</widget>
</item>
<item>
<item row="1" column="1">
<widget class="QLineEdit" name="passwordEdit">
<property name="echoMode">
<enum>QLineEdit::Password</enum>
+3 -3
View File
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32" name="dlls" version="1.0.0.0" processorArchitecture="x86"/>
<file name="icuin53.dll"/>
<file name="icuuc53.dll"/>
<file name="icudt53.dll"/>
<file name="icuin54.dll"/>
<file name="icuuc54.dll"/>
<file name="icudt54.dll"/>
<file name="Qt5Cored.dll"/>
<file name="Qt5Declaratived.dll"/>
<file name="Qt5Guid.dll"/>
+3 -3
View File
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32" name="dlls" version="1.0.0.0" processorArchitecture="x86"/>
<file name="icuin53.dll"/>
<file name="icuuc53.dll"/>
<file name="icudt53.dll"/>
<file name="icuin54.dll"/>
<file name="icuuc54.dll"/>
<file name="icudt54.dll"/>
<file name="libeay32.dll"/>
<file name="ssleay32.dll"/>
<file name="Qt5Core.dll"/>
+12 -9
View File
@@ -757,12 +757,15 @@ QString DownloadManager::getDisplayName(int index) const
DownloadInfo *info = m_ActiveDownloads.at(index);
QTextDocument doc;
if (!info->m_FileInfo->name.isEmpty()) {
return QString("%1 (%2, v%3)").arg(info->m_FileInfo->name)
doc.setHtml(info->m_FileInfo->name);
return QString("%1 (%2, v%3)").arg(doc.toPlainText())
.arg(getFileTypeString(info->m_FileInfo->fileCategory))
.arg(info->m_FileInfo->version.displayString());
} else {
return info->m_FileName;
doc.setHtml(info->m_FileName);
return doc.toPlainText();
}
}
@@ -1058,7 +1061,9 @@ void DownloadManager::nxmDescriptionAvailable(int, QVariant userData, QVariant r
DownloadInfo *info = downloadInfoByID(userData.toInt());
if (info == nullptr) return;
info->m_FileInfo->categoryID = result["category_id"].toInt();
info->m_FileInfo->modName = result["name"].toString().trimmed();
QTextDocument doc;
doc.setHtml(result["name"].toString().trimmed());
info->m_FileInfo->modName = doc.toPlainText();
info->m_FileInfo->newestVersion.parse(result["version"].toString());
if (info->m_FileInfo->fileID != 0) {
setState(info, STATE_READY);
@@ -1116,7 +1121,7 @@ void DownloadManager::nxmFilesAvailable(int, QVariant userData, QVariant resultD
bool found = false;
foreach(QVariant file, result) {
for (QVariant file : result) {
QVariantMap fileInfo = file.toMap();
QString fileName = fileInfo["uri"].toString();
QString fileNameVariant = fileName.mid(0).replace(' ', '_');
@@ -1127,12 +1132,10 @@ void DownloadManager::nxmFilesAvailable(int, QVariant userData, QVariant resultD
if (!info->m_FileInfo->version.isValid()) {
info->m_FileInfo->version = info->m_FileInfo->newestVersion;
}
//Nexus has HTMLd these so unhtml them if necessary
// we receive some names html-encoded. This is used to decode it
QTextDocument doc;
doc.setHtml(info->m_FileInfo->modName);
doc.setHtml(fileInfo["modName"].toString());
info->m_FileInfo->modName = doc.toPlainText();
doc.setHtml(info->m_FileInfo->name);
info->m_FileInfo->name = doc.toPlainText();
info->m_FileInfo->fileCategory = convertFileCategory(fileInfo["category_id"].toInt());
info->m_FileInfo->fileTime = matchDate(fileInfo["date"].toString());
info->m_FileInfo->fileID = fileInfo["id"].toInt();
@@ -1148,7 +1151,7 @@ void DownloadManager::nxmFilesAvailable(int, QVariant userData, QVariant resultD
emit showMessage(tr("No matching file found on Nexus! Maybe this file is no longer available or it was renamed?"));
} else {
SelectionDialog selection(tr("No file on Nexus matches the selected file by name. Please manually choose the correct one."));
foreach(QVariant file, result) {
for (QVariant file : result) {
QVariantMap fileInfo = file.toMap();
selection.addChoice(fileInfo["uri"].toString(), "", file);
}
+1
View File
@@ -39,6 +39,7 @@ IGameInfo::Type GameInfoImpl::type() const
case GameInfo::TYPE_FALLOUT4: return IGameInfo::TYPE_FALLOUT4;
case GameInfo::TYPE_FALLOUTNV: return IGameInfo::TYPE_FALLOUTNV;
case GameInfo::TYPE_SKYRIM: return IGameInfo::TYPE_SKYRIM;
case GameInfo::TYPE_SKYRIMSE: return IGameInfo::TYPE_SKYRIMSE;
default: throw MyException(QObject::tr("invalid game type %1").arg(GameInfo::instance().getType()));
}
}
+1 -1
View File
@@ -24,7 +24,7 @@ QList<QString> GenericIconDelegate::getIcons(const QModelIndex &index) const
{
QList<QString> result;
if (index.isValid()) {
foreach (const QVariant &var, index.data(m_Role).toList()) {
for (const QVariant &var : index.data(m_Role).toList()) {
if (!m_Compact || !var.toString().isEmpty()) {
result.append(var.toString());
}
+12 -10
View File
@@ -48,6 +48,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QDateTime>
#include <QDirIterator>
#include <QDebug>
#include <QTextDocument>
#include <Shellapi.h>
@@ -76,16 +77,14 @@ static T resolveFunction(QLibrary &lib, const char *name)
return temp;
}
InstallationManager::InstallationManager()
: m_ParentWidget(nullptr)
, m_SupportedExtensions({ "zip", "rar", "7z", "fomod", "001" })
{
QLibrary archiveLib(QCoreApplication::applicationDirPath()
+ "\\dlls\\archive.dll");
: m_ParentWidget(nullptr),
m_SupportedExtensions({"zip", "rar", "7z", "fomod", "001"}) {
QLibrary archiveLib(QCoreApplication::applicationDirPath() +
"\\dlls\\archive.dll");
if (!archiveLib.load()) {
throw MyException(
tr("archive.dll not loaded: \"%1\"").arg(archiveLib.errorString()));
throw MyException(QObject::tr("archive.dll not loaded: \"%1\"")
.arg(archiveLib.errorString()));
}
CreateArchiveType CreateArchiveFunc
@@ -669,7 +668,9 @@ bool InstallationManager::install(const QString &fileName,
if (QFile(metaName).exists()) {
QSettings metaFile(metaName, QSettings::IniFormat);
modID = metaFile.value("modID", 0).toInt();
modName.update(metaFile.value("name", "").toString(), GUESS_FALLBACK);
QTextDocument doc;
doc.setHtml(metaFile.value("name", "").toString());
modName.update(doc.toPlainText(), GUESS_FALLBACK);
modName.update(metaFile.value("modName", "").toString(), GUESS_META);
version = metaFile.value("version", "").toString();
@@ -688,12 +689,13 @@ bool InstallationManager::install(const QString &fileName,
{ // guess the mod name and mod if from the file name if there was no meta information
QString guessedModName;
int guessedModID = modID;
NexusInterface::interpretNexusFileName(QFileInfo(fileName).baseName(), guessedModName, guessedModID, false);
NexusInterface::interpretNexusFileName(QFileInfo(fileName).fileName(), guessedModName, guessedModID, false);
if ((modID == 0) && (guessedModID != -1)) {
modID = guessedModID;
} else if (modID != guessedModID) {
qDebug("passed mod id: %d, guessed id: %d", modID, guessedModID);
}
modName.update(guessedModName, GUESS_GOOD);
}
+2 -2
View File
@@ -72,7 +72,7 @@ QString InstanceManager::queryInstanceName() const
// would be neat if we could take the names from the game plugins but
// the required initialization order requires the ini file to be
// available *before* we load plugins
dialog.setComboBoxItems({ "Oblivion", "Skyrim", "Fallout 3",
dialog.setComboBoxItems({ "Oblivion", "Skyrim", "SkyrimSE", "Fallout 3",
"Fallout NV", "Fallout 4" });
dialog.setComboBoxEditable(true);
dialog.setWindowTitle(QObject::tr("Enter Instance Name"));
@@ -196,7 +196,7 @@ QString InstanceManager::determineDataPath()
}
}
if (instanceId.isEmpty() || !QFileInfo::exists(dataPath)) {
if (instanceId.isEmpty()) {
return qApp->applicationDirPath();
} else {
setCurrentInstance(instanceId);
+1
View File
@@ -30,6 +30,7 @@ public:
virtual void lock() = 0;
virtual void unlock() = 0;
virtual bool unlockClicked() = 0;
virtual void setProcessName(QString const &) = 0;
};
+4 -1
View File
@@ -19,8 +19,11 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "lockeddialog.h"
#include "ui_lockeddialog.h"
#include <QResizeEvent>
#include <QPoint>
#include <QResizeEvent>
#include <QWidget>
#include <Qt> // for Qt::FramelessWindowHint, etc
LockedDialog::LockedDialog(QWidget *parent, const QString &text, bool unlockButton)
: QDialog(parent)
+10 -1
View File
@@ -20,7 +20,12 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#ifndef LOCKEDDIALOG_H
#define LOCKEDDIALOG_H
#include <QDialog>
#include <QDialog> // for QDialog
#include <QObject> // for Q_OBJECT, slots
#include <QString> // for QString
class QResizeEvent;
class QWidget;
namespace Ui {
class LockedDialog;
@@ -49,6 +54,10 @@ public:
**/
bool unlockClicked() const { return m_UnlockClicked; }
/**
* @brief set the name of the process being run
* @param name of process
*/
void setProcessName(const QString &name);
protected:
+19 -34
View File
@@ -85,38 +85,21 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
using namespace MOBase;
using namespace MOShared;
bool createAndMakeWritable(const std::wstring &subPath)
{
bool createAndMakeWritable(const std::wstring &subPath) {
QString const dataPath = qApp->property("dataPath").toString();
QString fullPath = dataPath + "/" + QString::fromStdWString(subPath);
if (!QDir(fullPath).exists()) {
QDir().mkdir(fullPath);
if (!QDir(fullPath).exists() && !QDir().mkdir(fullPath)) {
QMessageBox::critical(nullptr, QObject::tr("Error"),
QObject::tr("Failed to create \"%1\". Your user "
"account probably lacks permission.")
.arg(fullPath));
return false;
} else {
return true;
}
QFileInfo fileInfo(fullPath);
if (!fileInfo.exists() || !fileInfo.isWritable()) {
if (QMessageBox::question(nullptr, QObject::tr("Permissions required"),
QObject::tr("The current user account doesn't have the required access rights to run "
"Mod Organizer. The neccessary changes can be made automatically (the MO directory "
"will be made writable for the current user account). You will be asked to run "
"\"helper.exe\" with administrative rights."),
QMessageBox::Yes | QMessageBox::Cancel) == QMessageBox::Yes) {
if (!Helper::init(qApp->applicationDirPath().toStdWString(),
dataPath.toStdWString())) {
return false;
}
} else {
return false;
}
// no matter which directory didn't exist/wasn't writable, the helper
// should have created them all so we don't have to worry this message box would appear repeatedly
}
return true;
}
bool bootstrap()
{
// remove the temporary backup directory in case we're restarting after an update
@@ -129,11 +112,9 @@ bool bootstrap()
removeOldFiles(qApp->property("dataPath").toString() + "/" + QString::fromStdWString(AppConfig::logPath()),
"usvfs*.log", 5, QDir::Name);
createAndMakeWritable(AppConfig::profilesPath());
createAndMakeWritable(AppConfig::modsPath());
createAndMakeWritable(AppConfig::downloadPath());
createAndMakeWritable(AppConfig::overwritePath());
createAndMakeWritable(AppConfig::logPath());
if (!createAndMakeWritable(AppConfig::logPath())) {
return false;
}
return true;
}
@@ -168,7 +149,7 @@ static LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS *except
if (QMessageBox::question(nullptr, QObject::tr("Woops"),
QObject::tr("ModOrganizer has crashed! "
"Should a diagnostic file be created? "
"If you send me this file (%1) to sherb@gmx.net, "
"If you send me this file (%1) to modorganizer@gmail.com, "
"the bug is a lot more likely to be fixed. "
"Please include a short description of what you were "
"doing when the crash happened"
@@ -445,7 +426,7 @@ int runApplication(MOApplication &application, SingleInstance &instance,
qDebug("data path: %s", qPrintable(dataPath));
if (!bootstrap()) {
reportError("failed to set up data path");
reportError("failed to set up data paths");
return 1;
}
@@ -465,6 +446,10 @@ int runApplication(MOApplication &application, SingleInstance &instance,
QSettings::IniFormat);
qDebug("initializing core");
OrganizerCore organizer(settings);
if (!organizer.bootstrap()) {
reportError("failed to set up data paths");
return 1;
}
qDebug("initialize plugins");
PluginContainer pluginContainer(&organizer);
pluginContainer.loadPlugins();
@@ -533,13 +518,13 @@ int runApplication(MOApplication &application, SingleInstance &instance,
// pass the remaining parameters to the binary
try {
organizer.startApplication(exeName, arguments, QString(), QString());
return 0;
} catch (const std::exception &e) {
reportError(
QObject::tr("failed to start application: %1").arg(e.what()));
return 1;
}
}
return 0;
}
NexusInterface::instance()->getAccessManager()->startLoginCheck();

Some files were not shown because too many files have changed in this diff Show More