Modules/Config/ConfigUtils.vb
Jonathan Jenne 30c602a9bf clean up
2023-12-20 15:09:10 +01:00

181 lines
7.8 KiB
VB.net

Imports System.IO
Imports DigitalData.Modules.Base
Imports DigitalData.Modules.Logging
Public Class ConfigUtils
Private ReadOnly _Logger As Logger
Private ReadOnly _File As FilesystemEx
Private Const MIGRATE_DIRECTORY As String = "Migrate"
Public Sub New(LogConfig As LogConfig)
_Logger = LogConfig.GetLogger()
_File = New FilesystemEx(LogConfig)
End Sub
''' <summary>
''' Migrate a config file when the ProductName has changed
''' </summary>
''' <param name="pUserBasePath">The user config base path, should be Application.UserAppDataPath</param>
''' <param name="pProductName">The current or new product name</param>
''' <param name="pOldProductName">The old product name</param>
''' <returns></returns>
Public Function MigrateUserAppDataConfig(pUserBasePath As String, pProductName As String, pOldProductName As String)
Return MigrateAppDataConfig(pUserBasePath, ConfigManager(Of ConfigSample).USER_CONFIG_NAME, pProductName, pOldProductName)
End Function
''' <summary>
''' Migrate a config file when the ProductName has changed
''' </summary>
''' <param name="pCommonBasePath">The config base path, should be Application.CommonAppDataPath</param>
''' <param name="pProductName">The current or new product name</param>
''' <param name="pOldProductName">The old product name</param>
''' <returns></returns>
Public Function MigrateCommonAppDataConfig(pCommonBasePath As String, pProductName As String, pOldProductName As String)
Return MigrateAppDataConfig(pCommonBasePath, ConfigManager(Of ConfigSample).COMPUTER_CONFIG_NAME, pProductName, pOldProductName)
End Function
''' <summary>
''' Migrate a config file when the ProductName has changed
''' </summary>
''' <param name="pBasePath">The config base path, can be Application.UserAppDataPath or Application.CommonAppDataPath</param>
''' <param name="pProductName">The current or new product name</param>
''' <param name="pOldProductName">The old product name</param>
''' <returns></returns>
Private Function MigrateAppDataConfig(pBasePath As String, pConfigName As String, pProductName As String, pOldProductName As String)
Dim oNewDirPath = pBasePath
Dim oOldDirPath = oNewDirPath.Replace(pProductName, pOldProductName)
Dim oNewFilePath = Path.Combine(oNewDirPath, pConfigName)
Dim oOldFilePath = Path.Combine(oOldDirPath, pConfigName)
' If there is already a new config, exit.
If File.Exists(oNewFilePath) Then
Return True
End If
' If there is no old config, exit.
If Not File.Exists(oOldFilePath) Then
Return True
End If
Try
If Not Directory.Exists(oNewDirPath) Then
Directory.CreateDirectory(oNewDirPath)
End If
_Logger.Info("Migrating Config from [{0}] to [{1}]", pOldProductName, pProductName)
File.Move(oOldFilePath, oNewFilePath)
Return True
Catch ex As Exception
_Logger.Warn("Error while Migrating Config")
_Logger.Error(ex)
Return False
End Try
End Function
Public Function TestMigrationNeeded(TargetDirectory As String) As Boolean
If IO.Directory.Exists(TargetDirectory) Then
Return False
Else
Return True
End If
End Function
Public Sub MigrateConfig(SourceDirectory As String, TargetDirectory As String, Optional FilePattern As String = "*.*")
'If IO.Directory.Exists(TargetDirectory) Then
' _Logger.Warn("Config Migration aborted because new config directory [{0}] already exists!", TargetDirectory)
' Exit Sub
'End If
'_Logger.Debug("Creating TargetDirectory [{0}]", TargetDirectory)
'' Create target directory
'Try
' IO.Directory.CreateDirectory(TargetDirectory)
'Catch ex As Exception
' _Logger.Warn("Config Migration aborted because new config directory [{0}] could not be created!", TargetDirectory)
' _Logger.Error(ex)
' Exit Sub
'End Try
'' Create Migration directory
'Dim oMigrationDirectory = IO.Path.Combine(SourceDirectory, MIGRATE_DIRECTORY)
'_Logger.Debug("Creating MigrationDirectory [{0}]", oMigrationDirectory)
'Try
' IO.Directory.CreateDirectory(oMigrationDirectory)
'Catch ex As Exception
' _Logger.Warn("Config Migration aborted because migration directory [{0}] could not be created!", oMigrationDirectory)
' _Logger.Error(ex)
' Exit Sub
'End Try
'' Copy individual files from top level directory
'For Each oPath In IO.Directory.EnumerateFiles(SourceDirectory, FilePattern)
' Dim oFileInfo = New IO.FileInfo(oPath)
' _Logger.Debug("Processing file [{0}]", oFileInfo.Name)
' _Logger.Debug("Copying [{0}] to TargetDirectory..", oFileInfo.Name)
' ' Copy to target directory
' Try
' IO.File.Copy(oPath, IO.Path.Combine(TargetDirectory, oFileInfo.Name))
' Catch ex As Exception
' _Logger.Warn("Could not move old config file {0} to new config location {1}", oFileInfo.Name, TargetDirectory)
' _Logger.Error(ex)
' End Try
' _Logger.Debug("Moving [{0}] to MigrationDirectory..", oFileInfo.Name)
' ' Move to migration directory
' Try
' IO.File.Move(oPath, IO.Path.Combine(oMigrationDirectory, oFileInfo.Name))
' Catch ex As Exception
' _Logger.Warn("Could not move old config file {0} to migration directory {1}", oFileInfo.Name, oMigrationDirectory)
' _Logger.Error(ex)
' End Try
'Next
'For Each oDirectoryPath In IO.Directory.EnumerateDirectories(SourceDirectory, "*", IO.SearchOption.TopDirectoryOnly)
' Dim oDirInfo As New IO.DirectoryInfo(oDirectoryPath)
' _Logger.Debug("Processing directory [{0}]", oDirInfo.Name)
' ' Don't copy TargetDirectory if subpath of SourceDirectory or if MigrationDirectory
' If oDirInfo.FullName = TargetDirectory Or oDirInfo.FullName = oMigrationDirectory Then
' _Logger.Debug("Directory [{0}] should not be copied. Skipping.", oDirInfo.Name)
' Continue For
' End If
' ' Copy directory to TargetDirectory
' Dim oNewDirectoryPath = IO.Path.Combine(TargetDirectory, oDirInfo.Name)
' _Logger.Debug("Copying [{0}] to TargetDirectory..", oDirInfo.Name)
' Try
' _File.CopyDirectory(oDirInfo.FullName, oNewDirectoryPath, True)
' Catch ex As Exception
' _Logger.Warn("Could not move directory [{0}] to new path [{1}]", oDirInfo.FullName, oNewDirectoryPath)
' _Logger.Error(ex)
' End Try
' _Logger.Debug("Copying [{0}] to MigrationDirectory..", oDirInfo.Name)
' ' Copy directory to MigrationDirectory
' Dim oMigrationDirectoryPath = IO.Path.Combine(oMigrationDirectory, oDirInfo.Name)
' Try
' _File.CopyDirectory(oDirInfo.FullName, oMigrationDirectoryPath, True)
' Catch ex As Exception
' _Logger.Error(ex)
' _Logger.Warn("Could not move directory [{0}] to migration directory [{1}]", oDirInfo.FullName, oMigrationDirectoryPath)
' End Try
' _Logger.Debug("Deleting [{0}]..", oDirInfo.Name)
' ' Delete directory
' Try
' IO.Directory.Delete(oDirInfo.FullName, True)
' Catch ex As Exception
' _Logger.Error(ex)
' _Logger.Warn("Could not delete directory [{0}]", oDirInfo.FullName)
' End Try
'Next
End Sub
End Class