Merge pull request #10490 from penev92/packages
Some renaming from "folder" to "package"
This commit is contained in:
@@ -19,7 +19,7 @@ using OpenRA.Primitives;
|
|||||||
|
|
||||||
namespace OpenRA.FileSystem
|
namespace OpenRA.FileSystem
|
||||||
{
|
{
|
||||||
public sealed class BagFile : IFolder
|
public sealed class BagFile : IPackage
|
||||||
{
|
{
|
||||||
static readonly uint[] Nothing = { };
|
static readonly uint[] Nothing = { };
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ using System.Linq;
|
|||||||
|
|
||||||
namespace OpenRA.FileSystem
|
namespace OpenRA.FileSystem
|
||||||
{
|
{
|
||||||
public sealed class BigFile : IFolder
|
public sealed class BigFile : IPackage
|
||||||
{
|
{
|
||||||
public string Name { get; private set; }
|
public string Name { get; private set; }
|
||||||
public int Priority { get; private set; }
|
public int Priority { get; private set; }
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ using System.IO;
|
|||||||
|
|
||||||
namespace OpenRA.FileSystem
|
namespace OpenRA.FileSystem
|
||||||
{
|
{
|
||||||
public sealed class D2kSoundResources : IFolder
|
public sealed class D2kSoundResources : IPackage
|
||||||
{
|
{
|
||||||
readonly Stream s;
|
readonly Stream s;
|
||||||
|
|
||||||
|
|||||||
@@ -19,16 +19,16 @@ namespace OpenRA.FileSystem
|
|||||||
{
|
{
|
||||||
public class FileSystem
|
public class FileSystem
|
||||||
{
|
{
|
||||||
public readonly List<string> FolderPaths = new List<string>();
|
public readonly List<string> PackagePaths = new List<string>();
|
||||||
public readonly List<IFolder> MountedFolders = new List<IFolder>();
|
public readonly List<IPackage> MountedPackages = new List<IPackage>();
|
||||||
|
|
||||||
static readonly Dictionary<string, Assembly> AssemblyCache = new Dictionary<string, Assembly>();
|
static readonly Dictionary<string, Assembly> AssemblyCache = new Dictionary<string, Assembly>();
|
||||||
|
|
||||||
int order;
|
int order;
|
||||||
Cache<uint, List<IFolder>> crcHashIndex = new Cache<uint, List<IFolder>>(_ => new List<IFolder>());
|
Cache<uint, List<IPackage>> crcHashIndex = new Cache<uint, List<IPackage>>(_ => new List<IPackage>());
|
||||||
Cache<uint, List<IFolder>> classicHashIndex = new Cache<uint, List<IFolder>>(_ => new List<IFolder>());
|
Cache<uint, List<IPackage>> classicHashIndex = new Cache<uint, List<IPackage>>(_ => new List<IPackage>());
|
||||||
|
|
||||||
public IFolder CreatePackage(string filename, int order, Dictionary<string, byte[]> content)
|
public IPackage CreatePackage(string filename, int order, Dictionary<string, byte[]> content)
|
||||||
{
|
{
|
||||||
if (filename.EndsWith(".mix", StringComparison.InvariantCultureIgnoreCase))
|
if (filename.EndsWith(".mix", StringComparison.InvariantCultureIgnoreCase))
|
||||||
return new MixFile(this, filename, order, content);
|
return new MixFile(this, filename, order, content);
|
||||||
@@ -50,7 +50,7 @@ namespace OpenRA.FileSystem
|
|||||||
return new Folder(filename, order, content);
|
return new Folder(filename, order, content);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IFolder OpenPackage(string filename, string annotation, int order)
|
public IPackage OpenPackage(string filename, string annotation, int order)
|
||||||
{
|
{
|
||||||
if (filename.EndsWith(".mix", StringComparison.InvariantCultureIgnoreCase))
|
if (filename.EndsWith(".mix", StringComparison.InvariantCultureIgnoreCase))
|
||||||
{
|
{
|
||||||
@@ -81,10 +81,10 @@ namespace OpenRA.FileSystem
|
|||||||
return new Folder(filename, order);
|
return new Folder(filename, order);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Mount(IFolder mount)
|
public void Mount(IPackage mount)
|
||||||
{
|
{
|
||||||
if (!MountedFolders.Contains(mount))
|
if (!MountedPackages.Contains(mount))
|
||||||
MountedFolders.Add(mount);
|
MountedPackages.Add(mount);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Mount(string name, string annotation = null)
|
public void Mount(string name, string annotation = null)
|
||||||
@@ -95,7 +95,7 @@ namespace OpenRA.FileSystem
|
|||||||
|
|
||||||
name = Platform.ResolvePath(name);
|
name = Platform.ResolvePath(name);
|
||||||
|
|
||||||
FolderPaths.Add(name);
|
PackagePaths.Add(name);
|
||||||
Action a = () => MountInner(OpenPackage(name, annotation, order++));
|
Action a = () => MountInner(OpenPackage(name, annotation, order++));
|
||||||
|
|
||||||
if (optional)
|
if (optional)
|
||||||
@@ -105,42 +105,42 @@ namespace OpenRA.FileSystem
|
|||||||
a();
|
a();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MountInner(IFolder folder)
|
void MountInner(IPackage package)
|
||||||
{
|
{
|
||||||
MountedFolders.Add(folder);
|
MountedPackages.Add(package);
|
||||||
|
|
||||||
foreach (var hash in folder.ClassicHashes())
|
foreach (var hash in package.ClassicHashes())
|
||||||
{
|
{
|
||||||
var folderList = classicHashIndex[hash];
|
var packageList = classicHashIndex[hash];
|
||||||
if (!folderList.Contains(folder))
|
if (!packageList.Contains(package))
|
||||||
folderList.Add(folder);
|
packageList.Add(package);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var hash in folder.CrcHashes())
|
foreach (var hash in package.CrcHashes())
|
||||||
{
|
{
|
||||||
var folderList = crcHashIndex[hash];
|
var packageList = crcHashIndex[hash];
|
||||||
if (!folderList.Contains(folder))
|
if (!packageList.Contains(package))
|
||||||
folderList.Add(folder);
|
packageList.Add(package);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Unmount(IFolder mount)
|
public bool Unmount(IPackage mount)
|
||||||
{
|
{
|
||||||
if (MountedFolders.Contains(mount))
|
if (MountedPackages.Contains(mount))
|
||||||
mount.Dispose();
|
mount.Dispose();
|
||||||
|
|
||||||
return MountedFolders.RemoveAll(f => f == mount) > 0;
|
return MountedPackages.RemoveAll(f => f == mount) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UnmountAll()
|
public void UnmountAll()
|
||||||
{
|
{
|
||||||
foreach (var folder in MountedFolders)
|
foreach (var package in MountedPackages)
|
||||||
folder.Dispose();
|
package.Dispose();
|
||||||
|
|
||||||
MountedFolders.Clear();
|
MountedPackages.Clear();
|
||||||
FolderPaths.Clear();
|
PackagePaths.Clear();
|
||||||
classicHashIndex = new Cache<uint, List<IFolder>>(_ => new List<IFolder>());
|
classicHashIndex = new Cache<uint, List<IPackage>>(_ => new List<IPackage>());
|
||||||
crcHashIndex = new Cache<uint, List<IFolder>>(_ => new List<IFolder>());
|
crcHashIndex = new Cache<uint, List<IPackage>>(_ => new List<IPackage>());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadFromManifest(Manifest manifest)
|
public void LoadFromManifest(Manifest manifest)
|
||||||
@@ -156,12 +156,12 @@ namespace OpenRA.FileSystem
|
|||||||
Stream GetFromCache(PackageHashType type, string filename)
|
Stream GetFromCache(PackageHashType type, string filename)
|
||||||
{
|
{
|
||||||
var index = type == PackageHashType.CRC32 ? crcHashIndex : classicHashIndex;
|
var index = type == PackageHashType.CRC32 ? crcHashIndex : classicHashIndex;
|
||||||
var folder = index[PackageEntry.HashFilename(filename, type)]
|
var package = index[PackageEntry.HashFilename(filename, type)]
|
||||||
.Where(x => x.Exists(filename))
|
.Where(x => x.Exists(filename))
|
||||||
.MinByOrDefault(x => x.Priority);
|
.MinByOrDefault(x => x.Priority);
|
||||||
|
|
||||||
if (folder != null)
|
if (package != null)
|
||||||
return folder.GetContent(filename);
|
return package.GetContent(filename);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -178,20 +178,20 @@ namespace OpenRA.FileSystem
|
|||||||
public bool TryOpen(string name, out Stream s)
|
public bool TryOpen(string name, out Stream s)
|
||||||
{
|
{
|
||||||
var filename = name;
|
var filename = name;
|
||||||
var foldername = string.Empty;
|
var packageName = string.Empty;
|
||||||
|
|
||||||
// Used for faction specific packages; rule out false positive on Windows C:\ drive notation
|
// Used for faction specific packages; rule out false positive on Windows C:\ drive notation
|
||||||
var explicitFolder = name.Contains(':') && !Directory.Exists(Path.GetDirectoryName(name));
|
var explicitPackage = name.Contains(':') && !Directory.Exists(Path.GetDirectoryName(name));
|
||||||
if (explicitFolder)
|
if (explicitPackage)
|
||||||
{
|
{
|
||||||
var divide = name.Split(':');
|
var divide = name.Split(':');
|
||||||
foldername = divide.First();
|
packageName = divide.First();
|
||||||
filename = divide.Last();
|
filename = divide.Last();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check the cache for a quick lookup if the folder name is unknown
|
// Check the cache for a quick lookup if the package name is unknown
|
||||||
// TODO: This disables caching for explicit folder requests
|
// TODO: This disables caching for explicit package requests
|
||||||
if (filename.IndexOfAny(new char[] { '/', '\\' }) == -1 && !explicitFolder)
|
if (filename.IndexOfAny(new[] { '/', '\\' }) == -1 && !explicitPackage)
|
||||||
{
|
{
|
||||||
s = GetFromCache(PackageHashType.Classic, filename);
|
s = GetFromCache(PackageHashType.Classic, filename);
|
||||||
if (s != null)
|
if (s != null)
|
||||||
@@ -203,15 +203,15 @@ namespace OpenRA.FileSystem
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Ask each package individually
|
// Ask each package individually
|
||||||
IFolder folder;
|
IPackage package;
|
||||||
if (explicitFolder && !string.IsNullOrEmpty(foldername))
|
if (explicitPackage && !string.IsNullOrEmpty(packageName))
|
||||||
folder = MountedFolders.Where(x => x.Name == foldername).MaxByOrDefault(x => x.Priority);
|
package = MountedPackages.Where(x => x.Name == packageName).MaxByOrDefault(x => x.Priority);
|
||||||
else
|
else
|
||||||
folder = MountedFolders.Where(x => x.Exists(filename)).MaxByOrDefault(x => x.Priority);
|
package = MountedPackages.Where(x => x.Exists(filename)).MaxByOrDefault(x => x.Priority);
|
||||||
|
|
||||||
if (folder != null)
|
if (package != null)
|
||||||
{
|
{
|
||||||
s = folder.GetContent(filename);
|
s = package.GetContent(filename);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,16 +221,16 @@ namespace OpenRA.FileSystem
|
|||||||
|
|
||||||
public bool Exists(string name)
|
public bool Exists(string name)
|
||||||
{
|
{
|
||||||
var explicitFolder = name.Contains(':') && !Directory.Exists(Path.GetDirectoryName(name));
|
var explicitPackage = name.Contains(':') && !Directory.Exists(Path.GetDirectoryName(name));
|
||||||
if (explicitFolder)
|
if (explicitPackage)
|
||||||
{
|
{
|
||||||
var divide = name.Split(':');
|
var divide = name.Split(':');
|
||||||
var foldername = divide.First();
|
var packageName = divide.First();
|
||||||
var filename = divide.Last();
|
var filename = divide.Last();
|
||||||
return MountedFolders.Where(n => n.Name == foldername).Any(f => f.Exists(filename));
|
return MountedPackages.Where(n => n.Name == packageName).Any(f => f.Exists(filename));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return MountedFolders.Any(f => f.Exists(name));
|
return MountedPackages.Any(f => f.Exists(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Assembly ResolveAssembly(object sender, ResolveEventArgs e)
|
public static Assembly ResolveAssembly(object sender, ResolveEventArgs e)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ using System.IO;
|
|||||||
|
|
||||||
namespace OpenRA.FileSystem
|
namespace OpenRA.FileSystem
|
||||||
{
|
{
|
||||||
public sealed class Folder : IFolder
|
public sealed class Folder : IPackage
|
||||||
{
|
{
|
||||||
readonly string path;
|
readonly string path;
|
||||||
readonly int priority;
|
readonly int priority;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ using System.IO;
|
|||||||
|
|
||||||
namespace OpenRA.FileSystem
|
namespace OpenRA.FileSystem
|
||||||
{
|
{
|
||||||
public interface IFolder : IDisposable
|
public interface IPackage : IDisposable
|
||||||
{
|
{
|
||||||
Stream GetContent(string filename);
|
Stream GetContent(string filename);
|
||||||
bool Exists(string filename);
|
bool Exists(string filename);
|
||||||
@@ -17,7 +17,7 @@ using ICSharpCode.SharpZipLib.Zip.Compression;
|
|||||||
|
|
||||||
namespace OpenRA.FileSystem
|
namespace OpenRA.FileSystem
|
||||||
{
|
{
|
||||||
public sealed class InstallShieldCABExtractor : IFolder
|
public sealed class InstallShieldCABExtractor : IPackage
|
||||||
{
|
{
|
||||||
const uint FileSplit = 0x1;
|
const uint FileSplit = 0x1;
|
||||||
const uint FileObfuscated = 0x2;
|
const uint FileObfuscated = 0x2;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ using OpenRA.FileFormats;
|
|||||||
|
|
||||||
namespace OpenRA.FileSystem
|
namespace OpenRA.FileSystem
|
||||||
{
|
{
|
||||||
public sealed class InstallShieldPackage : IFolder
|
public sealed class InstallShieldPackage : IPackage
|
||||||
{
|
{
|
||||||
readonly Dictionary<uint, PackageEntry> index = new Dictionary<uint, PackageEntry>();
|
readonly Dictionary<uint, PackageEntry> index = new Dictionary<uint, PackageEntry>();
|
||||||
readonly List<string> filenames;
|
readonly List<string> filenames;
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ using OpenRA.Primitives;
|
|||||||
|
|
||||||
namespace OpenRA.FileSystem
|
namespace OpenRA.FileSystem
|
||||||
{
|
{
|
||||||
public sealed class MixFile : IFolder
|
public sealed class MixFile : IPackage
|
||||||
{
|
{
|
||||||
readonly Dictionary<uint, PackageEntry> index;
|
readonly Dictionary<uint, PackageEntry> index;
|
||||||
readonly long dataStart;
|
readonly long dataStart;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ namespace OpenRA.FileSystem
|
|||||||
public string Filename;
|
public string Filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class PakFile : IFolder
|
public sealed class PakFile : IPackage
|
||||||
{
|
{
|
||||||
readonly string filename;
|
readonly string filename;
|
||||||
readonly int priority;
|
readonly int priority;
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ using SZipFile = ICSharpCode.SharpZipLib.Zip.ZipFile;
|
|||||||
|
|
||||||
namespace OpenRA.FileSystem
|
namespace OpenRA.FileSystem
|
||||||
{
|
{
|
||||||
public sealed class ZipFile : IFolder
|
public sealed class ZipFile : IPackage
|
||||||
{
|
{
|
||||||
readonly string filename;
|
readonly string filename;
|
||||||
readonly int priority;
|
readonly int priority;
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ namespace OpenRA
|
|||||||
[FieldLoader.Ignore] public readonly WVec[] SubCellOffsets;
|
[FieldLoader.Ignore] public readonly WVec[] SubCellOffsets;
|
||||||
public readonly SubCell DefaultSubCell;
|
public readonly SubCell DefaultSubCell;
|
||||||
public readonly SubCell LastSubCell;
|
public readonly SubCell LastSubCell;
|
||||||
[FieldLoader.Ignore] public IFolder Container;
|
[FieldLoader.Ignore] public IPackage Container;
|
||||||
public string Path { get; private set; }
|
public string Path { get; private set; }
|
||||||
|
|
||||||
// Yaml map data
|
// Yaml map data
|
||||||
|
|||||||
@@ -96,7 +96,7 @@
|
|||||||
<Compile Include="CacheStorage.cs" />
|
<Compile Include="CacheStorage.cs" />
|
||||||
<Compile Include="FileFormats\VocLoader.cs" />
|
<Compile Include="FileFormats\VocLoader.cs" />
|
||||||
<Compile Include="FileSystem\IdxEntry.cs" />
|
<Compile Include="FileSystem\IdxEntry.cs" />
|
||||||
<Compile Include="FileSystem\IFolder.cs" />
|
<Compile Include="FileSystem\IPackage.cs" />
|
||||||
<Compile Include="LogProxy.cs" />
|
<Compile Include="LogProxy.cs" />
|
||||||
<Compile Include="FileFormats\IdxReader.cs" />
|
<Compile Include="FileFormats\IdxReader.cs" />
|
||||||
<Compile Include="FileSystem\BagFile.cs" />
|
<Compile Include="FileSystem\BagFile.cs" />
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
ScrollPanelWidget assetList;
|
ScrollPanelWidget assetList;
|
||||||
ScrollItemWidget template;
|
ScrollItemWidget template;
|
||||||
|
|
||||||
IFolder assetSource = null;
|
IPackage assetSource = null;
|
||||||
List<string> availableShps = new List<string>();
|
List<string> availableShps = new List<string>();
|
||||||
bool animateFrames = false;
|
bool animateFrames = false;
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
this.world = world;
|
this.world = world;
|
||||||
|
|
||||||
panel = widget;
|
panel = widget;
|
||||||
assetSource = Game.ModData.ModFiles.MountedFolders.First();
|
assetSource = Game.ModData.ModFiles.MountedPackages.First();
|
||||||
|
|
||||||
var ticker = panel.GetOrNull<LogicTickerWidget>("ANIMATION_TICKER");
|
var ticker = panel.GetOrNull<LogicTickerWidget>("ANIMATION_TICKER");
|
||||||
if (ticker != null)
|
if (ticker != null)
|
||||||
@@ -334,7 +334,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
bool ShowSourceDropdown(DropDownButtonWidget dropdown)
|
bool ShowSourceDropdown(DropDownButtonWidget dropdown)
|
||||||
{
|
{
|
||||||
Func<IFolder, ScrollItemWidget, ScrollItemWidget> setupItem = (source, itemTemplate) =>
|
Func<IPackage, ScrollItemWidget, ScrollItemWidget> setupItem = (source, itemTemplate) =>
|
||||||
{
|
{
|
||||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
() => assetSource == source,
|
() => assetSource == source,
|
||||||
@@ -344,8 +344,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
};
|
};
|
||||||
|
|
||||||
// TODO: Re-enable "All Packages" once list generation is done in a background thread
|
// TODO: Re-enable "All Packages" once list generation is done in a background thread
|
||||||
// var sources = new[] { (IFolder)null }.Concat(GlobalFileSystem.MountedFolders);
|
// var sources = new[] { (IPackage)null }.Concat(GlobalFileSystem.MountedFolders);
|
||||||
var sources = Game.ModData.ModFiles.MountedFolders;
|
var sources = Game.ModData.ModFiles.MountedPackages;
|
||||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 280, sources, setupItem);
|
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 280, sources, setupItem);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user