Modules/GUIs.ZooFlow/frmFlowForm.vb
2021-02-10 16:50:55 +01:00

991 lines
42 KiB
VB.net

Option Explicit On
Imports System.IO
Imports System.Runtime.InteropServices
Imports DevExpress.XtraSplashScreen
Imports DigitalData.GUIs.ClipboardWatcher
Imports DigitalData.GUIs.ZooFlow.ClassConstants
Imports DigitalData.GUIs.ZooFlow.ClipboardWatcher
Imports DigitalData.Modules
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Messaging
Imports DigitalData.Modules.Windows
Public Class frmFlowForm
' Constants
Private Const OPACITY_INITIAL = 0
Private Const OPACITY_HIDDEN = 0.65
Private Const OPACITY_SHOWN = 0.85
Private Logger As Logger
Private DTIDB_SEARCHES As DataTable
' Common Helpers Classes
Private Init As ClassInit
Private AppServerOrDB As ClassDataASorDB
Private FileClass As Filesystem.File
' Globix Helper Classes
Private FileDrop As ClassFileDrop
Private FileHandle As ClassFilehandle
Private FolderWatch As ClassFolderwatcher
' ClipboardWatcher Helper Classes
Private ClassWindow As Window
Private ProfileFilter As ProfileFilter
Private ProfileLoader As ClassProfileLoader
' Runtime Flags
Private ApplicationLoading As Boolean = True
Private IDBSearchActive As Boolean = False
' Runtime Variables
Private ESCHitCount As Integer = 0
Private IndexForm As frmGlobix_Index
Private Const mSnapOffset As Integer = 35
Private Const WM_WINDOWPOSCHANGING As Integer = &H46
' Events
Public Event ClipboardChanged As EventHandler(Of IDataObject)
Private WithEvents HotkeyClass As Hotkey
Private WithEvents Watcher As ClipboardWatcher.Watcher = ClipboardWatcher.Watcher.Singleton
Public Sub New()
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
' === Hide form initially ===
Opacity = OPACITY_INITIAL
End Sub
Private Sub frmFlowForm_Load(sender As Object, e As EventArgs) Handles Me.Load
' === Initialize Logger ===
Logger = My.LogConfig.GetLogger()
' === Show Splash Screen ===
SplashScreenManager.ShowForm(Me, GetType(frmSplash), False, False)
' === Clean up logfiles ===
FileClass = New Filesystem.File(My.LogConfig)
FileClass.RemoveFiles(My.LogConfig.LogDirectory, 30, String.Empty, "log")
' === Initialize AppServer Database Connection with Failover
AppServerOrDB = New ClassDataASorDB(My.LogConfig)
' === Initialization ===
Init = New ClassInit(My.LogConfig, Me)
AddHandler Init.Completed, AddressOf Init_Completed
Init.InitializeApplication()
End Sub
Protected Overrides Sub WndProc(ByRef m As Message)
' Listen for operating system messages
Select Case m.Msg
Case WM_WINDOWPOSCHANGING
SnapToDesktopBorder(Me, m.LParam, 0)
End Select
MyBase.WndProc(m)
End Sub
Public Shared Sub SnapToDesktopBorder(ByVal clientForm As Form, ByVal LParam As IntPtr, ByVal widthAdjustment As Integer)
If clientForm Is Nothing Then
' Satisfies rule: Validate parameters
Throw New ArgumentNullException("clientForm")
End If
' Snap client to the top, left, bottom or right desktop border
' as the form is moved near that border.
Try
' Marshal the LPARAM value which is a WINDOWPOS struct
Dim NewPosition As New ClassWin32.WINDOWPOS
NewPosition = CType(Marshal.PtrToStructure(
LParam, GetType(ClassWin32.WINDOWPOS)), ClassWin32.WINDOWPOS)
If NewPosition.y = 0 OrElse NewPosition.x = 0 Then
Return ' Nothing to do!
End If
' Adjust the client size for borders and caption bar
Dim ClientRect As Rectangle =
clientForm.RectangleToScreen(clientForm.ClientRectangle)
ClientRect.Width +=
SystemInformation.FrameBorderSize.Width - widthAdjustment
ClientRect.Height += (SystemInformation.FrameBorderSize.Height +
SystemInformation.CaptionHeight)
' Now get the screen working area (without taskbar)
Dim WorkingRect As Rectangle =
Screen.GetWorkingArea(clientForm.ClientRectangle)
' Left border
If NewPosition.x >= WorkingRect.X - mSnapOffset AndAlso
NewPosition.x <= WorkingRect.X + mSnapOffset Then
NewPosition.x = WorkingRect.X
End If
' Get screen bounds and taskbar height
' (when taskbar is horizontal)
Dim ScreenRect As Rectangle =
Screen.GetBounds(Screen.PrimaryScreen.Bounds)
Dim TaskbarHeight As Integer =
ScreenRect.Height - WorkingRect.Height
' Top border (check if taskbar is on top
' or bottom via WorkingRect.Y)
If NewPosition.y >= -mSnapOffset AndAlso
(WorkingRect.Y > 0 AndAlso NewPosition.y <=
(TaskbarHeight + mSnapOffset)) OrElse
(WorkingRect.Y <= 0 AndAlso NewPosition.y <=
(mSnapOffset)) Then
If TaskbarHeight > 0 Then
NewPosition.y = WorkingRect.Y ' Horizontal Taskbar
Else
NewPosition.y = 0 ' Vertical Taskbar
End If
End If
' Right border
If NewPosition.x + ClientRect.Width <=
WorkingRect.Right + mSnapOffset AndAlso
NewPosition.x + ClientRect.Width >=
WorkingRect.Right - mSnapOffset Then
NewPosition.x = WorkingRect.Right - (ClientRect.Width +
SystemInformation.FrameBorderSize.Width)
End If
' Bottom border
If NewPosition.y + ClientRect.Height <=
WorkingRect.Bottom + mSnapOffset AndAlso
NewPosition.y + ClientRect.Height >=
WorkingRect.Bottom - mSnapOffset Then
NewPosition.y = WorkingRect.Bottom - (ClientRect.Height +
SystemInformation.FrameBorderSize.Height)
End If
' Marshal it back
Marshal.StructureToPtr(NewPosition, LParam, True)
Catch ex As ArgumentException
End Try
End Sub
Private Sub Init_Completed(sender As Object, e As EventArgs)
Me.Cursor = Cursors.WaitCursor
' === Initialization Complete ===
ApplicationLoading = False
SplashScreenManager.CloseForm(False)
' === Setup Timers ===
AddHandler TimerRefreshData.Tick, AddressOf TimerRefreshData_Tick
TimerRefreshData.Enabled = True
' === Register As Event Listener ===
EventBus.Instance.Register(Me)
' === Set Form Properties ===
TopMost = True
AllowDrop = True
ShowInTaskbar = False
Opacity = OPACITY_HIDDEN
Location = My.UIConfig.FlowForm.Location
' === Setup Event Handlers ===
AddHandler KeyDown, AddressOf frmFlowForm_KeyDown
AddHandler KeyUp, AddressOf frmFlowForm_KeyDown
For Each oControl As Control In Controls
AddHandler oControl.MouseEnter, AddressOf frmFlowForm_MouseEnter
AddHandler oControl.MouseLeave, AddressOf frmFlowForm_MouseLeave
Next
AddHandler Watcher.ClipboardChanged, AddressOf Watcher_ClipboardChanged
Dim oSQL = My.Queries.Common.FNIDB_GET_SEARCH_PROFILES(My.Application.User.UserId, My.Application.User.Language)
Dim oDatatable As DataTable = My.DatabaseIDB.GetDatatable(oSQL)
PictureBoxSearch.Visible = False
If Not IsNothing(oDatatable) OrElse oDatatable.Rows.Count > 0 Then
IDBSearchActive = True
DTIDB_SEARCHES = oDatatable
PictureBoxSearch.Visible = True
End If
If My.Application.ModulesActive.Contains(MODULE_CLIPBOARDWATCHER) Then
Try
ClassWindow = New Window(My.LogConfig)
HotkeyClass = New Hotkey(Me)
'Add Toggle Hotkey
HotkeyClass.AddHotKey(Keys.T, Hotkey.ModfierKey.MOD_CONTROL, HOTKEY_TOGGLE_WATCHER)
' Add Trigger Hotkey
'TODO: Configure Hotkey
Dim oSearchKey As String = "D"
Dim oFunctionKey As String = "CTRL"
Dim oConverter As New KeysConverter
Dim oObject As Object = oConverter.ConvertFromString(oSearchKey)
Dim oKeyCode As Keys = oObject
Select Case oFunctionKey
Case "CTRL"
HotkeyClass.AddHotKey(oKeyCode, Hotkey.ModfierKey.MOD_CONTROL, ClassConstants.HOTKEY_TRIGGER_WATCHER)
Case "SHIFT"
HotkeyClass.AddHotKey(oKeyCode, Hotkey.ModfierKey.MOD_SHIFT, ClassConstants.HOTKEY_TRIGGER_WATCHER)
Case "ALT"
HotkeyClass.AddHotKey(oKeyCode, Hotkey.ModfierKey.MOD_ALT, ClassConstants.HOTKEY_TRIGGER_WATCHER)
Case "WIN"
HotkeyClass.AddHotKey(oKeyCode, Hotkey.ModfierKey.MOD_WIN, ClassConstants.HOTKEY_TRIGGER_WATCHER)
End Select
AddHandler HotkeyClass.HotKeyPressed, AddressOf HotkeyClass_HotKeyPressed
ProfileLoader = New ClassProfileLoader(My.LogConfig, AppServerOrDB)
ProfileLoader.LoadProfiles()
Catch ex As Exception
Logger.Error(ex)
MsgBox("Error while initializing Clipboard Watcher!", MsgBoxStyle.Critical, Text)
End Try
Else
My.Application.ClipboardWatcher.MonitoringActive = False
Logger.Info("Clipboard Watcher Module is not active. Hotkey Monitoring will be disabled!")
End If
If My.Application.ModulesActive.Contains(MODULE_GLOBAL_INDEXER) Then
FileDrop = New ClassFileDrop(My.LogConfig)
FileHandle = New ClassFilehandle()
FolderWatch = New ClassFolderwatcher
Refresh_RegexTable()
If My.Application.Globix.LoadFileExclusion = False Then
If My.Application.User.Language = "de-DE" Then
MsgBox("Die Ausschlusskriterien für Dateien in Folderwatch konnten nicht angelegt werden!", MsgBoxStyle.Information)
Else
MsgBox("File-Exclusions in Folderwatch could not be created!", MsgBoxStyle.Information)
End If
End If
My.Application.Globix.LoadFileExclusion()
Init_Folderwatch()
Start_Folderwatch()
GlobixToolStripMenuItem.Visible = True
End If
oSQL = "SELECT * FROM TBIDB_ATTRIBUTE"
My.DTAttributes = AppServerOrDB.GetDatatable("IDB", oSQL, "TBIDB_ATTRIBUTE", "", "")
Me.Cursor = Cursors.Default
End Sub
Public Sub Init_Folderwatch()
Try
Dim oSql As String = "SELECT FOLDER_PATH FROM TBGI_FOLDERWATCH_USER WHERE FOLDER_TYPE = 'DEFAULT' AND USER_ID = " & My.Application.User.UserId
Dim oDT As DataTable = AppServerOrDB.GetDatatable("DD_ECM", oSql, "TBGI_FOLDERWATCH_USER", $"FOLDER_TYPE = 'DEFAULT' AND USER_ID = {My.Application.User.UserId}")
If oDT.Rows.Count = 0 Then
Throw New ApplicationException("No Default Path configured for User!")
End If
Dim oFolderWatchPath = oDT.Rows.Item(0).Item("FOLDER_PATH")
oFolderWatchPath = NotNull(oFolderWatchPath, String.Empty).ToString
If oFolderWatchPath = String.Empty Then
Logger.Info("Init_Folderwatch: folderwatchPath is empty")
My.Application.Globix.Folderwatchstarted = False
'SaveConfigValue("my.Application.Globix.Folderwatchstarted", "False")
My.UIConfig.Globix.FolderWatchStarted = False
My.UIConfigManager.Save()
End If
If Not IO.Directory.Exists(oFolderWatchPath) Then
Logger.Info("Init_Folderwatch: folderwatchPath does not exists or is invalid path")
My.Application.Globix.Folderwatchstarted = False
'SaveConfigValue("my.Application.Globix.Folderwatchstarted", "False")
My.UIConfig.Globix.FolderWatchStarted = False
My.UIConfigManager.Save()
End If
My.Application.Globix.CurrentFolderWatchPath = oFolderWatchPath
My.Application.Globix.Folderwatchstarted = True
'FWFunction_STARTED = True
FolderWatch.StartStop_FolderWatch()
Catch ex As Exception
MsgBox($"Init_Folderwatch: Unexpected error while starting FolderWatch: {ex.Message}", MsgBoxStyle.Critical)
Logger.Error(ex)
Logger.Info($"Init_Folderwatch: Unexpected error: {ex.Message}")
End Try
Try
Dim oSql As String = "SELECT FOLDER_PATH FROM TBGI_FOLDERWATCH_USER WHERE FOLDER_TYPE = 'SCAN' AND USER_ID = " & My.Application.User.UserId
Dim oFolderwatchScanPath = My.Database.GetScalarValue(oSql)
oFolderwatchScanPath = IIf(IsDBNull(oFolderwatchScanPath), "", oFolderwatchScanPath)
If oFolderwatchScanPath = String.Empty Then
Logger.Info("Init_Folderwatch: folderwatchScanPath is empty")
My.UIConfig.Globix.FolderWatchStarted = False
My.UIConfigManager.Save()
Exit Sub
End If
If Not IO.Directory.Exists(oFolderwatchScanPath) Then
Logger.Info("Init_Folderwatch: folderwatchScanPath does not exists or is invalid path")
My.UIConfig.Globix.FolderWatchStarted = False
My.UIConfigManager.Save()
Exit Sub
End If
My.Application.Globix.CURRENT_SCAN_FOLDERWATCH = oFolderwatchScanPath
'FWFunction_STARTED = True
FolderWatch.StartStop_FolderWatchSCAN()
Catch ex As Exception
MsgBox($"Init_Folderwatch: Unexpected error while starting FolderWatchScan: {ex.Message}", MsgBoxStyle.Critical)
Logger.Info($"Init_Folderwatch: Unexpected error: {ex.Message}")
End Try
End Sub
Private Sub TimerRefreshData_Tick(sender As Object, e As EventArgs)
'TODO: Refresh Data
End Sub
Private Sub frmFlowForm_MouseLeave(sender As Object, e As EventArgs) Handles MyBase.MouseLeave
Opacity = OPACITY_HIDDEN
End Sub
Private Sub frmFlowForm_MouseEnter(sender As Object, e As EventArgs) Handles Me.MouseEnter
Opacity = OPACITY_SHOWN
End Sub
Private Sub frmFlowForm_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseMove, PictureBoxDragDrop.MouseMove
If e.Button = MouseButtons.Left Then
ClassWin32.ReleaseCapture()
ClassWin32.SendMessage(Handle, ClassWin32.WM_NCLBUTTONDOWN, ClassWin32.HTCAPTION, 0)
End If
End Sub
Private Sub frmFlowForm_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
If e.KeyCode = Keys.Escape Then
If ESCHitCount > 0 Then
ExitZooflow()
Else
ESCHitCount += 1
End If
ElseIf e.KeyCode = Keys.D AndAlso (e.Control) Then
If My.Application.ModulesActive.Contains(ClassConstants.MODULE_ZOOFLOW) Then
MsgBox("Search")
End If
End If
End Sub
Sub ExitZooflow()
Dim oResult As DialogResult = MessageBox.Show("Exit Zooflow", "Are you sure you want to close ZooFlow", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If oResult = DialogResult.Yes Then
Application.Exit()
Else
ESCHitCount = 0
End If
End Sub
Public Sub OnEvent(Params As Object)
Logger.Debug("OnEvent called!")
End Sub
Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
Cursor = Cursors.WaitCursor
If TheFormIsAlreadyLoaded("frmFlowSearch") Then
Cursor = Cursors.Default
Exit Sub
End If
Dim oSQLFlowSearch As String = ""
For Each oRow As DataRow In My.DTCOMMON_SQL.Rows
If oRow.Item("TITLE") = SQLCMD_FLOW_SEARCH_LOWER_LIMIT Then
oSQLFlowSearch = oRow.Item("SQL_COMMAND")
End If
Next
If oSQLFlowSearch <> String.Empty Then
oSQLFlowSearch = oSQLFlowSearch.Replace("@USER_ID", My.Application.User.UserId)
Dim oForm As New frmFlowSearch(oSQLFlowSearch)
oForm.Show()
oForm.BringToFront()
End If
Cursor = Cursors.Default
End Sub
Private Sub PictureBoxSearch_Click(sender As Object, e As EventArgs) Handles PictureBoxSearch.Click
Cursor = Cursors.WaitCursor
If TheFormIsAlreadyLoaded("frmSearchStart") Then
Cursor = Cursors.Default
Exit Sub
End If
Dim oForm As New frmSearchStart(DTIDB_SEARCHES) 'frmFlowSearch(osql)
oForm.Show()
Cursor = Cursors.Default
If TimerCheckActiveForms.Enabled = False Then
TimerCheckActiveForms.Enabled = True
End If
End Sub
Private Sub PictureBoxSearch_MouseEnter(sender As Object, e As EventArgs) Handles PictureBoxSearch.MouseEnter
PictureBoxSearch.Image = My.Resources._2_LUPE_AKTIV_ZOO
End Sub
Private Sub PictureBoxSearch_MouseLeave(sender As Object, e As EventArgs) Handles PictureBoxSearch.MouseLeave
PictureBoxSearch.Image = My.Resources._2_LUPE_INAKTIV_ZOO
End Sub
Private Sub PictureBoxPM_MouseEnter(sender As Object, e As EventArgs) Handles PictureBoxPM.MouseEnter
PictureBoxPM.Image = My.Resources._3_PERSON_AKTIV_ZOO
End Sub
Private Sub PictureBoxPM_MouseLeave(sender As Object, e As EventArgs) Handles PictureBoxPM.MouseLeave
PictureBoxPM.Image = My.Resources._3_PERSON_INAKTIV_ZOO
End Sub
Private Sub PictureBoxGlobix_MouseEnter(sender As Object, e As EventArgs) Handles PictureBoxGlobix.MouseEnter
PictureBoxGlobix.Image = My.Resources._4_GLOBIX_AKTIV_ZOO
End Sub
Private Sub PictureBoxGlobix_MouseLeave(sender As Object, e As EventArgs) Handles PictureBoxGlobix.MouseLeave
PictureBoxGlobix.Image = My.Resources._4_GLOBIX_INAKTIV_ZOO
End Sub
Private Sub ZooFlowBeendenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ZooFlowBeendenToolStripMenuItem.Click
ExitZooflow()
End Sub
Private Sub VerwaltungToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles VerwaltungToolStripMenuItem.Click
frmAdmin_Start.Show()
End Sub
Private Sub frmFlowForm_DragEnter(sender As Object, e As DragEventArgs) Handles MyBase.DragEnter
PictureBoxDragDrop.Image = My.Resources._1_LOGO_ZOO_FLOW_DROP3
e.Effect = DragDropEffects.Copy
Drag_Enter(sender, e)
End Sub
Private Sub frmFlowForm_DragDrop(sender As Object, e As DragEventArgs) Handles MyBase.DragDrop
DragDropForm(e)
End Sub
Private Sub frmFlowForm_DragLeave(sender As Object, e As EventArgs) Handles Me.DragLeave
PictureBoxDragDrop.Image = My.Resources._1_LOGO_ZOO_FLOW1
End Sub
Private Sub PictureBoxAbo_MouseEnter(sender As Object, e As EventArgs) Handles PictureBoxAbo.MouseEnter
PictureBoxAbo.Image = My.Resources._2_ZOO_FLOW_Abo_MouseOver
End Sub
Private Sub PictureBoxAbo_MouseLeave(sender As Object, e As EventArgs) Handles PictureBoxAbo.MouseLeave
PictureBoxAbo.Image = My.Resources._2_ZOO_FLOW_Abo
End Sub
Private Sub PictureBoxAbo_Click(sender As Object, e As EventArgs) Handles PictureBoxAbo.Click
Cursor = Cursors.WaitCursor
If TheFormIsAlreadyLoaded("frmPreSearch") Then
Cursor = Cursors.Default
Exit Sub
End If
Dim oForm2 As New frmSearchPredefined()
oForm2.Show()
Cursor = Cursors.Default
End Sub
Private Function TheFormIsAlreadyLoaded(ByVal pFormName As String) As Boolean
TheFormIsAlreadyLoaded = False
For Each frm As Form In Application.OpenForms
If frm.Name.Equals(pFormName) Then
TheFormIsAlreadyLoaded = True
Exit Function
End If
Next
End Function
Private Function FormLoaded_Visible() As Boolean
For Each frm As Form In Application.OpenForms
If frm.Name.Equals("frmSearchStart") Or frm.Name.Equals("frmGlobix_Index") Then
Me.Visible = False
Exit Function
End If
Next
Me.Visible = True
TimerCheckActiveForms.Enabled = False
End Function
Private Sub DatenbankverbindungToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DatenbankverbindungToolStripMenuItem.Click
frmConfigDatabase.ShowDialog()
End Sub
Private Sub TimerCheckActiveForms_Tick(sender As Object, e As EventArgs) Handles TimerCheckActiveForms.Tick
FormLoaded_Visible()
If Me.Visible = False Then Exit Sub
End Sub
Private Sub NotifyIcon_DoubleClick(sender As Object, e As EventArgs) Handles NotifyIcon.DoubleClick
If Me.Visible = False Then
Me.Visible = True
TimerCheckActiveForms.Enabled = False
End If
End Sub
Private Sub PictureBox1_DragEnter(sender As Object, e As DragEventArgs) Handles PictureBoxDragDrop.DragEnter
Drag_Enter(sender, e)
End Sub
Sub Drag_Enter(sender As Object, e As DragEventArgs)
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
e.Effect = DragDropEffects.All
' Console.WriteLine("DragEnter ...DragDrop")
ElseIf e.Data.GetDataPresent("FileGroupDescriptor") Then
'handle a message dragged from Outlook
e.Effect = DragDropEffects.Copy
' Console.WriteLine("DragEnter ...OutlookMessage")
ElseIf e.Data.GetDataPresent("aryFileGroupDescriptor") AndAlso (e.Data.GetDataPresent("FileContents")) Then
e.Effect = DragDropEffects.Copy
' Console.WriteLine("DragEnter ...Attachment from Outlook")
Else
'otherwise, do not handle
e.Effect = DragDropEffects.None
End If
End Sub
Sub DragDropForm(e As DragEventArgs)
If Not My.Application.ModulesActive.Contains(ClassConstants.MODULE_GLOBAL_INDEXER) Then
Exit Sub
End If
If TheFormIsAlreadyLoaded("frmIndexFileList") Then
Cursor = Cursors.Default
MsgBox("Please index the active file first!", MsgBoxStyle.Exclamation, "Drag 'n Drop not allowed!")
Exit Sub
End If
'Erstmal alles löschen
My.Database.ExecuteNonQuery("DELETE FROM TBGI_FILES_USER WHERE UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')")
If FileDrop.Drop_File(e) = True Then
TimerCheckDroppedFiles.Start()
Me.Cursor = Cursors.WaitCursor
End If
PictureBoxDragDrop.Image = My.Resources._1_LOGO_ZOO_FLOW1
End Sub
Private Sub PictureBox1_DragDrop(sender As Object, e As DragEventArgs) Handles PictureBoxDragDrop.DragDrop
DragDropForm(e)
End Sub
Private Sub TimerCheckDroppedFiles_Tick(sender As Object, e As EventArgs) Handles TimerCheckDroppedFiles.Tick
If Not My.Application.ModulesActive.Contains(ClassConstants.MODULE_GLOBAL_INDEXER) Then
Exit Sub
End If
TimerCheckDroppedFiles.Stop()
Globix_Check_Dropped_Files()
Me.Cursor = Cursors.Default
End Sub
Sub Globix_Check_Dropped_Files()
Try
My.Database.ExecuteNonQuery("DELETE FROM TBGI_FILES_USER WHERE WORKED = 1 AND UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')")
Dim i As Integer
For Each Str As Object In FileDrop.files_dropped
If Not Str Is Nothing Then
Logger.Info(" Check Drop-File: " & Str.ToString)
Dim handleType As String = Str.Substring(0, Str.LastIndexOf("|") + 1)
Dim filename As String = Str.Substring(Str.LastIndexOf("|") + 1)
If My.Application.Globix.FileExistsinDropTable(filename) = False Then
FileHandle.Decide_FileHandle(filename, handleType)
i += 1
Else
' Console.WriteLine("File gibt es bereits")
End If
End If
Next
Dim sql As String = "SELECT * FROM TBGI_FILES_USER WHERE WORKED = 0 AND UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')"
My.Application.Globix.DTACTUAL_FILES = Nothing
My.Application.Globix.DTACTUAL_FILES = My.Database.GetDatatable(sql)
My.Application.Globix.ABORT_INDEXING = False
Dim oOnlyFilesFromFilesystem = True
For Each oRow As DataRow In My.Application.Globix.DTACTUAL_FILES.Rows
If oRow.Item("HANDLE_TYPE").ToString <> "|DROPFROMFSYSTEM|" Then
oOnlyFilesFromFilesystem = False
Exit For
End If
Next
If My.Application.Globix.DTACTUAL_FILES.Rows.Count > 1 And oOnlyFilesFromFilesystem = False Then
frmGlobix_IndexFileList.ShowDialog()
My.Application.Globix.DTACTUAL_FILES = Nothing
My.Application.Globix.DTACTUAL_FILES = My.Database.GetDatatable(sql)
End If
For Each oFileRow As DataRow In My.Application.Globix.DTACTUAL_FILES.Rows
Dim filestring As String = oFileRow.Item("FILENAME2WORK").ToString
My.Application.Globix.CURRENT_FILENAME = oFileRow.Item("FILENAME2WORK").ToString
My.Application.Globix.CURRENT_WORKFILE_GUID = oFileRow.Item(0)
My.Application.Globix.CURRENT_WORKFILE = oFileRow.Item("FILENAME2WORK").ToString
Logger.Info(" CURRENT_WORKFILE: " & My.Application.Globix.CURRENT_WORKFILE)
If IO.File.Exists(My.Application.Globix.CURRENT_WORKFILE) = True And My.Application.Globix.DTACTUAL_FILES.Rows.Count > 0 Then
Globix_Open_IndexDialog()
End If
Next
Show()
Catch ex As Exception
MsgBox("Unexpected Error in Check_Dropped_Files:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
Show()
End Try
End Sub
Sub Globix_Open_IndexDialog()
Try
IndexForm = New frmGlobix_Index(My.LogConfig)
NotifyIconReset()
AddHandler IndexForm.FormClosed, AddressOf GlobixClosed
IndexForm.Show()
Cursor = Cursors.Default
If TimerCheckActiveForms.Enabled = False Then
TimerCheckActiveForms.Enabled = True
End If
Catch ex As Exception
Logger.Error(ex)
MsgBox(ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Sub NotifyIconReset()
NI_TYPE = "INFO"
NI_MESSAGE = String.Empty
End Sub
Sub GlobixClosed()
Try
If NI_MESSAGE = String.Empty Then
Exit Sub
End If
Dim oNIType = 1
Select Case NI_TYPE
Case "INFO"
oNIType = 1
Case "ERROR"
oNIType = 3
End Select
NotifyIcon.ShowBalloonTip(30000, NI_TITLE, NI_MESSAGE, oNIType)
Catch ex As Exception
End Try
End Sub
Sub Start_Folderwatch()
If My.Application.Globix.CurrentFolderWatchPath = String.Empty Then
My.Application.Globix.Folderwatchstarted = False
End If
If My.Application.Globix.CURRENT_SCAN_FOLDERWATCH = String.Empty Then
My.UIConfigManager.Config.Globix.FolderWatchScanStarted = False
My.UIConfigManager.Save()
End If
If My.Application.Globix.CurrentFolderWatchPath <> "" Or My.Application.Globix.CURRENT_SCAN_FOLDERWATCH <> "" Then
'If My.Application.Globix.Folderwatchstarted = True Then
' tslblFW.Visible = True
'Else
' tslblFW.Visible = False
'End If
Try
If My.UIConfigManager.Config.Globix.FolderWatchScanStarted = True Then
Logger.Info("FWSCAN started - Checking file:" & My.Application.Globix.CURRENT_SCAN_FOLDERWATCH)
Dim fileEntries As String() = Directory.GetFiles(My.Application.Globix.CURRENT_SCAN_FOLDERWATCH)
' Process the list of files found in the directory.
Dim fileName As String
For Each fileName In fileEntries
Logger.Info("Scanfolder after startup: Checking file:" & fileName)
For Each row As DataRow In My.Application.Globix.DTEXCLUDE_FILES.Rows
Dim content As String = row.Item(0).ToString.ToLower
If fileName.ToLower.Contains(content) Then
Exit Sub
End If
Next
Dim handleType As String
If fileName.ToLower.EndsWith(".msg") Then
handleType = "|FW_OUTLOOK_MESSAGE|"
Else
handleType = "|FW_SIMPLEINDEXER|"
End If
'Die Datei übergeben
Logger.Info(" Adding file from Scanfolder after startup:" & fileName)
If My.Application.Globix.FileExistsinDropTable(fileName) = False Then
FileHandle.Decide_FileHandle(fileName, handleType)
Else
Logger.Info("Scanfolder Startup: File already exists:" & fileName)
End If
Next fileName
Else
Logger.Info("FWSCAN not started")
End If
Catch ex As Exception
Logger.Info("Error while starting folderwatch scan: " & ex.Message)
Logger.Error(ex.Message)
End Try
Try
If My.Application.Globix.Folderwatchstarted = True Then
Logger.Info("Folderwatchstarted - Checking file:" & My.Application.Globix.CurrentFolderWatchPath)
Dim fileEntries As String() = Directory.GetFiles(My.Application.Globix.CurrentFolderWatchPath)
' Process the list of files found in the directory.
Dim fileName As String
For Each fileName In fileEntries
Logger.Info("Folderwach after startup: Checking file:" & fileName)
For Each row As DataRow In My.Application.Globix.DTEXCLUDE_FILES.Rows
Dim content As String = row.Item(0).ToString.ToLower
If fileName.ToLower.Contains(content) Then
Exit Sub
End If
Next
Dim handleType As String
If fileName.ToLower.EndsWith(".msg") Then
handleType = "|FW_OUTLOOK_MESSAGE|"
Else
handleType = "|FW_SIMPLEINDEXER|"
End If
'Die Datei übergeben
Logger.Info("Adding file from Folderwatch after startup:" & fileName)
If My.Application.Globix.FileExistsinDropTable(fileName) = False Then
FileHandle.Decide_FileHandle(fileName, handleType)
Else
Logger.Info("Folderwatch Startup: File already exists:" & fileName)
End If
Next fileName
Else
Logger.Info("Folderwatch not started")
End If
Catch ex As Exception
Logger.Info("Error while starting folderwatch: " & ex.Message)
Logger.Error(ex.Message)
End Try
If TimerFolderwatch.Enabled = False Then
TimerFolderwatch.Start()
End If
End If
End Sub
Private Sub frmFlowForm_ResizeEnd(sender As Object, e As EventArgs) Handles Me.ResizeEnd
My.UIConfig.FlowForm.Location = Location
My.UIConfigManager.Save()
End Sub
Private Sub TimerFolderwatch_Tick_1(sender As Object, e As EventArgs) Handles TimerFolderwatch.Tick
Try
' JenneJ, 11.02.2019:
' Keine Folderwatch Dateien verarbeiten, wenn gerade Indexiert wird,
' dadurch würden die Globalen Variablen überschrieben
' und in Folge die falschen Dateien Indexiert!
If My.Application.Globix.INDEXING_ACTIVE Or My.Application.Globix.MULTIINDEXING_ACTIVE Then
Exit Sub
End If
If My.Application.Globix.Folderwatchstarted = True Or My.UIConfig.Globix.FolderWatchScanStarted = True Then
'Prüfen ob alle Files abgearbeitet wurden
Dim sql = "SELECT * FROM TBGI_FILES_USER WHERE WORKED = 0 AND HANDLE_TYPE like '%|FW%' AND UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')"
My.Application.Globix.DTACTUAL_FILES = My.Database.GetDatatable(sql)
If My.Application.Globix.DTACTUAL_FILES.Rows.Count > 0 Then
My.Application.Globix.ABORT_INDEXING = False
' Dim fil As String
Me.TimerFolderwatch.Stop()
For Each row As DataRow In My.Application.Globix.DTACTUAL_FILES.Rows
Dim FILEGUID = row.Item("GUID")
If My.Application.Globix.ABORT_INDEXING = True Then
Exit For
End If
Dim FileForWork As String = row.Item(1)
Logger.Info(" In Timer Folderwatch - File: " & FileForWork)
Dim fileInUse As Boolean = FileHandle.IsFileInUse(FileForWork)
Dim fileexists As Boolean = System.IO.File.Exists(FileForWork)
If fileInUse = False Then
If fileexists = True Then
My.Application.Globix.CURRENT_WORKFILE = FileForWork
My.Application.Globix.CURRENT_FILENAME = FileForWork
My.Application.Globix.CURRENT_WORKFILE_GUID = row.Item("GUID")
Globix_Open_IndexDialog()
Else
Logger.Info(" File not existing - Row will be deleted!")
Dim oDel = String.Format("DELETE FROM TBGI_FILES_USER WHERE GUID = {0}", FILEGUID)
My.Database.ExecuteNonQuery(oDel)
End If
Else
Logger.Info(" file '" & row.Item(1) & "' could not be opened exclusively - fileInUse!")
End If
Next
Me.TimerFolderwatch.Start()
End If
'tslblFW.Visible = True
Else
'tslblFW.Visible = False
End If
Catch ex As Exception
If ex.Message.Contains("Sammlung wurde geändert") Or ex.Message.Contains("Enumeration") Then
Else
MsgBox("Error in Work FolderWatch-File:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End If
End Try
End Sub
Private Sub TsiGlobixConfig_Click(sender As Object, e As EventArgs) Handles TsiGlobixConfig.Click
frmGlobixBasicConfig.ShowDialog()
End Sub
Private Sub Watcher_ClipboardChanged(sender As Object, e As IDataObject)
Dim ClipboardContents As String = Clipboard.GetText().Trim()
Dim oState = My.Application.ClipboardWatcher
oState.CurrentClipboardContents = ClipboardContents
If oState.MonitoringActive = False Then
Logger.Info("Clipboard Watcher is not active!")
Exit Sub
End If
If oState.UserProfiles Is Nothing Then
Logger.Warn("User Profiles is empty!")
Exit Sub
End If
If oState.ProfileProcesses Is Nothing OrElse oState.ProfileProcesses.Rows.Count = 0 Then
Logger.Warn("Profile Processes is empty!")
Exit Sub
End If
If oState.ProfileWindows Is Nothing OrElse oState.ProfileWindows.Rows.Count = 0 Then
Logger.Warn("Profile Processes is empty!")
Exit Sub
End If
If oState.ProfileProcesses Is Nothing OrElse oState.ProfileProcesses.Rows.Count = 0 Then
Logger.Warn("Profile Processes is empty!")
Exit Sub
End If
Dim oWindowInfo = ClassWindow.GetWindowInfo()
Try
' Tree View zurücksetzen
oState.MatchTreeView.Nodes.Clear()
ProfileFilter = New ProfileFilter(My.LogConfig,
oState.UserProfiles, oState.ProfileProcesses,
oState.ProfileWindows, oState.ProfileControls,
oState.MatchTreeView)
Catch ex As Exception
Logger.Error(ex)
MsgBox("Fehler beim Laden der Profile. Möglicherweise liegt ein Konfigurationsfehler vor. Mehr Informationen im Log.", MsgBoxStyle.Critical, Text)
End Try
Try
Dim oProfiles = ProfileFilter.Profiles
Dim oEnvironment = ClassEnvironment.GetEnvironment()
' Filter by Clipboard Contents
oProfiles = ProfileFilter.FilterProfilesByClipboardRegex(oProfiles, ClipboardContents)
oProfiles = ProfileFilter.LogRemainingProfiles(oProfiles, "FilterProfilesByClipboardRegex")
' Filter by Process Name
oProfiles = ProfileFilter.FilterProfilesByProcess(oProfiles, oWindowInfo.ProcessName)
oProfiles = ProfileFilter.LogRemainingProfiles(oProfiles, "FilterProfilesByProcess")
' Filter by Window Title
oProfiles = ProfileFilter.FilterWindowsByWindowTitleRegex(oProfiles, oWindowInfo.WindowTitle)
oProfiles = ProfileFilter.LogRemainingProfiles(oProfiles, "FilterWindowsByWindowTitleRegex")
' Filter by Focused Control
oProfiles = ProfileFilter.FilterProfilesByFocusedControl(oProfiles, ClipboardContents, Handle)
oProfiles = ProfileFilter.LogRemainingProfiles(oProfiles, "FilterProfilesByFocusedControl")
oState.CurrentMatchingProfiles = oProfiles.ToList()
' Filter by Search Results
oProfiles = ProfileFilter.FilterProfilesBySearchResults(oProfiles, oEnvironment.Database, oEnvironment.User, ClipboardContents)
oProfiles = ProfileFilter.LogRemainingProfiles(oProfiles, "FilterProfilesBySearchResults")
' Clean up Profiles
oProfiles = ProfileFilter.ClearNotMatchedProfiles(oProfiles)
oProfiles = ProfileFilter.ClearDuplicateProfiles(oProfiles)
oProfiles = ProfileFilter.LogRemainingProfiles(oProfiles, "CleanUp")
oState.CurrentProfilesWithResults = oProfiles.ToList()
Catch ex As Exception
Logger.Error(ex)
MsgBox("Fehler beim Auswerten der Profile. Mehr Informationen im Log.", MsgBoxStyle.Critical, Text)
End Try
End Sub
Private Sub HotkeyClass_HotKeyPressed(HotKeyID As String)
Dim oState = My.Application.ClipboardWatcher
Select Case HotKeyID
Case HOTKEY_TRIGGER_WATCHER
If oState.CurrentClipboardContents = String.Empty Then
Logger.Info("Current Clipboard Contents is empty. Exiting.")
Exit Sub
End If
If oState.MonitoringActive = False Then
Logger.Info("Monitoring is inactive. Exiting.")
Exit Sub
End If
If oState.UserProfiles.Rows.Count = 0 Then
NotifyIcon.ShowBalloonTip(NOTIFICATION_DELAY, "ClipboardWatcher", "Es wurden keine Profile für Sie gefunden.", ToolTipIcon.Warning)
ElseIf oState.CurrentMatchingProfiles.Count = 0 Then
NotifyIcon.ShowBalloonTip(NOTIFICATION_DELAY, "ClipboardWatcher", "Es wurden keine passenden Profile gefunden.", ToolTipIcon.Warning)
ElseIf oState.CurrentProfilesWithResults.Count = 0 Then
NotifyIcon.ShowBalloonTip(NOTIFICATION_DELAY, "ClipboardWatcher", "Es wurden weder Dokumente noch Daten gefunden!", ToolTipIcon.Warning)
Else
Dim oProfiles = oState.CurrentProfilesWithResults
Dim oEnvironment = My.Application.GetEnvironment()
Dim oParams As New DigitalData.Modules.ZooFlow.ClipboardWatcherParams With {
.ClipboardContents = oState.CurrentClipboardContents,
.MatchingProfiles = oProfiles,
.MatchTreeView = oState.MatchTreeView
}
Dim oForm As New frmMatch(My.LogConfig, oEnvironment, oParams)
oForm.Show()
End If
Case HOTKEY_TOGGLE_WATCHER
If oState.MonitoringActive = True Then
NotifyIcon.ShowBalloonTip(NOTIFICATION_DELAY, "ClipboardWatcher", "Clipboard-Watcher wurde deaktiviert!", ToolTipIcon.Info)
Else
NotifyIcon.ShowBalloonTip(NOTIFICATION_DELAY, "ClipboardWatcher", "Clipboard-Watcher wurde aktiviert!", ToolTipIcon.Info)
End If
oState.MonitoringActive = Not oState.MonitoringActive
End Select
End Sub
Private Sub PictureBoxPM_Click(sender As Object, e As EventArgs) Handles PictureBoxPM.Click
ToastNotificationsManager1.ShowNotification(ToastNotificationsManager1.Notifications(3))
End Sub
End Class