Add IFolder.AllFileNames() for listing the filenames in a package.
This commit is contained in:
@@ -54,6 +54,12 @@ namespace OpenRA.FileFormats
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IEnumerable<string> AllFileNames()
|
||||||
|
{
|
||||||
|
foreach (var filename in Directory.GetFiles(path, "*", SearchOption.TopDirectoryOnly))
|
||||||
|
yield return Path.GetFileName(filename);
|
||||||
|
}
|
||||||
|
|
||||||
public bool Exists(string filename)
|
public bool Exists(string filename)
|
||||||
{
|
{
|
||||||
return File.Exists(Path.Combine(path, filename));
|
return File.Exists(Path.Combine(path, filename));
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ namespace OpenRA.FileFormats
|
|||||||
public class InstallShieldPackage : IFolder
|
public class InstallShieldPackage : IFolder
|
||||||
{
|
{
|
||||||
readonly Dictionary<uint, PackageEntry> index = new Dictionary<uint, PackageEntry>();
|
readonly Dictionary<uint, PackageEntry> index = new Dictionary<uint, PackageEntry>();
|
||||||
|
readonly List<string> filenames;
|
||||||
readonly Stream s;
|
readonly Stream s;
|
||||||
readonly long dataStart = 255;
|
readonly long dataStart = 255;
|
||||||
int priority;
|
int priority;
|
||||||
@@ -25,6 +26,7 @@ namespace OpenRA.FileFormats
|
|||||||
public InstallShieldPackage(string filename, int priority)
|
public InstallShieldPackage(string filename, int priority)
|
||||||
{
|
{
|
||||||
this.priority = priority;
|
this.priority = priority;
|
||||||
|
filenames = new List<string>();
|
||||||
s = FileSystem.Open(filename);
|
s = FileSystem.Open(filename);
|
||||||
|
|
||||||
// Parse package header
|
// Parse package header
|
||||||
@@ -77,7 +79,8 @@ namespace OpenRA.FileFormats
|
|||||||
var FileName = new String(reader.ReadChars(NameLength));
|
var FileName = new String(reader.ReadChars(NameLength));
|
||||||
|
|
||||||
var hash = PackageEntry.HashFilename(FileName);
|
var hash = PackageEntry.HashFilename(FileName);
|
||||||
index.Add(hash, new PackageEntry(hash,AccumulatedData, CompressedSize));
|
index.Add(hash, new PackageEntry(hash, AccumulatedData, CompressedSize));
|
||||||
|
filenames.Add(FileName);
|
||||||
AccumulatedData += CompressedSize;
|
AccumulatedData += CompressedSize;
|
||||||
|
|
||||||
// Skip to the end of the chunk
|
// Skip to the end of the chunk
|
||||||
@@ -107,6 +110,11 @@ namespace OpenRA.FileFormats
|
|||||||
return index.Keys;
|
return index.Keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IEnumerable<string> AllFileNames()
|
||||||
|
{
|
||||||
|
return filenames;
|
||||||
|
}
|
||||||
|
|
||||||
public bool Exists(string filename)
|
public bool Exists(string filename)
|
||||||
{
|
{
|
||||||
return index.ContainsKey(PackageEntry.HashFilename(filename));
|
return index.ContainsKey(PackageEntry.HashFilename(filename));
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ namespace OpenRA.FileFormats
|
|||||||
Stream GetContent(string filename);
|
Stream GetContent(string filename);
|
||||||
bool Exists(string filename);
|
bool Exists(string filename);
|
||||||
IEnumerable<uint> AllFileHashes();
|
IEnumerable<uint> AllFileHashes();
|
||||||
|
IEnumerable<string> AllFileNames();
|
||||||
void Write(Dictionary<string, byte[]> contents);
|
void Write(Dictionary<string, byte[]> contents);
|
||||||
int Priority { get; }
|
int Priority { get; }
|
||||||
}
|
}
|
||||||
@@ -163,6 +164,42 @@ namespace OpenRA.FileFormats
|
|||||||
return index.Keys;
|
return index.Keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IEnumerable<string> AllFileNames()
|
||||||
|
{
|
||||||
|
var lookup = new Dictionary<uint, string>();
|
||||||
|
if (Exists("local mix database.dat"))
|
||||||
|
{
|
||||||
|
var db = new XccLocalDatabase(GetContent("local mix database.dat"));
|
||||||
|
foreach (var e in db.Entries)
|
||||||
|
{
|
||||||
|
var hash = PackageEntry.HashFilename(e);
|
||||||
|
if (!lookup.ContainsKey(hash))
|
||||||
|
lookup.Add(hash, e);
|
||||||
|
|
||||||
|
var crc = PackageEntry.CrcHashFilename(e);
|
||||||
|
if (!lookup.ContainsKey(crc))
|
||||||
|
lookup.Add(crc, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (FileSystem.Exists("global mix database.dat"))
|
||||||
|
{
|
||||||
|
var db = new XccGlobalDatabase(FileSystem.Open("global mix database.dat"));
|
||||||
|
foreach (var e in db.Entries)
|
||||||
|
{
|
||||||
|
var hash = PackageEntry.HashFilename(e);
|
||||||
|
if (!lookup.ContainsKey(hash))
|
||||||
|
lookup.Add(hash, e);
|
||||||
|
|
||||||
|
var crc = PackageEntry.CrcHashFilename(e);
|
||||||
|
if (!lookup.ContainsKey(crc))
|
||||||
|
lookup.Add(crc, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return index.Keys.Select(k => lookup.ContainsKey(k) ? lookup[k] : "Unknown File [{0}]".F(k));
|
||||||
|
}
|
||||||
|
|
||||||
public bool Exists(string filename)
|
public bool Exists(string filename)
|
||||||
{
|
{
|
||||||
return (index.ContainsKey(PackageEntry.HashFilename(filename)) || index.ContainsKey(PackageEntry.CrcHashFilename(filename)));
|
return (index.ContainsKey(PackageEntry.HashFilename(filename)) || index.ContainsKey(PackageEntry.CrcHashFilename(filename)));
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ namespace OpenRA.FileFormats
|
|||||||
|
|
||||||
public Stream GetContent(string filename)
|
public Stream GetContent(string filename)
|
||||||
{
|
{
|
||||||
|
|
||||||
using (var z = pkg.GetInputStream(pkg.GetEntry(filename)))
|
using (var z = pkg.GetInputStream(pkg.GetEntry(filename)))
|
||||||
{
|
{
|
||||||
var ms = new MemoryStream();
|
var ms = new MemoryStream();
|
||||||
@@ -71,6 +70,12 @@ namespace OpenRA.FileFormats
|
|||||||
yield return PackageEntry.HashFilename(entry.Name);
|
yield return PackageEntry.HashFilename(entry.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IEnumerable<string> AllFileNames()
|
||||||
|
{
|
||||||
|
foreach(ZipEntry entry in pkg)
|
||||||
|
yield return entry.Name;
|
||||||
|
}
|
||||||
|
|
||||||
public bool Exists(string filename)
|
public bool Exists(string filename)
|
||||||
{
|
{
|
||||||
return pkg.GetEntry(filename) != null;
|
return pkg.GetEntry(filename) != null;
|
||||||
|
|||||||
Reference in New Issue
Block a user