public static Stream OpenStream(string name)
{
// Normalize the file path.
var safeName = GetFilename(name);
// We do not accept absolute paths here.
if (Path.IsPathRooted(safeName))
throw new ArgumentException("Invalid filename. TitleContainer.OpenStream requires a relative path.");
#if WINRT
var stream = Task.Run( () => OpenStreamAsync(safeName).Result ).Result;
if (stream == null)
throw new FileNotFoundException(name);
return stream;
#elif ANDROID
return Android.App.Application.Context.Assets.Open(safeName);
#elif IOS
var absolutePath = Path.Combine(Location, safeName);
if (SupportRetina)
{
for (var scale = RetinaScale; scale >= 2; scale--)
{
// Insert the @#x immediately prior to the extension. If this file exists
// and we are on a Retina device, return this file instead.
var absolutePathX = Path.Combine(Path.GetDirectoryName(absolutePath),
Path.GetFileNameWithoutExtension(absolutePath)
+ "@" + scale + "x" + Path.GetExtension(absolutePath));
if (File.Exists(absolutePathX))
return File.OpenRead(absolutePathX);
}
}
return File.OpenRead(absolutePath);
#else
var absolutePath = Path.Combine(Location, safeName);
return File.OpenRead(absolutePath);
#endif
}