Give folders higher priority than packages in FileSystem. Also fixes bug where folder contents were not being cached with the correct hash.
This commit is contained in:
committed by
Chris Forbes
parent
f6df7a06f2
commit
2bcf33661a
@@ -41,5 +41,11 @@ namespace OpenRA.FileFormats
|
|||||||
{
|
{
|
||||||
return hashes.Contains(PackageEntry.HashFilename(filename));
|
return hashes.Contains(PackageEntry.HashFilename(filename));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int Priority
|
||||||
|
{
|
||||||
|
get { return 1; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace OpenRA.FileFormats
|
namespace OpenRA.FileFormats
|
||||||
{
|
{
|
||||||
@@ -73,9 +74,14 @@ namespace OpenRA.FileFormats
|
|||||||
|
|
||||||
static Stream GetFromCache( Cache<uint, List<IFolder>> index, string filename )
|
static Stream GetFromCache( Cache<uint, List<IFolder>> index, string filename )
|
||||||
{
|
{
|
||||||
foreach( var folder in index[ PackageEntry.HashFilename( filename ) ] )
|
var folder = index[PackageEntry.HashFilename(filename)]
|
||||||
if (folder.Exists(filename))
|
.Where(x => x.Exists(filename))
|
||||||
return folder.GetContent(filename);
|
.OrderByDescending(x => x.Priority)
|
||||||
|
.FirstOrDefault();
|
||||||
|
|
||||||
|
if (folder != null)
|
||||||
|
return folder.GetContent(filename);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,11 +94,13 @@ namespace OpenRA.FileFormats
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach( IFolder folder in mountedFolders )
|
var folder = mountedFolders
|
||||||
{
|
.Where(x => x.Exists(filename))
|
||||||
if (folder.Exists(filename))
|
.OrderByDescending(x => x.Priority)
|
||||||
return folder.GetContent(filename);
|
.FirstOrDefault();
|
||||||
}
|
|
||||||
|
if (folder != null)
|
||||||
|
return folder.GetContent(filename);
|
||||||
|
|
||||||
throw new FileNotFoundException( string.Format( "File not found: {0}", filename ), filename );
|
throw new FileNotFoundException( string.Format( "File not found: {0}", filename ), filename );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,12 +28,18 @@ namespace OpenRA.FileFormats
|
|||||||
public IEnumerable<uint> AllFileHashes()
|
public IEnumerable<uint> AllFileHashes()
|
||||||
{
|
{
|
||||||
foreach( var filename in Directory.GetFiles( path, "*", SearchOption.TopDirectoryOnly ) )
|
foreach( var filename in Directory.GetFiles( path, "*", SearchOption.TopDirectoryOnly ) )
|
||||||
yield return PackageEntry.HashFilename( filename );
|
yield return PackageEntry.HashFilename( 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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int Priority
|
||||||
|
{
|
||||||
|
get { return 100; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
int Priority { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Package : IFolder
|
public class Package : IFolder
|
||||||
@@ -149,6 +150,12 @@ namespace OpenRA.FileFormats
|
|||||||
{
|
{
|
||||||
return index.ContainsKey(PackageEntry.HashFilename(filename));
|
return index.ContainsKey(PackageEntry.HashFilename(filename));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int Priority
|
||||||
|
{
|
||||||
|
get { return 0; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
|
|||||||
Reference in New Issue
Block a user