diff --git a/GUIs.Common/Constants.vb b/GUIs.Common/Constants.vb
index 84b11578..00a44065 100644
--- a/GUIs.Common/Constants.vb
+++ b/GUIs.Common/Constants.vb
@@ -1,4 +1,6 @@
Public Class Constants
+ Public Const TEMP_PATH_SUBFOLDER = "DigitalData_Common"
+
Public Const NO_ROW_HANDLE = -1
Public Shared ReadOnly MESSAGE_TOO_MANY_SEARCHES = "You have more than three searches configured. This Window will only show the first three result lists!"
diff --git a/GUIs.Common/DocumentResultList/Document.vb b/GUIs.Common/DocumentResultList/Document.vb
index 13052367..01b05f21 100644
--- a/GUIs.Common/DocumentResultList/Document.vb
+++ b/GUIs.Common/DocumentResultList/Document.vb
@@ -13,7 +13,7 @@ Namespace DocumentResultList
'''
''' Extension is needed for determining the type of file
- ''' and showing it in the DocumentViewer
+ ''' and showing it in the DocumentViewer. It is saved without the dot-separator.
'''
Public Property Extension As String
'''
diff --git a/GUIs.Common/DocumentResultList/Opener.vb b/GUIs.Common/DocumentResultList/Opener.vb
index 8e03f5c5..320e631b 100644
--- a/GUIs.Common/DocumentResultList/Opener.vb
+++ b/GUIs.Common/DocumentResultList/Opener.vb
@@ -1,51 +1,121 @@
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.ZooFlow.Base
+Imports DigitalData.Modules.Language.DateTimeEx
+Imports System.IO
+Imports System.Text
+Imports System.Timers
Namespace DocumentResultList
Public Class Opener
Inherits BaseClass
+ Private WithEvents FileOpenTimer As New Timer
+
+ ' TODO: Hashes for checking if the opened file was modified externally
+ Private HashOriginalFile As String = Nothing
+ Private HashOpenedFile As String = Nothing
+
+ Private OpenFiles As New Dictionary(Of Integer, Document)
+
+ Public Event ProcessEnded As EventHandler(Of Document)
+
Public Sub New(pLogConfig As LogConfig)
MyBase.New(pLogConfig)
End Sub
- Public Sub OpenDocument(pDocument As Document)
+ Public Function OpenDocument(pDocument As Document) As Boolean
Dim oProcessId As Integer = Nothing
If pDocument.FullPath Is Nothing OrElse pDocument.FullPath.Trim = String.Empty Then
oProcessId = OpenFileFromPath(pDocument)
- ElseIf pDocument.Extension IsNot Nothing AndAlso pDocument.Contents IsNot Nothing Then
+ ElseIf pDocument.Extension IsNot Nothing AndAlso pDocument.Contents IsNot Nothing Then
+ oProcessId = OpenFileFromByteArry(pDocument)
End If
+ If IsNothing(oProcessId) Then
+ Logger.Warn("Process Id was empty. Returning false.")
+ Return False
+ End If
+ OpenFiles.Add(oProcessId, pDocument)
-
- End Sub
+ Return True
+ End Function
Private Function OpenFileFromByteArry(pDocument As Document) As Integer
Try
' TODO: Open file from temp folder
- Dim oTempPath = IO.Path.GetTempPath()
+ Dim oTempPath = Path.Combine(Path.GetTempPath(), Constants.TEMP_PATH_SUBFOLDER)
+ Dim oDirectory = Directory.CreateDirectory(oTempPath)
+ Dim oFileName = $"{pDocument.Id}-{Now.UnixTimestamp}.{pDocument.Extension}"
+ Dim oFilePath = Path.Combine(oTempPath, oFileName)
+
+ Using oMemoryStream As New MemoryStream(pDocument.Contents)
+ Using oStreamWriter As New StreamWriter(oFilePath, append:=False, Encoding.UTF8)
+ oMemoryStream.CopyTo(oMemoryStream)
+ End Using
+ End Using
+
+ Dim oProcess = OpenFile(oFilePath)
+ Return oProcess.Id
+
Catch ex As Exception
+ Logger.Error(ex)
+ Return Nothing
End Try
End Function
-
Private Function OpenFileFromPath(pDocument As Document) As Integer
Try
- Dim oProcess = Process.Start(New ProcessStartInfo With {
- .FileName = pDocument.FullPath
- })
-
+ Dim oProcess = OpenFile(pDocument.FullPath)
Return oProcess.Id
+
Catch ex As Exception
Logger.Error(ex)
Return Nothing
End Try
End Function
+
+ Private Function OpenFile(pFilePath As String) As Process
+ Dim oProcess = Process.Start(New ProcessStartInfo With {
+ .FileName = pFilePath
+ })
+
+ Return oProcess
+ End Function
+
+ Private Sub FileOpenTimer_Elapsed() Handles FileOpenTimer.Elapsed
+ Try
+ Dim oIds = Process.GetProcesses().
+ Select(Function(process) process.Id).
+ ToList()
+
+ Dim oNewFileOpenList As New Dictionary(Of Integer, Document)
+ For Each oOpenFile In OpenFiles
+ If oIds.Contains(oOpenFile.Key) Then
+ oNewFileOpenList.Add(oOpenFile.Key, oOpenFile.Value)
+ End If
+ Next
+
+ If oNewFileOpenList.Count < OpenFiles.Count Then
+ Dim oClosedFiles = OpenFiles.
+ Except(oNewFileOpenList).
+ ToList()
+
+ If oClosedFiles.Count = 1 Then
+ Dim oOpenFile = oClosedFiles.First()
+ RaiseEvent ProcessEnded(Me, oOpenFile.Value)
+ End If
+
+ OpenFiles = oNewFileOpenList
+ End If
+ Catch ex As Exception
+ Logger.Error(ex)
+ End Try
+ End Sub
End Class
End Namespace
\ No newline at end of file
diff --git a/GUIs.Common/frmDocumentResultList.vb b/GUIs.Common/frmDocumentResultList.vb
index 8ec4aaaa..6b95c70e 100644
--- a/GUIs.Common/frmDocumentResultList.vb
+++ b/GUIs.Common/frmDocumentResultList.vb
@@ -63,12 +63,6 @@ Public Class frmDocumentResultList
Private _FileOpenList As New Dictionary(Of Integer, String)
Private ReadOnly _Language As String
- ' TODO: Hashes for checking if the opened file was modified externally
- Private _HashOriginalFile As String = Nothing
- Private _HashOpenedFile As String = Nothing
-
- Private WithEvents _FileOpenTimer As New Timer
-
Private Property OperationMode As OperationMode Implements IResultForm.OperationMode
Public Property ShouldReturnToPreviousForm As Boolean = False Implements IResultForm.ShouldReturnToPreviousForm
@@ -609,38 +603,7 @@ Public Class frmDocumentResultList
End Function
- Public Sub FileOpenTimer_Elapsed() Handles _FileOpenTimer.Tick
- Try
- Dim oIds = Process.GetProcesses().
- Select(Function(process) process.Id).
- ToList()
- Dim oNewFileOpenList As New Dictionary(Of Integer, String)
- For Each oOpenFile In _FileOpenList
- If oIds.Contains(oOpenFile.Key) Then
- oNewFileOpenList.Add(oOpenFile.Key, oOpenFile.Value)
- End If
- Next
-
- If oNewFileOpenList.Count < _FileOpenList.Count Then
- Dim oClosedFiles = _FileOpenList.
- Except(oNewFileOpenList).
- ToList()
-
- If oClosedFiles.Count = 1 Then
- Dim oOpenFile = oClosedFiles.First()
- DocumentViewer1.LoadFile(oOpenFile.Value)
- Else
- 'ClearGridData()
- UpdateGridData()
- End If
-
- _FileOpenList = oNewFileOpenList
- End If
- Catch ex As Exception
- _Logger.Error(ex)
- End Try
- End Sub
#Region "Context Menu"
Private Sub GridView_PopupMenuShowing(sender As Object, e As PopupMenuShowingEventArgs) Handles GridView2.PopupMenuShowing, GridView3.PopupMenuShowing, GridView1.PopupMenuShowing