Common/DocumentResultList: WIP Opening and updating files
This commit is contained in:
parent
9d51074991
commit
cc24b8eb31
@ -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!"
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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
|
||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user