System firmware installer (#791)

* firmware installer

* Add directory installation option and fix 9.x support for directory

* Fix missing system font error while installing for the first time

* Address code style comments

* Create and use InvalidFirmwarePackageException

* Fix LDj3SNuD's comments

* addressed alex's comments

* add label to status bar to show current firmware version

Co-authored-by: Thog <thog@protonmail.com>
This commit is contained in:
emmauss 2020-01-12 02:10:55 +00:00 committed by Ac_K
parent 1661ce99ca
commit e485ee049d
8 changed files with 936 additions and 27 deletions

View file

@ -44,7 +44,15 @@ namespace Ryujinx.HLE.HOS.Font
_fontsPath = Path.Combine(device.FileSystem.GetSystemPath(), "fonts");
}
public void EnsureInitialized(ContentManager contentManager)
public void Initialize(ContentManager contentManager, bool ignoreMissingFonts)
{
_fontData?.Clear();
_fontData = null;
EnsureInitialized(contentManager, ignoreMissingFonts);
}
public void EnsureInitialized(ContentManager contentManager, bool ignoreMissingFonts)
{
if (_fontData == null)
{
@ -112,10 +120,12 @@ namespace Ryujinx.HLE.HOS.Font
return info;
}
else
else if (!ignoreMissingFonts)
{
throw new InvalidSystemResourceException($"Font \"{name}.ttf\" not found. Please provide it in \"{_fontsPath}\".");
}
return new FontInfo();
}
_fontData = new Dictionary<SharedFontType, FontInfo>
@ -128,7 +138,7 @@ namespace Ryujinx.HLE.HOS.Font
{ SharedFontType.NintendoEx, CreateFont("FontNintendoExtended") }
};
if (fontOffset > Horizon.FontSize)
if (fontOffset > Horizon.FontSize && !ignoreMissingFonts)
{
throw new InvalidSystemResourceException(
$"The sum of all fonts size exceed the shared memory size. " +
@ -151,14 +161,14 @@ namespace Ryujinx.HLE.HOS.Font
public int GetFontSize(SharedFontType fontType)
{
EnsureInitialized(_device.System.ContentManager);
EnsureInitialized(_device.System.ContentManager, false);
return _fontData[fontType].Size;
}
public int GetSharedMemoryAddressOffset(SharedFontType fontType)
{
EnsureInitialized(_device.System.ContentManager);
EnsureInitialized(_device.System.ContentManager, false);
return _fontData[fontType].Offset + 8;
}