From 0e88ff9862338660a72fc51598379f1d36d2d2d6 Mon Sep 17 00:00:00 2001 From: SvenGDK Date: Tue, 26 Dec 2023 08:23:23 +0100 Subject: [PATCH] PS5 library updates --- PS Multi Tools/Classes/PS5Game.vb | 20 + PS Multi Tools/Images/OpenFolder-icon.png | Bin 0 -> 966 bytes PS Multi Tools/Images/Replace-icon.png | Bin 0 -> 1033 bytes PS Multi Tools/My Project/AssemblyInfo.vb | 4 +- PS Multi Tools/PS Multi Tools.vbproj | 6 + PS Multi Tools/PS5/PS5Library.xaml | 57 +- PS Multi Tools/PS5/PS5Library.xaml.vb | 1159 +++++++++++++++++++-- 7 files changed, 1117 insertions(+), 129 deletions(-) create mode 100644 PS Multi Tools/Images/OpenFolder-icon.png create mode 100644 PS Multi Tools/Images/Replace-icon.png diff --git a/PS Multi Tools/Classes/PS5Game.vb b/PS Multi Tools/Classes/PS5Game.vb index 76ef7fe..01564f0 100644 --- a/PS Multi Tools/Classes/PS5Game.vb +++ b/PS Multi Tools/Classes/PS5Game.vb @@ -18,6 +18,8 @@ Private _FRGameTitle As String Private _GameBackgroundImageBrush As ImageBrush Private _GameSoundFile As String + Private _IsCompatibleFW As String 'Not used yet + Private _DecFilesIncluded As String Public Property GameTitle As String Get @@ -181,6 +183,24 @@ End Set End Property + Public Property IsCompatibleFW As String + Get + Return _IsCompatibleFW + End Get + Set + _IsCompatibleFW = Value + End Set + End Property + + Public Property DecFilesIncluded As String + Get + Return _DecFilesIncluded + End Get + Set + _DecFilesIncluded = Value + End Set + End Property + Public Shared Function GetGameRegion(GameID As String) As String If GameID.StartsWith("PPSA") Then Return "NA / Europe" diff --git a/PS Multi Tools/Images/OpenFolder-icon.png b/PS Multi Tools/Images/OpenFolder-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..81222d93f0e133175dbf19bb140f53176fc93e56 GIT binary patch literal 966 zcmV;%13CPOP)YC_*wR$}VJTi#bb!j-L6?dz|M7vkQasKK|!= zMvx>)k|arzBuSDaNs=TNW#R0uL)!T00EDAZ`Hd22k#80ytL7p)PmN zR#(;m1C>khLk3VzEx;{c5AeYN%DWO=1I~L4Q0@c64p)HkY6LC-mkpr2jvGL^ZHu}K z7zW-upWMwxJqYY`Hub?>fC0z=WB@V%8GsBx1|S2F0VLA}TyhjiJO!>s3*anXI!@(T z#1){&xg>KpS^(|94(F1@WW*KV1jW8fs7wZ#=k{^Y0rWbT;+Fp?D}d6t6D@$96#P}E z5_t{0i57rI{{{c{8$ikT|3wDS1RQlPNz7Ev073 z0$2^~cP>eMCwt9Ir~tb0IfPUm0KcOJ;PM~f{NDiF{}&R#MuNQZtOUk^v1kGG;O*a3 z?vZ^_H(US;vizqGpaF0HrZN{XfZf0bXOqM${__PLDFbl%4|MuhL;ybi6>R^XGJs~_ zh;vC|nkrr+n<{`Vpv~DN@fi3PEdclb0hfORDER?kssPpk`UxATm0dxb)oJ|r# zz@KOVxcmoQ{tcky2Y@L8*bHoSE=jy2y96960B`>W{_Rf{fJz!b1KA%mQ2u5k2Cx@c z?`)D713pFzz`K8ePybQ`;Ql}O{y)zET7bjOC5c~TUjPXez#*X3*(C7@_z^7tm;X9g z{;LgOx{80h#ks^k0IW8EaX;&D=6(5NUI9F>tO8Ab?qSUP^2fXam;&zOmpdZ4o%%mK zgMYO<$~IoanN|bYQ>PA~`0Zj*%g%PPXU`l$aoYd|-)8TvTzqgC>9-MJO@srG17z=? zbtvh!o50FQN1<&%KQQ5Na^0Q)r}8?etA%E=$G07*qoM6N<$f@3(HD*ylh literal 0 HcmV?d00001 diff --git a/PS Multi Tools/Images/Replace-icon.png b/PS Multi Tools/Images/Replace-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8baae9d7edc5982a638828bd2ebcddc160b40cb3 GIT binary patch literal 1033 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&v7|ftIx;Y9?C1WI$O_~$76-XI zF|0c$^AgDU7T^=&3ZzFM@J#WV4D@zjNswPK1IynxAAd21uCkOZeJI@JbJW6WOT$;a z*Oz$MRvbF^Z;!}~4VsSv?hA02oloamurk=y?9+!{_xH|0TKNV1PK8yM=WGf&dFrZk z{f*5r9vhn%3dXT4o5R4s6yoXP7*cWT?XAq|` zkM)Nx%Qd^1bI9U%9ZTA$GkLR@s5&Z4{1UT_UrTy6Yssl;?fIc<4%&ZRS3iEgrYUa? z*S6IRcC4p&1Br*s4dIS*2i7Mr{^43y^dLNd<%4zvk0QxD=9EAayT&9@>N*f zI<>esN&3Q`s*6$L-%gb==0~b)2P-Ai-#dG22Fs6$YaKfG6u_M)PG;uRN?R?@!*S-e$EG&F9;YgeqhpL zh&sS_fa?c?2ct5B`U92)ENd8g8pIm}44AJlmoF!e*VDy&7HA=dG;gaICFJ=!IrX<^RnJF-qJNP+C zPiXisPw&Sf1|R;-t|xh0R2ps;?$c;a-qLMgV0A&_X{m++bJMlYEl)pXGnw#hJ@;3) zexi-2@V{5A67pO%OqWi*XPQv))tYI^^!c(2wCv3tBJ0u`cKuny;Pcaxam6QNrh=!- znHH`5zUlSs_XY)w1wYzcz&@)InZUgIWG1sz86$7*fwi#*+RYZ^ieI?KR`M;Uul~lx z{Y}?%n6B~UEj+Vk@5gjwHS@ySOV@r(F5R5@q~_$gAKt!?XTGVJYxn1uSSELjb@Uuf jiS)FOTf{t6Y-h>aczI8fe|S^`lxIC%{an^LB{Ts5*P2N0 literal 0 HcmV?d00001 diff --git a/PS Multi Tools/My Project/AssemblyInfo.vb b/PS Multi Tools/My Project/AssemblyInfo.vb index f7a1b86..99cf05a 100644 --- a/PS Multi Tools/My Project/AssemblyInfo.vb +++ b/PS Multi Tools/My Project/AssemblyInfo.vb @@ -55,5 +55,5 @@ Imports System.Windows ' by using the '*' as shown below: ' - - + + diff --git a/PS Multi Tools/PS Multi Tools.vbproj b/PS Multi Tools/PS Multi Tools.vbproj index 131d21b..68adf1e 100644 --- a/PS Multi Tools/PS Multi Tools.vbproj +++ b/PS Multi Tools/PS Multi Tools.vbproj @@ -435,6 +435,12 @@ + + + + + + diff --git a/PS Multi Tools/PS5/PS5Library.xaml b/PS Multi Tools/PS5/PS5Library.xaml index 0c15ad1..f8ad02c 100644 --- a/PS Multi Tools/PS5/PS5Library.xaml +++ b/PS Multi Tools/PS5/PS5Library.xaml @@ -43,6 +43,11 @@ + + + + + @@ -74,29 +79,29 @@ - - - + + + - - - + + + - - - + + + - - - + + + - + - + @@ -114,11 +119,11 @@ - - - - - + + + + + @@ -135,13 +140,13 @@ - - - - - - - + + + + + + + diff --git a/PS Multi Tools/PS5/PS5Library.xaml.vb b/PS Multi Tools/PS5/PS5Library.xaml.vb index e0406fd..9514cd6 100644 --- a/PS Multi Tools/PS5/PS5Library.xaml.vb +++ b/PS Multi Tools/PS5/PS5Library.xaml.vb @@ -3,6 +3,7 @@ Imports Microsoft.Web.WebView2.Core Imports MS.Internal Imports Newtonsoft.Json Imports psmt_lib +Imports psmt_lib.PS5ParamClass Imports System.ComponentModel Imports System.IO Imports System.Security.Authentication @@ -33,11 +34,48 @@ Public Class PS5Library Dim WithEvents LoadDLFolderMenuItem As New Controls.MenuItem() With {.Header = "Open Downloads folder"} 'Games context menu items - Dim WithEvents GamesContextMenu As New Controls.ContextMenu() - Dim WithEvents AppsContextMenu As New Controls.ContextMenu() - Dim WithEvents CopyToMenuItem As New Controls.MenuItem() With {.Header = "Copy to", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/copy-icon.png", UriKind.Relative))}} - Dim WithEvents PlayMenuItem As New Controls.MenuItem() With {.Header = "Play Soundtrack", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Play-icon.png", UriKind.Relative))}} - Dim WithEvents CheckForUpdatesMenuItem As New Controls.MenuItem() With {.Header = "Check for updates", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Refresh-icon.png", UriKind.Relative))}} + Dim GamesContextMenu As New Controls.ContextMenu() + Dim WithEvents GameCopyToMenuItem As New Controls.MenuItem() With {.Header = "Copy to", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/copy-icon.png", UriKind.Relative))}} + Dim WithEvents GameOpenLocationMenuItem As New Controls.MenuItem() With {.Header = "Open game folder", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/OpenFolder-icon.png", UriKind.Relative))}} + Dim WithEvents GamePlayMenuItem As New Controls.MenuItem() With {.Header = "Play Soundtrack", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Play-icon.png", UriKind.Relative))}} + Dim WithEvents GameCheckForUpdatesMenuItem As New Controls.MenuItem() With {.Header = "Check for updates", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Refresh-icon.png", UriKind.Relative))}} + + Dim GameChangeTypeMenuItem As New Controls.MenuItem() With {.Header = "Change game type", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/rename.png", UriKind.Relative))}} + Dim WithEvents GameChangeToGameMenuItem As New Controls.MenuItem() With {.Header = "To Game App"} + Dim WithEvents GameChangeToNativeMediaMenuItem As New Controls.MenuItem() With {.Header = "To Native Media App"} + Dim WithEvents GameChangeToRNPSMediaMenuItem As New Controls.MenuItem() With {.Header = "To RNPS Media App"} + Dim WithEvents GameChangeToBuiltInMenuItem As New Controls.MenuItem() With {.Header = "To System Built-in"} + Dim WithEvents GameChangeToBigDaemonMenuItem As New Controls.MenuItem() With {.Header = "To Big Daemon"} + Dim WithEvents GameChangeToShellUIMenuItem As New Controls.MenuItem() With {.Header = "To ShellUI"} + Dim WithEvents GameChangeToDaemonMenuItem As New Controls.MenuItem() With {.Header = "To Daemon"} + Dim WithEvents GameChangeToShellAppMenuItem As New Controls.MenuItem() With {.Header = "To ShellApp"} + + Dim WithEvents GameRenameMenuItem As New Controls.MenuItem() With {.Header = "Rename game", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/rename.png", UriKind.Relative))}} + Dim WithEvents GameChangeIconMenuItem As New Controls.MenuItem() With {.Header = "Change game icon", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Replace-icon.png", UriKind.Relative))}} + Dim WithEvents GameChangeBackgroundMenuItem As New Controls.MenuItem() With {.Header = "Change game background", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Replace-icon.png", UriKind.Relative))}} + Dim WithEvents GameChangeSoundtrackMenuItem As New Controls.MenuItem() With {.Header = "Change game soundtrack", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Replace-icon.png", UriKind.Relative))}} + + 'Apps context menu items + Dim AppsContextMenu As New Controls.ContextMenu() + Dim WithEvents AppCopyToMenuItem As New Controls.MenuItem() With {.Header = "Copy to", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/copy-icon.png", UriKind.Relative))}} + Dim WithEvents AppOpenLocationMenuItem As New Controls.MenuItem() With {.Header = "Open app folder", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/OpenFolder-icon.png", UriKind.Relative))}} + Dim WithEvents AppPlayMenuItem As New Controls.MenuItem() With {.Header = "Play Soundtrack", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Play-icon.png", UriKind.Relative))}} + Dim WithEvents AppCheckForUpdatesMenuItem As New Controls.MenuItem() With {.Header = "Check for updates", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Refresh-icon.png", UriKind.Relative))}} + + Dim AppChangeTypeMenuItem As New Controls.MenuItem() With {.Header = "Change app type", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/rename.png", UriKind.Relative))}} + Dim WithEvents AppChangeToGameMenuItem As New Controls.MenuItem() With {.Header = "To Game App"} + Dim WithEvents AppChangeToNativeMediaMenuItem As New Controls.MenuItem() With {.Header = "To Native Media App"} + Dim WithEvents AppChangeToRNPSMediaMenuItem As New Controls.MenuItem() With {.Header = "To RNPS Media App"} + Dim WithEvents AppChangeToBuiltInMenuItem As New Controls.MenuItem() With {.Header = "To System Built-in"} + Dim WithEvents AppChangeToBigDaemonMenuItem As New Controls.MenuItem() With {.Header = "To Big Daemon"} + Dim WithEvents AppChangeToShellUIMenuItem As New Controls.MenuItem() With {.Header = "To ShellUI"} + Dim WithEvents AppChangeToDaemonMenuItem As New Controls.MenuItem() With {.Header = "To Daemon"} + Dim WithEvents AppChangeToShellAppMenuItem As New Controls.MenuItem() With {.Header = "To ShellApp"} + + Dim WithEvents AppRenameMenuItem As New Controls.MenuItem() With {.Header = "Rename application", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/rename.png", UriKind.Relative))}} + Dim WithEvents AppChangeIconMenuItem As New Controls.MenuItem() With {.Header = "Change app icon", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Replace-icon.png", UriKind.Relative))}} + Dim WithEvents AppChangeBackgroundMenuItem As New Controls.MenuItem() With {.Header = "Change app background", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Replace-icon.png", UriKind.Relative))}} + Dim WithEvents AppChangeSoundtrackMenuItem As New Controls.MenuItem() With {.Header = "Change app soundtrack", .Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Replace-icon.png", UriKind.Relative))}} Private Sub PS5Library_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded 'Will set the console IP and port when changing the console address in the settings @@ -51,9 +89,50 @@ Public Class PS5Library LibraryMenuItem.Items.Add(LoadDLFolderMenuItem) 'Add context menu for games - GamesContextMenu.Items.Add(CopyToMenuItem) - GamesContextMenu.Items.Add(PlayMenuItem) - GamesContextMenu.Items.Add(CheckForUpdatesMenuItem) + GamesContextMenu.Items.Add(GameOpenLocationMenuItem) + GamesContextMenu.Items.Add(GameCopyToMenuItem) + GamesContextMenu.Items.Add(GamePlayMenuItem) + GamesContextMenu.Items.Add(GameCheckForUpdatesMenuItem) + GamesContextMenu.Items.Add(New Separator()) + + 'Add sub menu for GameChangeType + GameChangeTypeMenuItem.Items.Add(GameChangeToGameMenuItem) + GameChangeTypeMenuItem.Items.Add(GameChangeToNativeMediaMenuItem) + GameChangeTypeMenuItem.Items.Add(GameChangeToRNPSMediaMenuItem) + GameChangeTypeMenuItem.Items.Add(GameChangeToBuiltInMenuItem) + GameChangeTypeMenuItem.Items.Add(GameChangeToBigDaemonMenuItem) + GameChangeTypeMenuItem.Items.Add(GameChangeToShellUIMenuItem) + GameChangeTypeMenuItem.Items.Add(GameChangeToDaemonMenuItem) + GameChangeTypeMenuItem.Items.Add(GameChangeToShellAppMenuItem) + + GamesContextMenu.Items.Add(GameChangeTypeMenuItem) + GamesContextMenu.Items.Add(GameRenameMenuItem) + GamesContextMenu.Items.Add(GameChangeIconMenuItem) + GamesContextMenu.Items.Add(GameChangeBackgroundMenuItem) + GamesContextMenu.Items.Add(GameChangeSoundtrackMenuItem) + + 'Add context menu for apps + AppsContextMenu.Items.Add(AppOpenLocationMenuItem) + AppsContextMenu.Items.Add(AppCopyToMenuItem) + AppsContextMenu.Items.Add(AppPlayMenuItem) + AppsContextMenu.Items.Add(AppCheckForUpdatesMenuItem) + AppsContextMenu.Items.Add(New Separator()) + + 'Add sub menu for AppChangeType + AppChangeTypeMenuItem.Items.Add(AppChangeToGameMenuItem) + AppChangeTypeMenuItem.Items.Add(AppChangeToNativeMediaMenuItem) + AppChangeTypeMenuItem.Items.Add(AppChangeToRNPSMediaMenuItem) + AppChangeTypeMenuItem.Items.Add(AppChangeToBuiltInMenuItem) + AppChangeTypeMenuItem.Items.Add(AppChangeToBigDaemonMenuItem) + AppChangeTypeMenuItem.Items.Add(AppChangeToShellUIMenuItem) + AppChangeTypeMenuItem.Items.Add(AppChangeToDaemonMenuItem) + AppChangeTypeMenuItem.Items.Add(AppChangeToShellAppMenuItem) + + AppsContextMenu.Items.Add(AppChangeTypeMenuItem) + AppsContextMenu.Items.Add(AppRenameMenuItem) + AppsContextMenu.Items.Add(AppChangeIconMenuItem) + AppsContextMenu.Items.Add(AppChangeBackgroundMenuItem) + AppsContextMenu.Items.Add(AppChangeSoundtrackMenuItem) 'Set context menu GamesListView.ContextMenu = GamesContextMenu @@ -418,6 +497,8 @@ Public Class PS5Library If ParamData.ApplicationCategoryType = 0 Then NewPS5Game.GameCategory = "Type: Game" + ElseIf ParamData.ApplicationCategoryType = 65536 Then + NewPS5Game.GameCategory = "Type: Native Media App" ElseIf ParamData.ApplicationCategoryType = 65792 Then NewPS5Game.GameCategory = "Type: RNPS Media App" ElseIf ParamData.ApplicationCategoryType = 131328 Then @@ -446,40 +527,119 @@ Public Class PS5Library Dim SCESYSFolder As String = Path.GetDirectoryName(ParamFileInfo.FullName) + 'Check for game icon If File.Exists(SCESYSFolder + "\icon0.png") Then - Dispatcher.BeginInvoke(Sub() NewPS5Game.GameCoverSource = New BitmapImage(New Uri(SCESYSFolder + "\icon0.png", UriKind.RelativeOrAbsolute))) + Dispatcher.BeginInvoke(Sub() + Dim TempBitmapImage = New BitmapImage() + TempBitmapImage.BeginInit() + TempBitmapImage.CacheOption = BitmapCacheOption.OnLoad + TempBitmapImage.CreateOptions = BitmapCreateOptions.IgnoreImageCache + TempBitmapImage.UriSource = New Uri(SCESYSFolder + "\icon0.png", UriKind.RelativeOrAbsolute) + TempBitmapImage.EndInit() + NewPS5Game.GameCoverSource = TempBitmapImage + End Sub) Else If Utils.IsURLValid("https://prosperopatches.com/" + ParamData.TitleId.Trim()) Then URLs.Add("https://prosperopatches.com/" + ParamData.TitleId.Trim()) 'Get the image from prosperopatches End If End If + 'Check for game background If File.Exists(SCESYSFolder + "\pic0.png") Then - Dispatcher.BeginInvoke(Sub() NewPS5Game.GameBGSource = New BitmapImage(New Uri(SCESYSFolder + "\pic0.png", UriKind.RelativeOrAbsolute))) + Dispatcher.BeginInvoke(Sub() + Dim TempBitmapImage = New BitmapImage() + TempBitmapImage.BeginInit() + TempBitmapImage.CacheOption = BitmapCacheOption.OnLoad + TempBitmapImage.CreateOptions = BitmapCreateOptions.IgnoreImageCache + TempBitmapImage.UriSource = New Uri(SCESYSFolder + "\pic0.png", UriKind.RelativeOrAbsolute) + TempBitmapImage.EndInit() + NewPS5Game.GameBGSource = TempBitmapImage + End Sub) End If + 'Check for game soundtrack If File.Exists(SCESYSFolder + "\snd0.at9") Then NewPS5Game.GameSoundFile = SCESYSFolder + "\snd0.at9" End If + Dim MainGamePath As String = Directory.GetParent(ParamFileInfo.FullName).Parent.FullName + Dim ToolTipString As String = "This game includes: " + + 'Check if prx is encrypted + If File.Exists(MainGamePath + "\sce_module\libc.prx") Then + Dim FirstStr As String = "" + Using PRXReader As New FileStream(MainGamePath + "\sce_module\libc.prx", FileMode.Open) + Dim BinReader As New BinaryReader(PRXReader) + FirstStr = BinReader.ReadString() + PRXReader.Close() + End Using + If Not String.IsNullOrEmpty(FirstStr) Then + If FirstStr.Contains("ELF") Then + ToolTipString += vbCrLf + "Decrypted .prx files." + Else + ToolTipString += vbCrLf + "Encrypted .prx files." + End If + End If + End If + 'Check if eboot is encrypted + If File.Exists(MainGamePath + "\eboot.bin") Then + Dim FirstStr As String = "" + Using EBOOTReader As New FileStream(MainGamePath + "\sce_module\libc.prx", FileMode.Open) + Dim BinReader As New BinaryReader(EBOOTReader) + FirstStr = BinReader.ReadString() + EBOOTReader.Close() + End Using + If Not String.IsNullOrEmpty(FirstStr) Then + If FirstStr.Contains("ELF") Then + ToolTipString += vbCrLf + "Decrypted eboot.bin" + Else + ToolTipString += vbCrLf + "Encrypted eboot.bin" + End If + End If + End If + 'Check for some other encrypted files + If File.Exists(SCESYSFolder + "\trophy2\trophy00.UCP") Then + ToolTipString += vbCrLf + "Trophy2: trophy00.UCP" + If File.Exists(SCESYSFolder + "\uds\uds00.ucp") Then + ToolTipString += vbCrLf + "UDS: uds00.ucp" + If File.Exists(SCESYSFolder + "\about\right.sprx") Then + ToolTipString += vbCrLf + "Right: right.sprx" + If File.Exists(SCESYSFolder + "\about\right.sprx.auth_info") Then + ToolTipString += vbCrLf + "Right Auth info: right.sprx.auth_info" + End If + End If + End If + End If + If File.Exists(MainGamePath + "\disc_info.dat") Then + ToolTipString += vbCrLf + "Disc Info: disc_info.dat" + End If + + NewPS5Game.DecFilesIncluded = ToolTipString End If + 'Update progress Dispatcher.BeginInvoke(Sub() NewLoadingWindow.LoadProgressBar.Value += 1) Dispatcher.BeginInvoke(Sub() NewLoadingWindow.LoadStatusTextBlock.Text = "Loading " + NewLoadingWindow.LoadProgressBar.Value.ToString + " of " + FilesCount.ToString()) - If ParamData.ApplicationCategoryType = 0 And ParamData.TitleId.StartsWith("PP") Then - 'Add to the ListView + 'Add to the ListView + If ParamData.ApplicationCategoryType = 0 And ParamData.TitleId.StartsWith("PP") Then 'Games If GamesListView.Dispatcher.CheckAccess() = False Then GamesListView.Dispatcher.BeginInvoke(Sub() GamesListView.Items.Add(NewPS5Game)) Else GamesListView.Items.Add(NewPS5Game) End If - Else + ElseIf ParamData.ApplicationCategoryType = 65536 And ParamData.TitleId.StartsWith("PP") Then 'Media apps If AppsListView.Dispatcher.CheckAccess() = False Then AppsListView.Dispatcher.BeginInvoke(Sub() AppsListView.Items.Add(NewPS5Game)) Else AppsListView.Items.Add(NewPS5Game) End If + Else + If AppsListView.Dispatcher.CheckAccess() = False Then 'NPXS + AppsListView.Dispatcher.BeginInvoke(Sub() AppsListView.Items.Add(NewPS5Game)) + Else + AppsListView.Items.Add(NewPS5Game) + End If End If Next @@ -499,6 +659,872 @@ Public Class PS5Library End If End Sub +#End Region + +#Region "Game Context Menu Actions" + + Private Sub GameCopyToMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles GameCopyToMenuItem.Click + If GamesListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) + If Not String.IsNullOrEmpty(SelectedPS5Game.GameFileOrFolderPath) Then + + Dim FBD As New FolderBrowserDialog() With {.Description = "Where do you want to copy the selected game ?"} + If FBD.ShowDialog() = Forms.DialogResult.OK Then + + Dim NewCopyWindow As New CopyWindow With { + .ShowActivated = True, + .WindowStartupLocation = WindowStartupLocation.CenterScreen, + .BackupDestinationPath = FBD.SelectedPath + "\", + .Title = "Copying " + SelectedPS5Game.GameTitle + " to " + FBD.SelectedPath + Path.GetFileName(SelectedPS5Game.GameFileOrFolderPath), + .BackupPath = SelectedPS5Game.GameFileOrFolderPath + } + + If SelectedPS5Game.GameCoverSource IsNot Nothing Then + NewCopyWindow.GameIcon = SelectedPS5Game.GameCoverSource + End If + + If NewCopyWindow.ShowDialog() = True Then + MsgBox("Game copied with success !", MsgBoxStyle.Information, "Completed") + End If + End If + + End If + End If + End Sub + + Private Sub GamePlayMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles GamePlayMenuItem.Click + If GamesListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) + If SelectedPS5Game.GameSoundFile IsNot Nothing Then + If IsSoundPlaying Then + Utils.StopGameSound() + IsSoundPlaying = False + GamePlayMenuItem.Header = "Play Soundtrack" + GamePlayMenuItem.Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Play-icon.png", UriKind.Relative))} + Else + Utils.PlayGameSound(SelectedPS5Game.GameSoundFile) + IsSoundPlaying = True + GamePlayMenuItem.Header = "Stop Soundtrack" + GamePlayMenuItem.Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Stop-icon.png", UriKind.Relative))} + End If + Else + If IsSoundPlaying Then + Utils.StopGameSound() + IsSoundPlaying = False + GamePlayMenuItem.Header = "Play Soundtrack" + GamePlayMenuItem.Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Play-icon.png", UriKind.Relative))} + Else + MsgBox("No game soundtrack found.", MsgBoxStyle.Information) + End If + End If + End If + End Sub + + Private Sub GameCheckForUpdatesMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles GameCheckForUpdatesMenuItem.Click + If GamesListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) + Dim NewPS5GamePatches As New PS5GamePatches With {.ShowActivated = True, .SearchForGamePatchWithID = SelectedPS5Game.GameID.Split(New String() {"Title ID: "}, StringSplitOptions.None)(1)} + NewPS5GamePatches.Show() + End If + End Sub + + Private Sub GameChangeToGameMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles GameChangeToGameMenuItem.Click + If GamesListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) + If File.Exists(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") Then + Dim JSONData As String = File.ReadAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") + Try + Dim ParamData As PS5Param = JsonConvert.DeserializeObject(Of PS5Param)(JSONData) + ParamData.ApplicationCategoryType = 0 + + Dim RawDataJSON As String = JsonConvert.SerializeObject(ParamData, Formatting.Indented, New JsonSerializerSettings With {.NullValueHandling = NullValueHandling.Ignore}) + File.WriteAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json", RawDataJSON) + SelectedPS5Game.GameCategory = "Type: Game" + + MsgBox("Game type changed!", MsgBoxStyle.Information) + GamesListView.Items.Refresh() + Catch ex As JsonSerializationException + MsgBox("Could not parse the selected param.json file.", MsgBoxStyle.Critical, "Error") + End Try + End If + End If + End Sub + + Private Sub GameChangeToNativeMediaMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles GameChangeToNativeMediaMenuItem.Click + If GamesListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) + If File.Exists(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") Then + Dim JSONData As String = File.ReadAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") + Try + Dim ParamData As PS5Param = JsonConvert.DeserializeObject(Of PS5Param)(JSONData) + ParamData.ApplicationCategoryType = 65536 + + Dim RawDataJSON As String = JsonConvert.SerializeObject(ParamData, Formatting.Indented, New JsonSerializerSettings With {.NullValueHandling = NullValueHandling.Ignore}) + File.WriteAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json", RawDataJSON) + SelectedPS5Game.GameCategory = "Type: Game" + + MsgBox("Game type changed!", MsgBoxStyle.Information) + GamesListView.Items.Refresh() + Catch ex As JsonSerializationException + MsgBox("Could not parse the selected param.json file.", MsgBoxStyle.Critical, "Error") + End Try + End If + End If + End Sub + + Private Sub GameChangeToRNPSMediaMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles GameChangeToRNPSMediaMenuItem.Click + If GamesListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) + If File.Exists(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") Then + Dim JSONData As String = File.ReadAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") + Try + Dim ParamData As PS5Param = JsonConvert.DeserializeObject(Of PS5Param)(JSONData) + ParamData.ApplicationCategoryType = 65792 + + Dim RawDataJSON As String = JsonConvert.SerializeObject(ParamData, Formatting.Indented, New JsonSerializerSettings With {.NullValueHandling = NullValueHandling.Ignore}) + File.WriteAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json", RawDataJSON) + SelectedPS5Game.GameCategory = "Type: Game" + + MsgBox("Game type changed!", MsgBoxStyle.Information) + GamesListView.Items.Refresh() + Catch ex As JsonSerializationException + MsgBox("Could not parse the selected param.json file.", MsgBoxStyle.Critical, "Error") + End Try + End If + End If + End Sub + + Private Sub GameChangeToShellAppMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles GameChangeToShellAppMenuItem.Click + If GamesListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) + If File.Exists(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") Then + Dim JSONData As String = File.ReadAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") + Try + Dim ParamData As PS5Param = JsonConvert.DeserializeObject(Of PS5Param)(JSONData) + ParamData.ApplicationCategoryType = 67108864 + + Dim RawDataJSON As String = JsonConvert.SerializeObject(ParamData, Formatting.Indented, New JsonSerializerSettings With {.NullValueHandling = NullValueHandling.Ignore}) + File.WriteAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json", RawDataJSON) + SelectedPS5Game.GameCategory = "Type: Game" + + MsgBox("Game type changed!", MsgBoxStyle.Information) + GamesListView.Items.Refresh() + Catch ex As JsonSerializationException + MsgBox("Could not parse the selected param.json file.", MsgBoxStyle.Critical, "Error") + End Try + End If + End If + End Sub + + Private Sub GameChangeToShellUIMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles GameChangeToShellUIMenuItem.Click + If GamesListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) + If File.Exists(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") Then + Dim JSONData As String = File.ReadAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") + Try + Dim ParamData As PS5Param = JsonConvert.DeserializeObject(Of PS5Param)(JSONData) + ParamData.ApplicationCategoryType = 16777216 + + Dim RawDataJSON As String = JsonConvert.SerializeObject(ParamData, Formatting.Indented, New JsonSerializerSettings With {.NullValueHandling = NullValueHandling.Ignore}) + File.WriteAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json", RawDataJSON) + SelectedPS5Game.GameCategory = "Type: Game" + + MsgBox("Game type changed!", MsgBoxStyle.Information) + GamesListView.Items.Refresh() + Catch ex As JsonSerializationException + MsgBox("Could not parse the selected param.json file.", MsgBoxStyle.Critical, "Error") + End Try + End If + End If + End Sub + + Private Sub GameChangeToBigDaemonMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles GameChangeToBigDaemonMenuItem.Click + If GamesListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) + If File.Exists(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") Then + Dim JSONData As String = File.ReadAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") + Try + Dim ParamData As PS5Param = JsonConvert.DeserializeObject(Of PS5Param)(JSONData) + ParamData.ApplicationCategoryType = 131584 + + Dim RawDataJSON As String = JsonConvert.SerializeObject(ParamData, Formatting.Indented, New JsonSerializerSettings With {.NullValueHandling = NullValueHandling.Ignore}) + File.WriteAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json", RawDataJSON) + SelectedPS5Game.GameCategory = "Type: Game" + + MsgBox("Game type changed!", MsgBoxStyle.Information) + GamesListView.Items.Refresh() + Catch ex As JsonSerializationException + MsgBox("Could not parse the selected param.json file.", MsgBoxStyle.Critical, "Error") + End Try + End If + End If + End Sub + + Private Sub GameChangeToBuiltInMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles GameChangeToBuiltInMenuItem.Click + If GamesListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) + If File.Exists(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") Then + Dim JSONData As String = File.ReadAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") + Try + Dim ParamData As PS5Param = JsonConvert.DeserializeObject(Of PS5Param)(JSONData) + ParamData.ApplicationCategoryType = 131328 + + Dim RawDataJSON As String = JsonConvert.SerializeObject(ParamData, Formatting.Indented, New JsonSerializerSettings With {.NullValueHandling = NullValueHandling.Ignore}) + File.WriteAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json", RawDataJSON) + SelectedPS5Game.GameCategory = "Type: Game" + + MsgBox("Game type changed!", MsgBoxStyle.Information) + GamesListView.Items.Refresh() + Catch ex As JsonSerializationException + MsgBox("Could not parse the selected param.json file.", MsgBoxStyle.Critical, "Error") + End Try + End If + End If + End Sub + + Private Sub GameChangeToDaemonMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles GameChangeToDaemonMenuItem.Click + If GamesListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) + If File.Exists(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") Then + Dim JSONData As String = File.ReadAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") + Try + Dim ParamData As PS5Param = JsonConvert.DeserializeObject(Of PS5Param)(JSONData) + ParamData.ApplicationCategoryType = 33554432 + + Dim RawDataJSON As String = JsonConvert.SerializeObject(ParamData, Formatting.Indented, New JsonSerializerSettings With {.NullValueHandling = NullValueHandling.Ignore}) + File.WriteAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json", RawDataJSON) + SelectedPS5Game.GameCategory = "Type: Game" + + MsgBox("Game type changed!", MsgBoxStyle.Information) + GamesListView.Items.Refresh() + Catch ex As JsonSerializationException + MsgBox("Could not parse the selected param.json file.", MsgBoxStyle.Critical, "Error") + End Try + End If + End If + End Sub + + Private Sub GameRenameMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles GameRenameMenuItem.Click + If GamesListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) + If File.Exists(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") Then + Dim JSONData As String = File.ReadAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") + Try + Dim ParamData As PS5Param = JsonConvert.DeserializeObject(Of PS5Param)(JSONData) + + 'Set new default language (optional) + If MsgBox("Do you want to change the default language for this game?", MsgBoxStyle.YesNo, "Also change default language?") = MsgBoxResult.Yes Then + Dim NewDefaultLanguage As String = InputBox("Enter a new default language identifier (like en-US, de-DE, fr-FR, es-ES...):", "Change default language", ParamData.LocalizedParameters.EnUS.TitleName) + ParamData.LocalizedParameters.DefaultLanguage = NewDefaultLanguage + End If + + 'Set new title + Dim NewAppTitle As String = InputBox("Enter a new title for this game:", "Change game title", ParamData.LocalizedParameters.EnUS.TitleName) + If ParamData.LocalizedParameters.ArAE IsNot Nothing Then + ParamData.LocalizedParameters.ArAE.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.CsCZ IsNot Nothing Then + ParamData.LocalizedParameters.CsCZ.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.DaDK IsNot Nothing Then + ParamData.LocalizedParameters.DaDK.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.DaDK IsNot Nothing Then + End If + If ParamData.LocalizedParameters.DeDE IsNot Nothing Then + ParamData.LocalizedParameters.DeDE.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.ElGR IsNot Nothing Then + ParamData.LocalizedParameters.ElGR.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.EnGB IsNot Nothing Then + ParamData.LocalizedParameters.EnGB.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.EnUS IsNot Nothing Then + ParamData.LocalizedParameters.EnUS.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.Es419 IsNot Nothing Then + ParamData.LocalizedParameters.Es419.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.FiFI IsNot Nothing Then + ParamData.LocalizedParameters.FiFI.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.FrCA IsNot Nothing Then + ParamData.LocalizedParameters.FrCA.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.FrFR IsNot Nothing Then + ParamData.LocalizedParameters.FrFR.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.HuHU IsNot Nothing Then + ParamData.LocalizedParameters.HuHU.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.IdID IsNot Nothing Then + ParamData.LocalizedParameters.IdID.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.ItIT IsNot Nothing Then + ParamData.LocalizedParameters.ItIT.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.JaJP IsNot Nothing Then + ParamData.LocalizedParameters.JaJP.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.KoKR IsNot Nothing Then + ParamData.LocalizedParameters.KoKR.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.NoNO IsNot Nothing Then + ParamData.LocalizedParameters.NoNO.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.NlNL IsNot Nothing Then + ParamData.LocalizedParameters.NlNL.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.PlPL IsNot Nothing Then + ParamData.LocalizedParameters.PlPL.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.PtBR IsNot Nothing Then + ParamData.LocalizedParameters.PtBR.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.PtPT IsNot Nothing Then + ParamData.LocalizedParameters.PtPT.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.RoRO IsNot Nothing Then + ParamData.LocalizedParameters.RoRO.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.RuRU IsNot Nothing Then + ParamData.LocalizedParameters.RuRU.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.SvSE IsNot Nothing Then + ParamData.LocalizedParameters.SvSE.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.ThTH IsNot Nothing Then + ParamData.LocalizedParameters.ThTH.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.TrTR IsNot Nothing Then + ParamData.LocalizedParameters.TrTR.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.ViVN IsNot Nothing Then + ParamData.LocalizedParameters.ViVN.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.ZhHans IsNot Nothing Then + ParamData.LocalizedParameters.ZhHans.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.ZhHant IsNot Nothing Then + ParamData.LocalizedParameters.ZhHant.TitleName = NewAppTitle + End If + + 'Write back to file + Dim RawDataJSON As String = JsonConvert.SerializeObject(ParamData, Formatting.Indented, New JsonSerializerSettings With {.NullValueHandling = NullValueHandling.Ignore}) + File.WriteAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json", RawDataJSON) + + 'Set new title in GamesListView + SelectedPS5Game.GameTitle = NewAppTitle + + MsgBox("Game renamed!", MsgBoxStyle.Information) + GamesListView.Items.Refresh() + Catch ex As JsonSerializationException + MsgBox("Could not parse the selected param.json file.", MsgBoxStyle.Critical, "Error") + End Try + End If + End If + End Sub + + Private Sub GameChangeIconMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles GameChangeIconMenuItem.Click + If GamesListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) + Dim OFD As New OpenFileDialog() With {.Title = "Select a new icon0.png image for this app", .Filter = "PNG images (*.png)|*.png", .Multiselect = False} + + If OFD.ShowDialog() = Forms.DialogResult.OK Then + 'Move new icon to sce_sys + File.Copy(OFD.FileName, SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\icon0.png", True) + + 'Reload new icon + Dim TempBitmapImage = New BitmapImage() + TempBitmapImage.BeginInit() + TempBitmapImage.CacheOption = BitmapCacheOption.OnLoad + TempBitmapImage.CreateOptions = BitmapCreateOptions.IgnoreImageCache + TempBitmapImage.UriSource = New Uri(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\icon0.png", UriKind.RelativeOrAbsolute) + TempBitmapImage.EndInit() + SelectedPS5Game.GameCoverSource = TempBitmapImage + + GamesListView.Items.Refresh() + End If + End If + End Sub + + Private Sub GameChangeBackgroundMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles GameChangeBackgroundMenuItem.Click + If GamesListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) + Dim OFD As New OpenFileDialog() With {.Title = "Select a new pic0.png image for this app", .Filter = "PNG images (*.png)|*.png", .Multiselect = False} + + If OFD.ShowDialog() = Forms.DialogResult.OK Then + File.Copy(OFD.FileName, SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\pic0.png", True) + + 'Set new background + Dim TempBitmapImage = New BitmapImage() + TempBitmapImage.BeginInit() + TempBitmapImage.CacheOption = BitmapCacheOption.OnLoad + TempBitmapImage.CreateOptions = BitmapCreateOptions.IgnoreImageCache + TempBitmapImage.UriSource = New Uri(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\icon0.png", UriKind.RelativeOrAbsolute) + TempBitmapImage.EndInit() + SelectedPS5Game.GameBGSource = TempBitmapImage + + GamesListView.Items.Refresh() + End If + End If + End Sub + + Private Sub GameChangeSoundtrackMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles GameChangeSoundtrackMenuItem.Click + If GamesListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) + Dim OFD As New OpenFileDialog() With {.Title = "Select a new snd0.at9 soundtrack for this app", .Filter = "AT9 Audio Files (*.at9)|*.at9", .Multiselect = False} + + If IsSoundPlaying Then + MsgBox("A soundtrack is currently playing. Please stop it before changing any soundtrack.", MsgBoxStyle.Information) + Else + 'Set new soundtrack + If OFD.ShowDialog() = Forms.DialogResult.OK Then + File.Copy(OFD.FileName, SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\snd0.at9", True) + End If + End If + End If + End Sub + + Private Sub GameOpenLocationMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles GameOpenLocationMenuItem.Click + If GamesListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) + Process.Start(SelectedPS5Game.GameFileOrFolderPath) + End If + End Sub + +#End Region + +#Region "Apps Context Menu Actions" + + Private Sub AppCopyToMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles AppCopyToMenuItem.Click + If AppsListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(AppsListView.SelectedItem, PS5Game) + If Not String.IsNullOrEmpty(SelectedPS5Game.GameFileOrFolderPath) Then + + Dim FBD As New FolderBrowserDialog() With {.Description = "Where do you want to copy the selected app ?"} + If FBD.ShowDialog() = Forms.DialogResult.OK Then + + Dim NewCopyWindow As New CopyWindow With { + .ShowActivated = True, + .WindowStartupLocation = WindowStartupLocation.CenterScreen, + .BackupDestinationPath = FBD.SelectedPath + "\", + .Title = "Copying " + SelectedPS5Game.GameTitle + " to " + FBD.SelectedPath + Path.GetFileName(SelectedPS5Game.GameFileOrFolderPath), + .BackupPath = SelectedPS5Game.GameFileOrFolderPath + } + + If SelectedPS5Game.GameCoverSource IsNot Nothing Then + NewCopyWindow.GameIcon = SelectedPS5Game.GameCoverSource + End If + + If NewCopyWindow.ShowDialog() = True Then + MsgBox("Game copied with success !", MsgBoxStyle.Information, "Completed") + End If + End If + + End If + End If + End Sub + + Private Sub AppPlayMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles AppPlayMenuItem.Click + If AppsListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(AppsListView.SelectedItem, PS5Game) + If SelectedPS5Game.GameSoundFile IsNot Nothing Then + If IsSoundPlaying Then + Utils.StopGameSound() + IsSoundPlaying = False + GamePlayMenuItem.Header = "Play Soundtrack" + GamePlayMenuItem.Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Play-icon.png", UriKind.Relative))} + Else + Utils.PlayGameSound(SelectedPS5Game.GameSoundFile) + IsSoundPlaying = True + GamePlayMenuItem.Header = "Stop Soundtrack" + GamePlayMenuItem.Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Stop-icon.png", UriKind.Relative))} + End If + Else + If IsSoundPlaying Then + Utils.StopGameSound() + IsSoundPlaying = False + GamePlayMenuItem.Header = "Play Soundtrack" + GamePlayMenuItem.Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Play-icon.png", UriKind.Relative))} + Else + MsgBox("No app soundtrack found.", MsgBoxStyle.Information) + End If + End If + End If + End Sub + + Private Sub AppCheckForUpdatesMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles AppCheckForUpdatesMenuItem.Click + If AppsListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(AppsListView.SelectedItem, PS5Game) + If Not SelectedPS5Game.GameID.StartsWith("NPXS") Then + Dim NewPS5GamePatches As New PS5GamePatches With {.ShowActivated = True, .SearchForGamePatchWithID = SelectedPS5Game.GameID.Split(New String() {"Title ID: "}, StringSplitOptions.None)(1)} + NewPS5GamePatches.Show() + Else + MsgBox("Updates can only be checked for retail games and apps.", MsgBoxStyle.Information) + End If + End If + End Sub + + Private Sub AppChangeToGameMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles AppChangeToGameMenuItem.Click + If AppsListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(AppsListView.SelectedItem, PS5Game) + If File.Exists(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") Then + Dim JSONData As String = File.ReadAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") + Try + Dim ParamData As PS5Param = JsonConvert.DeserializeObject(Of PS5Param)(JSONData) + ParamData.ApplicationCategoryType = 0 + + Dim RawDataJSON As String = JsonConvert.SerializeObject(ParamData, Formatting.Indented, New JsonSerializerSettings With {.NullValueHandling = NullValueHandling.Ignore}) + File.WriteAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json", RawDataJSON) + SelectedPS5Game.GameCategory = "Type: Game" + + MsgBox("App type changed!", MsgBoxStyle.Information) + AppsListView.Items.Refresh() + Catch ex As JsonSerializationException + MsgBox("Could not parse the selected param.json file.", MsgBoxStyle.Critical, "Error") + End Try + End If + End If + End Sub + + Private Sub AppChangeToNativeMediaMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles AppChangeToNativeMediaMenuItem.Click + If AppsListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(AppsListView.SelectedItem, PS5Game) + If File.Exists(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") Then + Dim JSONData As String = File.ReadAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") + Try + Dim ParamData As PS5Param = JsonConvert.DeserializeObject(Of PS5Param)(JSONData) + ParamData.ApplicationCategoryType = 65536 + + Dim RawDataJSON As String = JsonConvert.SerializeObject(ParamData, Formatting.Indented, New JsonSerializerSettings With {.NullValueHandling = NullValueHandling.Ignore}) + File.WriteAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json", RawDataJSON) + SelectedPS5Game.GameCategory = "Type: Native Media App" + + MsgBox("App type changed!", MsgBoxStyle.Information) + AppsListView.Items.Refresh() + Catch ex As JsonSerializationException + MsgBox("Could not parse the selected param.json file.", MsgBoxStyle.Critical, "Error") + End Try + End If + End If + End Sub + + Private Sub AppChangeToRNPSMediaMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles AppChangeToRNPSMediaMenuItem.Click + If AppsListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(AppsListView.SelectedItem, PS5Game) + If File.Exists(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") Then + Dim JSONData As String = File.ReadAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") + Try + Dim ParamData As PS5Param = JsonConvert.DeserializeObject(Of PS5Param)(JSONData) + ParamData.ApplicationCategoryType = 65792 + + Dim RawDataJSON As String = JsonConvert.SerializeObject(ParamData, Formatting.Indented, New JsonSerializerSettings With {.NullValueHandling = NullValueHandling.Ignore}) + File.WriteAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json", RawDataJSON) + SelectedPS5Game.GameCategory = "Type: RNPS Media App" + + MsgBox("App type changed!", MsgBoxStyle.Information) + AppsListView.Items.Refresh() + Catch ex As JsonSerializationException + MsgBox("Could not parse the selected param.json file.", MsgBoxStyle.Critical, "Error") + End Try + End If + End If + End Sub + + Private Sub AppChangeToBigDaemonMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles AppChangeToBigDaemonMenuItem.Click + If AppsListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(AppsListView.SelectedItem, PS5Game) + If File.Exists(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") Then + Dim JSONData As String = File.ReadAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") + Try + Dim ParamData As PS5Param = JsonConvert.DeserializeObject(Of PS5Param)(JSONData) + ParamData.ApplicationCategoryType = 131584 + + Dim RawDataJSON As String = JsonConvert.SerializeObject(ParamData, Formatting.Indented, New JsonSerializerSettings With {.NullValueHandling = NullValueHandling.Ignore}) + File.WriteAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json", RawDataJSON) + SelectedPS5Game.GameCategory = "Type: Big Daemon" + + MsgBox("App type changed!", MsgBoxStyle.Information) + AppsListView.Items.Refresh() + Catch ex As JsonSerializationException + MsgBox("Could not parse the selected param.json file.", MsgBoxStyle.Critical, "Error") + End Try + End If + End If + End Sub + + Private Sub AppChangeToBuiltInMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles AppChangeToBuiltInMenuItem.Click + If AppsListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(AppsListView.SelectedItem, PS5Game) + If File.Exists(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") Then + Dim JSONData As String = File.ReadAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") + Try + Dim ParamData As PS5Param = JsonConvert.DeserializeObject(Of PS5Param)(JSONData) + ParamData.ApplicationCategoryType = 131328 + + Dim RawDataJSON As String = JsonConvert.SerializeObject(ParamData, Formatting.Indented, New JsonSerializerSettings With {.NullValueHandling = NullValueHandling.Ignore}) + File.WriteAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json", RawDataJSON) + SelectedPS5Game.GameCategory = "Type: System Built-In" + + MsgBox("App type changed!", MsgBoxStyle.Information) + AppsListView.Items.Refresh() + Catch ex As JsonSerializationException + MsgBox("Could not parse the selected param.json file.", MsgBoxStyle.Critical, "Error") + End Try + End If + End If + End Sub + + Private Sub AppChangeToDaemonMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles AppChangeToDaemonMenuItem.Click + If AppsListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(AppsListView.SelectedItem, PS5Game) + If File.Exists(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") Then + Dim JSONData As String = File.ReadAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") + Try + Dim ParamData As PS5Param = JsonConvert.DeserializeObject(Of PS5Param)(JSONData) + ParamData.ApplicationCategoryType = 33554432 + + Dim RawDataJSON As String = JsonConvert.SerializeObject(ParamData, Formatting.Indented, New JsonSerializerSettings With {.NullValueHandling = NullValueHandling.Ignore}) + File.WriteAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json", RawDataJSON) + SelectedPS5Game.GameCategory = "Type: Daemon" + + MsgBox("App type changed!", MsgBoxStyle.Information) + AppsListView.Items.Refresh() + Catch ex As JsonSerializationException + MsgBox("Could not parse the selected param.json file.", MsgBoxStyle.Critical, "Error") + End Try + End If + End If + End Sub + + Private Sub AppChangeToShellAppMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles AppChangeToShellAppMenuItem.Click + If AppsListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(AppsListView.SelectedItem, PS5Game) + If File.Exists(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") Then + Dim JSONData As String = File.ReadAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") + Try + Dim ParamData As PS5Param = JsonConvert.DeserializeObject(Of PS5Param)(JSONData) + ParamData.ApplicationCategoryType = 67108864 + + Dim RawDataJSON As String = JsonConvert.SerializeObject(ParamData, Formatting.Indented, New JsonSerializerSettings With {.NullValueHandling = NullValueHandling.Ignore}) + File.WriteAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json", RawDataJSON) + SelectedPS5Game.GameCategory = "Type: ShellApp" + + MsgBox("App type changed!", MsgBoxStyle.Information) + AppsListView.Items.Refresh() + Catch ex As JsonSerializationException + MsgBox("Could not parse the selected param.json file.", MsgBoxStyle.Critical, "Error") + End Try + End If + End If + End Sub + + Private Sub AppChangeToShellUIMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles AppChangeToShellUIMenuItem.Click + If AppsListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(AppsListView.SelectedItem, PS5Game) + If File.Exists(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") Then + Dim JSONData As String = File.ReadAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") + Try + Dim ParamData As PS5Param = JsonConvert.DeserializeObject(Of PS5Param)(JSONData) + ParamData.ApplicationCategoryType = 16777216 + + Dim RawDataJSON As String = JsonConvert.SerializeObject(ParamData, Formatting.Indented, New JsonSerializerSettings With {.NullValueHandling = NullValueHandling.Ignore}) + File.WriteAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json", RawDataJSON) + SelectedPS5Game.GameCategory = "Type: ShellUI" + + MsgBox("App type changed!", MsgBoxStyle.Information) + AppsListView.Items.Refresh() + Catch ex As JsonSerializationException + MsgBox("Could not parse the selected param.json file.", MsgBoxStyle.Critical, "Error") + End Try + End If + End If + End Sub + + Private Sub AppRenameMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles AppRenameMenuItem.Click + If AppsListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(AppsListView.SelectedItem, PS5Game) + If File.Exists(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") Then + Dim JSONData As String = File.ReadAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json") + Try + Dim ParamData As PS5Param = JsonConvert.DeserializeObject(Of PS5Param)(JSONData) + + If MsgBox("Do you want to change the default language for this app?", MsgBoxStyle.YesNo, "Also change default language?") = MsgBoxResult.Yes Then + Dim NewDefaultLanguage As String = InputBox("Enter a new default language identifier (like en-US, de-DE, fr-FR, es-ES...):", "Change default language", ParamData.LocalizedParameters.EnUS.TitleName) + ParamData.LocalizedParameters.DefaultLanguage = NewDefaultLanguage + End If + + Dim NewAppTitle As String = InputBox("Enter a new title for this app:", "Change app title", ParamData.LocalizedParameters.EnUS.TitleName) + If ParamData.LocalizedParameters.ArAE IsNot Nothing Then + ParamData.LocalizedParameters.ArAE.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.CsCZ IsNot Nothing Then + ParamData.LocalizedParameters.CsCZ.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.DaDK IsNot Nothing Then + ParamData.LocalizedParameters.DaDK.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.DaDK IsNot Nothing Then + End If + If ParamData.LocalizedParameters.DeDE IsNot Nothing Then + ParamData.LocalizedParameters.DeDE.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.ElGR IsNot Nothing Then + ParamData.LocalizedParameters.ElGR.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.EnGB IsNot Nothing Then + ParamData.LocalizedParameters.EnGB.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.EnUS IsNot Nothing Then + ParamData.LocalizedParameters.EnUS.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.Es419 IsNot Nothing Then + ParamData.LocalizedParameters.Es419.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.FiFI IsNot Nothing Then + ParamData.LocalizedParameters.FiFI.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.FrCA IsNot Nothing Then + ParamData.LocalizedParameters.FrCA.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.FrFR IsNot Nothing Then + ParamData.LocalizedParameters.FrFR.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.HuHU IsNot Nothing Then + ParamData.LocalizedParameters.HuHU.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.IdID IsNot Nothing Then + ParamData.LocalizedParameters.IdID.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.ItIT IsNot Nothing Then + ParamData.LocalizedParameters.ItIT.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.JaJP IsNot Nothing Then + ParamData.LocalizedParameters.JaJP.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.KoKR IsNot Nothing Then + ParamData.LocalizedParameters.KoKR.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.NoNO IsNot Nothing Then + ParamData.LocalizedParameters.NoNO.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.NlNL IsNot Nothing Then + ParamData.LocalizedParameters.NlNL.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.PlPL IsNot Nothing Then + ParamData.LocalizedParameters.PlPL.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.PtBR IsNot Nothing Then + ParamData.LocalizedParameters.PtBR.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.PtPT IsNot Nothing Then + ParamData.LocalizedParameters.PtPT.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.RoRO IsNot Nothing Then + ParamData.LocalizedParameters.RoRO.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.RuRU IsNot Nothing Then + ParamData.LocalizedParameters.RuRU.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.SvSE IsNot Nothing Then + ParamData.LocalizedParameters.SvSE.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.ThTH IsNot Nothing Then + ParamData.LocalizedParameters.ThTH.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.TrTR IsNot Nothing Then + ParamData.LocalizedParameters.TrTR.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.ViVN IsNot Nothing Then + ParamData.LocalizedParameters.ViVN.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.ZhHans IsNot Nothing Then + ParamData.LocalizedParameters.ZhHans.TitleName = NewAppTitle + End If + If ParamData.LocalizedParameters.ZhHant IsNot Nothing Then + ParamData.LocalizedParameters.ZhHant.TitleName = NewAppTitle + End If + + Dim RawDataJSON As String = JsonConvert.SerializeObject(ParamData, Formatting.Indented, New JsonSerializerSettings With {.NullValueHandling = NullValueHandling.Ignore}) + File.WriteAllText(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\param.json", RawDataJSON) + SelectedPS5Game.GameTitle = NewAppTitle + + MsgBox("App renamed!", MsgBoxStyle.Information) + AppsListView.Items.Refresh() + Catch ex As JsonSerializationException + MsgBox("Could not parse the selected param.json file.", MsgBoxStyle.Critical, "Error") + End Try + End If + End If + End Sub + + Private Sub AppChangeIconMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles AppChangeIconMenuItem.Click + If AppsListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(AppsListView.SelectedItem, PS5Game) + Dim OFD As New OpenFileDialog() With {.Title = "Select a new icon0.png image for this app", .Filter = "PNG images (*.png)|*.png", .Multiselect = False} + + If OFD.ShowDialog() = Forms.DialogResult.OK Then + 'Move new icon to sce_sys + File.Copy(OFD.FileName, SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\icon0.png", True) + + 'Reload new icon + Dim TempBitmapImage = New BitmapImage() + TempBitmapImage.BeginInit() + TempBitmapImage.CacheOption = BitmapCacheOption.OnLoad + TempBitmapImage.CreateOptions = BitmapCreateOptions.IgnoreImageCache + TempBitmapImage.UriSource = New Uri(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\icon0.png", UriKind.RelativeOrAbsolute) + TempBitmapImage.EndInit() + SelectedPS5Game.GameCoverSource = TempBitmapImage + + AppsListView.Items.Refresh() + End If + End If + End Sub + + Private Sub AppChangeBackgroundMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles AppChangeBackgroundMenuItem.Click + If AppsListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(AppsListView.SelectedItem, PS5Game) + Dim OFD As New OpenFileDialog() With {.Title = "Select a new pic0.png image for this app", .Filter = "PNG images (*.png)|*.png", .Multiselect = False} + + If OFD.ShowDialog() = Forms.DialogResult.OK Then + File.Copy(OFD.FileName, SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\pic0.png", True) + + 'Set new background + Dim TempBitmapImage = New BitmapImage() + TempBitmapImage.BeginInit() + TempBitmapImage.CacheOption = BitmapCacheOption.OnLoad + TempBitmapImage.CreateOptions = BitmapCreateOptions.IgnoreImageCache + TempBitmapImage.UriSource = New Uri(SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\icon0.png", UriKind.RelativeOrAbsolute) + TempBitmapImage.EndInit() + SelectedPS5Game.GameBGSource = TempBitmapImage + End If + End If + End Sub + + Private Sub AppChangeSoundtrackMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles AppChangeSoundtrackMenuItem.Click + If AppsListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(AppsListView.SelectedItem, PS5Game) + Dim OFD As New OpenFileDialog() With {.Title = "Select a new snd0.at9 soundtrack for this app", .Filter = "AT9 Audio Files (*.at9)|*.at9", .Multiselect = False} + + If IsSoundPlaying Then + MsgBox("A soundtrack is currently playing. Please stop it before changing any soundtrack.", MsgBoxStyle.Information) + Else + If OFD.ShowDialog() = Forms.DialogResult.OK Then + File.Copy(OFD.FileName, SelectedPS5Game.GameFileOrFolderPath + "\sce_sys\snd0.at9", True) + End If + End If + End If + End Sub + + Private Sub AppOpenLocationMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles AppOpenLocationMenuItem.Click + If AppsListView.SelectedItem IsNot Nothing Then + Dim SelectedPS5Game As PS5Game = CType(AppsListView.SelectedItem, PS5Game) + Process.Start(SelectedPS5Game.GameFileOrFolderPath) + End If + End Sub + #End Region Private Sub LoadFolderMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles LoadFolderMenuItem.Click @@ -536,6 +1562,25 @@ Public Class PS5Library End If End Sub + Private Sub OpenFolderMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles OpenFolderMenuItem.Click + Dim FBD As New Forms.FolderBrowserDialog() With {.Description = "Select your PS5 games & apps folder"} + + If FBD.ShowDialog() = Forms.DialogResult.OK Then + GamesListView.Items.Clear() + + FilesCount = 0 + FilesCount += Directory.GetFiles(FBD.SelectedPath, "*_sc.pkg", SearchOption.AllDirectories).Count + FilesCount += Directory.GetFiles(FBD.SelectedPath, "param.json", SearchOption.AllDirectories).Count + + NewLoadingWindow = New SyncWindow() With {.Title = "Loading PS5 games & apps", .ShowActivated = True} + NewLoadingWindow.LoadProgressBar.Maximum = FilesCount + NewLoadingWindow.LoadStatusTextBlock.Text = "Loading file 1 of " + FilesCount.ToString() + NewLoadingWindow.Show() + + GameLoaderWorker.RunWorkerAsync(New GameLoaderArgs() With {.Type = LoadType.LocalFolder, .FolderPath = FBD.SelectedPath}) + End If + End Sub + Private Sub PS5MenuIPTextChanged(sender As Object, e As RoutedEventArgs) ConsoleIP = NewPS5Menu.SharedConsoleAddress.Split(":"c)(0) ConsolePort = NewPS5Menu.SharedConsoleAddress.Split(":"c)(1) @@ -605,92 +1650,4 @@ Public Class PS5Library Return TotalSize End Function - Private Sub OpenFolderMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles OpenFolderMenuItem.Click - Dim FBD As New Forms.FolderBrowserDialog() With {.Description = "Select your PS5 games & apps folder"} - - If FBD.ShowDialog() = Forms.DialogResult.OK Then - GamesListView.Items.Clear() - - FilesCount = 0 - FilesCount += Directory.GetFiles(FBD.SelectedPath, "*_sc.pkg", SearchOption.AllDirectories).Count - FilesCount += Directory.GetFiles(FBD.SelectedPath, "param.json", SearchOption.AllDirectories).Count - - NewLoadingWindow = New SyncWindow() With {.Title = "Loading PS5 games & apps", .ShowActivated = True} - NewLoadingWindow.LoadProgressBar.Maximum = FilesCount - NewLoadingWindow.LoadStatusTextBlock.Text = "Loading file 1 of " + FilesCount.ToString() - NewLoadingWindow.Show() - - GameLoaderWorker.RunWorkerAsync(New GameLoaderArgs() With {.Type = LoadType.LocalFolder, .FolderPath = FBD.SelectedPath}) - End If - End Sub - - Private Sub CopyToMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles CopyToMenuItem.Click - - If GamesListView.SelectedItem IsNot Nothing Then - - Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) - If Not String.IsNullOrEmpty(SelectedPS5Game.GameFileOrFolderPath) Then - - Dim FBD As New FolderBrowserDialog() With {.Description = "Where do you want to copy the selected game ?"} - If FBD.ShowDialog() = Forms.DialogResult.OK Then - - Dim NewCopyWindow As New CopyWindow With { - .ShowActivated = True, - .WindowStartupLocation = WindowStartupLocation.CenterScreen, - .BackupDestinationPath = FBD.SelectedPath + "\", - .Title = "Copying " + SelectedPS5Game.GameTitle + " to " + FBD.SelectedPath + Path.GetFileName(SelectedPS5Game.GameFileOrFolderPath), - .BackupPath = SelectedPS5Game.GameFileOrFolderPath - } - - If SelectedPS5Game.GameCoverSource IsNot Nothing Then - NewCopyWindow.GameIcon = SelectedPS5Game.GameCoverSource - End If - - If NewCopyWindow.ShowDialog() = True Then - MsgBox("Game copied with success !", MsgBoxStyle.Information, "Completed") - End If - End If - - End If - - End If - - End Sub - - Private Sub PlayMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles PlayMenuItem.Click - If GamesListView.SelectedItem IsNot Nothing Then - Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) - If SelectedPS5Game.GameSoundFile IsNot Nothing Then - If IsSoundPlaying Then - Utils.StopGameSound() - IsSoundPlaying = False - PlayMenuItem.Header = "Play Soundtrack" - PlayMenuItem.Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Play-icon.png", UriKind.Relative))} - Else - Utils.PlayGameSound(SelectedPS5Game.GameSoundFile) - IsSoundPlaying = True - PlayMenuItem.Header = "Stop Soundtrack" - PlayMenuItem.Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Stop-icon.png", UriKind.Relative))} - End If - Else - If IsSoundPlaying Then - Utils.StopGameSound() - IsSoundPlaying = False - PlayMenuItem.Header = "Play Soundtrack" - PlayMenuItem.Icon = New Controls.Image() With {.Source = New BitmapImage(New Uri("/Images/Play-icon.png", UriKind.Relative))} - Else - MsgBox("No game soundtrack found.", MsgBoxStyle.Information) - End If - End If - End If - End Sub - - Private Sub CheckForUpdatesMenuItem_Click(sender As Object, e As RoutedEventArgs) Handles CheckForUpdatesMenuItem.Click - If GamesListView.SelectedItem IsNot Nothing Then - Dim SelectedPS5Game As PS5Game = CType(GamesListView.SelectedItem, PS5Game) - Dim NewPS5GamePatches As New PS5GamePatches With {.ShowActivated = True, .SearchForGamePatchWithID = SelectedPS5Game.GameID.Split(New String() {"Title ID: "}, StringSplitOptions.None)(1)} - NewPS5GamePatches.Show() - End If - End Sub - End Class