public UiDataTableNode(ArchiveListing listing, UiArchiveExtension extension, ArchiveEntry indices) : base(indices.Name, UiNodeType.DataTable) { _listing = listing; _extension = extension; _indices = indices; }
public UiArciveLeafsAccessor(ArchiveListing listing, bool? conversion, bool? compression, params ArchiveEntry[] leafs) { _listing = listing; _leafs = leafs; _conversion = conversion; _compression = compression; }
public void WriteListings() { HashSet <ArchiveListing> set = new HashSet <ArchiveListing>(); foreach (ArchiveListing listing in _set) { ArchiveListing item = listing; while (item != null && set.Add(item)) { item = item.Parent; } } Action <ArchiveListing> writer; switch (InteractionService.GamePart) { case FFXIIIGamePart.Part1: writer = ArchiveListingWriterV1.Write; break; case FFXIIIGamePart.Part2: writer = ArchiveListingWriterV2.Write; break; default: throw new NotSupportedException(InteractionService.GamePart.ToString()); } foreach (ArchiveListing listing in set.OrderByDescending(l => l.Accessor.Level)) { writer(listing); } }
private void ParseEntries(ArchiveListingEntryInfoV1[] entries, ArchiveListingCompressedData data, ArchiveListing result) { byte[] buff = new byte[0]; for (int currentBlock = -1, i = 0; i < entries.Length; i++) { ArchiveListingEntryInfoV1 entryInfoV1 = entries[i]; if (entryInfoV1.BlockNumber != currentBlock) { currentBlock = entryInfoV1.BlockNumber; buff = data.AcquireData(currentBlock); } string name; long sector, uncompressedSize, compressedSize; ParseInfo(entryInfoV1, buff, out sector, out uncompressedSize, out compressedSize, out name); ArchiveEntry entry = new ArchiveEntry(name, sector, compressedSize, uncompressedSize) { UnknownNumber = entryInfoV1.UnknownNumber, UnknownValue = entryInfoV1.UnknownValue }; result.Add(entry); _progressIncrement.NullSafeInvoke(1); } }
public void Show(ArchiveListing listing, ArchiveEntry entry) { _listing = listing; _entry = entry; if (listing == null || entry == null) { _textBox.Text = null; return; } FFXIIITextEncoding encoding = InteractionService.TextEncoding.Provide().Encoding; ZtrFileEntry[] entries; using (Stream data = listing.Accessor.ExtractBinary(entry)) { ZtrFileUnpacker unpacker = new ZtrFileUnpacker(data, encoding); entries = unpacker.Unpack(); } if (entries.IsNullOrEmpty()) return; using (MemoryStream ms = new MemoryStream(4096)) { ZtrTextWriter writer = new ZtrTextWriter(ms, StringsZtrFormatter.Instance); writer.Write(entry.Name, entries); ms.Position = 0; using (StreamReader sr = new StreamReader(ms, System.Text.Encoding.UTF8, false)) _textBox.Text = sr.ReadToEnd(); } Visibility = Visibility.Visible; }
public UiArciveLeafsAccessor(ArchiveListing listing, bool?conversion, bool?compression, params ArchiveEntry[] leafs) { _listing = listing; _leafs = leafs; _conversion = conversion; _compression = compression; }
public ArchiveListing Read() { ArchiveListingHeaderV2 header; Stream input = Decrypt(out header); _progressTotalChanged.NullSafeInvoke(header.EntriesCount); short blockNumber = -1; bool? flag = null; ArchiveListingEntryInfoV2[] entries = new ArchiveListingEntryInfoV2[header.EntriesCount]; for (int i = 0; i < entries.Length; i++) { entries[i] = input.ReadContent<ArchiveListingEntryInfoV2>(); if (entries[i].Flag != flag) { flag = entries[i].Flag; blockNumber++; } entries[i].BlockNumber = blockNumber; } ArchiveListingCompressedData data = new ArchiveListingCompressedData(header); data.ReadFromStream(input); ArchiveListing result = new ArchiveListing(_accessor, header.EntriesCount); ParseEntries(entries, data, result); return result; }
private void Inject(ArchiveListing listing, ArchiveEntry entry, Dictionary <String, String> sourceEntries, Stream output) { ZtrFileType type = ZtrFileType.LittleEndianUncompressedDictionary; ZtrFileEntry[] targetEntries; using (Stream original = listing.Accessor.ExtractBinary(entry)) { ZtrFileUnpacker unpacker = new ZtrFileUnpacker(original, InteractionService.TextEncoding.Provide().Encoding); targetEntries = unpacker.Unpack(); if (InteractionService.GamePart == FFXIIIGamePart.Part2) { if (entry.Name.StartsWith("txtres/resident/system/txtres_", StringComparison.InvariantCultureIgnoreCase)) { type = ZtrFileType.BigEndianCompressedDictionary; } } } MergeEntries(sourceEntries, targetEntries); ZtrFilePacker packer = new ZtrFilePacker(output, InteractionService.TextEncoding.Provide().Encoding, type); packer.Pack(targetEntries); }
private bool TryAddImgbPair(ArchiveListing listing, ArchiveEntry entry, string entryPath, string entryName) { string ext = PathEx.GetMultiDotComparableExtension(entryName); switch (ext) { case ".win32.xfv": case ".win32.xgr": case ".win32.xwb": break; case ".win32.trb": break; case ".win32.imgb": break; default: return(false); } string longName = entryPath.Substring(0, entryPath.Length - ext.Length); if (IsUnexpectedEntry(listing.Name, longName)) { return(false); } return(SetPairedEntry(listing, entry, ext, longName)); }
public UiFileTableNode(ArchiveListing listing, UiArchiveExtension extension, ArchiveEntry indices, ArchiveEntry binary) : base(indices.Name, UiNodeType.FileTable) { _listing = listing; _extension = extension; _indices = indices; _binary = binary; }
public UiArchiveExtractor(ArchiveListing listing, ArchiveEntry[] leafs, bool? conversion, IUiExtractionTarget target) { _listing = listing; _leafs = leafs; _target = target; _conversion = conversion; _extractors = ProvideExtractors(); }
public UiArchiveExtractor(ArchiveListing listing, ArchiveEntry[] leafs, bool?conversion, IUiExtractionTarget target) { _listing = listing; _leafs = leafs; _target = target; _conversion = conversion; _extractors = ProvideExtractors(); }
public UiArchiveInjector(ArchiveListing listing, ArchiveEntry[] leafs, bool?conversion, bool?compression, IUiInjectionSource source) { _listing = listing; _leafs = leafs; _source = source; _conversion = conversion; _compression = compression; _injectionData = new ArchiveEntryInjectionData(_listing, OpenOutputStream); _injectors = ProvideInjectors(); }
public UiArchiveInjector(ArchiveListing listing, ArchiveEntry[] leafs, bool? conversion, bool? compression, IUiInjectionSource source) { _listing = listing; _leafs = leafs; _source = source; _conversion = conversion; _compression = compression; _injectionData = new ArchiveEntryInjectionData(_listing, OpenOutputStream); _injectors = ProvideInjectors(); }
private ImgbArchiveAccessor CreateAccessorV2() { GameLocationInfo gameLocation = InteractionService.GameLocation.Provide(); string binaryPath = Path.Combine(gameLocation.SystemDirectory, "white_imgc.win32.bin"); string listingPath = Path.Combine(gameLocation.SystemDirectory, "filelistc.win32.bin"); ArchiveAccessor accessor = new ArchiveAccessor(binaryPath, listingPath); ArchiveListing listing = ArchiveListingReaderV1.Read(accessor, null, null); ArchiveEntry xgrEntry = listing.Single(n => n.Name.EndsWith(@"gui/resident/system.win32.xgr")); ArchiveEntry imgbEntry = listing.Single(n => n.Name.EndsWith(@"gui/resident/system.win32.imgb")); return(new ImgbArchiveAccessor(listing, xgrEntry, imgbEntry)); }
public void Write(ArchiveListing listing, out ArchiveListingBlockInfo[] blocksInfo, out ArchiveListingEntryInfoV1[] entriesInfoV1) { using (MemoryStream ms = new MemoryStream(32768)) { int blockNumber = 0, unpackedBlockOffset = 0; entriesInfoV1 = new ArchiveListingEntryInfoV1[listing.Count]; List<ArchiveListingBlockInfo> blocks = new List<ArchiveListingBlockInfo>(128); using (FormattingStreamWriter sw = new FormattingStreamWriter(ms, Encoding.ASCII, 4096, true, CultureInfo.InvariantCulture)) { sw.AutoFlush = true; for (int i = 0; i < listing.Count; i++) { ArchiveEntry entry = listing[i]; entriesInfoV1[i] = new ArchiveListingEntryInfoV1 {BlockNumber = (short)(ms.Position / 8192)}; if (blockNumber != entriesInfoV1[i].BlockNumber) { //sw.Write("end\0"); int blockSize = (int)(ms.Position - unpackedBlockOffset); ms.Position = unpackedBlockOffset; ArchiveListingBlockInfo block = new ArchiveListingBlockInfo {Offset = (int)_output.Position, UncompressedSize = blockSize}; block.CompressedSize = ZLibHelper.Compress(ms, _output, block.UncompressedSize); blocks.Add(block); blockNumber++; unpackedBlockOffset = (int)ms.Position; sw.Write("{0:x}:{1:x}:{2:x}:{3}\0", entry.Sector, entry.UncompressedSize, entry.Size, entry.Name); } else if (i == listing.Count - 1) { entriesInfoV1[i].Offset = (short)(ms.Position - unpackedBlockOffset); sw.Write("{0:x}:{1:x}:{2:x}:{3}\0end\0", entry.Sector, entry.UncompressedSize, entry.Size, entry.Name); int blockSize = (int)(ms.Position - unpackedBlockOffset); ms.Position = unpackedBlockOffset; ArchiveListingBlockInfo block = new ArchiveListingBlockInfo {Offset = (int)_output.Position, UncompressedSize = blockSize}; block.CompressedSize = ZLibHelper.Compress(ms, _output, block.UncompressedSize); blocks.Add(block); } else { entriesInfoV1[i].Offset = (short)(ms.Position - unpackedBlockOffset); sw.Write("{0:x}:{1:x}:{2:x}:{3}\0", entry.Sector, entry.UncompressedSize, entry.Size, entry.Name); } //lengths[i] = (int)_output.Position - offsets[i]; //blockSize += lengths[i]; } } blocksInfo = blocks.ToArray(); } }
public bool TryAdd(ArchiveListing listing, ArchiveEntry entry, string entryPath, string entryName) { if (TryAddZoneListing(listing, entry, entryPath)) return true; // ������ ��� ������ ��� ����������� �� ������� //if (TryAddSoundListing(listing, entry, entryName)) // return true; if (TryAddImgbPair(listing, entry, entryPath, entryName)) return true; return false; }
public ArchiveListing Read() { ArchiveListingHeader header = _input.ReadStruct<ArchiveListingHeader>(); _progressTotalChanged.NullSafeInvoke(header.EntriesCount); ArchiveListingEntryInfoV1[] entries = _input.ReadStructs<ArchiveListingEntryInfoV1>(header.EntriesCount); ArchiveListingCompressedData data = new ArchiveListingCompressedData(header); data.ReadFromStream(_input); ArchiveListing result = new ArchiveListing(_accessor, header.EntriesCount); ParseEntries(entries, data, result); return result; }
private bool TryAddZoneListing(ArchiveListing parentListing, ArchiveEntry entry, string entryPath) { if (_areasDirectory == null) { return(false); } if (!entryPath.StartsWith("zone/filelist")) { return(false); } // Slip an empty archives if (entryPath.EndsWith("2")) { return(false); } string binaryName; switch (InteractionService.GamePart) { case FFXIIIGamePart.Part1: binaryName = $"white_{entryPath.Substring(14, 5)}_img{(entryPath.EndsWith("2") ? "2" : string.Empty)}.win32.bin"; break; case FFXIIIGamePart.Part2: binaryName = $"white_{entryPath.Substring(14, 6)}_img{(entryPath.EndsWith("2") ? "2" : string.Empty)}.win32.bin"; break; default: throw new NotSupportedException("InteractionService.GamePart"); } string binaryPath = Path.Combine(_areasDirectory, binaryName); if (!File.Exists(binaryPath)) { return(false); } ArchiveAccessor accessor = parentListing.Accessor.CreateDescriptor(binaryPath, entry); ConcurrentBag <UiNode> container = ProvideRootNodeChilds(UiArchiveExtension.Bin); container.Add(new UiArchiveNode(accessor, parentListing)); return(true); }
private void OnArchiveLeafSelected(UiArchiveLeaf archiveLeaf) { ArchiveEntry entry = archiveLeaf.Entry; ArchiveListing listing = archiveLeaf.Listing; switch (Path.GetExtension(entry.Name)) { case ".scd": _sound.Show(listing, entry); break; case ".ztr": _ztr.Show(listing, entry); break; } }
public void Show(ArchiveListing listing, ArchiveEntry entry) { _listing = listing; _entry = entry; Visibility = Visibility.Visible; using (Stream input = listing.Accessor.ExtractBinary(entry)) { ScdFileReader reader = new ScdFileReader(input); WaveStream[] waveProviders = reader.Read(); ListItem[] items = new ListItem[waveProviders.Length]; for (int i = 0; i < items.Length; i++) items[i] = new ListItem(i.ToString("D3"), waveProviders[i]); _listView.ItemsSource = items; if (items.Length > 0) _listView.SelectedIndex = 0; } }
public bool TryAdd(ArchiveListing listing, ArchiveEntry entry, string entryPath, string entryName) { if (TryAddZoneListing(listing, entry, entryPath)) { return(true); } if (TryAddMoviesListing(listing, entry, entryName)) { return(true); } if (TryAddImgbPair(listing, entry, entryPath, entryName)) { return(true); } return(false); }
private bool TryAddMoviesListing(ArchiveListing parentListing, ArchiveEntry entry, String entryName) { switch (entryName) { case "movie_items.win32.wdb": case "movie_items_us.win32.wdb": break; default: return(false); } UiArchiveExtension extension = GetArchiveExtension(entry); UiDataTableNode node = new UiDataTableNode(parentListing, extension, entry); ConcurrentBag <UiNode> container = ProvideRootNodeChilds(extension); container.Add(node); return(true); }
public void Show(ArchiveListing listing, ArchiveEntry entry) { _listing = listing; _entry = entry; Visibility = Visibility.Visible; using (Stream input = listing.Accessor.ExtractBinary(entry)) { ScdFileReader reader = new ScdFileReader(input); WaveStream[] waveProviders = reader.Read(); ListItem[] items = new ListItem[waveProviders.Length]; for (int i = 0; i < items.Length; i++) { items[i] = new ListItem(i.ToString("D3"), waveProviders[i]); } _listView.ItemsSource = items; if (items.Length > 0) { _listView.SelectedIndex = 0; } } }
public void Show(ArchiveListing listing, ArchiveEntry entry) { _listing = listing; _entry = entry; if (listing == null || entry == null) { _textBox.Text = null; return; } FFXIIITextEncoding encoding = InteractionService.TextEncoding.Provide().Encoding; ZtrFileEntry[] entries; using (Stream data = listing.Accessor.ExtractBinary(entry)) { ZtrFileUnpacker unpacker = new ZtrFileUnpacker(data, encoding); entries = unpacker.Unpack(); } if (entries.IsNullOrEmpty()) { return; } using (MemoryStream ms = new MemoryStream(4096)) { ZtrTextWriter writer = new ZtrTextWriter(ms, StringsZtrFormatter.Instance); writer.Write(entry.Name, entries); ms.Position = 0; using (StreamReader sr = new StreamReader(ms, System.Text.Encoding.UTF8, false)) _textBox.Text = sr.ReadToEnd(); } Visibility = Visibility.Visible; }
private bool SetPairedEntry(ArchiveListing listing, ArchiveEntry entry, string ext, string longName) { Pair <ArchiveEntry, ArchiveEntry> pair = ProvidePair(longName); if (ext == ".win32.imgb") { pair.Item2 = entry; } else { pair.Item1 = entry; } if (!pair.IsAnyEmpty) { UiArchiveExtension extension = GetArchiveExtension(pair.Item1); UiFileTableNode node = new UiFileTableNode(listing, extension, pair.Item1, pair.Item2); ConcurrentBag <UiNode> container = ProvideRootNodeChilds(extension); container.Add(node); } return(true); }
public UiArchiveLeaf(string name, ArchiveEntry entry, ArchiveListing listing) : base(name, UiNodeType.ArchiveLeaf) { Entry = entry; Listing = listing; }
private bool TryAddImgbPair(ArchiveListing listing, ArchiveEntry entry, string entryPath, string entryName) { string ext = PathEx.GetMultiDotComparableExtension(entryName); switch (ext) { case ".win32.xfv": case ".win32.xgr": case ".win32.xwb": case ".win32.trb": case ".win32.imgb": break; default: return false; } string longName = entryPath.Substring(0, entryPath.Length - ext.Length); if (IsUnexpectedEntry(listing.Name, longName)) return false; return SetPairedEntry(listing, entry, ext, longName); }
private bool TryAddZoneListing(ArchiveListing parentListing, ArchiveEntry entry, string entryPath) { if (_areasDirectory == null) return false; if (!entryPath.StartsWith("zone/filelist")) return false; // ���������� ������ ������ if (entryPath.EndsWith("2")) return false; string binaryName = String.Format("white_{0}_img{1}.win32.bin", entryPath.Substring(14, 5), entryPath.EndsWith("2") ? "2" : string.Empty); string binaryPath = Path.Combine(_areasDirectory, binaryName); if (!File.Exists(binaryPath)) return false; ArchiveAccessor accessor = parentListing.Accessor.CreateDescriptor(binaryPath, entry); ConcurrentBag<UiNode> container = ProvideRootNodeChilds(UiArchiveExtension.Bin); container.Add(new UiArchiveNode(accessor, parentListing)); return true; }
public ArchiveEntryInjectionData(ArchiveListing listing, Func <ArchiveEntry, Stream> ouputStreamFactory) { Listing = listing; OuputStreamFactory = ouputStreamFactory; }
public static void Write(ArchiveListing listing) { ArchiveListingWriterV2 writer = new ArchiveListingWriterV2(listing); writer.Write(); }
private void Inject(ArchiveListing listing, ArchiveEntry entry, Dictionary<String, String> sourceEntries, Stream output) { ZtrFileEntry[] targetEntries; using (Stream original = listing.Accessor.ExtractBinary(entry)) { ZtrFileUnpacker unpacker = new ZtrFileUnpacker(original, InteractionService.TextEncoding.Provide().Encoding); targetEntries = unpacker.Unpack(); } MergeEntries(sourceEntries, targetEntries); ZtrFilePacker packer = new ZtrFilePacker(output, InteractionService.TextEncoding.Provide().Encoding); packer.Pack(targetEntries); }
public ArchiveEntryInjectionData(ArchiveListing listing, Func<ArchiveEntry, Stream> ouputStreamFactory) { Listing = listing; OuputStreamFactory = ouputStreamFactory; }
private bool SetPairedEntry(ArchiveListing listing, ArchiveEntry entry, string ext, string longName) { Pair<ArchiveEntry, ArchiveEntry> pair = ProvidePair(longName); if (ext == ".win32.imgb") pair.Item2 = entry; else pair.Item1 = entry; if (!pair.IsAnyEmpty) { UiArchiveExtension extension = GetArchiveExtension(pair.Item1); UiDataTableNode node = new UiDataTableNode(listing, extension, pair.Item1, pair.Item2); ConcurrentBag<UiNode> container = ProvideRootNodeChilds(extension); container.Add(node); } return true; }
private bool TryAddSoundListing(ArchiveListing parentListing, ArchiveEntry entry, String entryName) { switch (entryName) { case "filelist_sound_pack.win32.bin": case "filelist_sound_pack.win32_us.bin": break; default: return false; } ArchiveAccessor accessor = parentListing.Accessor.CreateDescriptor(entry); ConcurrentBag<UiNode> container = ProvideRootNodeChilds(UiArchiveExtension.Bin); container.Add(new UiArchiveNode(accessor, parentListing)); return true; }
private bool TryAddImgbPair(ArchiveListing listing, ArchiveEntry entry, string entryPath, string entryName) { string ext = PathEx.GetMultiDotComparableExtension(entryName); //if (entryName.StartsWith("block") && ext.Contains(".win32.")) //{ // Console.WriteLine(); //} switch (ext) { case ".win32.xfv": case ".win32.xgr": case ".win32.xwb": break; case ".win32.trb": break; case ".win32.imgb": break; default: return false; } string longName = entryPath.Substring(0, entryPath.Length - ext.Length); if (IsUnexpectedEntry(listing.Name, longName)) return false; return SetPairedEntry(listing, entry, ext, longName); }
private bool TryAddZoneListing(ArchiveListing parentListing, ArchiveEntry entry, string entryPath) { if (_areasDirectory == null) return false; if (!entryPath.StartsWith("zone/filelist")) return false; // ���������� ������ ������ if (entryPath.EndsWith("2")) return false; string binaryName; switch (InteractionService.GamePart) { case FFXIIIGamePart.Part1: binaryName = $"white_{entryPath.Substring(14, 5)}_img{(entryPath.EndsWith("2") ? "2" : string.Empty)}.win32.bin"; break; case FFXIIIGamePart.Part2: binaryName = $"white_{entryPath.Substring(14, 6)}_img{(entryPath.EndsWith("2") ? "2" : string.Empty)}.win32.bin"; break; default: throw new NotSupportedException("InteractionService.GamePart"); } string binaryPath = Path.Combine(_areasDirectory, binaryName); if (!File.Exists(binaryPath)) return false; ArchiveAccessor accessor = parentListing.Accessor.CreateDescriptor(binaryPath, entry); ConcurrentBag<UiNode> container = ProvideRootNodeChilds(UiArchiveExtension.Bin); container.Add(new UiArchiveNode(accessor, parentListing)); return true; }
protected override UiNode[] ExpandChilds() { UiChildPackageBuilder childPackages = new UiChildPackageBuilder(InteractionService.GameLocation.Provide().AreasDirectory); switch (InteractionService.GamePart) { case FFXIIIGamePart.Part1: _listing = ArchiveListingReaderV1.Read(_accessor, null, null); break; case FFXIIIGamePart.Part2: _listing = ArchiveListingReaderV2.Read(_accessor, null, null); break; default: throw new NotSupportedException(InteractionService.GamePart.ToString()); } _listing.Parent = _parentListing; HashSet <string> set = new HashSet <string>(); Dictionary <string, UiNode> dic = new Dictionary <string, UiNode>(_listing.Count * 2); foreach (ArchiveEntry entry in _listing) { UiNode parent = this; string name; string entryPath = entry.Name.ToLowerInvariant(); int index = entryPath.LastIndexOf(Path.AltDirectorySeparatorChar); if (index > 0) { name = entryPath.Substring(index + 1); string directoryPath = entryPath.Substring(0, index); set.Add(directoryPath); if (!dic.TryGetValue(directoryPath, out parent)) { string directoryName = directoryPath; int nameIndex = directoryPath.LastIndexOf(Path.AltDirectorySeparatorChar); if (nameIndex > 0) { directoryName = directoryPath.Substring(nameIndex + 1); } parent = new UiContainerNode(directoryName, UiNodeType.Directory); dic.Add(directoryPath, parent); } } else { name = entryPath; } if (!dic.ContainsKey(entryPath)) { dic.Add(entryPath, new UiArchiveLeaf(name, entry, _listing) { Parent = parent }); } childPackages.TryAdd(_listing, entry, entryPath, name); } UiContainerNode packagesNode = childPackages.TryBuild(); if (packagesNode != null) { packagesNode.Parent = this; dic.Add(packagesNode.Name, packagesNode); } string separator = Path.AltDirectorySeparatorChar.ToString(); foreach (string dir in set) { UiNode parent = this; string[] parts = dir.Split(Path.AltDirectorySeparatorChar); for (int i = 0; i < parts.Length; i++) { UiNode node; string name = parts[i]; string path = String.Join(separator, parts, 0, i + 1); if (!dic.TryGetValue(path, out node)) { node = new UiContainerNode(name, UiNodeType.Directory); dic.Add(path, node); } node.Parent = parent; parent = node; } } UiNode[] result = EmptyChilds; foreach (IGrouping <UiNode, UiNode> group in dic.Values.GroupBy(n => n.Parent)) { if (group.Key == this) { result = group.ToArray(); continue; } UiContainerNode dir = ((UiContainerNode)group.Key); dir.SetChilds(group.ToArray()); } foreach (UiNode node in dic.Values) { if (node.Type != UiNodeType.Directory) { continue; } UiContainerNode container = (UiContainerNode)node; container.AbsorbSingleChildContainer(); } return(result); }
public UiArchiveNode(ArchiveAccessor accessor, ArchiveListing parentListing) : base(accessor.ListingEntry.Name, UiNodeType.Archive) { _accessor = accessor; _parentListing = parentListing; }
public void Enqueue(ArchiveListing parent) { _set.Add(parent); }
public ImgbArchiveAccessor(ArchiveListing parent, ArchiveEntry headersEntry, ArchiveEntry contentEntry) : base(parent, headersEntry) { ContentEntry = contentEntry; }
public ImgbArchiveAccessor(ArchiveListing parent, ArchiveEntry xgrHeadersEntry, ArchiveEntry xgrContentEntry) { Parent = parent; XgrHeadersEntry = xgrHeadersEntry; XgrContentEntry = xgrContentEntry; }
private bool TryAddMoviesListing(ArchiveListing parentListing, ArchiveEntry entry, String entryName) { switch (entryName) { case "movie_items.win32.wdb": case "movie_items_us.win32.wdb": break; default: return false; } UiArchiveExtension extension = GetArchiveExtension(entry); UiDataTableNode node = new UiDataTableNode(parentListing, extension, entry); ConcurrentBag<UiNode> container = ProvideRootNodeChilds(extension); container.Add(node); return true; }
protected override UiNode[] ExpandChilds() { UiChildPackageBuilder childPackages = new UiChildPackageBuilder(InteractionService.GameLocation.Provide().AreasDirectory); _listing = ArchiveListingReaderV1.Read(_accessor, null, null); _listing.Parent = _parentListing; HashSet<string> set = new HashSet<string>(); Dictionary<string, UiNode> dic = new Dictionary<string, UiNode>(_listing.Count * 2); foreach (ArchiveEntry entry in _listing) { UiNode parent = this; string name; string entryPath = entry.Name.ToLowerInvariant(); int index = entryPath.LastIndexOf(Path.AltDirectorySeparatorChar); if (index > 0) { name = entryPath.Substring(index + 1); string directoryPath = entryPath.Substring(0, index); set.Add(directoryPath); if (!dic.TryGetValue(directoryPath, out parent)) { string directoryName = directoryPath; int nameIndex = directoryPath.LastIndexOf(Path.AltDirectorySeparatorChar); if (nameIndex > 0) directoryName = directoryPath.Substring(nameIndex + 1); parent = new UiContainerNode(directoryName, UiNodeType.Directory); dic.Add(directoryPath, parent); } } else { name = entryPath; } if (!dic.ContainsKey(entryPath)) dic.Add(entryPath, new UiArchiveLeaf(name, entry, _listing) {Parent = parent}); childPackages.TryAdd(_listing, entry, entryPath, name); } UiContainerNode packagesNode = childPackages.TryBuild(); if (packagesNode != null) { packagesNode.Parent = this; dic.Add(packagesNode.Name, packagesNode); } string separator = Path.AltDirectorySeparatorChar.ToString(); foreach (string dir in set) { UiNode parent = this; string[] parts = dir.Split(Path.AltDirectorySeparatorChar); for (int i = 0; i < parts.Length; i++) { UiNode node; string name = parts[i]; string path = String.Join(separator, parts, 0, i + 1); if (!dic.TryGetValue(path, out node)) { node = new UiContainerNode(name, UiNodeType.Directory); dic.Add(path, node); } node.Parent = parent; parent = node; } } UiNode[] result = null; foreach (IGrouping<UiNode, UiNode> group in dic.Values.GroupBy(n => n.Parent)) { if (group.Key == this) { result = group.ToArray(); continue; } UiContainerNode dir = ((UiContainerNode)group.Key); dir.SetChilds(group.ToArray()); } foreach (UiNode node in dic.Values) { if (node.Type != UiNodeType.Directory) continue; UiContainerNode container = (UiContainerNode)node; container.AbsorbSingleChildContainer(); } return result; }
private ArchiveListingWriterV2(ArchiveListing listing) { _listing = listing; _accessor = _listing.Accessor; }
public DbArchiveAccessor(ArchiveListing parent, ArchiveEntry headersEntry) { Parent = parent; HeadersEntry = headersEntry; }