mirror of
https://github.com/ModOrganizer2/modorganizer.git
synced 2026-07-27 13:58:24 -07:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bc75009169 |
@@ -1,16 +0,0 @@
|
||||
root = true
|
||||
|
||||
[*.cpp]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
insert_final_newline = true
|
||||
|
||||
[*.h]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
insert_final_newline = true
|
||||
|
||||
[*.ui]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
insert_final_newline = true
|
||||
@@ -0,0 +1,25 @@
|
||||
# The problem
|
||||
|
||||
Briefly describe the issue you are experiencing (or the feature you want to see added to Mod Organizer). Tell us what you were trying to do and what happened instead. Remember, this is _not_ a place to ask questions. For that, go to our discord channel
|
||||
|
||||
# Environment
|
||||
|
||||
* Mod Organizer Version that exhibits the issue:
|
||||
* Last Mod Organizer Verison that did not exhibit the issue (if applicable):
|
||||
* Desktop OS/version used to run Mod Organizer:
|
||||
|
||||
# Details
|
||||
|
||||
If necessary, describe the problem you have been experiencing in more detail.
|
||||
|
||||
# Link to Mod Organizer logs
|
||||
|
||||
## USVFS
|
||||
Create a [GIST](https://gist.github.com) which is a paste of your USVFS logs, and link them here.
|
||||
Do _NOT_ paste your full USVFS logs here, as it will make this issue very long and hard to read!
|
||||
If you are reporting a bug, _always_ include the USVFS logs!
|
||||
|
||||
## MO Interface
|
||||
Create a [GIST](https://gist.github.com) which is a paste of your mo_interface logs, and link them here.
|
||||
Do _NOT_ paste your full mo_interface logs here, as it will make this issue very long and hard to read!
|
||||
If you are reporting a bug, _always_ include the mo_interface logs!
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
name: Dev Ticket
|
||||
about: Reserved for development tasks and management.
|
||||
title: ''
|
||||
labels: Dev Ticket
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Task:
|
||||
@@ -1,20 +0,0 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: Feature Request
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
@@ -1,41 +0,0 @@
|
||||
---
|
||||
name: Issue Report
|
||||
about: Create an issue report.
|
||||
title: ''
|
||||
labels: issue report
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## The problem:
|
||||
Briefly describe the issue you are experiencing. Tell us what you were trying to do and what happened instead. Remember, this is _not_ a place to ask questions. For that, go to our [discord channel](https://discord.gg/5tCqt6V)
|
||||
|
||||
|
||||
## To Reproduce:
|
||||
Steps to reproduce the behavior:
|
||||
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
|
||||
## Environment:
|
||||
|
||||
* Mod Organizer Version that exhibits the issue:
|
||||
* Last Mod Organizer Verison that did not exhibit the issue (if applicable):
|
||||
* Desktop OS/version used to run Mod Organizer:
|
||||
|
||||
## Details:
|
||||
If necessary, describe the problem you have been experiencing with more details and pictures.
|
||||
|
||||
|
||||
## Link to Mod Organizer logs:
|
||||
To access the log files you can press the Open folder icon over the modlist and select "Open MO2 Logs folder". You should close MO2 before sending or examining the logs as they are finished writing only after the program is closed.
|
||||
|
||||
### USVFS:
|
||||
Create a [GIST](https://gist.github.com) which is a paste of your USVFS logs, and link them here.
|
||||
Do _NOT_ paste your full USVFS logs here, as it will make this issue very long and hard to read!
|
||||
If you are reporting a bug, _always_ include the USVFS logs!
|
||||
|
||||
### MO Interface:
|
||||
Create a [GIST](https://gist.github.com) which is a paste of your mo_interface logs, and link them here.
|
||||
Do _NOT_ paste your full mo_interface logs here, as it will make this issue very long and hard to read!
|
||||
If you are reporting a bug, _always_ include the mo_interface logs!
|
||||
+7
-4
@@ -2,14 +2,17 @@
|
||||
Thumbs.db
|
||||
src/moc_*.cpp
|
||||
src/ui_*.h
|
||||
src/organizer_en.ts
|
||||
src/*.qrc.depends
|
||||
src/Modorganizer.*
|
||||
src/*.bak
|
||||
CMakeLists.txt.user
|
||||
edit
|
||||
stderr.log
|
||||
stdout.log
|
||||
vs_stderr.log
|
||||
vs_stdout.log
|
||||
build
|
||||
/vsbuild
|
||||
/CMakeFiles
|
||||
.idea
|
||||
/msbuild.log
|
||||
/*std*.log
|
||||
/*build
|
||||
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
version: 1.0.{build}
|
||||
skip_branch_with_pr: true
|
||||
image: Visual Studio 2017
|
||||
environment:
|
||||
WEBHOOK_URL:
|
||||
secure: gOKbXaZM9ImtMD5XrYITvdyZUW/az082G9OIN1EC1VYoNNsKROB4s6VsQiL6qbLNLc4XQhc8Y9DhdU9Hfh49vhypcjUEQmMsENxnp+1hYMJctTqIYDunVSd767eez5wz6rKHqk+XOHmg5gyVNCV9u4DVcCZJSVe4UTKn1lc47H0=
|
||||
build_script:
|
||||
- cmd: >-
|
||||
git clone --depth=1 --branch=%APPVEYOR_REPO_BRANCH% https://github.com/ModOrganizer2/modorganizer-umbrella.git c:\projects\modorganizer-umbrella 2> $null
|
||||
|
||||
mkdir c:\projects\modorganizer-build -type directory
|
||||
|
||||
cd c:\projects\modorganizer-umbrella
|
||||
|
||||
C:\Python37-x64\python.exe unimake.py -d c:\projects\modorganizer-build -s Appveyor_Build=True %APPVEYOR_PROJECT_NAME%
|
||||
artifacts:
|
||||
- path: vsbuild\src\RelWithDebInfo\ModOrganizer.exe
|
||||
name: modorganizer_exe
|
||||
- path: vsbuild\src\RelWithDebInfo\ModOrganizer.pdb
|
||||
name: modorganizer_pdb
|
||||
on_success:
|
||||
- ps: Set-Location -Path $env:APPVEYOR_BUILD_FOLDER
|
||||
- ps: Invoke-RestMethod https://raw.githubusercontent.com/DiscordHooks/appveyor-discord-webhook/master/send.ps1 -o send.ps1
|
||||
- ps: ./send.ps1 success $env:WEBHOOK_URL
|
||||
on_failure:
|
||||
- ps: Set-Location -Path $env:APPVEYOR_BUILD_FOLDER
|
||||
- ps: Invoke-RestMethod https://raw.githubusercontent.com/DiscordHooks/appveyor-discord-webhook/master/send.ps1 -o send.ps1
|
||||
- ps: ./send.ps1 failure $env:WEBHOOK_URL
|
||||
@@ -1,5 +1,3 @@
|
||||
[](https://ci.appveyor.com/project/Modorganizer2/modorganizer)
|
||||
|
||||
# Mod Organizer
|
||||
|
||||
Mod Organizer (MO) is a tool for managing mod collections of arbitrary size. It is specifically designed for people who like to experiment with mods and thus need an easy and reliable way to install and uninstall them.
|
||||
@@ -22,7 +20,7 @@ Through the work of a few people of the community MO2 has come quite far, now it
|
||||
## Reporting Issues:
|
||||
Issues should be reported to the GitHub page or on the open discord server: [ModOrganizerDevs](https://discord.gg/vD2ZbfX). Here is also where dev builds are tested, bugs are reported and investigated, suggestions are discussed and a lot more.
|
||||
|
||||
Credits to Tannin, LePresidente, Silarn, erasmux, AL12, LostDragonist, AnyOldName3 and many others for the development.
|
||||
Credits to Tannin, LePresidente, Silarn, erasmux, AL12 and many others for the development.
|
||||
|
||||
## Download Location
|
||||
|
||||
@@ -51,7 +49,6 @@ Here is a complete list:
|
||||
* https://github.com/Modorganizer2/modorganizer-check_fnis
|
||||
* https://github.com/Modorganizer2/modorganizer-diagnose_basic
|
||||
* https://github.com/Modorganizer2/modorganizer-esptk
|
||||
* https://github.com/ModOrganizer2/modorganizer-fnistool
|
||||
* https://github.com/Modorganizer2/modorganizer-helper
|
||||
* https://github.com/Modorganizer2/modorganizer-game_fallout3
|
||||
* https://github.com/Modorganizer2/modorganizer-game_fallout4
|
||||
@@ -63,7 +60,6 @@ Here is a complete list:
|
||||
* https://github.com/Modorganizer2/modorganizer-game_oblivion
|
||||
* https://github.com/Modorganizer2/modorganizer-game_skyrim
|
||||
* https://github.com/Modorganizer2/modorganizer-game_skyrimSE
|
||||
* https://github.com/ModOrganizer2/modorganizer-game_skyrimVR
|
||||
* https://github.com/Modorganizer2/modorganizer-game_ttw
|
||||
* https://github.com/Modorganizer2/modorganizer-installer_bain
|
||||
* https://github.com/Modorganizer2/modorganizer-installer_bundle
|
||||
@@ -84,3 +80,4 @@ Here is a complete list:
|
||||
### Unused Repositories
|
||||
* https://github.com/Modorganizer2/modorganizer-hookdll
|
||||
* https://github.com/TanninOne/modorganizer-tool_nmmimport
|
||||
|
||||
|
||||
+28
-46
@@ -30,14 +30,12 @@ SET(organizer_SRCS
|
||||
motddialog.cpp
|
||||
modlistsortproxy.cpp
|
||||
modlist.cpp
|
||||
modidlineedit.cpp
|
||||
modinfodialog.cpp
|
||||
modinfo.cpp
|
||||
modinfobackup.cpp
|
||||
modinfoforeign.cpp
|
||||
modinfooverwrite.cpp
|
||||
modinforegular.cpp
|
||||
modinfoseparator.cpp
|
||||
modinfowithconflictinfo.cpp
|
||||
messagedialog.cpp
|
||||
mainwindow.cpp
|
||||
@@ -54,6 +52,7 @@ SET(organizer_SRCS
|
||||
executableslist.cpp
|
||||
editexecutablesdialog.cpp
|
||||
downloadmanager.cpp
|
||||
downloadlistwidgetcompact.cpp
|
||||
downloadlistwidget.cpp
|
||||
downloadlistsortproxy.cpp
|
||||
downloadlist.cpp
|
||||
@@ -79,6 +78,7 @@ SET(organizer_SRCS
|
||||
previewgenerator.cpp
|
||||
previewdialog.cpp
|
||||
aboutdialog.cpp
|
||||
json.cpp
|
||||
modflagicondelegate.cpp
|
||||
genericicondelegate.cpp
|
||||
organizerproxy.cpp
|
||||
@@ -89,10 +89,6 @@ SET(organizer_SRCS
|
||||
usvfsconnector.cpp
|
||||
eventfilter.cpp
|
||||
moshortcut.cpp
|
||||
listdialog.cpp
|
||||
lcdnumber.cpp
|
||||
forcedloaddialog.cpp
|
||||
forcedloaddialogwidget.cpp
|
||||
|
||||
shared/windows_error.cpp
|
||||
shared/error_report.cpp
|
||||
@@ -124,14 +120,12 @@ SET(organizer_HDRS
|
||||
motddialog.h
|
||||
modlistsortproxy.h
|
||||
modlist.h
|
||||
modidlineedit.h
|
||||
modinfodialog.h
|
||||
modinfo.h
|
||||
modinfobackup.h
|
||||
modinfoforeign.h
|
||||
modinfooverwrite.h
|
||||
modinforegular.h
|
||||
modinfoseparator.h
|
||||
modinfowithconflictinfo.h
|
||||
messagedialog.h
|
||||
mainwindow.h
|
||||
@@ -147,6 +141,7 @@ SET(organizer_HDRS
|
||||
executableslist.h
|
||||
editexecutablesdialog.h
|
||||
downloadmanager.h
|
||||
downloadlistwidgetcompact.h
|
||||
downloadlistwidget.h
|
||||
downloadlistsortproxy.h
|
||||
downloadlist.h
|
||||
@@ -172,6 +167,7 @@ SET(organizer_HDRS
|
||||
previewgenerator.h
|
||||
previewdialog.h
|
||||
aboutdialog.h
|
||||
json.h
|
||||
modflagicondelegate.h
|
||||
genericicondelegate.h
|
||||
organizerproxy.h
|
||||
@@ -185,10 +181,6 @@ SET(organizer_HDRS
|
||||
eventfilter.h
|
||||
descriptionpage.h
|
||||
moshortcut.h
|
||||
listdialog.h
|
||||
lcdnumber.h
|
||||
forcedloaddialog.h
|
||||
forcedloaddialogwidget.h
|
||||
|
||||
shared/windows_error.h
|
||||
shared/error_report.h
|
||||
@@ -218,6 +210,8 @@ SET(organizer_UIS
|
||||
installdialog.ui
|
||||
finddialog.ui
|
||||
editexecutablesdialog.ui
|
||||
downloadlistwidgetcompact.ui
|
||||
downloadlistwidget.ui
|
||||
credentialsdialog.ui
|
||||
categoriesdialog.ui
|
||||
activatemodsdialog.ui
|
||||
@@ -227,9 +221,6 @@ SET(organizer_UIS
|
||||
previewdialog.ui
|
||||
browserdialog.ui
|
||||
aboutdialog.ui
|
||||
listdialog.ui
|
||||
forcedloaddialog.ui
|
||||
forcedloaddialogwidget.ui
|
||||
)
|
||||
|
||||
SET(organizer_QRCS
|
||||
@@ -247,14 +238,6 @@ SOURCE_GROUP(Source FILES ${organizer_SRCS})
|
||||
SOURCE_GROUP(Headers FILES ${organizer_HDRS})
|
||||
SOURCE_GROUP(UI FILES ${organizer_UIS})
|
||||
|
||||
# MO projects
|
||||
SET(dependency_project_path "${DEPENDENCIES_DIR}")
|
||||
SET(default_project_path "${DEPENDENCIES_DIR}/modorganizer_super")
|
||||
GET_FILENAME_COMPONENT(${default_project_path} ${default_project_path} REALPATH)
|
||||
|
||||
SET(project_path "${default_project_path}" CACHE PATH "path to the other mo projects")
|
||||
#TODO this should not be a hardcoded path
|
||||
SET(lib_path "${project_path}/../../install/libs")
|
||||
|
||||
# Qt5
|
||||
SET(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
@@ -266,13 +249,12 @@ FIND_PACKAGE(Qt5Quick REQUIRED)
|
||||
FIND_PACKAGE(Qt5Network REQUIRED)
|
||||
FIND_PACKAGE(Qt5WinExtras REQUIRED)
|
||||
FIND_PACKAGE(Qt5WebEngineWidgets REQUIRED)
|
||||
FIND_PACKAGE(Qt5WebSockets REQUIRED)
|
||||
FIND_PACKAGE(Qt5Script REQUIRED)
|
||||
FIND_PACKAGE(Qt5Qml REQUIRED)
|
||||
FIND_PACKAGE(Qt5LinguistTools)
|
||||
QT5_WRAP_UI(organizer_UIHDRS ${organizer_UIS})
|
||||
QT5_ADD_RESOURCES(organizer_RCCPPS ${organizer_QRCS})
|
||||
SET(mo_translation_sources ${CMAKE_SOURCE_DIR}/src ${project_path}/uibase/src)
|
||||
QT5_CREATE_TRANSLATION(organizer_translations_qm ${mo_translation_sources} ${CMAKE_SOURCE_DIR}/src/organizer_en.ts)
|
||||
QT5_CREATE_TRANSLATION(organizer_translations_qm ${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/src/organizer_en.ts)
|
||||
ADD_CUSTOM_TARGET(translations DEPENDS ${organizer_translations_qm})
|
||||
|
||||
INCLUDE_DIRECTORIES(${Qt5Declarative_INCLUDES})
|
||||
@@ -292,13 +274,22 @@ LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
|
||||
FIND_PACKAGE(zlib REQUIRED)
|
||||
# TODO FindZlib doesn't find the static zlib library
|
||||
|
||||
|
||||
# MO projects
|
||||
SET(default_project_path "${CMAKE_SOURCE_DIR}/..")
|
||||
GET_FILENAME_COMPONENT(${default_project_path} ${default_project_path} REALPATH)
|
||||
|
||||
SET(project_path "${default_project_path}" CACHE PATH "path to the other mo projects")
|
||||
#TODO this should not be a hardcoded path
|
||||
SET(lib_path "${project_path}/../../install/libs")
|
||||
|
||||
|
||||
INCLUDE_DIRECTORIES(${project_path}/uibase/src
|
||||
${project_path}/bsatk/src
|
||||
${project_path}/esptk/src
|
||||
${project_path}/archive/src
|
||||
${dependency_project_path}/usvfs/include
|
||||
${project_path}/game_gamebryo/src/gamebryo
|
||||
${project_path}/game_gamebryo/src/creation
|
||||
${project_path}/../usvfs/include
|
||||
${project_path}/game_gamebryo/src
|
||||
${project_path}/game_features/src
|
||||
${project_path}/githubpp/src
|
||||
${LZ4_ROOT}/include)
|
||||
@@ -325,27 +316,18 @@ ENDIF()
|
||||
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::WebEngineWidgets Qt5::Quick
|
||||
Qt5::Qml Qt5::QuickWidgets Qt5::Network Qt5::WebSockets
|
||||
Qt5::Script Qt5::Qml Qt5::QuickWidgets Qt5::Network
|
||||
${Boost_LIBRARIES}
|
||||
zlibstatic
|
||||
uibase esptk bsatk githubpp
|
||||
${usvfs_name}
|
||||
Dbghelp advapi32 Version Shlwapi liblz4 Crypt32)
|
||||
|
||||
IF (MSVC)
|
||||
SET_TARGET_PROPERTIES(ModOrganizer PROPERTIES COMPILE_FLAGS "/std:c++latest")
|
||||
ENDIF()
|
||||
IF (MSVC AND "${CMAKE_SIZEOF_VOID_P}" EQUAL 4)
|
||||
# 32 bits
|
||||
SET_TARGET_PROPERTIES(ModOrganizer PROPERTIES LINK_FLAGS "/LARGEADDRESSAWARE")
|
||||
ENDIF()
|
||||
|
||||
Dbghelp advapi32 Version Shlwapi liblz4)
|
||||
IF (NOT "${OPTIMIZE_COMPILE_FLAGS}" STREQUAL "")
|
||||
SET_TARGET_PROPERTIES(ModOrganizer PROPERTIES COMPILE_FLAGS_RELWITHDEBINFO ${OPTIMIZE_COMPILE_FLAGS})
|
||||
ENDIF()
|
||||
IF (NOT "${OPTIMIZE_LINK_FLAGS}" STREQUAL "")
|
||||
SET_TARGET_PROPERTIES(ModOrganizer PROPERTIES LINK_FLAGS_RELWITHDEBINFO ${OPTIMIZE_LINK_FLAGS})
|
||||
SET_TARGET_PROPERTIES(ModOrganizer PROPERTIES COMPILE_FLAGS_RELWITHDEBINFO
|
||||
${OPTIMIZE_COMPILE_FLAGS})
|
||||
ENDIF()
|
||||
SET_TARGET_PROPERTIES(ModOrganizer PROPERTIES LINK_FLAGS_RELWITHDEBINFO
|
||||
"/LARGEADDRESSAWARE ${OPTIMIZE_LINK_FLAGS}")
|
||||
|
||||
|
||||
###############
|
||||
@@ -368,12 +350,12 @@ SET(windeploy_parameters "--no-translations --plugindir qtplugins --libdir dlls
|
||||
INSTALL(
|
||||
CODE
|
||||
"EXECUTE_PROCESS(COMMAND
|
||||
${qt5bin}/windeployqt.exe ModOrganizer.exe --webenginewidgets --websockets ${windeploy_parameters}
|
||||
${qt5bin}/windeployqt.exe ModOrganizer.exe --webenginewidgets ${windeploy_parameters}
|
||||
WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin
|
||||
)
|
||||
# run it a second time because on the first run it misses some files
|
||||
EXECUTE_PROCESS(COMMAND
|
||||
${qt5bin}/windeployqt.exe ModOrganizer.exe --webenginewidgets --websockets ${windeploy_parameters}
|
||||
${qt5bin}/windeployqt.exe ModOrganizer.exe --webenginewidgets ${windeploy_parameters}
|
||||
WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin
|
||||
)
|
||||
EXECUTE_PROCESS(COMMAND
|
||||
|
||||
@@ -114,8 +114,3 @@ void AboutDialog::on_creditsList_currentItemChanged(QListWidgetItem *current, QL
|
||||
ui->licenseText->setText(tr("No license"));
|
||||
}
|
||||
}
|
||||
|
||||
void AboutDialog::on_copyrightText_linkActivated(const QString &link)
|
||||
{
|
||||
emit linkClicked(link);
|
||||
}
|
||||
@@ -40,10 +40,6 @@ public:
|
||||
explicit AboutDialog(const QString &version, QWidget *parent = 0);
|
||||
~AboutDialog();
|
||||
|
||||
signals:
|
||||
|
||||
void linkClicked(QString link);
|
||||
|
||||
private:
|
||||
|
||||
enum Licenses {
|
||||
@@ -74,7 +70,6 @@ private:
|
||||
|
||||
private slots:
|
||||
void on_creditsList_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
|
||||
void on_copyrightText_linkActivated(const QString &link);
|
||||
|
||||
private:
|
||||
|
||||
|
||||
+18
-69
@@ -125,7 +125,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="copyrightText">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string notr="true"><html><head/><body><p>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</p><p>See the GNU General Public License for more details.</p><p>Source code can be found at <a href="https://github.com/Modorganizer2/modorganizer"><span style=" text-decoration: underline; color:#007af4;">GitHub</span></a>.</p></body></html></string>
|
||||
</property>
|
||||
@@ -153,11 +153,11 @@
|
||||
<attribute name="title">
|
||||
<string>Thanks</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_0">
|
||||
<item row="0" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Lead Developers/ Maintainers</string>
|
||||
<string>Current Maintainers</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<item>
|
||||
@@ -167,12 +167,17 @@
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>LePresidente (Project Lead)</string>
|
||||
<string notr="true">LePresidente (Project Lead)</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string notr="true">AL12</string>
|
||||
<string>AL12</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string notr="true">Diana</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
@@ -185,55 +190,19 @@
|
||||
<string notr="true">Silarn</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string notr="true">LostDragonist</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="title">
|
||||
<string>Mo2 devs and Contributors</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7" stretch="0">
|
||||
<item>
|
||||
<widget class="QListWidget" name="listWidget_3">
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::NoSelection</enum>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string notr="true">AnyOldName3</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Project579</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>przester</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1" rowspan="2">
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
<property name="title">
|
||||
<string>Translators</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_61">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<item>
|
||||
<widget class="QListWidget" name="listWidget_4">
|
||||
<widget class="QListWidget" name="listWidget_2">
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::NoSelection</enum>
|
||||
</property>
|
||||
@@ -315,11 +284,6 @@
|
||||
<string>Brgodfx (Portuguese)</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>zDas (Portuguese)</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string notr="true">tokcdk (Russian)</string>
|
||||
@@ -340,11 +304,6 @@
|
||||
<string>Jax (Swedish)</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>yohru (Japanese)</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>...and all other Transifex contributors!</string>
|
||||
@@ -358,12 +317,12 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2" rowspan="2">
|
||||
<widget class="QGroupBox" name="groupBox_4">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
<property name="title">
|
||||
<string>Other Supporters && Contributors</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_71">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<item>
|
||||
<widget class="QListWidget" name="listWidget">
|
||||
<property name="selectionMode">
|
||||
@@ -371,7 +330,7 @@
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Tannin (Original Creator)</string>
|
||||
<string notr="true">AnyOldName3</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
@@ -409,11 +368,6 @@
|
||||
<string notr="true">Gopher</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string notr="true">GrantSP</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string notr="true">GSDFan</string>
|
||||
@@ -424,11 +378,6 @@
|
||||
<string notr="true">ogrotten</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string notr="true">outdatedtv</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string notr="true">Schilduin</string>
|
||||
|
||||
+2
-2
@@ -88,7 +88,7 @@ public:
|
||||
return temp.replace(tagIter->second.first, QString("<font style=\"color: #%1;\">%2</font>").arg(color, content));
|
||||
}
|
||||
} else {
|
||||
qWarning("don't know how to deal with tag %s", qUtf8Printable(tagName));
|
||||
qWarning("don't know how to deal with tag %s", qPrintable(tagName));
|
||||
}
|
||||
} else {
|
||||
if (tagName == "*") {
|
||||
@@ -100,7 +100,7 @@ public:
|
||||
// expression doesn't match. either the input string is invalid
|
||||
// or the expression is
|
||||
qWarning("%s doesn't match the expression for %s",
|
||||
qUtf8Printable(temp), qUtf8Printable(tagName));
|
||||
temp.toUtf8().constData(), tagName.toUtf8().constData());
|
||||
length = 0;
|
||||
return QString();
|
||||
}
|
||||
|
||||
@@ -173,13 +173,13 @@ void BrowserDialog::titleChanged(const QString &title)
|
||||
|
||||
QString BrowserDialog::guessFileName(const QString &url)
|
||||
{
|
||||
QRegExp uploadsExp(QString("https://.+/uploads/([^/]+)$"));
|
||||
QRegExp uploadsExp(QString("http://.+/uploads/([^/]+)$"));
|
||||
if (uploadsExp.indexIn(url) != -1) {
|
||||
// these seem to be premium downloads
|
||||
return uploadsExp.cap(1);
|
||||
}
|
||||
|
||||
QRegExp filesExp(QString("https://.+\\?file=([^&]+)"));
|
||||
QRegExp filesExp(QString("http://.+\\?file=([^&]+)"));
|
||||
if (filesExp.indexIn(url) != -1) {
|
||||
// a regular manual download?
|
||||
return filesExp.cap(1);
|
||||
|
||||
+6
-6
@@ -72,7 +72,7 @@ void CategoryFactory::loadCategories()
|
||||
bool ok = false;
|
||||
int temp = iter->toInt(&ok);
|
||||
if (!ok) {
|
||||
qCritical("invalid category id %s", iter->constData());
|
||||
qCritical("invalid id %s", iter->constData());
|
||||
}
|
||||
nexusIDs.push_back(temp);
|
||||
}
|
||||
@@ -268,7 +268,7 @@ void CategoryFactory::loadDefaultCategories()
|
||||
int CategoryFactory::getParentID(unsigned int index) const
|
||||
{
|
||||
if (index >= m_Categories.size()) {
|
||||
throw MyException(QObject::tr("invalid category index: %1").arg(index));
|
||||
throw MyException(QObject::tr("invalid index %1").arg(index));
|
||||
}
|
||||
|
||||
return m_Categories[index].m_ParentID;
|
||||
@@ -303,7 +303,7 @@ bool CategoryFactory::isDecendantOf(int id, int parentID) const
|
||||
bool CategoryFactory::hasChildren(unsigned int index) const
|
||||
{
|
||||
if (index >= m_Categories.size()) {
|
||||
throw MyException(QObject::tr("invalid category index: %1").arg(index));
|
||||
throw MyException(QObject::tr("invalid index %1").arg(index));
|
||||
}
|
||||
|
||||
return m_Categories[index].m_HasChildren;
|
||||
@@ -313,7 +313,7 @@ bool CategoryFactory::hasChildren(unsigned int index) const
|
||||
QString CategoryFactory::getCategoryName(unsigned int index) const
|
||||
{
|
||||
if (index >= m_Categories.size()) {
|
||||
throw MyException(QObject::tr("invalid category index: %1").arg(index));
|
||||
throw MyException(QObject::tr("invalid index %1").arg(index));
|
||||
}
|
||||
|
||||
return m_Categories[index].m_Name;
|
||||
@@ -323,7 +323,7 @@ QString CategoryFactory::getCategoryName(unsigned int index) const
|
||||
int CategoryFactory::getCategoryID(unsigned int index) const
|
||||
{
|
||||
if (index >= m_Categories.size()) {
|
||||
throw MyException(QObject::tr("invalid category index: %1").arg(index));
|
||||
throw MyException(QObject::tr("invalid index %1").arg(index));
|
||||
}
|
||||
|
||||
return m_Categories[index].m_ID;
|
||||
@@ -334,7 +334,7 @@ int CategoryFactory::getCategoryIndex(int ID) const
|
||||
{
|
||||
std::map<int, unsigned int>::const_iterator iter = m_IDMap.find(ID);
|
||||
if (iter == m_IDMap.end()) {
|
||||
throw MyException(QObject::tr("invalid category id: %1").arg(ID));
|
||||
throw MyException(QObject::tr("invalid category id %1").arg(ID));
|
||||
}
|
||||
return iter->second;
|
||||
}
|
||||
|
||||
+2
-4
@@ -47,10 +47,8 @@ public:
|
||||
static const int CATEGORY_SPECIAL_NOCATEGORY = 10003;
|
||||
static const int CATEGORY_SPECIAL_CONFLICT = 10004;
|
||||
static const int CATEGORY_SPECIAL_NOTENDORSED = 10005;
|
||||
static const int CATEGORY_SPECIAL_BACKUP = 10006;
|
||||
static const int CATEGORY_SPECIAL_MANAGED = 10007;
|
||||
static const int CATEGORY_SPECIAL_UNMANAGED = 10008;
|
||||
|
||||
static const int CATEGORY_SPECIAL_MANAGED = 10006;
|
||||
static const int CATEGORY_SPECIAL_UNMANAGED = 10007;
|
||||
|
||||
public:
|
||||
|
||||
|
||||
@@ -32,6 +32,16 @@ CredentialsDialog::~CredentialsDialog()
|
||||
delete ui;
|
||||
}
|
||||
|
||||
QString CredentialsDialog::username() const
|
||||
{
|
||||
return ui->usernameEdit->text();
|
||||
}
|
||||
|
||||
QString CredentialsDialog::password() const
|
||||
{
|
||||
return ui->passwordEdit->text();
|
||||
}
|
||||
|
||||
bool CredentialsDialog::store() const
|
||||
{
|
||||
return ui->rememberCheck->isChecked();
|
||||
|
||||
@@ -34,6 +34,9 @@ public:
|
||||
explicit CredentialsDialog(QWidget *parent = 0);
|
||||
~CredentialsDialog();
|
||||
|
||||
QString username() const;
|
||||
QString password() const;
|
||||
|
||||
bool store() const;
|
||||
bool neverAsk() const;
|
||||
|
||||
|
||||
@@ -23,13 +23,10 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "utility.h"
|
||||
#include "report.h"
|
||||
#include "modinfo.h"
|
||||
#include "settings.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QDir>
|
||||
#include <QString>
|
||||
#include <QTextCodec>
|
||||
#include <gameplugins.h>
|
||||
|
||||
|
||||
using namespace MOBase;
|
||||
@@ -86,29 +83,13 @@ void DirectoryRefresher::addModBSAToStructure(DirectoryEntry *directoryStructure
|
||||
int priority, const QString &directory, const QStringList &archives)
|
||||
{
|
||||
std::wstring directoryW = ToWString(QDir::toNativeSeparators(directory));
|
||||
IPluginGame *game = qApp->property("managed_game").value<IPluginGame*>();
|
||||
|
||||
GamePlugins *gamePlugins = game->feature<GamePlugins>();
|
||||
QStringList loadOrder = QStringList();
|
||||
gamePlugins->getLoadOrder(loadOrder);
|
||||
|
||||
for (const QString &archive : archives) {
|
||||
QFileInfo fileInfo(archive);
|
||||
if (m_EnabledArchives.find(fileInfo.fileName()) != m_EnabledArchives.end()) {
|
||||
|
||||
int order = -1;
|
||||
|
||||
for (auto plugin : loadOrder)
|
||||
{
|
||||
QString name = plugin.left(plugin.size() - 4);
|
||||
if (fileInfo.fileName().startsWith(name + " - ", Qt::CaseInsensitive) || fileInfo.fileName().startsWith(name + ".", Qt::CaseInsensitive)) {
|
||||
order = loadOrder.indexOf(plugin);
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
IPluginGame *game = qApp->property("managed_game").value<IPluginGame*>();
|
||||
directoryStructure->addFromBSA(ToWString(modName), directoryW, ToWString(QDir::toNativeSeparators(fileInfo.absoluteFilePath())), priority, order);
|
||||
//directoryStructure->addFromBSA(ToWString(modName), directoryW,
|
||||
// ToWString(QDir::toNativeSeparators(fileInfo.absoluteFilePath())), priority);
|
||||
} catch (const std::exception &e) {
|
||||
throw MyException(tr("failed to parse bsa %1: %2").arg(archive, e.what()));
|
||||
}
|
||||
@@ -126,10 +107,6 @@ void DirectoryRefresher::addModFilesToStructure(DirectoryEntry *directoryStructu
|
||||
// files to this mod
|
||||
FilesOrigin &origin = directoryStructure->createOrigin(ToWString(modName), directoryW, priority);
|
||||
for (const QString &filename : stealFiles) {
|
||||
if (filename.isEmpty()) {
|
||||
qWarning("Trying to find file with no name");
|
||||
continue;
|
||||
}
|
||||
QFileInfo fileInfo(filename);
|
||||
FileEntry::Ptr file = directoryStructure->findFile(ToWString(fileInfo.fileName()));
|
||||
if (file.get() != nullptr) {
|
||||
@@ -138,12 +115,9 @@ void DirectoryRefresher::addModFilesToStructure(DirectoryEntry *directoryStructu
|
||||
file->removeOrigin(0);
|
||||
}
|
||||
origin.addFile(file->getIndex());
|
||||
file->addOrigin(origin.getID(), file->getFileTime(), L"", -1);
|
||||
file->addOrigin(origin.getID(), file->getFileTime(), L"");
|
||||
} else {
|
||||
QString warnStr = fileInfo.absolutePath();
|
||||
if (warnStr.isEmpty())
|
||||
warnStr = filename;
|
||||
qWarning("file not found: %s", qUtf8Printable(warnStr));
|
||||
qWarning("%s not found", qPrintable(fileInfo.fileName()));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -159,10 +133,7 @@ void DirectoryRefresher::addModToStructure(DirectoryEntry *directoryStructure
|
||||
, const QStringList &archives)
|
||||
{
|
||||
addModFilesToStructure(directoryStructure, modName, priority, directory, stealFiles);
|
||||
|
||||
if (Settings::instance().archiveParsing()) {
|
||||
addModBSAToStructure(directoryStructure, modName, priority, directory, archives);
|
||||
}
|
||||
addModBSAToStructure(directoryStructure, modName, priority, directory, archives);
|
||||
}
|
||||
|
||||
void DirectoryRefresher::refresh()
|
||||
@@ -178,9 +149,10 @@ void DirectoryRefresher::refresh()
|
||||
std::wstring dataDirectory = QDir::toNativeSeparators(game->dataDirectory().absolutePath()).toStdWString();
|
||||
m_DirectoryStructure->addFromOrigin(L"data", dataDirectory, 0);
|
||||
|
||||
std::sort(m_Mods.begin(), m_Mods.end(), [](auto lhs, auto rhs){return lhs.priority < rhs.priority;});
|
||||
// TODO what was the point of having the priority in this tuple? the list is already sorted by priority
|
||||
auto iter = m_Mods.begin();
|
||||
|
||||
//TODO i is the priority here, where higher = more important. the input vector is also sorted by priority but inverted!
|
||||
for (int i = 1; iter != m_Mods.end(); ++iter, ++i) {
|
||||
try {
|
||||
addModToStructure(m_DirectoryStructure, iter->modName, i, iter->absolutePath, iter->stealFiles, iter->archives);
|
||||
@@ -190,8 +162,6 @@ void DirectoryRefresher::refresh()
|
||||
emit progress((i * 100) / static_cast<int>(m_Mods.size()) + 1);
|
||||
}
|
||||
|
||||
m_DirectoryStructure->getFileRegister()->sortOrigins();
|
||||
|
||||
emit progress(100);
|
||||
|
||||
cleanStructure(m_DirectoryStructure);
|
||||
|
||||
@@ -27,7 +27,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include <vector>
|
||||
#include <set>
|
||||
#include <tuple>
|
||||
#include "profile.h"
|
||||
|
||||
|
||||
/**
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user