Imports System.IO
Imports Microsoft.Office.Interop

Public Class ClassDragDrop
    Public Shared files_dropped As String()
    Public Shared Function Drop_File(e As DragEventArgs)
        Try
            LOGGER.Debug("In Drop_File....")
            files_dropped = Nothing

            Dim sql As String = "DELETE FROM TBPMO_FILES_USER WHERE HANDLE_TYPE <> 'SCAN' AND UPPER(USER_WORK) = UPPER('" & USER_USERNAME & "')"
            MYDB_ECM.ExecuteNonQuery(sql)


            If e.Data.GetDataPresent(DataFormats.FileDrop) Then
                LOGGER.Debug("Simple File Drop")
                Dim MyFiles() As String
                Dim i As Integer
                ' Assign the files to an array. 
                MyFiles = e.Data.GetData(DataFormats.FileDrop)
                ' Loop through the array and add the files to the list. 
                For i = 0 To MyFiles.Length - 1
                    LOGGER.Info("Simple FileDrop - File: " & MyFiles(i))
                    ReDim Preserve files_dropped(i)
                    files_dropped(i) = "@DROPFROMFSYSTEM@" & MyFiles(i)
                    ' ListBox1.Items.Add(MyFiles(i))
                Next
                Return True
            ElseIf (e.Data.GetDataPresent("FileGroupDescriptor")) AndAlso (e.Data.GetDataPresent("FileContents")) Then
                '// the first step here is to get the stbFileName
                '// of the attachment and
                '// build a full-path name so we can store it
                '// in the temporary folder
                '//
                '// set up to obtain the aryFileGroupDescriptor
                '// and extract the file name                
                Dim stmInput As IO.Stream = CType(e.Data.GetData("FileGroupDescriptor"), IO.Stream)
                Dim aryFileGroupDescriptor(512) As Byte ' = new byte[512]
                stmInput.Read(aryFileGroupDescriptor, 0, 512)
                '// used to build the stbFileName from the aryFileGroupDescriptor block
                Dim stbFileName As System.Text.StringBuilder = New System.Text.StringBuilder("")
                '// this trick gets the stbFileName of the passed attached file
                Dim intCnt As Integer = 76
                Do While aryFileGroupDescriptor(intCnt) <> 0
                    stbFileName.Append(Convert.ToChar(aryFileGroupDescriptor(intCnt), System.Globalization.CultureInfo.CreateSpecificCulture("de-DE")))
                    intCnt += 1
                Loop
                stmInput.Close()

                Dim anhaenge = e.Data.GetDataPresent("FileContents")
                'Dim path As String = "C:\VBProjekte\Dateien"
                '// put the zip file into the temp directory
                Dim strOutFile As String = Path.GetTempPath() & stbFileName.ToString()
                '// create the full-path name
                '//
                '// Second step:  we have the file name. 
                '// Now we need to get the actual raw
                '// data for the attached file and copy it to disk so we work on it.
                '//
                '// get the actual raw file into memory
                Dim msInput As IO.MemoryStream = CType(e.Data.GetData("FileContents", True), IO.MemoryStream) 'This returns nothing for an Email
                If msInput Is Nothing = False Then
                    LOGGER.Debug("Drag of Outlook Attachment")
                    '// allocate enough bytes to hold the raw date
                    Dim aryFileBytes(CType(msInput.Length, Int32)) As Byte
                    '// set starting position at first byte and read in the raw data
                    msInput.Position = 0
                    msInput.Read(aryFileBytes, 0, CType(msInput.Length, Int32))
                    '// create a file and save the raw zip file to it
                    Dim fsOutput As IO.FileStream = New IO.FileStream(strOutFile, IO.FileMode.Create) ';
                    fsOutput.Write(aryFileBytes, 0, aryFileBytes.Length)
                    fsOutput.Close() ' // close the file
                    Dim resultVersion = ClassHelper.Versionierung_Datei(strOutFile)
                    If resultVersion <> "" Then
                        strOutFile = resultVersion
                    End If
                    Dim finTemp As IO.FileInfo = New IO.FileInfo(strOutFile)
                    '// always good to make sure we actually created the file
                    If (finTemp.Exists = True) Then
                        ReDim Preserve files_dropped(0)
                        files_dropped(0) = "@OUTLOOK_ATTACHMENT@" & strOutFile
                        LOGGER.Debug("Drop an Attachment - File: " & strOutFile)
                        Return True
                    Else
                        LOGGER.Warn("Attachment File from Outlook could not be created")
                    End If
                Else
                    LOGGER.Warn("No simple drag and drop.", True)
                    For Each fmt As String In e.Data.GetFormats()
                        ' Output format name and type
                        LOGGER.Warn("e.Data is: " & fmt + " (" +
                              e.Data.GetData(fmt).ToString() + ")", True)
                    Next

                End If
            End If
            If e.Data.GetDataPresent("FileGroupDescriptor") Then
                Dim oApp
                Try
                    oApp = New Outlook.Application()
                Catch ex As Exception
                    MsgBox("Unexpected error in Initialisieren von Outlook-API:" & vbNewLine & ex.Message & vbNewLine & vbNewLine & "Evtl ist Outlook nicht in der dafür vorgesehenen For")
                    Return False
                End Try
                LOGGER.Debug("Drop of msg")
                'supports a drop of a Outlook message 
                Dim myobj As Object
                For i As Integer = 1 To oApp.ActiveExplorer.Selection.Count
                    myobj = oApp.ActiveExplorer.Selection.Item(i)
                    Dim subj As String = myobj.Subject
                    If subj = "" Then
                        subj = "NO_SUBJECT"
                    End If
                    If subj.Contains("\") Then
                        subj = subj.Replace("\", "-")
                    End If
                    If subj.Contains("/") Then
                        subj = subj.Replace("/", "-")
                    End If
                    'hardcode a destination path for testing
                    Dim strFile As String = IO.Path.Combine(Path.GetTempPath, (subj + ".msg").Replace(":", ""))
                    strFile = strFile.Replace("?", "")
                    strFile = strFile.Replace("!", "")
                    strFile = strFile.Replace("%", "")
                    strFile = strFile.Replace("$", "")
                    LOGGER.Info("Drop of msg - File:" & strFile)
                    Try
                        myobj.SaveAs(strFile)
                    Catch ex As Exception
                        MsgBox("Error in Save Email2Tempfile" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
                        Return False
                    End Try

                    ReDim Preserve files_dropped(i)
                    files_dropped(i) = "@OUTLOOK_MESSAGE@" & strFile
                Next
                Return True
                'Drop eines Outlook Attachments
            End If

        Catch ex As Exception
            MsgBox("Unexpected Error in Drop_File: " & ex.Message, MsgBoxStyle.Critical)
        End Try
        If e.Data.GetDataPresent(DataFormats.StringFormat) Then
            Dim Wert As String = CType(e.Data.GetData(DataFormats.StringFormat), Object)
            Console.WriteLine(Wert)
            ReDim Preserve files_dropped(0)
            files_dropped(0) = "@SCAN@" & Wert
            Return True
        End If
      

    End Function
    Public Shared Sub Drag_enter(e As DragEventArgs)
        Try
            My.Settings.WD_INDEXDOKART_SAVE = ""
            If e.Data.GetDataPresent(DataFormats.FileDrop) Then
                e.Effect = DragDropEffects.All
                LOGGER.Debug("DragEnter ... SimpleFileDrop")
                'frmForm_Constructor_Main_2.tslblStatusMain_show(True, "DragEnter ... SimpleFileDrop")
            ElseIf (e.Data.GetDataPresent("FileGroupDescriptor")) AndAlso (e.Data.GetDataPresent("FileContents")) Then
                e.Effect = DragDropEffects.Copy
                'frmForm_Constructor_Main_2.tslblStatusMain_show(True, "DragEnter ... Attachment from Outlook")
                LOGGER.Debug("DragEnter ... Attachment from Outlook")
            ElseIf e.Data.GetDataPresent("FileGroupDescriptor") Then
                'handle a message dragged from Outlook
                e.Effect = DragDropEffects.Copy
                'frmForm_Constructor_Main_2.tslblStatusMain_show(True, "DragEnter ... OutlookMessage")
                LOGGER.Debug("DragEnter ... OutlookMessage")
            Else
                'otherwise, do not handle
                e.Effect = DragDropEffects.Copy
                'frmForm_Constructor.tslblStatusMain_show(True, "DragEnter ... Other FileFormat")
                LOGGER.Debug("DragEnter ... Other FileFormat")
            End If
        Catch ex As Exception

        End Try
    End Sub
   
End Class
