FileFlow/Global_Indexer/ClassFilehandle.vb
2015-08-19 14:36:21 +02:00

127 lines
5.7 KiB
VB.net

Imports System.IO
Imports Independentsoft
Public Class ClassFilehandle
Public Shared Function Decide_FileHandle(filename As String, handletype As String)
Try
If filename.EndsWith(".msg") Then
CURRENT_MESSAGEID = ""
Dim _msg As New Msg.Message(filename)
If _msg.Attachments.Count > 0 Then
Dim result As MsgBoxResult
result = MessageBox.Show("Achtung: Die Email enthält Anhänge!" & vbNewLine & "Wollen Sie die Anhänge separat indexieren und herauslösen?", "Nachfrage zur Indexierung:", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If result = MsgBoxResult.Yes Then
If handletype.StartsWith("@FW") Then
Return Email_Decay(filename, True)
Else
Return Email_Decay(filename)
End If
End If
End If
End If
Return Insert_GI_File(filename, handletype)
Catch ex As Exception
MsgBox("Unexpected Error in Decide_FileHandle: " & ex.Message, MsgBoxStyle.Critical)
Return False
End Try
End Function
Private Shared Function Email_Decay(msgname As String, Optional FW As Boolean = False)
Try
Dim msgonly As String = "@MSGONLY@"
Dim ATT_EXTR As String = "@ATTMNTEXTRACTED@"
If FW = True Then
msgonly = "@FW_MSGONLY@"
ATT_EXTR = "@FW_ATTMNTEXTRACTED@"
End If
Dim erfolgreich As Boolean = False
Dim msg As New Msg.Message(msgname)
If Not msg.InternetMessageId Is Nothing Then
CURRENT_MESSAGEID = msg.InternetMessageId
Else
MsgBox("Es konnte keine Message-ID ausgelesen werden." & vbNewLine & "Dies kann zu Fehlern in der Indexierung führen!", MsgBoxStyle.Exclamation, "Achtung:")
End If
'Nur die MSGDatei ablegen
Dim tempfile As String = Path.Combine(Path.GetTempPath, Path.GetFileNameWithoutExtension(msgname) & "_excl_att.msg")
If File.Exists(tempfile) Then
File.Delete(tempfile)
End If
Dim _msgEXAtt As New Msg.Message(msgname)
_msgEXAtt.Attachments.Clear()
_msgEXAtt.Save(tempfile)
If Insert_GI_File(tempfile, msgonly) = True Then
erfolgreich = True
'Hier nun die Anhänge herauslösen
Dim _msg As New Msg.Message(msgname)
Dim i1 As Integer = 1
If LogErrorsOnly = False Then ClassLogger.Add(">> Anzahl der Attachments: " & _msg.Attachments.Count, False)
For Each attachment As Independentsoft.Msg.Attachment In _msg.Attachments
If erfolgreich = False Then
Exit For
End If
Dim attachment_name As String
If attachment.LongFileName Is Nothing Then
attachment_name = attachment.DisplayName
Else
attachment_name = attachment.LongFileName
End If
If Not attachment_name.Contains("inline") Then
tempfile = Path.Combine(Path.GetTempPath, attachment_name)
If File.Exists(tempfile) Then
File.Delete(tempfile)
End If
attachment.Save(tempfile)
If LogErrorsOnly = False Then ClassLogger.Add(">> Attachment (" & i1 & "):" & tempfile, False)
'nun der Insert des Anhanges
erfolgreich = Insert_GI_File(tempfile, ATT_EXTR)
i1 += 1
End If
Next
End If
Return erfolgreich
Catch ex As Exception
MsgBox("Error in Email_Decay: " & ex.Message, MsgBoxStyle.Critical)
End Try
End Function
Private Shared Function Insert_GI_File(filename As String, handleType As String)
Try
Dim filename_only As String = Path.GetFileName(filename)
Dim ins As String = "INSERT INTO TBGI_FILES_USER (FILENAME2WORK, USER@WORK,HANDLE_TYPE,FILENAME_ONLY) VALUES ('" & filename & "','" & Environment.UserName & "','" & handleType & "','" & filename_only & "')"
Return ClassDatabase.Execute_non_Query(ins, True)
Catch ex As Exception
Return False
End Try
End Function
Public Shared Function IsFileInUse(ByVal fullFilePath As String) As Boolean
' Gibt zurück, ob die übergebene Datei momentan exklusiv zu haben ist.
' Prüft, ob die angegeben Datei aktuell durch eine
' andere Anwendung in Benutzung ist
Dim ff As Integer = FreeFile()
If System.IO.File.Exists(fullFilePath) Then
Try
' Versuchen, die Datei mit *exklusiven* Lese- und
' Schreibrechten zu öffnen
FileOpen(ff, fullFilePath, OpenMode.Binary, _
OpenAccess.ReadWrite, _
OpenShare.LockReadWrite)
Catch
' Ist ein Fehler aufgetreten, so wird nach außen hin generell
' davon ausgegangen, dass die Datei in Benutzung ist (obwohl
' auch andere Ursachen, etwa Rechteprobleme, möglich sind).
IsFileInUse = True
Finally
' Die eventuell geöffnete Datei schließen
FileClose(ff)
End Try
End If
End Function
End Class