Skip to content
This repository was archived by the owner on Jun 13, 2026. It is now read-only.

Commit 3dc9d6b

Browse files
committed
Update v2.3
- Game Library: Use different method to load BitmapImage - Game Library: Try to load game cover from different source if PSXDatacenter has no data for selected game - Game Library: Try to load game cover from different source if PSXDatacenter has no cover but only infos - Game Library: Fixed a possible crash when loading data from PSXDatacenter - Game Partition Manager: Fixed a possible crash when unmount a game partition - General: Comboboxes now show the project's file name (without extension) instead of the full path - Comboboxes now use the new class 'ComboBoxProjectItem' and hold the full path in the ComboBoxProjectItem.ProjectFile property - General: New application icon - General: Pass MountedDrive completely to other windows - General: Fixed Dokan Library installation detection for latest drivers - General: Fixed a crash when installing homebrew - Homebrew Editor: Fixed a possible crash when saving homebrew resources
1 parent 135e2a5 commit 3dc9d6b

15 files changed

Lines changed: 946 additions & 782 deletions
67.4 MB
Binary file not shown.

PSX XMB Manager.sln

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ Global
1313
Release|x64 = Release|x64
1414
EndGlobalSection
1515
GlobalSection(ProjectConfigurationPlatforms) = postSolution
16-
{5FE97695-C030-43A2-9AF5-6770C5A0695A}.Debug|Any CPU.ActiveCfg = Release|Any CPU
17-
{5FE97695-C030-43A2-9AF5-6770C5A0695A}.Debug|Any CPU.Build.0 = Release|Any CPU
16+
{5FE97695-C030-43A2-9AF5-6770C5A0695A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17+
{5FE97695-C030-43A2-9AF5-6770C5A0695A}.Debug|Any CPU.Build.0 = Debug|Any CPU
1818
{5FE97695-C030-43A2-9AF5-6770C5A0695A}.Debug|x64.ActiveCfg = Debug|x64
1919
{5FE97695-C030-43A2-9AF5-6770C5A0695A}.Debug|x64.Build.0 = Debug|x64
2020
{5FE97695-C030-43A2-9AF5-6770C5A0695A}.Release|Any CPU.ActiveCfg = Release|Any CPU

PSX XMB Manager/AppEditor.xaml.vb

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,24 +28,26 @@ Public Class AppEditor
2828

2929
Private Sub SaveButton_Click(sender As Object, e As RoutedEventArgs) Handles SaveButton.Click
3030
'Save selected XMB cover as compressed PNG
31-
If CoverPictureBox.Tag IsNot Nothing And Not CoverPictureBox.Tag.ToString = ProjectDirectory + "\res\jkt_002.png" Then
32-
Dim Quantizer As New WuQuantizer()
33-
Dim ResizedBitmap As New Bitmap(CType(Image.FromFile(CoverPictureBox.Tag.ToString), Bitmap), New Size(74, 108))
34-
35-
If ResizedBitmap.PixelFormat <> Imaging.PixelFormat.Format32bppArgb Then
36-
ConvertTo32bppAndDisposeOriginal(ResizedBitmap)
31+
If CoverPictureBox.Tag IsNot Nothing Then
32+
If CoverPictureBox.Tag.ToString() = ProjectDirectory + "\res\jkt_002.png" = False Then
33+
Dim Quantizer As New WuQuantizer()
34+
Dim ResizedBitmap As New Bitmap(CType(Image.FromFile(CoverPictureBox.Tag.ToString), Bitmap), New Size(74, 108))
35+
36+
If ResizedBitmap.PixelFormat <> Imaging.PixelFormat.Format32bppArgb Then
37+
ConvertTo32bppAndDisposeOriginal(ResizedBitmap)
38+
End If
39+
40+
Try
41+
Using CompressedImage = Quantizer.QuantizeImage(ResizedBitmap)
42+
CompressedImage.Save(ProjectDirectory + "\res\jkt_001.png", Imaging.ImageFormat.Png)
43+
CompressedImage.Save(ProjectDirectory + "\res\jkt_002.png", Imaging.ImageFormat.Png)
44+
End Using
45+
Catch ex As Exception
46+
MsgBox("Could not compress PNG." + vbCrLf + ex.Message)
47+
Finally
48+
ResizedBitmap.Dispose()
49+
End Try
3750
End If
38-
39-
Try
40-
Using CompressedImage = Quantizer.QuantizeImage(ResizedBitmap)
41-
CompressedImage.Save(ProjectDirectory + "\res\jkt_001.png", Imaging.ImageFormat.Png)
42-
CompressedImage.Save(ProjectDirectory + "\res\jkt_002.png", Imaging.ImageFormat.Png)
43-
End Using
44-
Catch ex As Exception
45-
MsgBox("Could not compress PNG." + vbCrLf + ex.Message)
46-
Finally
47-
ResizedBitmap.Dispose()
48-
End Try
4951
End If
5052

5153
'Write info.sys to res directory
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
Imports System.ComponentModel
2+
3+
Public Class ComboBoxProjectItem
4+
5+
Implements INotifyPropertyChanged
6+
7+
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
8+
9+
Public Sub NotifyPropertyChanged(propName As String)
10+
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
11+
End Sub
12+
13+
Private _ProjectFile As String
14+
Private _ProjectName As String
15+
16+
Public Property ProjectName As String
17+
Get
18+
Return _ProjectName
19+
End Get
20+
Set
21+
_ProjectName = Value
22+
NotifyPropertyChanged("ProjectName")
23+
End Set
24+
End Property
25+
26+
Public Property ProjectFile As String
27+
Get
28+
Return _ProjectFile
29+
End Get
30+
Set
31+
_ProjectFile = Value
32+
NotifyPropertyChanged("ProjectFile")
33+
End Set
34+
End Property
35+
36+
End Class

PSX XMB Manager/GameLibrary.xaml.vb

Lines changed: 105 additions & 77 deletions
Large diffs are not rendered by default.

PSX XMB Manager/GamePartitionManager.xaml.vb

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@ Imports System.IO
33
Imports System.Net
44
Imports System.Windows.Forms
55
Imports nQuant
6+
Imports PSX_XMB_Manager.Structs
67

78
Public Class GamePartitionManager
89

10+
Public MountedDrive As MountedPSXDrive
911
Public AssociatedDriveLetter As String
1012
Public AssociatedPartition As String
11-
Dim Unmounted As Boolean = False
1213

14+
Private Unmounted As Boolean = False
1315
Private TextboxChangesDictionary As New Dictionary(Of TextBox, String)
1416
Private CheckboxChangesDictionary As New Dictionary(Of CheckBox, Boolean?)
1517
Private ImageChangesDictionary As New Dictionary(Of Image, ImageSource)
@@ -19,6 +21,10 @@ Public Class GamePartitionManager
1921
Dim WithEvents PartitionLoaderWorker As New BackgroundWorker() With {.WorkerReportsProgress = True}
2022
Dim WithEvents ContentDownloader As New WebClient()
2123

24+
Private Sub GamePartitionManager_ContentRendered(sender As Object, e As EventArgs) Handles Me.ContentRendered
25+
PartitionLoaderWorker.RunWorkerAsync()
26+
End Sub
27+
2228
Private Sub GamePartitionManager_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
2329
If Unmounted = False Then
2430
If MsgBox("Do you want to keep the game partition mounted ? This will speed up reading the partition again.", MsgBoxStyle.YesNo, "Keep mounted ?") = MsgBoxResult.No Then
@@ -29,17 +35,31 @@ Public Class GamePartitionManager
2935
End Sub
3036

3137
Private Sub UnMountPartition(VolumeLabel As String)
32-
Using DokanCTL As New Process()
33-
DokanCTL.StartInfo.FileName = My.Computer.FileSystem.SpecialDirectories.ProgramFiles + "\Dokan\DokanLibrary-2.0.6\dokanctl.exe"
34-
DokanCTL.StartInfo.Arguments = "/u " + VolumeLabel
35-
DokanCTL.StartInfo.UseShellExecute = False
36-
DokanCTL.StartInfo.CreateNoWindow = True
37-
DokanCTL.Start()
38-
End Using
39-
End Sub
40-
41-
Private Sub GamePartitionManager_ContentRendered(sender As Object, e As EventArgs) Handles Me.ContentRendered
42-
PartitionLoaderWorker.RunWorkerAsync()
38+
If Directory.Exists(My.Computer.FileSystem.SpecialDirectories.ProgramFiles + "\Dokan") Then
39+
'Get the Dokan Library folder
40+
Dim DokanLibraryFolder As String = ""
41+
For Each Folder In Directory.GetDirectories(My.Computer.FileSystem.SpecialDirectories.ProgramFiles + "\Dokan")
42+
Dim FolderInfo As New DirectoryInfo(Folder)
43+
If FolderInfo.Name.Contains("DokanLibrary") Or FolderInfo.Name.Contains("Dokan Library") Then
44+
DokanLibraryFolder = Folder
45+
Exit For
46+
End If
47+
Next
48+
49+
If Not String.IsNullOrEmpty(DokanLibraryFolder) AndAlso File.Exists(DokanLibraryFolder + "\dokanctl.exe") Then
50+
Using DokanCTL As New Process()
51+
DokanCTL.StartInfo.FileName = DokanLibraryFolder + "\dokanctl.exe"
52+
DokanCTL.StartInfo.Arguments = "/u " + VolumeLabel
53+
DokanCTL.StartInfo.UseShellExecute = False
54+
DokanCTL.StartInfo.CreateNoWindow = True
55+
DokanCTL.Start()
56+
End Using
57+
Else
58+
MsgBox("Could not unmount the game partition." + vbCrLf + "Cannot find dokanctl.exe at " + My.Computer.FileSystem.SpecialDirectories.ProgramFiles + "\Dokan Library...", MsgBoxStyle.Critical, "Error while unmounting")
59+
End If
60+
Else
61+
MsgBox("Could not unmount the game partition." + vbCrLf + "Cannot find Dokan Library at " + My.Computer.FileSystem.SpecialDirectories.ProgramFiles + "\Dokan Library", MsgBoxStyle.Critical, "Error while unmounting")
62+
End If
4363
End Sub
4464

4565
Private Sub GamePartitionManager_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
@@ -328,7 +348,7 @@ Public Class GamePartitionManager
328348
Dim HDLDumpOutput As String = ""
329349
Using HDLDump As New Process()
330350
HDLDump.StartInfo.FileName = "hdl_dump.exe"
331-
HDLDump.StartInfo.Arguments = "modify_header " + NewMainWindow.MountedDrive.HDLDriveName + " " + AssociatedPartition
351+
HDLDump.StartInfo.Arguments = "modify_header " + MountedDrive.HDLDriveName + " " + AssociatedPartition
332352
HDLDump.StartInfo.RedirectStandardOutput = True
333353
HDLDump.StartInfo.UseShellExecute = False
334354
HDLDump.StartInfo.CreateNoWindow = True
@@ -342,7 +362,7 @@ Public Class GamePartitionManager
342362
If Not HDLDumpOutput.Contains("partition not found:") Then
343363
'Set the mkdir & put commands
344364
Using CommandFileWriter As New StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "Tools\cmdlist\push.txt", False)
345-
CommandFileWriter.WriteLine("device " + NewMainWindow.MountedDrive.DriveID)
365+
CommandFileWriter.WriteLine("device " + MountedDrive.DriveID)
346366
CommandFileWriter.WriteLine("mount " + AssociatedPartition)
347367
CommandFileWriter.WriteLine("mkdir res") 'continues if it already exists - useful if not present yet
348368
CommandFileWriter.WriteLine("cd res")
@@ -593,7 +613,7 @@ Public Class GamePartitionManager
593613
Dim HDLDumpOutput As String = ""
594614
Using HDLDump As New Process()
595615
HDLDump.StartInfo.FileName = "hdl_dump.exe"
596-
HDLDump.StartInfo.Arguments = "modify_header " + NewMainWindow.MountedDrive.HDLDriveName + " " + AssociatedPartition
616+
HDLDump.StartInfo.Arguments = "modify_header " + MountedDrive.HDLDriveName + " " + AssociatedPartition
597617
HDLDump.StartInfo.RedirectStandardOutput = True
598618
HDLDump.StartInfo.UseShellExecute = False
599619
HDLDump.StartInfo.CreateNoWindow = True

PSX XMB Manager/My Project/AssemblyInfo.vb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Imports System.Windows
1515
<Assembly: AssemblyDescription("Install and manage homebrew & games on the PSX DESR.")>
1616
<Assembly: AssemblyCompany("SvenGDK")>
1717
<Assembly: AssemblyProduct("PSX XMB Manager")>
18-
<Assembly: AssemblyCopyright("Copyright © SvenGDK 2022-2023")>
18+
<Assembly: AssemblyCopyright("Copyright © SvenGDK 2022-2024")>
1919
<Assembly: AssemblyTrademark("SvenGDK")>
2020
<Assembly: ComVisible(false)>
2121

@@ -55,5 +55,5 @@ Imports System.Windows
5555
' indem Sie "*" wie unten gezeigt eingeben:
5656
' <Assembly: AssemblyVersion("1.0.*")>
5757

58-
<Assembly: AssemblyVersion("2.2.1.0")>
59-
<Assembly: AssemblyFileVersion("2.2.1.0")>
58+
<Assembly: AssemblyVersion("2.3.0.0")>
59+
<Assembly: AssemblyFileVersion("2.3.0.0")>

PSX XMB Manager/NewMainWindow.xaml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
66
xmlns:local="clr-namespace:PSX_XMB_Manager"
77
mc:Ignorable="d"
8-
Title="New Main Window" Height="475" Width="800" Background="#FF252525" ResizeMode="CanMinimize" WindowStartupLocation="CenterScreen">
8+
Title="PSX XMB Manager" Height="475" Width="800" Background="#FF252525" ResizeMode="CanMinimize" WindowStartupLocation="CenterScreen">
99
<Grid x:Name="MainGrid">
1010

1111
<Menu x:Name="MainMenu" Background="{x:Null}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="200" Margin="0,50,0,0">
@@ -19,16 +19,16 @@
1919
</Menu>
2020

2121
<Grid x:Name="StartGrid" Opacity="1">
22-
<TextBlock HorizontalAlignment="Left" Margin="239,217,0,0" TextWrapping="Wrap" Text="NBD Driver installed :" VerticalAlignment="Top" Foreground="White" FontFamily="Calibri" FontSize="16"/>
22+
<TextBlock HorizontalAlignment="Left" Margin="239,217,0,0" TextWrapping="Wrap" Text="NBD Driver Status :" VerticalAlignment="Top" Foreground="White" FontFamily="Calibri" FontSize="16"/>
2323
<Button x:Name="ConnectButton" Content="Connect" HorizontalAlignment="Left" Margin="501,127,0,0" VerticalAlignment="Top" Background="#FF00619C" Foreground="White" BorderBrush="{x:Null}" Width="126" Height="24" FontFamily="Calibri" FontSize="14"/>
24-
<TextBlock x:Name="NBDConnectionStatusLabel" HorizontalAlignment="Left" Margin="239,267,0,0" TextWrapping="Wrap" Text="Current connection status :" VerticalAlignment="Top" Foreground="White" FontFamily="Calibri" FontSize="16"/>
25-
<TextBlock HorizontalAlignment="Left" Margin="239,292,0,0" TextWrapping="Wrap" Text="HDD mounted :" VerticalAlignment="Top" Foreground="White" FontFamily="Calibri" FontSize="16"/>
24+
<TextBlock x:Name="NBDConnectionStatusLabel" HorizontalAlignment="Left" Margin="239,267,0,0" TextWrapping="Wrap" Text="Connection Status :" VerticalAlignment="Top" Foreground="White" FontFamily="Calibri" FontSize="16"/>
25+
<TextBlock HorizontalAlignment="Left" Margin="239,292,0,0" TextWrapping="Wrap" Text="PSX HDD Mount Status :" VerticalAlignment="Top" Foreground="White" FontFamily="Calibri" FontSize="16"/>
2626
<TextBox x:Name="PSXIPTextBox" Margin="327,102,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="20" TextAlignment="Center" Width="300" HorizontalAlignment="Left"/>
2727
<TextBlock x:Name="EnterIPLabel" HorizontalAlignment="Left" Margin="327,77,0,0" TextWrapping="Wrap" Text="Enter the IP address of your PSX :" VerticalAlignment="Top" Foreground="White" FontFamily="Calibri" FontSize="16"/>
2828
<TextBlock x:Name="NBDDriverVersionLabel" HorizontalAlignment="Left" Margin="382,217,0,0" TextWrapping="Wrap" Text="Not installed" VerticalAlignment="Top" Foreground="#FFC12249" FontFamily="Calibri" FontSize="16" TextAlignment="Right" Width="320"/>
2929
<TextBlock x:Name="NBDConnectionLabel" HorizontalAlignment="Left" Margin="420,267,0,0" TextWrapping="Wrap" Text="Not connected" VerticalAlignment="Top" Foreground="#FFC12249" FontFamily="Calibri" FontSize="16" Width="282" TextAlignment="Right"/>
3030
<TextBlock x:Name="MountStatusLabel" HorizontalAlignment="Left" Margin="345,292,0,0" TextWrapping="Wrap" Text="Unmounted" VerticalAlignment="Top" Foreground="#FFC12249" FontFamily="Calibri" FontSize="16" Width="357" TextAlignment="Right"/>
31-
<TextBlock HorizontalAlignment="Left" Margin="239,242,0,0" TextWrapping="Wrap" Text="Dokan Driver installed :" VerticalAlignment="Top" Foreground="White" FontFamily="Calibri" FontSize="16"/>
31+
<TextBlock HorizontalAlignment="Left" Margin="239,242,0,0" TextWrapping="Wrap" Text="Dokan Status :" VerticalAlignment="Top" Foreground="White" FontFamily="Calibri" FontSize="16"/>
3232
<TextBlock x:Name="DokanDriverVersionLabel" HorizontalAlignment="Left" Margin="395,242,0,0" TextWrapping="Wrap" Text="Not installed" VerticalAlignment="Top" Foreground="#FFC12249" FontFamily="Calibri" FontSize="16" TextAlignment="Right" Width="307"/>
3333
</Grid>
3434

@@ -43,7 +43,7 @@
4343
<TextBlock HorizontalAlignment="Left" Margin="259,232,0,0" TextWrapping="Wrap" Text="Install a prepared project on the PSX :" VerticalAlignment="Top" Foreground="White" FontFamily="Calibri" FontSize="16"/>
4444
<TextBlock HorizontalAlignment="Left" Margin="514,161,0,0" TextWrapping="Wrap" Text="Select a created project from the list." VerticalAlignment="Top" Foreground="White" FontFamily="Calibri" TextAlignment="Right"/>
4545
<TextBlock HorizontalAlignment="Left" Margin="506,284,0,0" TextWrapping="Wrap" Text="Select a prepared project from the list." VerticalAlignment="Top" Foreground="White" FontFamily="Calibri" TextAlignment="Right"/>
46-
<Button x:Name="InstallButton" Content="Install" HorizontalAlignment="Left" Margin="569,304,0,0" VerticalAlignment="Top" Background="#FF00619C" Foreground="White" BorderBrush="{x:Null}" Width="125" Height="24" FontFamily="Calibri" FontSize="14"/>
46+
<Button x:Name="InstallProjectButton" Content="Install" HorizontalAlignment="Left" Margin="569,304,0,0" VerticalAlignment="Top" Background="#FF00619C" Foreground="White" BorderBrush="{x:Null}" Width="125" Height="24" FontFamily="Calibri" FontSize="14"/>
4747
</Grid>
4848

4949
<Grid x:Name="ProgressGrid" Margin="252,362,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="450" Height="65" Visibility="Hidden">

0 commit comments

Comments
 (0)