refactoring.

(ArchiveFormat): added Query<ResourceOptions> protected method for
convenient invocation of  parameters requests.
(FormatCatalog): changed misguiding method name 'LookupTag' to
'LookupExtension'.
This commit is contained in:
morkt 2014-08-02 10:01:06 +04:00
parent 16efe95597
commit 1b46da45a6
6 changed files with 22 additions and 41 deletions

View File

@ -294,7 +294,7 @@ namespace GameRes.Formats
uint WriteImageEntry (PackedEntry entry, Stream input, Stream output) uint WriteImageEntry (PackedEntry entry, Stream input, Stream output)
{ {
var grp = FormatCatalog.Instance.LookupTag<GrpFormat> ("GRP").FirstOrDefault(); var grp = FormatCatalog.Instance.LookupExtension<GrpFormat> ("GRP").FirstOrDefault();
if (null == grp) // probably never happens if (null == grp) // probably never happens
throw new FileFormatException ("GRP image encoder not available"); throw new FileFormatException ("GRP image encoder not available");
bool is_grp = grp.Signature == FormatCatalog.ReadSignature (input); bool is_grp = grp.Signature == FormatCatalog.ReadSignature (input);

View File

@ -334,15 +334,7 @@ namespace GameRes.Formats
uint? QueryEncryptionInfo () uint? QueryEncryptionInfo ()
{ {
var args = new ParametersRequestEventArgs var options = Query<IntOptions> (arcStrings.INTNotice);
{
Notice = arcStrings.INTNotice,
};
FormatCatalog.Instance.InvokeParametersRequest (this, args);
if (!args.InputResult)
throw new OperationCanceledException();
var options = GetOptions<IntOptions> (args.Options);
return options.EncryptionInfo.GetKey(); return options.EncryptionInfo.GetKey();
} }
} }

View File

@ -333,15 +333,7 @@ namespace GameRes.Formats
NpaTitleId QueryGameEncryption () NpaTitleId QueryGameEncryption ()
{ {
var args = new ParametersRequestEventArgs var options = Query<NpaOptions> (arcStrings.ArcEncryptedNotice);
{
Notice = arcStrings.ArcEncryptedNotice,
};
FormatCatalog.Instance.InvokeParametersRequest (this, args);
if (!args.InputResult)
throw new OperationCanceledException();
var options = GetOptions<NpaOptions> (args.Options);
return options.TitleId; return options.TitleId;
} }

View File

@ -281,15 +281,8 @@ NextEntry:
ICrypt QueryCryptAlgorithm () ICrypt QueryCryptAlgorithm ()
{ {
var args = new ParametersRequestEventArgs var options = Query<Xp3Options> (arcStrings.ArcEncryptedNotice);
{ return options.Scheme;
Notice = arcStrings.ArcEncryptedNotice,
};
FormatCatalog.Instance.InvokeParametersRequest (this, args);
if (!args.InputResult)
throw new OperationCanceledException();
return GetOptions<Xp3Options> (args.Options).Scheme;
} }
public static ICrypt GetScheme (string scheme) public static ICrypt GetScheme (string scheme)

View File

@ -104,14 +104,8 @@ namespace GameRes.Formats
uint QueryEncryptionKey () uint QueryEncryptionKey ()
{ {
var args = new ParametersRequestEventArgs var options = Query<YpfOptions> (arcStrings.YPFNotice);
{ return options.Key;
Notice = arcStrings.YPFNotice,
};
FormatCatalog.Instance.InvokeParametersRequest (this, args);
if (!args.InputResult)
throw new OperationCanceledException();
return GetOptions<YpfOptions> (args.Options).Key;
} }
private class Parser private class Parser

View File

@ -225,6 +225,16 @@ namespace GameRes
options = this.GetDefaultOptions() as OptType; options = this.GetDefaultOptions() as OptType;
return options; return options;
} }
protected OptType Query<OptType> (string notice) where OptType : ResourceOptions
{
var args = new ParametersRequestEventArgs { Notice = notice };
FormatCatalog.Instance.InvokeParametersRequest (this, args);
if (!args.InputResult)
throw new OperationCanceledException();
return GetOptions<OptType> (args.Options);
}
} }
public delegate void ParametersRequestEventHandler (object sender, ParametersRequestEventArgs e); public delegate void ParametersRequestEventHandler (object sender, ParametersRequestEventArgs e);
@ -317,17 +327,17 @@ namespace GameRes
string ext = Path.GetExtension (filename); string ext = Path.GetExtension (filename);
if (null == ext) if (null == ext)
return new IResource[0]; return new IResource[0];
return LookupTag (ext.TrimStart ('.')); return LookupExtension (ext.TrimStart ('.'));
} }
public IEnumerable<IResource> LookupTag (string tag) public IEnumerable<IResource> LookupExtension (string ext)
{ {
return m_extension_map.GetValues (tag.ToUpper(), true); return m_extension_map.GetValues (ext.ToUpper(), true);
} }
public IEnumerable<Type> LookupTag<Type> (string tag) where Type : IResource public IEnumerable<Type> LookupExtension<Type> (string ext) where Type : IResource
{ {
return LookupTag (tag).OfType<Type>(); return LookupExtension (ext).OfType<Type>();
} }
public IEnumerable<IResource> LookupSignature (uint signature) public IEnumerable<IResource> LookupSignature (uint signature)