private void ImportDLCFolder_BackgroundThread(object sender, DoWorkEventArgs e) { OperationInProgress = true; var sourceDir = Path.Combine(M3Directories.GetDLCPath(SelectedTarget), SelectedDLCFolder.DLCFolderName); // Check for MEMI, we will not allow importing files with MEMI foreach (var file in Directory.GetFiles(sourceDir, @"*.*", SearchOption.AllDirectories)) { if (file.RepresentsPackageFilePath() && Utilities.HasALOTMarker(file)) { Log.Error($@"Found a file marked as texture modded: {file}. These files cannot be imported into mod manager"); Application.Current.Dispatcher.Invoke(delegate { M3L.ShowDialog(window, M3L.GetString(M3L.string_dialog_cannotImportModTextureMarkersFound), M3L.GetString(M3L.string_cannotImportMod), MessageBoxButton.OK, MessageBoxImage.Error); }); return; } } var library = Utilities.GetModDirectoryForGame(SelectedTarget.Game); var destinationName = Utilities.SanitizePath(ModNameText); var modFolder = Path.Combine(library, destinationName); var copyDestination = Path.Combine(modFolder, SelectedDLCFolder.DLCFolderName); var outInfo = Directory.CreateDirectory(copyDestination); Log.Information($@"Importing mod: {sourceDir} -> {copyDestination}"); int numToDo = 0; int numDone = 0; void totalItemToCopyCallback(int total) { numToDo = total; ProgressBarMax = total; } void fileCopiedCallback() { numDone++; ProgressBarValue = numDone; } CopyDir.CopyAll_ProgressBar(new DirectoryInfo(sourceDir), outInfo, totalItemToCopyCallback, fileCopiedCallback); //Write a moddesc IniData ini = new IniData(); ini[@"ModManager"][@"cmmver"] = App.HighestSupportedModDesc.ToString(CultureInfo.InvariantCulture); //prevent commas ini[@"ModInfo"][@"game"] = SelectedTarget.Game.ToString(); ini[@"ModInfo"][@"modname"] = ModNameText; ini[@"ModInfo"][@"moddev"] = M3L.GetString(M3L.string_importedFromGame); ini[@"ModInfo"][@"moddesc"] = M3L.GetString(M3L.string_defaultDescriptionForImportedMod, Utilities.GetGameName(SelectedTarget.Game), DateTime.Now); ini[@"ModInfo"][@"modver"] = M3L.GetString(M3L.string_unknown); ini[@"ModInfo"][@"unofficial"] = @"true"; ini[@"ModInfo"][@"importedby"] = App.BuildNumber.ToString(); ini[@"CUSTOMDLC"][@"sourcedirs"] = SelectedDLCFolder.DLCFolderName; ini[@"CUSTOMDLC"][@"destdirs"] = SelectedDLCFolder.DLCFolderName; var moddescPath = Path.Combine(modFolder, @"moddesc.ini"); File.WriteAllText(moddescPath, ini.ToString()); //Generate and load mod var m = new Mod(moddescPath, MEGame.ME3); e.Result = m; Log.Information(@"Mod import complete."); Analytics.TrackEvent(@"Imported already installed mod", new Dictionary <string, string>() { { @"Mod name", m.ModName }, { @"Game", SelectedTarget.Game.ToString() }, { @"Folder name", SelectedDLCFolder.DLCFolderName } }); if (!CurrentModInTPMI) { //Submit telemetry to ME3Tweaks try { TPMITelemetrySubmissionForm.TelemetryPackage tp = TPMITelemetrySubmissionForm.GetTelemetryPackageForDLC(SelectedTarget.Game, M3Directories.GetDLCPath(SelectedTarget), SelectedDLCFolder.DLCFolderName, SelectedDLCFolder.DLCFolderName, //same as foldername as this is already installed ModNameText, @"N/A", ModSiteText, null ); tp.SubmitPackage(); } catch (Exception ex) { Log.Error(@"Cannot submit telemetry: " + ex.Message); } } }
private async void ImportDLCFolder_BackgroundThread(object sender, DoWorkEventArgs e) { OperationInProgress = true; var sourceDir = Path.Combine(MEDirectories.DLCPath(SelectedTarget), SelectedDLCFolder.DLCFolderName); var library = Utilities.GetModDirectoryForGame(SelectedTarget.Game); var destinationName = Utilities.SanitizePath(ModNameText); var modFolder = Path.Combine(library, destinationName); var copyDestination = Path.Combine(modFolder, SelectedDLCFolder.DLCFolderName); var outInfo = Directory.CreateDirectory(copyDestination); Log.Information($@"Importing mod: {sourceDir} -> {copyDestination}"); int numToDo = 0; int numDone = 0; void totalItemToCopyCallback(int total) { numToDo = total; ProgressBarMax = total; } void fileCopiedCallback() { numDone++; ProgressBarValue = numDone; } CopyDir.CopyAll_ProgressBar(new DirectoryInfo(sourceDir), outInfo, totalItemToCopyCallback, fileCopiedCallback); //Write a moddesc IniData ini = new IniData(); ini[@"ModManager"][@"cmmver"] = App.HighestSupportedModDesc.ToString(CultureInfo.InvariantCulture); //prevent commas ini[@"ModInfo"][@"game"] = SelectedTarget.Game.ToString(); ini[@"ModInfo"][@"modname"] = ModNameText; ini[@"ModInfo"][@"moddev"] = M3L.GetString(M3L.string_importedFromGame); ini[@"ModInfo"][@"moddesc"] = M3L.GetString(M3L.string_defaultDescriptionForImportedMod, Utilities.GetGameName(SelectedTarget.Game), DateTime.Now); ini[@"ModInfo"][@"modver"] = M3L.GetString(M3L.string_unknown); ini[@"CUSTOMDLC"][@"sourcedirs"] = SelectedDLCFolder.DLCFolderName; ini[@"CUSTOMDLC"][@"destdirs"] = SelectedDLCFolder.DLCFolderName; var moddescPath = Path.Combine(modFolder, @"moddesc.ini"); File.WriteAllText(moddescPath, ini.ToString()); //Generate and load mod Mod m = new Mod(moddescPath, Mod.MEGame.ME3); e.Result = m; Log.Information(@"Mod import complete."); if (!CurrentModInTPMI) { //Submit telemetry to ME3Tweaks try { TPMITelemetrySubmissionForm.TelemetryPackage tp = TPMITelemetrySubmissionForm.GetTelemetryPackageForDLC(SelectedTarget.Game, MEDirectories.DLCPath(SelectedTarget), SelectedDLCFolder.DLCFolderName, SelectedDLCFolder.DLCFolderName, //same as foldername as this is already installed ModNameText, @"N/A", ModSiteText, null ); tp.SubmitPackage(); } catch (Exception ex) { Log.Error(@"Cannot submit telemetry: " + ex.Message); } } }