private static void OpenArchive() { var fileInfo = new FileInfo(_archiveInput.Text); if (fileInfo.Exists) { _archiveInput.Enabled = false; _archiveInputBrowseButton.Enabled = false; _openCloseArchiveButton.Text = "Close archive"; _saveAsButton.Enabled = true; _archive = MpqArchive.Open(fileInfo.FullName, true); _archive.DiscoverFileNames(); var map = Map.Open(_archive); // _originScriptLanguage = map.Info.ScriptLanguage; var targetScriptLanguages = new HashSet <object>(new object[] { // ScriptLanguage.Jass, ScriptLanguage.Lua, }); _targetScriptLanguagesComboBox.Items.AddRange(targetScriptLanguages.OrderByDescending(patch => (int)patch).ToArray()); _targetScriptLanguagesComboBox.Enabled = true; if (_targetScriptLanguagesComboBox.Items.Count == 1) { _targetScriptLanguagesComboBox.SelectedIndex = 0; } } }
private static void OpenArchive() { var fileInfo = new FileInfo(_archiveInput.Text); if (fileInfo.Exists) { _archiveInput.Enabled = false; _archiveInputBrowseButton.Enabled = false; _openCloseArchiveButton.Text = "Close archive"; _saveAsButton.Enabled = _filesToDecompileCheckBoxes.Any(checkBox => checkBox.Checked); _archive = MpqArchive.Open(fileInfo.FullName, true); _archive.DiscoverFileNames(); _map = Map.Open(_archive); _autoDetectFilesToDecompileButton.Enabled = true; foreach (var checkBox in _filesToDecompileCheckBoxes) { checkBox.Enabled = true; } } }
public void AddFiles(MpqArchive archive) { archive.DiscoverFileNames(); AddFiles(archive.GetMpqFiles()); }
private static void OpenArchiveBackgroundWork(object?sender, DoWorkEventArgs e) { _archive = MpqArchive.Open((string)e.Argument, true); _archive.DiscoverFileNames(); var mapsList = new HashSet <string>(); if (_archive.IsCampaignArchive(out var campaignInfo)) { for (var i = 0; i < campaignInfo.Maps.Count; i++) { mapsList.Add(campaignInfo.Maps[i].MapFilePath); } } else { using var mpqStream = _archive.OpenFile(MapInfo.FileName); using var reader = new BinaryReader(mpqStream); _originPatch = reader.ReadMapInfo().GetOriginGamePatch(); } var listViewItems = new List <ListViewItem>(); var possibleOriginPatches = new HashSet <GamePatch>(); var files = _archive.ToList(); var progress = new OpenArchiveProgress(); progress.Maximum = files.Count; foreach (var file in files) { if (mapsList.Contains(file.FileName)) { var mapName = file.FileName; using var mapArchiveStream = _archive.OpenFile(mapName); using var mapArchive = MpqArchive.Open(mapArchiveStream, true); mapArchive.DiscoverFileNames(); var children = new List <ListViewItem>(); var mapFiles = mapArchive.ToList(); progress.Maximum += mapFiles.Count; foreach (var mapFile in mapArchive) { var subItem = ListViewItemExtensions.Create(new ItemTag(mapArchive, mapFile, mapName)); subItem.IndentCount = 1; children.Add(subItem); _openArchiveWorker.ReportProgress(0, progress); } using (var mapInfoFileStream = mapArchive.OpenFile(MapInfo.FileName)) { using var reader = new BinaryReader(mapInfoFileStream); var mapArchiveOriginPatch = reader.ReadMapInfo().GetOriginGamePatch(); var mapArchiveItem = ListViewItemExtensions.Create(new ItemTag(_archive, file, children.ToArray(), mapArchiveOriginPatch)); listViewItems.Add(mapArchiveItem); _openArchiveWorker.ReportProgress(0, progress); if (mapArchiveOriginPatch.HasValue) { possibleOriginPatches.Add(mapArchiveOriginPatch.Value); } } foreach (var child in children) { listViewItems.Add(child); } } else { var item = ListViewItemExtensions.Create(new ItemTag(_archive, file)); listViewItems.Add(item); _openArchiveWorker.ReportProgress(0, progress); } } if (_originPatch is null) { _originPatch = possibleOriginPatches.Count == 1 ? possibleOriginPatches.Single() : _latestPatch; } e.Result = listViewItems; }