Common/DocumentResultList: WIP Opening and updating files

This commit is contained in:
Jonathan Jenne 2022-01-18 16:18:16 +01:00
parent 9d51074991
commit cc24b8eb31
4 changed files with 83 additions and 48 deletions

View File

@ -1,4 +1,6 @@
Public Class Constants Public Class Constants
Public Const TEMP_PATH_SUBFOLDER = "DigitalData_Common"
Public Const NO_ROW_HANDLE = -1 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!" Public Shared ReadOnly MESSAGE_TOO_MANY_SEARCHES = "You have more than three searches configured. This Window will only show the first three result lists!"

View File

@ -13,7 +13,7 @@ Namespace DocumentResultList
''' <summary> ''' <summary>
''' Extension is needed for determining the type of file ''' 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.
''' </summary> ''' </summary>
Public Property Extension As String Public Property Extension As String
''' <summary> ''' <summary>

View File

@ -1,51 +1,121 @@
Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.ZooFlow.Base Imports DigitalData.Modules.ZooFlow.Base
Imports DigitalData.Modules.Language.DateTimeEx
Imports System.IO
Imports System.Text
Imports System.Timers
Namespace DocumentResultList Namespace DocumentResultList
Public Class Opener Public Class Opener
Inherits BaseClass 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) Public Sub New(pLogConfig As LogConfig)
MyBase.New(pLogConfig) MyBase.New(pLogConfig)
End Sub End Sub
Public Sub OpenDocument(pDocument As Document) Public Function OpenDocument(pDocument As Document) As Boolean
Dim oProcessId As Integer = Nothing Dim oProcessId As Integer = Nothing
If pDocument.FullPath Is Nothing OrElse pDocument.FullPath.Trim = String.Empty Then If pDocument.FullPath Is Nothing OrElse pDocument.FullPath.Trim = String.Empty Then
oProcessId = OpenFileFromPath(pDocument) 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 End If
If IsNothing(oProcessId) Then
Logger.Warn("Process Id was empty. Returning false.")
Return False
End If
OpenFiles.Add(oProcessId, pDocument)
Return True
End Sub End Function
Private Function OpenFileFromByteArry(pDocument As Document) As Integer Private Function OpenFileFromByteArry(pDocument As Document) As Integer
Try Try
' TODO: Open file from temp folder ' 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 Catch ex As Exception
Logger.Error(ex)
Return Nothing
End Try End Try
End Function End Function
Private Function OpenFileFromPath(pDocument As Document) As Integer Private Function OpenFileFromPath(pDocument As Document) As Integer
Try Try
Dim oProcess = Process.Start(New ProcessStartInfo With { Dim oProcess = OpenFile(pDocument.FullPath)
.FileName = pDocument.FullPath
})
Return oProcess.Id Return oProcess.Id
Catch ex As Exception Catch ex As Exception
Logger.Error(ex) Logger.Error(ex)
Return Nothing Return Nothing
End Try End Try
End Function 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 Class
End Namespace End Namespace

View File

@ -63,12 +63,6 @@ Public Class frmDocumentResultList
Private _FileOpenList As New Dictionary(Of Integer, String) Private _FileOpenList As New Dictionary(Of Integer, String)
Private ReadOnly _Language As 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 Private Property OperationMode As OperationMode Implements IResultForm.OperationMode
Public Property ShouldReturnToPreviousForm As Boolean = False Implements IResultForm.ShouldReturnToPreviousForm Public Property ShouldReturnToPreviousForm As Boolean = False Implements IResultForm.ShouldReturnToPreviousForm
@ -609,38 +603,7 @@ Public Class frmDocumentResultList
End Function 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" #Region "Context Menu"
Private Sub GridView_PopupMenuShowing(sender As Object, e As PopupMenuShowingEventArgs) Handles GridView2.PopupMenuShowing, GridView3.PopupMenuShowing, GridView1.PopupMenuShowing Private Sub GridView_PopupMenuShowing(sender As Object, e As PopupMenuShowingEventArgs) Handles GridView2.PopupMenuShowing, GridView3.PopupMenuShowing, GridView1.PopupMenuShowing