Skip to content

Commit abafd37

Browse files
committed
Pull loading userdata modules into private method and merge with DataModule::CreateOnDiskAsUserdata
Don't need this exposed to all the things, ModuleMan mans the modules Abort if the userdata modules failed to load so this doesn't screw us at some point later
1 parent 8ba00c7 commit abafd37

File tree

4 files changed

+30
-35
lines changed

4 files changed

+30
-35
lines changed

Managers/ModuleMan.cpp

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -272,15 +272,32 @@ namespace RTE {
272272
}
273273

274274
// Load userdata modules AFTER all other techs etc are loaded; might be referring to stuff in user mods.
275-
for (const auto &[userdataModuleName, userdataModuleFriendlyName] : c_UserdataModules) {
276-
if (!std::filesystem::exists(System::GetWorkingDirectory() + System::GetUserdataDirectory() + userdataModuleName)) {
277-
bool scanContentsAndIgnoreMissing = userdataModuleName == c_UserScenesModuleName;
278-
DataModule::CreateOnDiskAsUserdata(userdataModuleName, userdataModuleFriendlyName, scanContentsAndIgnoreMissing, scanContentsAndIgnoreMissing);
279-
}
280-
if (!LoadDataModule(userdataModuleName, false, true, LoadingScreen::LoadingSplashProgressReport)) {
281-
return false;
275+
return LoadUserdataModules();
276+
}
277+
return true;
278+
}
279+
280+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
281+
282+
bool ModuleMan::LoadUserdataModules() {
283+
for (const auto &[userdataModuleName, userdataModuleFriendlyName] : c_UserdataModules) {
284+
if (std::string userDataModulePath = System::GetWorkingDirectory() + System::GetUserdataDirectory() + userdataModuleName; !std::filesystem::exists(userDataModulePath)) {
285+
if (Writer writer(userDataModulePath + "/Index.ini", false, true); writer.WriterOK()) {
286+
DataModule newUserdataModule;
287+
newUserdataModule.m_FriendlyName = userdataModuleFriendlyName;
288+
newUserdataModule.m_ModuleType = DataModule::DataModuleType::Userdata;
289+
290+
if (userdataModuleName == c_UserScenesModuleName) {
291+
newUserdataModule.m_IgnoreMissingItems = true;
292+
newUserdataModule.m_ScanFolderContents = true;
293+
}
294+
newUserdataModule.Save(writer);
295+
writer.EndWrite();
282296
}
283297
}
298+
if (!LoadDataModule(userdataModuleName, DataModule::DataModuleType::Userdata, LoadingScreen::LoadingSplashProgressReport)) {
299+
RTEAbort("Failed to load userdata DataModule \"" + userdataModuleName + "\"!\n\nThis generally shouldn't happen, but it looks like it did.\nPlease delete this module in the Userdata directory to rebuild it.");
300+
}
284301
}
285302
return true;
286303
}

Managers/ModuleMan.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,12 @@ namespace RTE {
215215
/// <returns></returns>
216216
void LoadOfficialModules();
217217

218+
/// <summary>
219+
/// Loads all the userdata DataModules individually with LoadDataModule. Creates any missing userdata DataModules on disk if necessary.
220+
/// </summary>
221+
/// <returns></returns>
222+
bool LoadUserdataModules();
223+
218224
/// <summary>
219225
/// Iterates through the working directory to find any files matching the zipped module package extension (.rte.zip) and proceeds to extract them.
220226
/// </summary>

System/DataModule.cpp

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -71,24 +71,6 @@ namespace RTE {
7171
return -1;
7272
}
7373

74-
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
75-
76-
bool DataModule::CreateOnDiskAsUserdata(const std::string &moduleName, const std::string_view &friendlyName, bool ignoreMissingItems, bool scanFolderContents) {
77-
std::string moduleNameWithPackageExtension = System::GetUserdataDirectory() + moduleName + (moduleName.ends_with(System::GetModulePackageExtension()) ? "" : System::GetModulePackageExtension());
78-
if (Writer writer(moduleNameWithPackageExtension + "/Index.ini", false, true); writer.WriterOK()) {
79-
DataModule newModule;
80-
newModule.m_ModuleType = DataModuleType::Userdata;
81-
newModule.m_FriendlyName = friendlyName;
82-
newModule.m_IgnoreMissingItems = ignoreMissingItems;
83-
newModule.m_ScanFolderContents = scanFolderContents;
84-
newModule.Save(writer);
85-
writer.EndWrite();
86-
} else {
87-
return false;
88-
}
89-
return true;
90-
}
91-
9274
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
9375

9476
void DataModule::Destroy() {

System/DataModule.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,6 @@ namespace RTE {
6565
/// <param name="progressCallback">A function pointer to a function that will be called and sent a string with information about the progress of this DataModule's creation.</param>
6666
/// <returns>An error return value signaling success or any particular failure. Anything below 0 is an error signal.</returns>
6767
int Create(const std::string &moduleName, const ProgressCallback &progressCallback = nullptr);
68-
69-
/// <summary>
70-
/// Creates a new DataModule directory with "Index.ini" on disk to be used for userdata. Does NOT instantiate the newly created DataModule.
71-
/// </summary>
72-
/// <param name="moduleName">File/folder name of the data module, e.g. "MyMod.rte".</param>
73-
/// <param name="friendlyName">Friendly name of the data module, e.g. "My Weapons Mod".</param>
74-
/// <param name="scanFolderContents">Whether module loader should scan for any .ini's inside module folder instead of loading files defined in IncludeFile only.</param>
75-
/// <param name="ignoreMissingItems">Whether module loader should ignore missing items in this module.</param>
76-
/// <returns>Whether the DataModule was successfully created on disk.</returns>
77-
static bool CreateOnDiskAsUserdata(const std::string &moduleName, const std::string_view &friendlyName, bool scanFolderContents = false, bool ignoreMissingItems = false);
7868
#pragma endregion
7969

8070
#pragma region Destruction

0 commit comments

Comments
 (0)