Rework zip file updating.

This commit is contained in:
Paul Chote
2016-06-19 13:43:29 +01:00
parent 5d62881be6
commit c706e68b73
8 changed files with 80 additions and 55 deletions

View File

@@ -71,26 +71,13 @@ namespace OpenRA.FileSystem
public IReadOnlyPackage OpenPackage(string filename, IReadOnlyPackage parent)
{
// HACK: limit support to zip and folder until we generalize the PackageLoader support
if (parent is Folder)
if (filename.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase) ||
filename.EndsWith(".oramap", StringComparison.InvariantCultureIgnoreCase))
{
var path = Path.Combine(parent.Name, filename);
// HACK: work around SharpZipLib's lack of support for writing to in-memory files
if (filename.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase))
return new ZipFile(this, path);
if (filename.EndsWith(".oramap", StringComparison.InvariantCultureIgnoreCase))
return new ZipFile(this, path);
var subFolder = Platform.ResolvePath(path);
if (Directory.Exists(subFolder))
return new Folder(subFolder);
using (var s = parent.GetStream(filename))
return new ZipFile(s, filename, parent);
}
if (filename.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase))
return new ZipFile(this, filename, parent.GetStream(filename));
if (filename.EndsWith(".oramap", StringComparison.InvariantCultureIgnoreCase))
return new ZipFile(this, filename, parent.GetStream(filename));
if (parent is ZipFile)
return new ZipFolder(this, (ZipFile)parent, filename, filename);
@@ -100,19 +87,16 @@ namespace OpenRA.FileSystem
return new ZipFolder(this, folder.Parent, folder.Name + "/" + filename, filename);
}
if (parent is Folder)
{
var subFolder = Platform.ResolvePath(Path.Combine(parent.Name, filename));
if (Directory.Exists(subFolder))
return new Folder(subFolder);
}
return null;
}
public IReadWritePackage OpenWritablePackage(string filename)
{
if (filename.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase))
return new ZipFile(this, filename);
if (filename.EndsWith(".oramap", StringComparison.InvariantCultureIgnoreCase))
return new ZipFile(this, filename);
return new Folder(filename);
}
public void Mount(string name, string explicitName = null)
{
var optional = name.StartsWith("~");