Skip to content

Commit aa3bf93

Browse files
committed
Refactor FloppyData to use properties, add Series/System
Refactor FloppyData to use read-only properties instead of public fields and "Get*" methods, improving encapsulation and immutability. Update XML parsing to support attribute inheritance and use the new constructor. Replace all usages of old "Get*" methods with property access. Enhance suggested file name generation and add support for Series and System fields. Update TitleFindResult, SummaryPanel, and XML export to use new properties and display new fields. Add localized "Series" string to resource files. Clean up code and improve normalization and region/language handling.
1 parent ab497de commit aa3bf93

11 files changed

Lines changed: 463 additions & 333 deletions

File tree

DiskImageTool/Filters/ImageFilters.vb

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
Imports System.Text
1+
Imports System.Linq.Expressions
2+
Imports System.Text
23
Imports DiskImageTool.DiskImage
34

45
Namespace Filters
@@ -210,21 +211,21 @@ Namespace Filters
210211
If TitleData IsNot Nothing Then
211212
Image_NotInDatabase = False
212213
Image_InDatabase = True
213-
If TitleData.GetStatus = FloppyDB.FloppyDBStatus.Verified Then
214+
If TitleData.Status = FloppyDB.FloppyDBStatus.Verified Then
214215
Image_Verified = True
215216
Else
216217
Image_Unverified = True
217218
End If
218219

219220
If App.Globals.AppSettings.Debug Then
220-
If TitleData.GetIsTDC Then
221+
If TitleData.IsTDC Then
221222
Image_InTDC = True
222223
Else
223224
Image_NotInTDC = True
224225
End If
225226
FileData = New FloppyDB.FileNameData(ImageData.FileName, _TitleDB)
226227

227-
If TitleData.GetStatus <> FileData.Status Then
228+
If TitleData.Status <> FileData.Status Then
228229
Database_MismatchedStatus = True
229230
End If
230231
End If
@@ -235,8 +236,10 @@ Namespace Filters
235236
Dim FileName = IO.Path.GetFileNameWithoutExtension(ImageData.FileName)
236237
Dim FileNameMatch As Boolean = False
237238
For Each TitleData In TitleFindResult.Matches
238-
Dim SuggestedFileName = TitleData.GetSuggestedFileName
239-
If SuggestedFileName = FileName Then
239+
Dim SuggestedFileName = TitleData.GetSuggestedFileName(True)
240+
Dim FirstSuggestion = Replace(SuggestedFileName, "{ALT}", "")
241+
Dim SecondSuggestion = Replace(SuggestedFileName, "{ALT}", " (Alt)")
242+
If FileName = FirstSuggestion OrElse FileName = SecondSuggestion Then
240243
FileNameMatch = True
241244
Exit For
242245
End If
@@ -246,8 +249,9 @@ Namespace Filters
246249
Debug.Print("File Name: " & FileName)
247250
For Each TitleData In TitleFindResult.Matches
248251
Dim SuggestedFileName = TitleData.GetSuggestedFileName
249-
Debug.Print("Suggested File Name: " & SuggestedFileName)
252+
Debug.Print("Suggested: " & SuggestedFileName)
250253
Next
254+
Debug.Print("MD5: " & Disk.Image.GetMD5Hash)
251255
End If
252256
End If
253257
End If

DiskImageTool/Modules/FloppyDB/FloppyDB.vb

Lines changed: 16 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,6 @@ Namespace FloppyDB
2929
End Get
3030
End Property
3131

32-
Public ReadOnly Property RegionNameCache As Dictionary(Of String, String)
33-
Get
34-
Return _RegionNameCache
35-
End Get
36-
End Property
37-
3832
Public ReadOnly Property Languages As IReadOnlyList(Of KeyValuePair(Of String, String))
3933
Get
4034
Return _Languages
@@ -53,6 +47,12 @@ Namespace FloppyDB
5347
End Get
5448
End Property
5549

50+
Public ReadOnly Property RegionNameCache As Dictionary(Of String, String)
51+
Get
52+
Return _RegionNameCache
53+
End Get
54+
End Property
55+
5656
Public ReadOnly Property Regions As IReadOnlyList(Of KeyValuePair(Of String, String))
5757
Get
5858
Return _Regions
@@ -179,7 +179,7 @@ Namespace FloppyDB
179179
Public Function IsVerifiedImage(Disk As Disk) As Boolean
180180
Dim Result = TitleFind(Disk)
181181
If Result.Primary IsNot Nothing Then
182-
If Result.Primary.GetStatus = FloppyDBStatus.Verified Then
182+
If Result.Primary.Status = FloppyDBStatus.Verified Then
183183
Return True
184184
End If
185185
End If
@@ -269,6 +269,7 @@ Namespace FloppyDB
269269
Public Function SortLanguageCodes(codesCsv As String) As String
270270
Return SortCodes(codesCsv, _Languages)
271271
End Function
272+
272273
Public Function SortRegionCodes(codesCsv As String) As String
273274
Return SortCodes(codesCsv, _Regions)
274275
End Function
@@ -303,14 +304,6 @@ Namespace FloppyDB
303304
Return Nothing
304305
End Function
305306

306-
Private Shared Function GetAttr(node As Xml.XmlElement, name As String) As String
307-
If node.HasAttribute(name) Then
308-
Return node.GetAttribute(name)
309-
End If
310-
311-
Return Nothing
312-
End Function
313-
314307
Private Shared Sub ParseLookupList(XMLDoc As Xml.XmlDocument, XPath As String, Target As List(Of KeyValuePair(Of String, String)))
315308
Dim Nodes = XMLDoc.SelectNodes(XPath)
316309
If Nodes Is Nothing Then Return
@@ -436,46 +429,6 @@ Namespace FloppyDB
436429
Return Data
437430
End Function
438431

439-
Private Function GetTitleData(Node As Xml.XmlElement, Parent As FloppyData) As FloppyData
440-
Dim TitleData As New FloppyData With {
441-
.Owner = Me,
442-
.Parent = Parent,
443-
.Name = GetAttr(Node, "name"),
444-
.Variation = GetAttr(Node, "variation"),
445-
.Compilation = GetAttr(Node, "compilation"),
446-
.Year = GetAttr(Node, "year"),
447-
.Version = GetAttr(Node, "version"),
448-
.Int = GetAttr(Node, "int"),
449-
.Serial = GetAttr(Node, "serial"),
450-
.Disk = GetAttr(Node, "disk"),
451-
.Publisher = GetAttr(Node, "publisher"),
452-
.Region = GetAttr(Node, "region"),
453-
.Language = GetAttr(Node, "language"),
454-
.CopyProtection = GetAttr(Node, "cp"),
455-
.OperatingSystem = GetAttr(Node, "os"),
456-
.MobyGamesId = GetAttr(Node, "mobyGamesId")
457-
}
458-
459-
If Node.HasAttribute("media") Then
460-
TitleData.MediaString = Node.GetAttribute("media")
461-
TitleData.Media = FloppyDiskFormatGet(TitleData.MediaString)
462-
End If
463-
464-
If Node.HasAttribute("status") Then
465-
TitleData.Status = GetFloppyDBStatus(Node.GetAttribute("status"))
466-
End If
467-
468-
If Node.HasAttribute("tdc") Then
469-
TitleData.IsTDC = (Node.GetAttribute("tdc") = "1")
470-
End If
471-
472-
If Node.HasAttribute("fixed") Then
473-
TitleData.Fixed = (Node.GetAttribute("fixed") = "1")
474-
End If
475-
476-
Return TitleData
477-
End Function
478-
479432
Private Function GetVersion(XMLDoc As Xml.XmlDocument) As String
480433
Return If(XMLDoc.SelectSingleNode("/root/@version")?.Value, "")
481434
End Function
@@ -573,41 +526,33 @@ Namespace FloppyDB
573526
ParseLookupList(XMLDoc, "/root/regions/region", _Regions)
574527
End Sub
575528

576-
Private Function ParseNode(Node As Xml.XmlNode, ParentData As FloppyData) As Integer
529+
Private Function ParseNode(Node As Xml.XmlNode, Inherited As FloppyData) As Integer
577530
Dim Elem = TryCast(Node, Xml.XmlElement)
578531

579532
If Elem Is Nothing Then
580533
Return 0
581534
End If
582535

583536
Dim Count As Integer = 0
584-
Dim FloppyData = GetTitleData(Elem, ParentData)
585-
586-
If Elem.Name = "media" Then
587-
Dim mediaDiskCount As Integer = 0
588-
For Each ChildNode As Xml.XmlNode In Elem.ChildNodes
589-
Dim childElem = TryCast(ChildNode, Xml.XmlElement)
590-
If childElem IsNot Nothing AndAlso childElem.Name = "disk" Then
591-
mediaDiskCount += 1
592-
End If
593-
Next
594-
FloppyData.DiskCount = mediaDiskCount
537+
Dim Merged As New FloppyData(Me, Inherited, Elem)
595538

596-
ElseIf Elem.Name = "disk" Then
539+
If Elem.Name = "disk" Then
597540
Dim md5 = Elem.GetAttribute("md5")
598541
If md5 <> "" Then
599-
AddMd5Mapping(md5, FloppyData)
542+
AddMd5Mapping(md5, Merged)
600543
Count += 1
601544
End If
602545

603546
Dim md5Alt = Elem.GetAttribute("md5_alt")
604547
If md5Alt <> "" Then
605-
AddMd5Mapping(md5Alt, FloppyData)
548+
AddMd5Mapping(md5Alt, Merged)
606549
End If
550+
551+
Return Count
607552
End If
608553

609554
For Each ChildNode As Xml.XmlNode In Elem.ChildNodes
610-
Count += ParseNode(ChildNode, FloppyData)
555+
Count += ParseNode(ChildNode, Merged)
611556
Next
612557

613558
Return Count

0 commit comments

Comments
 (0)