From 675f3f6f816d4f315c2f319d6b323834dc252590 Mon Sep 17 00:00:00 2001 From: emmauss <emmausssss@gmail.com> 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 36dfd9efa9..8fd7bfeafd 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<int, ServiceProcessRequest> m_Commands; public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands; - public IAccountServiceForApplication() + public IAccountService() { m_Commands = new Dictionary<int, ServiceProcessRequest>() { diff --git a/Ryujinx.HLE/HOS/Services/Acc/IProfile.cs b/Ryujinx.HLE/HOS/Services/Acc/IProfile.cs index 960cc49c01..316f16d082 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<int, ServiceProcessRequest>() { - { 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 babceb7db9..5e65d1d104 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 f7fb84a588..fa4c254e24 100644 --- a/Ryujinx.HLE/Ryujinx.HLE.csproj +++ b/Ryujinx.HLE/Ryujinx.HLE.csproj @@ -13,6 +13,14 @@ <AllowUnsafeBlocks>true</AllowUnsafeBlocks> </PropertyGroup> + <ItemGroup> + <None Remove="RyujinxProfileImage.jpg" /> + </ItemGroup> + + <ItemGroup> + <EmbeddedResource Include="RyujinxProfileImage.jpg" /> + </ItemGroup> + <ItemGroup> <ProjectReference Include="..\ChocolArm64\ChocolArm64.csproj" /> <ProjectReference Include="..\Ryujinx.Audio\Ryujinx.Audio.csproj" /> 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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 G?Dz*nfg|Gp literal 0 HcmV?d00001