private void HandleDefaultSelection(string file, IArchiveReader reader)
        {
            IEnumerable <IArchiveEntry> filteredEntries = reader.Entries.Where(x => !string.IsNullOrEmpty(x.Name) && !x.Name.EndsWith(Path.PathSeparator.ToString()) &&
                                                                               m_supportedExtensions.Any(y => y.Equals(Path.GetExtension(x.Name), StringComparison.OrdinalIgnoreCase))).OrderBy(x => x.Name, StringComparer.OrdinalIgnoreCase).ToList();

            if (chkPkContents.Checked)
            {
                IEnumerable <IArchiveEntry> pk3Entries = Util.GetEntriesByExtension(reader, Util.GetPkExtenstions()); //should check for MAPINFO (e.g. joyofmapping)

                foreach (IArchiveEntry entry in pk3Entries)
                {
                    string extractedFile = Util.ExtractTempFile(m_temp.GetFullPath(), entry);
                    using (IArchiveReader zaInner = ArchiveReader.Create(extractedFile))
                    {
                        HandleDefaultSelection(extractedFile, zaInner);
                    }
                }
            }

            foreach (IArchiveEntry entry in reader.Entries)
            {
                if (!string.IsNullOrEmpty(entry.Name))
                {
                    if (m_ct.IsCancellationRequested)
                    {
                        break;
                    }
                    HandleAddItem(file, entry.FullName, entry.Name, filteredEntries.Contains(entry));
                }
            }
        }
        private string GetMaps(ZipArchive za)
        {
            IEnumerable <ZipArchiveEntry> txtEntries = GetEntriesByExtension(za, ".txt").Where(x => x.Name.Equals("mapinfo.txt", StringComparison.InvariantCultureIgnoreCase));

            if (txtEntries.Any())
            {
                return(MapStringFromMapInfo(txtEntries.First()));
            }

            StringBuilder sb = new StringBuilder();

            sb.Append(MapStringFromGameFile(za));

            IEnumerable <ZipArchiveEntry> pk3Entries = Util.GetEntriesByExtension(za, Util.GetPkExtenstions());

            foreach (ZipArchiveEntry zae in pk3Entries)
            {
                string extractedFile = Util.ExtractTempFile(TempDirectory.GetFullPath(), zae);
                using (var extractedZip = ZipFile.OpenRead(extractedFile))
                {
                    sb.Append(GetMaps(extractedZip));
                }
            }

            return(sb.ToString());
        }
Beispiel #3
0
        private string GetMaps(IArchiveReader reader)
        {
            var txtEntries = GetEntriesByExtension(reader, ".txt").Where(x => x.Name.Equals("mapinfo.txt", StringComparison.InvariantCultureIgnoreCase));

            if (txtEntries.Any())
            {
                return(MapStringFromMapInfo(txtEntries.First()));
            }

            StringBuilder sb = new StringBuilder();

            sb.Append(MapStringFromGameFile(reader));

            IEnumerable <IArchiveEntry> pk3Entries = Util.GetEntriesByExtension(reader, Util.GetReadablePkExtensions());

            foreach (IArchiveEntry entry in pk3Entries)
            {
                string extractedFile = Util.ExtractTempFile(TempDirectory.GetFullPath(), entry);
                using (var extractedZip = ArchiveReader.Create(extractedFile))
                    sb.Append(GetMaps(extractedZip));
            }

            return(sb.ToString());
        }