From e946a130ba4ff65fdcc7e5907bcb596542708122 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Tue, 19 Jan 2021 16:03:11 +0100 Subject: [PATCH] ZooFlow: First working version of Clipboard Watcher --- GUIs.ClipboardWatcher/ProfileSearches.vb | 10 +- GUIs.ZooFlow/ClassConstants.vb | 2 + GUIs.ZooFlow/ClassDataASorDB.vb | 4 +- GUIs.ZooFlow/ClassInit.vb | 34 ---- GUIs.ZooFlow/ClassWin32.vb | 11 ++ .../ClipboardWatcher/ClassProfileLoader.vb | 55 ++++++ GUIs.ZooFlow/Globix/frmGlobix_Index.vb | 2 +- GUIs.ZooFlow/MyApplication.vb | 12 +- GUIs.ZooFlow/ZooFlow.vbproj | 1 + GUIs.ZooFlow/frmFlowForm.vb | 179 ++++++++++-------- Modules.Filesystem/File.vb | 3 +- 11 files changed, 195 insertions(+), 118 deletions(-) create mode 100644 GUIs.ZooFlow/ClipboardWatcher/ClassProfileLoader.vb diff --git a/GUIs.ClipboardWatcher/ProfileSearches.vb b/GUIs.ClipboardWatcher/ProfileSearches.vb index 1931470b..e25200c5 100644 --- a/GUIs.ClipboardWatcher/ProfileSearches.vb +++ b/GUIs.ClipboardWatcher/ProfileSearches.vb @@ -60,10 +60,10 @@ Public Class ProfileSearches Dim oSQL As String = $"SELECT * FROM TBCW_PROF_DOC_SEARCH WHERE ACTIVE = 1 AND PROFILE_ID = {ProfileId} ORDER BY TAB_INDEX" Dim oSearchesDataTable As DataTable If _Environment.Service.IsActive = True Then - Dim oTableResult As TableResult = _Client.GetDatatableByName("TBCW_PROF_DOC_SEARCH", $"PROFILE_ID = {ProfileId}", "TAB_INDEX") + Dim oTableResult As TableResult = _Client.GetDatatableByName("TBCW_PROF_DOC_SEARCH", $"PROFILE_ID = {ProfileId} AND ACTIVE = 1", "TAB_INDEX") oSearchesDataTable = oTableResult.Table If oSearchesDataTable Is Nothing Then - _Logger.Warn("TBCW_PROF_DOC_SEARCH from ApPServer is nothing: Failover started...") + _Logger.Warn("TBCW_PROF_DOC_SEARCH from AppServer is nothing: Failover started...") oSearchesDataTable = _Environment.Database.GetDatatable(oSQL) End If Else @@ -126,8 +126,12 @@ Public Class ProfileSearches Dim oSQL As String = $"SELECT * FROM TBCW_PROF_DATA_SEARCH WHERE ACTIVE = 1 AND PROFILE_ID = {ProfileId} ORDER BY TAB_INDEX" Dim oSearchesDataTable As DataTable If _Environment.Service.IsActive = True Then - Dim oTableResult As TableResult = _Client.GetDatatableByName("TBCW_PROF_DATA_SEARCH", $"PROFILE_ID = {ProfileId}", "TAB_INDEX") + Dim oTableResult As TableResult = _Client.GetDatatableByName("TBCW_PROF_DATA_SEARCH", $"PROFILE_ID = {ProfileId} AND ACTIVE = 1", "TAB_INDEX") oSearchesDataTable = oTableResult.Table + If oSearchesDataTable Is Nothing Then + _Logger.Warn("TBCW_PROF_DATA_SEARCH from AppServer is nothing: Failover started...") + oSearchesDataTable = _Environment.Database.GetDatatable(oSQL) + End If Else oSearchesDataTable = _Environment.Database.GetDatatable(oSQL) End If diff --git a/GUIs.ZooFlow/ClassConstants.vb b/GUIs.ZooFlow/ClassConstants.vb index 887562b1..2a55126c 100644 --- a/GUIs.ZooFlow/ClassConstants.vb +++ b/GUIs.ZooFlow/ClassConstants.vb @@ -25,6 +25,8 @@ Public Const HOTKEY_TOGGLE_WATCHER = 354522017 Public Const HOTKEY_TRIGGER_WATCHER = 354523017 + Public Const NOTIFICATION_DELAY = 2500 + Public Const SQLCMD_FLOW_SEARCH1 = "FLOW_SEARCH1" Public Const RESULTLIST_COL_ADDED_WHEN_DE = "Erstellt wann" diff --git a/GUIs.ZooFlow/ClassDataASorDB.vb b/GUIs.ZooFlow/ClassDataASorDB.vb index cef05de5..323101ed 100644 --- a/GUIs.ZooFlow/ClassDataASorDB.vb +++ b/GUIs.ZooFlow/ClassDataASorDB.vb @@ -8,7 +8,7 @@ Public Class ClassDataASorDB End Sub Public Function GetDatatable(pDB As String, pSQL As String, pAppServDT As String, pAppServFilter As String, Optional pAppServSort As String = "", Optional pForce As String = "") As DataTable Try - Dim oReturnDT As DataTable + Dim oReturnDT As DataTable = Nothing If EDMI_SERVICE_ACTIVE = True And pForce = String.Empty Then Try Dim oTableResult As TableResult = _Client.GetDatatableByName(pAppServDT, pAppServFilter, pAppServSort) @@ -35,7 +35,7 @@ Public Class ClassDataASorDB End Try End Function - Public Function CheckModuleData() + Public Function CheckModuleData() As Boolean Try Dim oSql = String.Format("SELECT * FROM [dbo].[FNDD_CHECK_USER_MODULE] ('{0}','CW',{1})", My.Application.User.UserName) Dim DT_CHECKUSER_MODULE As DataTable diff --git a/GUIs.ZooFlow/ClassInit.vb b/GUIs.ZooFlow/ClassInit.vb index 893cdf75..f12ebe96 100644 --- a/GUIs.ZooFlow/ClassInit.vb +++ b/GUIs.ZooFlow/ClassInit.vb @@ -47,7 +47,6 @@ Public Class ClassInit _Loader.AddStep("Initializing IDB Database..", AddressOf InitializeIDBDatabase, True) _Loader.AddStep("Initializing IDB Service..", AddressOf InitializeIDBService, True) _Loader.AddStep("Initializing Language..", AddressOf InitializeLanguage, False) - _Loader.AddStep("Initializing Clipboard Watcher..", AddressOf InitializeClipboardWatcher, False) _Loader.AddStep("Loading 3rd-party licenses..", AddressOf Initialize3rdParty, False) _Loader.AddStep("Loading Basic Configs..", AddressOf InitBasicData, False) ' === Init Schritte definieren @@ -259,39 +258,6 @@ Public Class ClassInit End Try End Sub - Private Sub InitializeClipboardWatcher(MyApplication As My.MyApplication) - Try - Dim oUserId = My.Application.User.UserId - Dim oWhereClause = $"T1.USER_ID = {oUserId} OR GROUP_ID IN (SELECT DISTINCT GUID FROM TBDD_GROUPS WHERE GUID IN (SELECT GROUP_ID FROM TBDD_GROUPS_USER WHERE USER_ID = {oUserId}))" - - Dim oProfileSQL As String = $"SELECT DISTINCT GUID, NAME,REGEX_EXPRESSION,COMMENT,PROC_NAME,PROFILE_TYPE FROM VWCW_USER_PROFILE T1 WHERE {oWhereClause}" - Dim oProcessSQL As String = $"SELECT DISTINCT T.GUID, T.PROFILE_ID,T.PROC_NAME FROM TBCW_PROFILE_PROCESS T, VWCW_USER_PROFILE T1 WHERE T.PROFILE_ID = T1.GUID AND ({oWhereClause})" - Dim oWindowSQL As String = $"SELECT DISTINCT T.* FROM VWCW_PROFILE_REL_WINDOW T, VWCW_USER_PROFILE T1 WHERE T.PROFILE_ID = T1.GUID AND ({oWhereClause})" - Dim oControlSQL As String = $"SELECT DISTINCT T.* FROM VWCW_PROFILE_REL_CONTROL T, VWCW_USER_PROFILE T1 WHERE T.PROFILE_ID = T1.GUID AND ({oWhereClause})" - - Dim oUserProfiles = My.Database.GetDatatable(oProfileSQL) - - If oUserProfiles Is Nothing OrElse oUserProfiles.Rows.Count = 0 Then - MyApplication.ClipboardWatcher.Status = ClipboardWatcher.State.EnumStatus.NoProfilesConfigured - End If - - Dim oProfileProcesses = My.Database.GetDatatable(oProcessSQL) - Dim oProfileWindows = My.Database.GetDatatable(oWindowSQL) - Dim oProfileControls = My.Database.GetDatatable(oControlSQL) - - MyApplication.ClipboardWatcher.Status = ClipboardWatcher.State.EnumStatus.OK - MyApplication.ClipboardWatcher.UserProfiles = oUserProfiles - MyApplication.ClipboardWatcher.ProfileProcesses = oProfileProcesses - MyApplication.ClipboardWatcher.ProfileWindows = oProfileWindows - MyApplication.ClipboardWatcher.ProfileControls = oProfileControls - MyApplication.ClipboardWatcher.MonitoringActive = True - Catch ex As Exception - MyApplication.ClipboardWatcher.Status = ClipboardWatcher.State.EnumStatus.Exception - _Logger.Error(ex) - Throw New InitException("Error while initializing clipboard watcher!", ex) - End Try - End Sub - Private Sub HandleUserInfo(MyApplication As My.MyApplication, Row As DataRow) Dim oValue As Object = Row.Item("VALUE") Dim oName As String = Row.Item("NAME").ToString diff --git a/GUIs.ZooFlow/ClassWin32.vb b/GUIs.ZooFlow/ClassWin32.vb index 34c4a014..53086210 100644 --- a/GUIs.ZooFlow/ClassWin32.vb +++ b/GUIs.ZooFlow/ClassWin32.vb @@ -17,6 +17,17 @@ Public Class ClassWin32 [True] End Enum + + Public Structure WINDOWPOS + Public hwnd As IntPtr + Public hwndInsertAfter As IntPtr + Public x As Integer + Public y As Integer + Public cx As Integer + Public cy As Integer + Public flags As Integer + End Structure + Public Structure Point Public x As Int32 diff --git a/GUIs.ZooFlow/ClipboardWatcher/ClassProfileLoader.vb b/GUIs.ZooFlow/ClipboardWatcher/ClassProfileLoader.vb new file mode 100644 index 00000000..8bb9ce09 --- /dev/null +++ b/GUIs.ZooFlow/ClipboardWatcher/ClassProfileLoader.vb @@ -0,0 +1,55 @@ +Imports DigitalData.Modules.Logging + +Namespace ClipboardWatcher + Public Class ClassProfileLoader + Private ReadOnly LogConfig As LogConfig + Private ReadOnly Logger As Logger + Private Database As ClassDataASorDB + + Public Sub New(LogConfig As LogConfig, AppServerOrDB As ClassDataASorDB) + Me.LogConfig = LogConfig + Me.Logger = LogConfig.GetLogger() + Me.Database = AppServerOrDB + End Sub + + Public Function LoadProfiles() As Boolean + Try + Dim oUserId = My.Application.User.UserId + Dim oWhereClause = $"T1.USER_ID = {oUserId} OR GROUP_ID IN (SELECT DISTINCT GUID FROM TBDD_GROUPS WHERE GUID IN (SELECT GROUP_ID FROM TBDD_GROUPS_USER WHERE USER_ID = {oUserId}))" + + Dim oProfileSQL As String = $"SELECT DISTINCT GUID, NAME,REGEX_EXPRESSION,COMMENT,PROC_NAME,PROFILE_TYPE FROM VWCW_USER_PROFILE T1 WHERE {oWhereClause}" + Dim oProcessSQL As String = $"SELECT DISTINCT T.GUID, T.PROFILE_ID,T.PROC_NAME FROM TBCW_PROFILE_PROCESS T, VWCW_USER_PROFILE T1 WHERE T.PROFILE_ID = T1.GUID AND ({oWhereClause})" + Dim oWindowSQL As String = $"SELECT DISTINCT T.* FROM VWCW_PROFILE_REL_WINDOW T, VWCW_USER_PROFILE T1 WHERE T.PROFILE_ID = T1.GUID AND ({oWhereClause})" + Dim oControlSQL As String = $"SELECT DISTINCT T.* FROM VWCW_PROFILE_REL_CONTROL T, VWCW_USER_PROFILE T1 WHERE T.PROFILE_ID = T1.GUID AND ({oWhereClause})" + + Dim oUserProfiles = Database.GetDatatable("DD_ECM", oProfileSQL, "VWCW_USER_PROFILE", "", "", "DB") + + If oUserProfiles Is Nothing OrElse oUserProfiles.Rows.Count = 0 Then + My.Application.ClipboardWatcher.Status = State.EnumStatus.NoProfilesConfigured + End If + + Dim oProfileProcesses = Database.GetDatatable("DD_ECM", oProcessSQL, "TBCW_PROFILE_PROCESS", "", "", "DB") + Dim oProfileWindows = Database.GetDatatable("DD_ECM", oWindowSQL, "VWCW_PROFILE_REL_WINDOW", "", "", "DB") + Dim oProfileControls = Database.GetDatatable("DD_ECM", oControlSQL, "VWCW_PROFILE_REL_CONTROL", "", "", "DB") + + My.Application.ClipboardWatcher.Status = State.EnumStatus.OK + My.Application.ClipboardWatcher.UserProfiles = oUserProfiles + My.Application.ClipboardWatcher.ProfileProcesses = oProfileProcesses + My.Application.ClipboardWatcher.ProfileWindows = oProfileWindows + My.Application.ClipboardWatcher.ProfileControls = oProfileControls + My.Application.ClipboardWatcher.MonitoringActive = True + + Return True + + Catch ex As Exception + My.Application.ClipboardWatcher.Status = State.EnumStatus.Exception + Logger.Error(ex) + + Return False + + End Try + End Function + End Class + +End Namespace + diff --git a/GUIs.ZooFlow/Globix/frmGlobix_Index.vb b/GUIs.ZooFlow/Globix/frmGlobix_Index.vb index c466ffbe..08ad926c 100644 --- a/GUIs.ZooFlow/Globix/frmGlobix_Index.vb +++ b/GUIs.ZooFlow/Globix/frmGlobix_Index.vb @@ -67,7 +67,7 @@ Public Class frmGlobix_Index - DocumentViewer1.Init(_LogConfig, My.Application.GDPictureLicense) + DocumentViewer1.Init(_LogConfig, My.Application.Settings.GdPictureKey) If DropType Is Nothing Then _Logger.Debug("File with Id [{0}] was not found in TBGI_FILES_USER. Exiting.", My.Application.Globix.CURRENT_WORKFILE_GUID) diff --git a/GUIs.ZooFlow/MyApplication.vb b/GUIs.ZooFlow/MyApplication.vb index 0db27c01..5f4a148a 100644 --- a/GUIs.ZooFlow/MyApplication.vb +++ b/GUIs.ZooFlow/MyApplication.vb @@ -54,12 +54,20 @@ Namespace My Public Property Globix As New Globix.State Public Property Search As New Search.State - Public Property GDPictureLicense As String - Public CommandLineFunction As String Public CommandLineArguments As New Dictionary(Of String, String) Public Property IDB_DT_DOC_DATA As DataTable + Public Function GetEnvironment() As Environment + Return New Environment With { + .Database = My.Database, + .DatabaseIDB = My.DatabaseIDB, + .Modules = My.Application.Modules, + .Service = My.Application.Service, + .Settings = My.Application.Settings, + .User = My.Application.User + } + End Function End Class End Namespace diff --git a/GUIs.ZooFlow/ZooFlow.vbproj b/GUIs.ZooFlow/ZooFlow.vbproj index 4a14947a..76a71c1a 100644 --- a/GUIs.ZooFlow/ZooFlow.vbproj +++ b/GUIs.ZooFlow/ZooFlow.vbproj @@ -113,6 +113,7 @@ + diff --git a/GUIs.ZooFlow/frmFlowForm.vb b/GUIs.ZooFlow/frmFlowForm.vb index 7a8a511b..1ba0dafa 100644 --- a/GUIs.ZooFlow/frmFlowForm.vb +++ b/GUIs.ZooFlow/frmFlowForm.vb @@ -1,13 +1,14 @@ Option Explicit On Imports System.IO +Imports System.Runtime.InteropServices Imports DevExpress.XtraSplashScreen -Imports DigitalData.Modules.Logging -Imports DigitalData.Modules.Messaging Imports DigitalData.GUIs.ClipboardWatcher Imports DigitalData.GUIs.ZooFlow.ClassConstants +Imports DigitalData.GUIs.ZooFlow.ClipboardWatcher Imports DigitalData.Modules -Imports System.Runtime.InteropServices +Imports DigitalData.Modules.Logging +Imports DigitalData.Modules.Messaging Imports DigitalData.Modules.Windows Public Class frmFlowForm @@ -19,14 +20,20 @@ Public Class frmFlowForm Private Logger As Logger Private DTIDB_SEARCHES As DataTable - ' Helper Classes + ' 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 clsFW As ClassFolderwatcher - Private _DataASorDB As ClassDataASorDB - Private WindowClass As Window + Private ProfileLoader As ClassProfileLoader ' Runtime Flags Private ApplicationLoading As Boolean = True @@ -49,51 +56,26 @@ Public Class frmFlowForm ' === Hide form initially === Opacity = OPACITY_INITIAL - End Sub - - Public Structure WINDOWPOS - Public hwnd As IntPtr - Public hwndInsertAfter As IntPtr - Public x As Integer - Public y As Integer - Public cx As Integer - Public cy As Integer - Public flags As Integer - End Structure 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) - Try - Try - Dim directory As New IO.DirectoryInfo(My.LogConfig.LogDirectory) - - For Each file As IO.FileInfo In directory.GetFiles - If (Now - file.CreationTime).Days > 29 Then - file.Delete() - Else - Exit For - End If + ' === Clean up logfiles === + FileClass = New Filesystem.File(My.LogConfig) + FileClass.RemoveFiles(My.LogConfig.LogDirectory, 30, String.Empty, "log") - Next - Catch ex As Exception - - End Try + ' === Initialize AppServer Database Connection with Failover + AppServerOrDB = New ClassDataASorDB(My.LogConfig) - Catch ex As Exception - - End Try ' === Initialization === Init = New ClassInit(My.LogConfig, Me) - AddHandler Init.Completed, AddressOf Init_Completed Init.InitializeApplication() - _DataASorDB = New ClassDataASorDB(My.LogConfig) End Sub Protected Overrides Sub WndProc(ByRef m As Message) ' Listen for operating system messages @@ -104,8 +86,7 @@ Public Class frmFlowForm MyBase.WndProc(m) End Sub - Public Shared Sub SnapToDesktopBorder(ByVal clientForm _ - As Form, ByVal LParam As IntPtr, ByVal widthAdjustment As Integer) + 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") @@ -116,9 +97,9 @@ Public Class frmFlowForm Try ' Marshal the LPARAM value which is a WINDOWPOS struct - Dim NewPosition As New WINDOWPOS - NewPosition = CType(Runtime.InteropServices.Marshal.PtrToStructure( - LParam, GetType(WINDOWPOS)), WINDOWPOS) + 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! @@ -182,11 +163,11 @@ Public Class frmFlowForm End If ' Marshal it back - Runtime.InteropServices.Marshal.StructureToPtr(NewPosition, - LParam, True) + 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 === @@ -230,7 +211,7 @@ Public Class frmFlowForm If My.Application.ModulesActive.Contains(MODULE_CLIPBOARDWATCHER) Then Try - WindowClass = New Window(My.LogConfig) + ClassWindow = New Window(My.LogConfig) HotkeyClass = New Hotkey(Me) 'Add Toggle Hotkey @@ -256,19 +237,24 @@ Public Class frmFlowForm 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 Hotkeys for Clipboard Watcher!", MsgBoxStyle.Critical, Text) + 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(ClassConstants.MODULE_GLOBAL_INDEXER) Then + If My.Application.ModulesActive.Contains(MODULE_GLOBAL_INDEXER) Then FileDrop = New ClassFileDrop(My.LogConfig) FileHandle = New ClassFilehandle() - clsFW = New ClassFolderwatcher + FolderWatch = New ClassFolderwatcher Refresh_RegexTable() If My.Application.Globix.LoadFileExclusion = False Then If My.Application.User.Language = "de-DE" Then @@ -286,17 +272,17 @@ Public Class frmFlowForm End If oSQL = "SELECT * FROM TBIDB_ATTRIBUTE" - My.DTAttributes = _DataASorDB.GetDatatable("IDB", oSQL, "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 folderwatchPath = My.Database.GetScalarValue(oSql) + Dim oFolderWatchPath As Object = My.Database.GetScalarValue(oSql) + oFolderWatchPath = NotNull(oFolderWatchPath, String.Empty) - folderwatchPath = IIf(IsDBNull(folderwatchPath), "", folderwatchPath) - - If folderwatchPath = String.Empty Then + If oFolderWatchPath = String.Empty Then Logger.Info("Init_Folderwatch: folderwatchPath is empty") My.Application.Globix.Folderwatchstarted = False 'SaveConfigValue("my.Application.Globix.Folderwatchstarted", "False") @@ -305,7 +291,7 @@ Public Class frmFlowForm End If - If Not IO.Directory.Exists(folderwatchPath) Then + 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") @@ -314,11 +300,11 @@ Public Class frmFlowForm End If - My.Application.Globix.CURRENT_FOLDERWATCH = folderwatchPath + My.Application.Globix.CURRENT_FOLDERWATCH = oFolderWatchPath My.Application.Globix.Folderwatchstarted = True 'FWFunction_STARTED = True - clsFW.StartStop_FolderWatch() + FolderWatch.StartStop_FolderWatch() Catch ex As Exception MsgBox($"Init_Folderwatch: Unexpected error while starting FolderWatch: {ex.Message}", MsgBoxStyle.Critical) Logger.Info($"Init_Folderwatch: Unexpected error: {ex.Message}") @@ -348,7 +334,7 @@ Public Class frmFlowForm 'FWFunction_STARTED = True - clsFW.StartStop_FolderWatchSCAN() + 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}") @@ -855,46 +841,44 @@ Public Class frmFlowForm End Sub Private Sub Watcher_ClipboardChanged(sender As Object, e As IDataObject) - If My.Application.ClipboardWatcher.MonitoringActive = False Then + Dim oState = My.Application.ClipboardWatcher + + If oState.MonitoringActive = False Then Logger.Info("Clipboard Watcher is not active!") Exit Sub End If - If My.Application.ClipboardWatcher.UserProfiles Is Nothing OrElse My.Application.ClipboardWatcher.UserProfiles.Rows.Count = 0 Then + If oState.UserProfiles Is Nothing OrElse oState.UserProfiles.Rows.Count = 0 Then Logger.Warn("User Profiles is empty!") Exit Sub End If - If My.Application.ClipboardWatcher.ProfileProcesses Is Nothing OrElse My.Application.ClipboardWatcher.ProfileProcesses.Rows.Count = 0 Then + If oState.ProfileProcesses Is Nothing OrElse oState.ProfileProcesses.Rows.Count = 0 Then Logger.Warn("Profile Processes is empty!") Exit Sub End If - If My.Application.ClipboardWatcher.ProfileWindows Is Nothing OrElse My.Application.ClipboardWatcher.ProfileWindows.Rows.Count = 0 Then + If oState.ProfileWindows Is Nothing OrElse oState.ProfileWindows.Rows.Count = 0 Then Logger.Warn("Profile Processes is empty!") Exit Sub End If - If My.Application.ClipboardWatcher.ProfileProcesses Is Nothing OrElse My.Application.ClipboardWatcher.ProfileProcesses.Rows.Count = 0 Then + If oState.ProfileProcesses Is Nothing OrElse oState.ProfileProcesses.Rows.Count = 0 Then Logger.Warn("Profile Processes is empty!") Exit Sub End If - - Dim oWindowInfo = WindowClass.GetWindowInfo() + Dim oWindowInfo = ClassWindow.GetWindowInfo() Dim ClipboardContents As String = Clipboard.GetText().Trim() Try ' Tree View zurücksetzen - My.Application.ClipboardWatcher.MatchTreeView.Nodes.Clear() + oState.MatchTreeView.Nodes.Clear() ProfileFilter = New ProfileFilter(My.LogConfig, - My.Application.ClipboardWatcher.UserProfiles, - My.Application.ClipboardWatcher.ProfileProcesses, - My.Application.ClipboardWatcher.ProfileWindows, - My.Application.ClipboardWatcher.ProfileControls, - My.Application.ClipboardWatcher.MatchTreeView - ) + 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) @@ -919,7 +903,7 @@ Public Class frmFlowForm ' Filter by Focused Control oProfiles = ProfileFilter.FilterProfilesByFocusedControl(oProfiles, ClipboardContents, Handle) oProfiles = ProfileFilter.LogRemainingProfiles(oProfiles, "FilterProfilesByFocusedControl") - My.Application.ClipboardWatcher.CurrentMatchingProfiles = oProfiles.ToList() + oState.CurrentMatchingProfiles = oProfiles.ToList() ' Filter by Search Results oProfiles = ProfileFilter.FilterProfilesBySearchResults(oProfiles, oEnvironment.Database, oEnvironment.User, ClipboardContents) @@ -930,11 +914,56 @@ Public Class frmFlowForm oProfiles = ProfileFilter.ClearDuplicateProfiles(oProfiles) oProfiles = ProfileFilter.LogRemainingProfiles(oProfiles, "CleanUp") - My.Application.ClipboardWatcher.CurrentProfilesWithResults = oProfiles.ToList() - My.Application.ClipboardWatcher.CurrentClipboardContents = ClipboardContents + oState.CurrentProfilesWithResults = oProfiles.ToList() + oState.CurrentClipboardContents = ClipboardContents Catch ex As Exception Logger.Error(ex) MsgBox("Fehler beim Auswerten der Profile. Mehr Informationen im Log.", MsgBoxStyle.Critical, Text) End Try End Sub -End Class \ No newline at end of file + + 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.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 keine passenden Profile 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 +End Class + diff --git a/Modules.Filesystem/File.vb b/Modules.Filesystem/File.vb index 24d617e1..883e6c9c 100644 --- a/Modules.Filesystem/File.vb +++ b/Modules.Filesystem/File.vb @@ -164,7 +164,8 @@ Public Class File EnumerateFiles($"*{FileBaseName}*"). Where(Function(oFileInfo As FileInfo) Return oFileInfo.Extension = FileExtension And oFileInfo.LastWriteTime < oDateLimit - End Function) + End Function). + ToList() If oFiles.Count = 0 Then _logger.Debug("No files found that match the criterias.")