/* Application Load */ public MainWindow() { InitializeComponent(); /* Hide Main Window while we load */ this.Hide(); /* Check if OpenJK Directory has been set and if not ask for it */ if (Settings.GetValue("OpenJKDirectory") == null) { Settings.FindOpenJKDirectory(); } /* Create Home Directory for projects and settings */ if (!Directory.Exists(Settings.UsersProjectHome)) { Directory.CreateDirectory(Settings.UsersProjectHome); } /* Show Splash Screen While we load */ SplashLoading splashLoading = new SplashLoading(); splashLoading.Show(); splashLoading.Activate(); /* Runs Import Job which fetches our imported data */ Thread ImportJob = new Thread(() => { ImportJob import = new ImportJob(); import.BeginImport(); }); ImportJob.Start(); /* Now hide these until a project is loaded / created */ ProjectDataTree.Visibility = Visibility.Hidden; ImportedDataTree.Visibility = Visibility.Hidden; }
/* Handles importing of all files from existing PK3 Files */ public void BeginImport() { string[] pk3s = Directory.GetFiles(Settings.MBIIDirectory, "*.pk3"); SiegeDeserializer seigeDeserializer = new SiegeDeserializer(); UpdateProgressMax(pk3s.Count()); foreach (string pk3 in pk3s) { Log($"Importing {Path.GetFileName(pk3)}"); using (ZipArchive zipFile = ZipFile.OpenRead(pk3)) { foreach (ZipArchiveEntry entry in zipFile.Entries) { // Import Character File (.MBCH) if (entry.FullName.Contains("ext_data/mb2/character/")) { if (entry.FullName.ToLower().Contains(".mbch")) { Log($"Importing {Path.GetFileName(entry.FullName)}"); using (var stream = entry.Open()) { StreamReader reader = new StreamReader(stream); string text = reader.ReadToEnd(); try { ImportedData.importedCharacters.Add(seigeDeserializer.Deserialize <Character>(text)); } catch (Exception e) { failedImports.Add($"{System.IO.Path.GetFileName(pk3)}/{entry.FullName}: {e.Message}"); } } } } // Import Team File (.MBTC) if (entry.FullName.Contains("ext_data/mb2/teamconfig/")) { if (entry.FullName.ToLower().Contains(".mbtc")) { Log($"Importing {Path.GetFileName(entry.FullName)}"); using (var stream = entry.Open()) { StreamReader reader = new StreamReader(stream); string text = reader.ReadToEnd(); try { ImportedData.importedTeams.Add(seigeDeserializer.Deserialize <Team>(text)); } catch (Exception e) { failedImports.Add($"{System.IO.Path.GetFileName(pk3)}/{entry.FullName}: {e.Message}"); } } } } // Import Siege File (.SIEGE) if (entry.FullName.Contains("maps/")) { if (entry.FullName.ToLower().Contains(".siege")) { Log($"Importing {Path.GetFileName(entry.FullName)}"); using (var stream = entry.Open()) { StreamReader reader = new StreamReader(stream); string text = reader.ReadToEnd(); try { Siege siege = seigeDeserializer.Deserialize <Siege>(text); /* This allows us to keep track of what map this siege file belongs to */ siege.map = entry.FullName.ToLower().Replace(".siege", "").Replace(@"maps/", ""); ImportedData.importedSieges.Add(siege); } catch (Exception e) { failedImports.Add($"{System.IO.Path.GetFileName(pk3)}/{entry.FullName}: {e.Message}"); } } } } // Import a map file (.BSP) */ if (entry.FullName.ToLower().Contains(".bsp")) { Log($"Importing {Path.GetFileName(entry.FullName)}"); ImportedData.importedMaps.Add(new Map() { parentPK3 = pk3, fileName = Path.GetFileName(entry.FullName), name = Path.GetFileNameWithoutExtension(entry.FullName), entryPath = entry.FullName }); } // Import a map file (.skin) */ if (entry.FullName.ToLower().Contains(".skin")) { Log($"Importing {Path.GetFileName(entry.FullName)}"); ImportedData.importedSkins.Add(new Skin() { parentPK3 = pk3, fileName = Path.GetFileName(entry.FullName), name = Path.GetFileNameWithoutExtension(entry.FullName), entryPath = entry.FullName, modelName = Directory.GetParent(entry.FullName).Name }); } // Import a player model file (.gml) */ if (entry.FullName.ToLower().Contains(".glm") && entry.FullName.ToLower().Contains("players")) { Log($"Importing {Path.GetFileName(entry.FullName)}"); ImportedData.importedPlayerModels.Add(new PlayerModel() { parentPK3 = pk3, fileName = Path.GetFileName(entry.FullName), name = Directory.GetParent(entry.FullName).Name, entryPath = entry.FullName, }); } // Import a weapon model file (.gml) */ if (entry.FullName.ToLower().Contains(".glm") && entry.FullName.ToLower().Contains("weapon")) { Log($"Importing {Path.GetFileName(entry.FullName)}"); ImportedData.importedWeaponModels.Add(new WeaponModel() { parentPK3 = pk3, fileName = Path.GetFileName(entry.FullName), name = Directory.GetParent(entry.FullName).Name, entryPath = entry.FullName, }); } } } IncrementProgress(); } Log($"Importing Complete..."); /* Write latest failed imports to a log file */ if (File.Exists(Settings.FailedImportLog)) { File.Delete(Settings.FailedImportLog); } using (StreamWriter sw = File.CreateText(Settings.FailedImportLog)) { sw.WriteLine("Failed Imports from Base Game Files"); sw.WriteLine($"Last Run: {DateTime.Now.ToString("MM/dd/yyyy H:mm")}"); sw.WriteLine("-----------------------------------------------------"); foreach (string failedImport in failedImports) { sw.WriteLine(failedImport); } } /* Any Additional Filtering or manipulation of imported data */ ImportedData.importedCharacters = new ObservableCollection <Character>(ImportedData.importedCharacters .Where(x => x.name != null && x.name.Trim() != "") .OrderBy(x => x.name).ToList()); Application.Current.Dispatcher.Invoke(() => { /* Close Splash */ SplashLoading splashLoading = WindowFinder.FindOpenWindowByType <SplashLoading>(); splashLoading.Close(); MainWindow mainWindow = WindowFinder.FindOpenWindowByType <MainWindow>(); /* Setup Imported Data Treeview Datasources */ mainWindow.ImportedCharacters.ItemsSource = ImportedData.importedCharacters; /* Show Window */ mainWindow.Show(); mainWindow.Activate(); }); }