Ejemplo n.º 1
0
        private string GetMaps(string filename)
        {
            using (ZipArchive za = ZipFile.OpenRead(filename))
            {
                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);
                    sb.Append(GetMaps(extractedFile));
                }

                return(sb.ToString());
            }
        }
        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));
                }
            }
        }