Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #477
SkyrimInstaller
since the new one should be able to handle many more mods (even at Data level).GameCapabilities
See #503 for all the objectives and rationale behind the system.
GenericFolderMatchInstaller
The idea is to have an installer that takes a list of recognizable folder targets and tries to match the content of a mod archive to that of one of the targets.
In the case of Bethesda games I just defined two targets (
InstallFolderTarget
), root level and Data, where Data is nested under the Root one.Each target contains information to recognize it, such as known subfolders or extensions for files that reside at that level.
Most of the information regarding the known folders and extensions was taken from MO2, so it should be pretty valid.
Potential improvements:
I'm not completely happy with how the code structure turned out for now. I think the structure could be simplified a bit probably. I would have spent some more time tweaking and moving things around if we didn't want to get SKSE support done.
Some ideas I considered:
InstallFolderTarget
PathMatchesAnyTarget()
,GetModFilesForTarget()
But that felt like it would make the structure more complicated rather than simplifying it.
For capabilities I would like to consider using
IServiceProvider
for storing them inside games, but that needs some investigation for advantages/disadvantages.I'm not completely happy with the names either.
I'm sure there is lots of room for improvements here so let me know of any suggestions.