FileFlow/Global_Indexer/frmStart.vb
2015-07-24 10:45:41 +02:00

478 lines
24 KiB
VB.net

Imports System.IO
Imports Microsoft.Office.Interop
Imports Independentsoft
Imports DLLLicenseManager
Imports System.Text
Public Class frmStart
Dim sql_User_Login As String = "UPDATE TBDD_USER SET LOGGED_IN = @LogInOut, LOGGED_WHERE = '@ANGEMELDETWO' WHERE (LOWER(USERNAME) = LOWER('@user'))"
Dim sql_UserID As String = "SELECT GUID FROM TBDD_USER WHERE (LOWER(USERNAME) = LOWER('@user'))"
Private USER_GUID
Private ISUserAdmin As Boolean = False
Public _lizenzManager As ClassLicenseManager
Dim loaded As Boolean = False
Dim WithEvents HotKey As New clsHotkey(Me)
Private Sub frmMain_DragDrop(sender As Object, e As DragEventArgs) Handles MyBase.DragDrop
ClassDragDrop.Drop_File(e)
Check_Dropped_Files()
End Sub
Private Sub ReceiveHotKey(ByVal HotKeyID As String) Handles HotKey.HotKeyPressed
Me.Cursor = Cursors.WaitCursor
Me.NotifyIcon1.Visible = True
NotifyIcon1.ShowBalloonTip(2000, "Hotkey", "Hotkey wird ausgeführt!", ToolTipIcon.Info)
Try
'Die vorherige Tempfile löschen
If CURRENT_WD_TEMPSEARCH <> "" Then
If My.Computer.FileSystem.FileExists(CURRENT_WD_TEMPSEARCH) Then
Try
My.Computer.FileSystem.DeleteFile(CURRENT_WD_TEMPSEARCH)
Catch ex As Exception
End Try
End If
End If
Dim HK1 As String
Dim HK2 As String
'Die Hotkeys definieren
Dim SQL As String = "SELECT * FROM TBHOTKEYTEMP_USER_HOTKEYS WHERE HOTKEY_ID = " & HotKeyID
Dim DTHOTKEYSTEMP As DataTable = ClassDatabase.Return_Datatable(SQL, True)
If Not IsNothing(DTHOTKEYSTEMP) Then
HK1 = DTHOTKEYSTEMP.Rows(0).Item("HOTKEY1")
HK2 = DTHOTKEYSTEMP.Rows(0).Item("HOTKEY2")
'Alle Profile raussuchen die die Tastaturkombination enthalten
SQL = "select * from TBHOTKEY_USER_PROFILE where UPPER(HOTKEY1) = UPPER('" & HK1 & "') AND UPPER(HOTKEY2) = UPPER('" & HK2 & "') AND USER_ID = " & CURRENT_USERID
Dim DTHOTKEY_PROFILES As DataTable = ClassDatabase.Return_Datatable(SQL, True)
Dim Result As String = ""
If Not IsNothing(DTHOTKEY_PROFILES) Then
For Each row As DataRow In DTHOTKEY_PROFILES.Rows
Result = ClassHotkey_Windream.RUN_WD_SEARCH(row.Item("GUID"))
Next
End If
If Result = "" Then
Me.NotifyIcon1.Visible = False
Else
NotifyIcon1.ShowBalloonTip(5000, "Hotkey-Fehler:", Result.ToString, ToolTipIcon.Warning)
End If
End If
Catch ex As Exception
MsgBox("Error in ReceiveHotKey: " & ex.Message, MsgBoxStyle.Critical)
End Try
Me.Cursor = Cursors.Default
End Sub
Private Sub frmMain_DragEnter(sender As Object, e As DragEventArgs) Handles Me.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 Check_Dropped_Files()
'Try
Me.TopMost = False
ClassDatabase.Execute_non_Query("DELETE FROM TBGI_FILES_USER WHERE WORKED = 1 AND UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')")
CURRENT_ABBRUCH = 0
Dim i As Integer
For Each Str As Object In ClassDragDrop.files_dropped
If Not Str Is Nothing Then
If LogErrorsOnly = False Then ClassLogger.Add(">> Check Drop-File: " & Str.ToString, False)
Dim handleType As String = Str.Substring(0, Str.LastIndexOf("@") + 1)
Dim filename As String = Str.Substring(Str.LastIndexOf("@") + 1)
If ClassIndexFunctions.FileExistsinDropTable(filename) = False Then
ClassFilehandle.Decide_FileHandle(filename, handleType)
i += 1
Else
Console.WriteLine("File gibt es bereits")
End If
End If
Next
Me.TopMost = True
Dim sql As String = "SELECT * FROM TBGI_FILES_USER WHERE WORKED = 0 AND UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')"
Dim DTFiles As DataTable = ClassDatabase.Return_Datatable(sql, True)
If DTFiles.Rows.Count > 1 Then
frmIndexFileList.ShowDialog()
DTFiles = ClassDatabase.Return_Datatable(sql, True)
End If
For Each Filerow As DataRow In DTFiles.Rows
Dim filestring As String = Filerow.Item("FILENAME2WORK")
CURRENT_FILENAME = Filerow.Item("FILENAME2WORK")
CURRENT_WORKFILE_GUID = Filerow.Item(0)
CURRENT_WORKFILE = Filerow.Item("FILENAME2WORK")
If LogErrorsOnly = False Then ClassLogger.Add(">> CURRENT_WORKFILE: " & CURRENT_WORKFILE, False)
If File.Exists(CURRENT_WORKFILE) Then
Open_IndexDialog()
End If
Next
''Prüfen ob alle Files abgearbeitet wurden
'Dim DT As DataTable = ClassDatabase.Return_Datatable("SELECT * FROM TBGI_FILES_USER WHERE WORKED = 0 AND HANDLE_TYPE not like '%@FW%' AND UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')")
'If DT.Rows.Count > 0 Then
' For Each row As DataRow In DT.Rows
' Dim filestring As String = row.Item(1)
' filestring = filestring.Substring(filestring.LastIndexOf("@") + 1)
' Select Case CURRENT_ABBRUCH
' Case 0
' CURRENT_ABBRUCH = 1
' Case 1
' CURRENT_ABBRUCH = 2
' Case 2
' CURRENT_ABBRUCH = 0
' End Select
' If File.Exists(filestring) Then
' MsgBox("Es sind noch Dateien zum Indexieren vorhanden:" & vbNewLine & "Bitte indexieren Sie die folgende Datei vollständig:", MsgBoxStyle.Exclamation)
' CURRENT_WORKFILE = row.Item(1)
' CURRENT_FILENAME = row.Item(1)
' CURRENT_WORKFILE_GUID = row.Item(0)
' Open_IndexDialog()
' Else
' ClassDatabase.Execute_non_Query("DELETE FROM TBGI_FILES_USER WHERE GUID = " & row.Item(0))
' End If
' Next
'End If
'Catch ex As Exception
' MsgBox("Check_Dropped_Files: " & ex.Message, MsgBoxStyle.Critical)
'End Try
End Sub
Sub Open_IndexDialog()
Try
Me.Hide()
frmIndex.ShowDialog()
Me.Visible = True
Me.TopMost = True
Me.BringToFront()
If File.Exists(CURRENT_FILENAME) Then
Select Case CURRENT_ABBRUCH
Case 1
MsgBox("Bitte indexieren Sie die Datei vollständig!" & vbNewLine & "(Abbruch 1 des Indexierungsvorgangs)", MsgBoxStyle.Information)
Open_IndexDialog()
Case 2
Dim result As MsgBoxResult
result = MessageBox.Show("Sie brechen nun zum zweiten Mal den Indexierungsvorgang ab!" & vbNewLine & "Wollen Sie die Indexierung aller Dateien abbrechen?", "Bestätigung erforderlich:", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If result = MsgBoxResult.Yes Then
ClassDatabase.Execute_non_Query("DELETE FROM TBGI_FILES_USER WHERE UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')", True)
CURRENT_ABBRUCH = 0
Exit Sub
Else
CURRENT_ABBRUCH = 0
End If
End Select
End If
Catch ex As Exception
MsgBox("Fehler bei Aufruf Indexdialog: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
Me.Visible = True
End Try
End Sub
Private Sub frmStart_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
Try
Dim sql = sql_User_Login
sql = sql.Replace("@LogInOut", 0)
sql = sql.Replace("@ANGEMELDETWO", "''")
sql = sql.Replace("@user", Environment.UserName)
ClassDatabase.Execute_non_Query(sql)
sql = "DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = " & USER_GUID & " AND MODULE = 'Global-Indexer'"
ClassDatabase.Execute_non_Query(sql)
ClassWindowLocation.SaveFormLocationSize(Me)
Catch ex As Exception
End Try
Unregister_Hotkeys()
End Sub
Sub Refresh_Licence()
Try
Me._lizenzManager = New ClassLicenseManager("#DigitalData35452!#", "")
Dim sql As String = "SELECT LICENSEKEY FROM TBGI_CONFIGURATION WHERE GUID = 1"
Dim lic As String = ClassDatabase.Execute_Scalar(sql, MyConnectionString)
Dim licString = Me._lizenzManager.DecodeLicenseKey(lic)
Dim split() = licString.ToString.Split("#")
If lic <> "" Then
License_Anzahl = split(0)
Else
License_Anzahl = 0
End If
If CDate(split(1)) < CDate(Now.ToShortDateString) Then
MsgBox("Ihre Lizenz ist abgelaufen!" & vbNewLine & "Letztes Gültigkeitsdatum: " & split(1) & vbNewLine & "Bitte setzen Sie sich mit Digital Data in Verbindung", MsgBoxStyle.Exclamation)
License_Expired = True
License_Anzahl = 0
End If
'tslblLicenses.Text = "Anzahl Lizenzen: " & licenseanzahl
LicenseProfiles = split(2)
Try
LicenseHotKey = split(3)
Catch ex As Exception
LicenseHotKey = 0
End Try
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Fehler bei Licensemanager:")
End Try
End Sub
Private Sub frmStart_Load(sender As Object, e As EventArgs) Handles Me.Load
'Me.TransparencyKey = Color.Transparent
' Me.BackColor = Color.Transparent
Try
If Environment.UserName.ToLower = "schreiberm" Then
AApiToolStripMenuItem.Visible = True
Else
AApiToolStripMenuItem.Visible = False
End If
Me.Opacity = 30
ClassWindowLocation.LoadFormLocationSize(Me)
Dim sql = sql_UserID
sql = sql.Replace("@user", Environment.UserName)
ClassLogger.Init("", "log_" & Environment.UserName)
ClassLogger.Add(">> Username: " & Environment.UserName, False)
LoadMyConfig()
If MyConnectionString = String.Empty Then
frmConfig_Basic.ShowDialog()
End If
If ClassDatabase.Init() = False Then
MsgBox("Es konnte keine Datenbankverbindung aufgebaut werden!" & vbNewLine & "Bitte prüfen Sie die Einstellungen und den Datenbankserver", MsgBoxStyle.Critical)
Me.Close()
End If
If UniversalViewer = String.Empty And My.Settings.DoNot_Show_Documents = False Then
frmConfig_Basic.ShowDialog()
End If
If MyConnectionString = String.Empty Then
Me.Close()
End If
Refresh_Licence()
USER_GUID = ClassDatabase.Execute_Scalar(sql, MyConnectionString)
If USER_GUID Is Nothing Then
ClassLogger.Add(" - User: " & Environment.UserName & " nicht in der Userverwaltung hinterlegt!", False)
MsgBox("Achtung: Sie sind nicht in der Userverwaltung hinterlegt." & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!", MsgBoxStyle.Critical, "Achtung:")
Me.Close()
Else
CURRENT_USERID = USER_GUID
Dim folderwatch = ClassDatabase.Execute_Scalar("SELECT FOLDER_PATH FROM TBGI_FOLDERWATCH_USER WHERE USER_ID = " & CURRENT_USERID, MyConnectionString)
If Not folderwatch Is Nothing Then
CURRENT_FOLDERWATCH = folderwatch
If FW_started = True Then
tslblFW.Visible = True
ClassFolderWatcher.StartStop_FolderWatch()
End If
If CURRENT_FOLDERWATCH <> "" Then
TimerFolderWatch.Start()
End If
End If
sql = "SELECT MODULE_GI FROM TBDD_USER WHERE (LOWER(USERNAME) = LOWER('@user'))"
sql = sql.Replace("@user", Environment.UserName)
If ClassDatabase.Execute_Scalar(sql, MyConnectionString, True) = False Then
ClassLogger.Add(" - User: " & Environment.UserName & " nicht für Modul freigegben!", False)
MsgBox("Achtung: Sie sind nicht für die Nutzung dieses Moduls freigeschaltet." & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!", MsgBoxStyle.Critical, "Achtung:")
Me.Close()
Else
'Am System anmelden
sql = sql_User_Login
sql = sql.Replace("@LogInOut", 1)
sql = sql.Replace("@ANGEMELDETWO", Environment.MachineName)
sql = sql.Replace("@user", Environment.UserName)
If ClassDatabase.Execute_non_Query(sql, True) = False Then
Me.Close()
End If
sql = "DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = " & USER_GUID & " AND MODULE= 'Global-Indexer'"
ClassDatabase.Execute_non_Query(sql, True)
sql = "INSERT INTO TBDD_USER_MODULE_LOG_IN (USER_ID,MODULE) VALUES (" & USER_GUID & ",'Global-Indexer')"
ClassDatabase.Execute_non_Query(sql, True)
sql = "SELECT GI_ADMIN FROM TBDD_USER WHERE GUID = " & USER_GUID
ISUserAdmin = ClassDatabase.Execute_Scalar(sql, MyConnectionString)
If ISUserAdmin = True Then
ToolStripSeparator1.Visible = True
AdministrationToolStripMenuItem.Visible = True
Else
ToolStripSeparator1.Visible = False
AdministrationToolStripMenuItem.Visible = False
End If
'Lizenz abgellaufen, überprüfen ob User Admin ist
If License_Expired And ISUserAdmin = False Then
' wenn ja dann schliessen
Me.Close()
Else
'ansonsten timer starten
TimerClose3Minutes.Start()
End If
'Anzahl der eingeloggten User
UserLoggedin = ClassDatabase.Execute_Scalar("SELECT COUNT(*) FROM TBDD_USER_MODULE_LOG_IN WHERE MODULE = 'Global-Indexer'", MyConnectionString)
If License_Anzahl < UserLoggedin Then
MsgBox("Die Anzahl der aktuell angemeldeten User (" & UserLoggedin.ToString & ") überschreitet die Anzahl der aktuellen Lizenzen!" & vbNewLine & "Anzahl der Lizenzen: " & License_Anzahl.ToString & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!", MsgBoxStyle.Critical, "Achtung:")
ClassLogger.Add(" - Die Anzahl der aktuell angemeldeten User (" & UserLoggedin.ToString & ") überschreitet die Anzahl der Lizenzen für Process-Manager!", False)
If ISUserAdmin = False Then
Me.Close()
Else
'ansonsten timer starten
If TimerClose3Minutes.Enabled = False Then
TimerClose3Minutes.Start()
End If
End If
End If
sql = "SELECT COUNT(*) AS Expr1 FROM TBDD_USER_MODULE_LOG_IN WHERE MODULE = 'Global-Indexer'"
Dim anzahl = ClassDatabase.Execute_Scalar(sql, MyConnectionString)
ClassDatabase.Execute_non_Query("DELETE FROM TBGI_FILES_USER WHERE UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')", True)
If LogErrorsOnly = False Then ClassLogger.Add(" - Anzahl Angemeldete User: " & anzahl.ToString, False)
If Load_BasicConfig() = False Then
Me.Close()
End If
Unregister_Hotkeys()
Load_Hotkeys()
End If
End If
Catch ex As Exception
MsgBox("Unexpected Error in Load-Form" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Sub Unregister_Hotkeys()
Try
Dim sql As String = "Select * from TBHOTKEYTEMP_USER_HOTKEYS where [USER_ID] = " & CURRENT_USERID
Dim DT As DataTable = ClassDatabase.Return_Datatable(sql, True)
If Not IsNothing(DT) Then
For Each row As DataRow In DT.Rows
HotKey.RemoveHotKey(row.Item("HOTKEY_ID"))
Next
sql = "delete from TBHOTKEYTEMP_USER_HOTKEYS where [USER_ID] = " & CURRENT_USERID
ClassDatabase.Execute_non_Query(sql, True)
End If
Catch ex As Exception
MsgBox("Error in Unregister_Hotkeys:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Sub Load_Hotkeys()
Try
Dim DT As DataTable = ClassDatabase.Return_Datatable("SELECT HOTKEY1, HOTKEY2, ABS(CONVERT(INT, CONVERT(binary(4), NEWID()))) AS HOTKEY_ID FROM TBHOTKEY_USER_PROFILE WHERE USER_ID = " & CURRENT_USERID & " GROUP BY HOTKEY1, HOTKEY2", True)
If DT.Rows.Count > 0 Then
If LogErrorsOnly = False Then ClassLogger.Add(" ... " & DT.Rows.Count & " Hotkeys", False)
Dim i As Integer = 0
For Each row As DataRow In DT.Rows
i += 1
Dim sql As String = "INSERT INTO TBHOTKEYTEMP_USER_HOTKEYS (HOTKEY_ID,HOTKEY1,HOTKEY2,[USER_ID]) VALUES (" & row.Item("HOTKEY_ID") & ", '" & row.Item("HOTKEY1") & "', '" & row.Item("HOTKEY2") & "', " & CURRENT_USERID & ")"
ClassDatabase.Execute_non_Query(sql, True)
Dim keyCode As Keys
Try
Dim kc As New KeysConverter
Dim obj As Object = kc.ConvertFromString(row.Item("HOTKEY2").ToString.ToUpper)
keyCode = CType(obj, Keys)
Catch ex As Exception
MsgBox("Error in Convert Key:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
Exit Sub
End Try
Select Case row.Item("HOTKEY1")
Case "Strg"
If LogErrorsOnly = False Then ClassLogger.Add(" ..." & i.ToString + "|Strg " & row.Item("HOTKEY2").ToString.ToUpper, False)
HotKey.AddHotKey(keyCode, clsHotkey.MODKEY.MOD_CONTROL, row.Item("HOTKEY_ID"))
Case "Shift"
If LogErrorsOnly = False Then ClassLogger.Add(" ..." & i.ToString + "|Shift " & row.Item("HOTKEY2").ToString.ToUpper, False)
HotKey.AddHotKey(keyCode, clsHotkey.MODKEY.MOD_SHIFT, row.Item("HOTKEY_ID"))
Case "Alt"
If LogErrorsOnly = False Then ClassLogger.Add(" ..." & i.ToString + "|Alt " & row.Item("HOTKEY2").ToString.ToUpper, False)
HotKey.AddHotKey(keyCode, clsHotkey.MODKEY.MOD_ALT, row.Item("HOTKEY_ID"))
Case "win"
If LogErrorsOnly = False Then ClassLogger.Add(" ..." & i.ToString + "|Win " & row.Item("HOTKEY2").ToString.ToUpper, False)
HotKey.AddHotKey(keyCode, clsHotkey.MODKEY.MOD_WIN, row.Item("HOTKEY_ID"))
End Select
Next
Else
If LogErrorsOnly = False Then ClassLogger.Add(" ... Keine Hotkeys!", False)
End If
Catch ex As Exception
MsgBox("Error in Load_Hotkeys:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub HotkeyEisntellungenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles HotkeyEisntellungenToolStripMenuItem.Click
Me.Hide()
Unregister_Hotkeys()
frmHotKey_Add.ShowDialog()
Load_Hotkeys()
Me.Visible = True
End Sub
Private Sub GlobalIndexerEinstellungenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles GlobalIndexerEinstellungenToolStripMenuItem.Click
Me.Hide()
frmAdministration.ShowDialog()
Me.Visible = True
End Sub
Private Sub GrundeinstellungenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles GrundeinstellungenToolStripMenuItem.Click
Me.TopMost = False
frmConfig_Basic.ShowDialog()
Me.TopMost = True
End Sub
Private Sub FrmHotkeyAddToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles FrmHotkeyAddToolStripMenuItem.Click
Me.TopMost = False
Unregister_Hotkeys()
frmHotkey_User.ShowDialog()
Load_Hotkeys()
Me.TopMost = True
End Sub
Private Sub TimerFolderWatch_Tick(sender As Object, e As EventArgs) Handles TimerFolderWatch.Tick
Try
If FW_started = 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 & "')"
Dim DT As DataTable = ClassDatabase.Return_Datatable(sql, True)
If DT.Rows.Count > 0 Then
' Dim fil As String
Me.TimerFolderWatch.Stop()
For Each row As DataRow In DT.Rows
CURRENT_WORKFILE = row.Item(1)
CURRENT_FILENAME = row.Item(1)
CURRENT_WORKFILE_GUID = row.Item("GUID")
Open_IndexDialog()
Next
Me.TimerFolderWatch.Start()
End If
tslblFW.Visible = True
Else
tslblFW.Visible = False
End If
Catch ex As Exception
MsgBox("Error in Work FolderWatch-File:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub TimerClose3Minutes_Tick(sender As Object, e As EventArgs) Handles TimerClose3Minutes.Tick
If License_Expired = True Or License_Anzahl < UserLoggedin Then
MsgBox("Global Indexer wird nun geschlossen, weil keine neue Lizenzdaten eingegeben wurden!", MsgBoxStyle.Information)
Me.Close()
End If
End Sub
Private Sub frmStart_Shown(sender As Object, e As EventArgs) Handles Me.Shown
loaded = True
Opacity = 0.65
TimerFolderWatch.Start()
End Sub
Private Sub HistoryIndexierteDateienToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles HistoryIndexierteDateienToolStripMenuItem.Click
frmHistory.ShowDialog()
End Sub
End Class