Monorepo/GUIs.ZooFlow/Globix/ClassFolderwatcher.vb
2022-02-17 16:33:17 +01:00

194 lines
7.6 KiB
VB.net

Imports System.IO
Imports DigitalData.Modules.Base
Imports DigitalData.Modules.Logging
Public Class ClassFolderwatcher
Inherits BaseClass
Public Shared FWFolderWatcher As FileSystemWatcher
Public Shared FWScan As FileSystemWatcher
Private ReadOnly FileHandle As ClassFilehandle
Public Sub New(pLogConfig As LogConfig)
MyBase.New(pLogConfig)
FileHandle = New ClassFilehandle(pLogConfig)
End Sub
Public Function Restart_FolderWatch() As Boolean
Try
If FWFolderWatcher.EnableRaisingEvents = True Then
'Gestartet also Stoppen
FWFolderWatcher.EnableRaisingEvents = False
My.Application.Globix.Folderwatchstarted = False
FWFolderWatcher = StartFolderwatcherForPath(My.Application.Globix.CurrentFolderWatchPath)
My.Application.Globix.Folderwatchstarted = True
My.UIConfig.Globix.FolderWatchStarted = True
My.UIConfigManager.Save()
End If
Return True
Catch ex As Exception
Logger.Info($"Error in Restart_FolderWatch: {ex.Message}")
Logger.Error(ex.Message)
Return False
End Try
End Function
Public Sub Restart_FolderWatchSCAN()
Try
If FWScan.EnableRaisingEvents = True Then
'Gestartet also Stoppen
FWScan.EnableRaisingEvents = False
'FolderWatch neu instanzieren
FWScan = StartFolderwatcherForPath(My.Application.Globix.CURRENT_SCAN_FOLDERWATCH)
My.UIConfig.Globix.FolderWatchScanStarted = True
My.UIConfigManager.Save()
End If
Catch ex As Exception
Logger.Info($"Error in Restart_FolderWatchSCAN: {ex.Message}")
Logger.Error(ex.Message)
End Try
End Sub
Public Sub StartStop_FolderWatch()
Try
If FWFolderWatcher Is Nothing OrElse FWFolderWatcher.EnableRaisingEvents = False Then
' Folderwatch neu instanzieren
FWFolderWatcher = StartFolderwatcherForPath(My.Application.Globix.CurrentFolderWatchPath)
My.Application.Globix.Folderwatchstarted = True
My.UIConfig.Globix.FolderWatchStarted = True
My.UIConfigManager.Save()
End If
If FWFolderWatcher.EnableRaisingEvents = True Then
'Gestartet also Stoppen
FWFolderWatcher.EnableRaisingEvents = False
My.Application.Globix.Folderwatchstarted = False
Logger.Info(" >> FolderWatch gestoppt")
My.UIConfig.Globix.FolderWatchStarted = False
My.UIConfigManager.Save()
End If
Catch ex As Exception
Logger.Error(ex.Message)
MsgBox("Error in StartStop_FolderWatch:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Public Function StartStop_FolderWatchSCAN() As Integer
Try
If My.Application.Globix.CURRENT_SCAN_FOLDERWATCH = "" Then
If FWFolderWatcher.EnableRaisingEvents = True Then
Stop_FWSCAN()
Return 0
Else
If My.Application.User.Language = "de-DE" Then
MsgBox("Bitte definieren Sie einen Überwachungsordner für Scan-Eingänge:", MsgBoxStyle.Exclamation)
Else
MsgBox("Please define a watchfolder for Scanning:", MsgBoxStyle.Exclamation)
End If
Return False
End If
End If
If FWScan Is Nothing Then
FWScan = New FileSystemWatcher(My.Application.Globix.CURRENT_SCAN_FOLDERWATCH, "*.*")
Logger.Info(" >> FolderWatch Scan Gestartet")
FWScan.IncludeSubdirectories = False
FWScan.EnableRaisingEvents = True
AddHandler FWScan.Created, AddressOf OnCreated
My.UIConfig.Globix.FolderWatchScanStarted = True
My.UIConfigManager.Save()
Return 1
End If
If FWScan.EnableRaisingEvents = False Then
' Dim watcher As New FileSystemWatcher()
' watcher.Path = CURRENT_FOLDERWATCH
FWScan = New System.IO.FileSystemWatcher(My.Application.Globix.CURRENT_SCAN_FOLDERWATCH, "*.*")
Logger.Info(" >> FolderWatch Scan Gestartet")
FWScan.IncludeSubdirectories = False
FWScan.EnableRaisingEvents = True
AddHandler FWScan.Created, AddressOf OnCreated
My.UIConfig.Globix.FolderWatchScanStarted = True
My.UIConfigManager.Save()
Return 1
Else
'Gestartet also Stoppen
FWScan.EnableRaisingEvents = False
Logger.Info(" >> FolderWatch Scan gestoppt")
'SaveConfigValue("FWSCAN_started", "False")
My.UIConfig.Globix.FolderWatchScanStarted = False
My.UIConfigManager.Save()
Return 0
End If
Catch ex As Exception
Logger.Error(ex.Message)
MsgBox("Error in StartStop_FolderWatchSCAN:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
Return 99
End Try
End Function
Public Function Stop_FWSCAN()
If FWFolderWatcher.EnableRaisingEvents = True Then
'Gestartet also Stoppen
FWFolderWatcher.EnableRaisingEvents = False
My.Application.Globix.Folderwatchstarted = False
Logger.Info(" >> FolderWatch gestoppt")
'SaveConfigValue("my.Application.Globix.Folderwatchstarted", "False")
My.UIConfig.Globix.FolderWatchStarted = True
My.UIConfigManager.Save()
Return True
Else
Return False
End If
End Function
Private Function StartFolderwatcherForPath(pPath As String) As FileSystemWatcher
Dim oWatcher = New FileSystemWatcher(pPath, "*.*") With {
.IncludeSubdirectories = False,
.EnableRaisingEvents = True
}
AddHandler oWatcher.Created, AddressOf OnCreated
Logger.Debug("Folder Watcher started for Path [{0}]", pPath)
My.UIConfig.Globix.FolderWatchScanStarted = True
My.UIConfigManager.Save()
Return oWatcher
End Function
Private Sub OnCreated(source As Object, e As FileSystemEventArgs)
Try
If Not IsNothing(My.Application.Globix.DTEXCLUDE_FILES) Then
For Each row As DataRow In My.Application.Globix.DTEXCLUDE_FILES.Rows
Dim content As String = row.Item(0).ToString.ToLower
If e.FullPath.ToLower.Contains(content) Then
Exit Sub
End If
Next
End If
Dim handleType As String
If e.FullPath.ToLower.EndsWith(".msg") Then
handleType = "|FW_OUTLOOK_MESSAGE|"
Else
handleType = "|FW_SIMPLEINDEXER|"
End If
'Die Datei übergeben
Logger.Info(">> OnCreated-File:" & e.FullPath)
If FileHandle.CheckDuplicateFiles(e.FullPath, "FolderWatch/Scan") Then
FileHandle.Decide_FileHandle(e.FullPath, handleType)
Else
Logger.Info(">> Folderwatcher: File already exists:" & e.FullPath)
End If
Catch ex As Exception
Logger.Error(ex.Message)
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error in folder_watch_Created")
End Try
End Sub
End Class