From 675f3f6f816d4f315c2f319d6b323834dc252590 Mon Sep 17 00:00:00 2001 From: emmauss Date: Sun, 2 Sep 2018 01:04:20 +0300 Subject: [PATCH] Implement loading of profile image (#391) * implement loading of profile image * rename icon to profilepicture * rename icon file --- ...ceForApplication.cs => IAccountService.cs} | 4 +- Ryujinx.HLE/HOS/Services/Acc/IProfile.cs | 36 +++++++++++++++++- Ryujinx.HLE/HOS/Services/ServiceFactory.cs | 5 ++- Ryujinx.HLE/Ryujinx.HLE.csproj | 8 ++++ Ryujinx.HLE/RyujinxProfileImage.jpg | Bin 0 -> 5394 bytes 5 files changed, 48 insertions(+), 5 deletions(-) rename Ryujinx.HLE/HOS/Services/Acc/{IAccountServiceForApplication.cs => IAccountService.cs} (97%) create mode 100644 Ryujinx.HLE/RyujinxProfileImage.jpg diff --git a/Ryujinx.HLE/HOS/Services/Acc/IAccountServiceForApplication.cs b/Ryujinx.HLE/HOS/Services/Acc/IAccountService.cs similarity index 97% rename from Ryujinx.HLE/HOS/Services/Acc/IAccountServiceForApplication.cs rename to Ryujinx.HLE/HOS/Services/Acc/IAccountService.cs index 36dfd9efa..8fd7bfeaf 100644 --- a/Ryujinx.HLE/HOS/Services/Acc/IAccountServiceForApplication.cs +++ b/Ryujinx.HLE/HOS/Services/Acc/IAccountService.cs @@ -7,13 +7,13 @@ using static Ryujinx.HLE.HOS.ErrorCode; namespace Ryujinx.HLE.HOS.Services.Acc { - class IAccountServiceForApplication : IpcService + class IAccountService : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - public IAccountServiceForApplication() + public IAccountService() { m_Commands = new Dictionary() { diff --git a/Ryujinx.HLE/HOS/Services/Acc/IProfile.cs b/Ryujinx.HLE/HOS/Services/Acc/IProfile.cs index 960cc49c0..316f16d08 100644 --- a/Ryujinx.HLE/HOS/Services/Acc/IProfile.cs +++ b/Ryujinx.HLE/HOS/Services/Acc/IProfile.cs @@ -3,7 +3,10 @@ using Ryujinx.HLE.HOS.Ipc; using Ryujinx.HLE.HOS.SystemState; using Ryujinx.HLE.Logging; using Ryujinx.HLE.Utilities; +using System; using System.Collections.Generic; +using System.IO; +using System.Reflection; using System.Text; namespace Ryujinx.HLE.HOS.Services.Acc @@ -16,15 +19,21 @@ namespace Ryujinx.HLE.HOS.Services.Acc private UserProfile Profile; + private Stream ProfilePictureStream; + public IProfile(UserProfile Profile) { m_Commands = new Dictionary() { - { 0, Get }, - { 1, GetBase } + { 0, Get }, + { 1, GetBase }, + { 10, GetImageSize }, + { 11, LoadImage }, }; this.Profile = Profile; + + ProfilePictureStream = Assembly.GetCallingAssembly().GetManifestResourceStream("Ryujinx.HLE.RyujinxProfileImage.jpg"); } public long Get(ServiceCtx Context) @@ -54,5 +63,28 @@ namespace Ryujinx.HLE.HOS.Services.Acc return 0; } + + private long LoadImage(ServiceCtx Context) + { + long BufferPosition = Context.Request.ReceiveBuff[0].Position; + long BufferLen = Context.Request.ReceiveBuff[0].Size; + + byte[] ProfilePictureData = new byte[BufferLen]; + + ProfilePictureStream.Read(ProfilePictureData, 0, ProfilePictureData.Length); + + Context.Memory.WriteBytes(BufferPosition, ProfilePictureData); + + Context.ResponseData.Write(ProfilePictureStream.Length); + + return 0; + } + + private long GetImageSize(ServiceCtx Context) + { + Context.ResponseData.Write(ProfilePictureStream.Length); + + return 0; + } } } \ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/ServiceFactory.cs b/Ryujinx.HLE/HOS/Services/ServiceFactory.cs index babceb7db..5e65d1d10 100644 --- a/Ryujinx.HLE/HOS/Services/ServiceFactory.cs +++ b/Ryujinx.HLE/HOS/Services/ServiceFactory.cs @@ -31,7 +31,10 @@ namespace Ryujinx.HLE.HOS.Services switch (Name) { case "acc:u0": - return new IAccountServiceForApplication(); + return new IAccountService(); + + case "acc:u1": + return new IAccountService(); case "aoc:u": return new IAddOnContentManager(); diff --git a/Ryujinx.HLE/Ryujinx.HLE.csproj b/Ryujinx.HLE/Ryujinx.HLE.csproj index f7fb84a58..fa4c254e2 100644 --- a/Ryujinx.HLE/Ryujinx.HLE.csproj +++ b/Ryujinx.HLE/Ryujinx.HLE.csproj @@ -13,6 +13,14 @@ true + + + + + + + + diff --git a/Ryujinx.HLE/RyujinxProfileImage.jpg b/Ryujinx.HLE/RyujinxProfileImage.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe9ec2a9590d2d53ef1dcffc8078f5bd04e7b00f GIT binary patch literal 5394 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 literal 0 HcmV?d00001