Imports System.Text.RegularExpressions Imports System.Xml.Serialization Public Class clsGame Private sGameID As String = Guid.NewGuid.ToString Private sGameName As String = String.Empty Private sProcessName As String = String.Empty Private sParameter As String = String.Empty Private sPath As String = String.Empty Private bAbsolutePath As Boolean = False Private bFolderSave As Boolean = False Private sFileType As String = String.Empty Private bAppendTimeStamp As Boolean = False Private iBackupLimit As Integer = 0 Private bCleanFolder As Boolean = False Private sExcludeList As String = String.Empty Private sProcessPath As String = String.Empty Private sIcon As String = String.Empty Private dHours As Double = 0 Private sVersion As String = String.Empty Private sCompany As String = String.Empty Private bEnabled As Boolean = True Private bMonitorOnly As Boolean = False Private sComments As String = String.Empty Private bIsRegEx As Boolean = False Private bRecurseSubFolders As Boolean = True Private iOS As eOS = mgrCommon.GetCurrentOS() Private oImportTags As New List(Of Tag) Private bImportUpdate As Boolean = False Private oCompiledRegEx As Regex Public Enum eOptionalSyncFields None = 0 GamePath = 1 Company = 2 Version = 4 Icon = 16 Unused = 32 'Do not remove to maintain compatability, re-use for a future field. MonitorGame = 64 End Enum Public Enum eOS Windows = 1 Linux = 2 End Enum Property ID As String Set(value As String) If Not value Is Nothing Then sGameID = mgrPath.ValidateFileNameForOS(value) End If End Set Get Return sGameID End Get End Property ReadOnly Property CroppedName As String Get If Name.Length > 40 Then Return sGameName.Substring(0, 41).Trim & "..." Else Return sGameName End If End Get End Property ReadOnly Property FileSafeName As String Get Return mgrPath.ValidateFileNameForOS(sGameName) End Get End Property Property Name As String Set(value As String) sGameName = value End Set Get Return sGameName End Get End Property Property ProcessName As String Set(value As String) sProcessName = value End Set Get Return sProcessName End Get End Property Property Parameter As String Set(value As String) sParameter = value End Set Get Return sParameter End Get End Property Property Path As String Set(value As String) sPath = mgrPath.ReverseSpecialPaths(value) End Set Get Return mgrPath.ReplaceSpecialPaths(sPath) End Get End Property Property AbsolutePath As Boolean Set(value As Boolean) bAbsolutePath = value End Set Get 'This makes sure a registry key path isn't seen as a relative path. If mgrPath.IsSupportedRegistryPath(TruePath) Then Return True Else Return bAbsolutePath End If End Get End Property Property FolderSave As Boolean Set(value As Boolean) bFolderSave = value End Set Get Return bFolderSave End Get End Property Property FileType As String Set(value As String) sFileType = value End Set Get Return sFileType End Get End Property Property AppendTimeStamp As Boolean Get Return bAppendTimeStamp End Get Set(value As Boolean) bAppendTimeStamp = value End Set End Property Property BackupLimit As Integer Get Return iBackupLimit End Get Set(value As Integer) iBackupLimit = value End Set End Property Property CleanFolder As Boolean Get Return bCleanFolder End Get Set(value As Boolean) bCleanFolder = value End Set End Property Property ExcludeList As String Set(value As String) sExcludeList = value End Set Get Return sExcludeList End Get End Property Property ProcessPath As String Set(value As String) sProcessPath = value End Set Get Return sProcessPath End Get End Property Property Icon As String Get Return sIcon End Get Set(value As String) sIcon = value End Set End Property Property Hours As Double Get Return dHours End Get Set(value As Double) dHours = value End Set End Property Property Version As String Get Return sVersion End Get Set(value As String) sVersion = value End Set End Property Property Company As String Get Return sCompany End Get Set(value As String) sCompany = value End Set End Property Property Enabled As Boolean Get Return bEnabled End Get Set(value As Boolean) bEnabled = value End Set End Property Property MonitorOnly As Boolean Get Return bMonitorOnly End Get Set(value As Boolean) bMonitorOnly = value End Set End Property Property Comments As String Get Return sComments End Get Set(value As String) sComments = value End Set End Property Property IsRegEx As Boolean Get Return bIsRegEx End Get Set(value As Boolean) bIsRegEx = value End Set End Property Property RecurseSubFolders As Boolean Get Return bRecurseSubFolders End Get Set(value As Boolean) bRecurseSubFolders = value End Set End Property Property OS As eOS Get Return iOS End Get Set(value As eOS) iOS = value End Set End Property Property TruePath As String Set(value As String) sPath = value End Set Get Return sPath End Get End Property Property ImportTags As List(Of Tag) Get Return oImportTags End Get Set(value As List(Of Tag)) oImportTags = value End Set End Property Property ImportUpdate As Boolean Get Return bImportUpdate End Get Set(value As Boolean) bImportUpdate = value End Set End Property Property CompiledRegEx As Regex Get Return oCompiledRegEx End Get Set(value As Regex) oCompiledRegEx = value End Set End Property ReadOnly Property IncludeArray As String() Get If FileType = String.Empty Then Return New String() {} Else Return FileType.Split(":") End If End Get End Property ReadOnly Property ExcludeArray As String() Get If ExcludeList = String.Empty Then Return New String() {} Else Return ExcludeList.Split(":") End If End Get End Property Public Function SyncEquals(obj As Object, eSyncFields As eOptionalSyncFields) As Boolean Dim oGame As clsGame = TryCast(obj, clsGame) If oGame Is Nothing Then Return False Else 'Core Sync Fields If ID <> oGame.ID Then Return False End If If Name <> oGame.Name Then Return False End If If ProcessName <> oGame.ProcessName Then Return False End If If Parameter <> oGame.Parameter Then Return False End If If Path <> oGame.Path Then Return False End If If FileType <> oGame.FileType Then Return False End If If ExcludeList <> oGame.ExcludeList Then Return False End If If AbsolutePath <> oGame.AbsolutePath Then Return False End If If FolderSave <> oGame.FolderSave Then Return False End If If AppendTimeStamp <> oGame.AppendTimeStamp Then Return False End If If BackupLimit <> oGame.BackupLimit Then Return False End If If CleanFolder <> oGame.CleanFolder Then Return False End If If Hours <> oGame.Hours Then Return False End If If MonitorOnly <> oGame.MonitorOnly Then Return False End If If Comments <> oGame.Comments Then Return False End If If IsRegEx <> oGame.IsRegEx Then Return False End If If RecurseSubFolders <> oGame.RecurseSubFolders Then Return False End If If OS <> oGame.OS Then Return False End If 'Optional Sync Fields If (eSyncFields And eOptionalSyncFields.Company) = eOptionalSyncFields.Company Then If Company <> oGame.Company Then Return False End If End If If (eSyncFields And eOptionalSyncFields.GamePath) = eOptionalSyncFields.GamePath Then If ProcessPath <> oGame.ProcessPath Then Return False End If End If If (eSyncFields And eOptionalSyncFields.Icon) = eOptionalSyncFields.Icon Then If Icon <> oGame.Icon Then Return False End If End If If (eSyncFields And eOptionalSyncFields.MonitorGame) = eOptionalSyncFields.MonitorGame Then If Enabled <> oGame.Enabled Then Return False End If End If If (eSyncFields And eOptionalSyncFields.Version) = eOptionalSyncFields.Version Then If Version <> oGame.Version Then Return False End If End If Return True End If End Function Public Function CoreEquals(obj As Object) As Boolean Dim oGame As clsGame = TryCast(obj, clsGame) If oGame Is Nothing Then Return False Else 'Core Fields If ID <> oGame.ID Then Return False End If If Name <> oGame.Name Then Return False End If If ProcessName <> oGame.ProcessName Then Return False End If If Parameter <> oGame.Parameter Then Return False End If If Path <> oGame.Path Then Return False End If If FileType <> oGame.FileType Then Return False End If If ExcludeList <> oGame.ExcludeList Then Return False End If If AbsolutePath <> oGame.AbsolutePath Then Return False End If If FolderSave <> oGame.FolderSave Then Return False End If If AppendTimeStamp <> oGame.AppendTimeStamp Then Return False End If If MonitorOnly <> oGame.MonitorOnly Then Return False End If If Comments <> oGame.Comments Then Return False End If If IsRegEx <> oGame.IsRegEx Then Return False End If If RecurseSubFolders <> oGame.RecurseSubFolders Then Return False End If If OS <> oGame.OS Then Return False End If Return True End If End Function Public Function MinimalEquals(obj As Object) As Boolean Dim oGame As clsGame = TryCast(obj, clsGame) If oGame Is Nothing Then Return False Else If ID <> oGame.ID Then Return False End If Return True End If End Function Public Function ShallowCopy() As clsGame Return DirectCast(Me.MemberwiseClone(), clsGame) End Function Public Shared Function SetSyncField(ByVal eSyncFields As eOptionalSyncFields, ByVal eSyncField As eOptionalSyncFields) As eOptionalSyncFields Return eSyncFields Or eSyncField End Function Public Shared Function RemoveSyncField(ByVal eSyncFields As eOptionalSyncFields, ByVal eSyncField As eOptionalSyncFields) As eOptionalSyncFields Return eSyncFields And (Not eSyncField) End Function End Class