Zooflow: Custom Searches

This commit is contained in:
Jonathan Jenne
2022-06-08 16:31:34 +02:00
parent bd136bf6be
commit d5b9cae282
22 changed files with 1024 additions and 283 deletions

View File

@@ -8,23 +8,26 @@ Imports DigitalData.Modules.Base
Imports DigitalData.Modules.Config
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Language
Imports System.Reflection
Namespace Search
Public Class SearchLoader
Inherits BaseClass
Private Const CUSTOM_SEARCH_DIRECTORY = ""
Private Const CUSTOM_SEARCH_DIRECTORY = "Searches"
Private ReadOnly Images As SvgImageCollection
Private ReadOnly Config As ConfigManager(Of UIConfig)
'Private ReadOnly Serializer As New XmlSerializer(GetType(CustomSearch))
Private ReadOnly ImageTable As List(Of ImageTableItem)
Public Property CustomSearches As List(Of CustomSearch)
Private ReadOnly Config As ConfigManager(Of SystemConfig)
Private ReadOnly Serializer As XmlSerializer
Public Sub New(pLogConfig As LogConfig, pConfig As ConfigManager(Of UIConfig), pSvgImages As SvgImageCollection)
Public Sub New(pLogConfig As LogConfig, pConfig As ConfigManager(Of SystemConfig), pSvgImages As SvgImageCollection)
MyBase.New(pLogConfig)
Images = pSvgImages
ImageTable = GetImageTable(pSvgImages)
Config = pConfig
Serializer = New XmlSerializer(GetType(SavedSearch.CustomSearchSerializable))
End Sub
Private Function GetSearchDirectoryPath() As String
@@ -43,23 +46,27 @@ Namespace Search
End Function
Public Sub CreateCustomSearch(pTitle As String, pDescription As String, pTokens As List(Of Token), pImage As String)
Dim oSearch As New CustomSearch With {
Dim oSearch As New SavedSearch.CustomSearch With {
.Name = pTitle,
.Description = pDescription,
.Tokens = pTokens,
.Image = Images.Item(pImage)
}
CustomSearches.Add(oSearch)
'Dim oDirectoryPath As String = GetSearchDirectoryPath()
'Dim oFilePath As String = IO.Path.Combine(oDirectoryPath, Utils.ConvertTextToSlug(pTitle))
'Dim oBuffer As Byte() = SerializeSearch(oSearch)
Try
Dim oDirectoryPath As String = GetSearchDirectoryPath()
Dim oFilePath As String = IO.Path.Combine(oDirectoryPath, Utils.ConvertTextToSlug(pTitle) & ".xml")
Dim oBuffer As Byte() = SerializeSearch(oSearch)
'IO.File.WriteAllBytes(oFilePath, oBuffer)
File.WriteAllBytes(oFilePath, oBuffer)
Catch ex As Exception
Logger.Warn("Custom Search could not be saved!")
Logger.Error(ex)
End Try
End Sub
Public Function LoadSearches() As List(Of SavedSearch)
Dim oSearches As New List(Of SavedSearch)
Public Function LoadSearches() As List(Of SavedSearch.SavedSearch)
Dim oSearches As New List(Of SavedSearch.SavedSearch)
Dim oCustomSearches = LoadCustomSearches()
Dim oPredefinedSearches = LoadPredefinedSearches()
@@ -69,49 +76,60 @@ Namespace Search
ToList()
End Function
Public Function LoadCustomSearches() As List(Of SavedSearch)
Return New List(Of SavedSearch)
Public Function LoadCustomSearches() As List(Of SavedSearch.SavedSearch)
Dim oSearches As New List(Of SavedSearch.SavedSearch)
Dim oPath = GetSearchDirectoryPath()
Dim oFiles = Directory.GetFiles(oPath, "*.xml")
For Each oFile In oFiles
Dim oBytes = File.ReadAllBytes(oFile)
Dim oSearch = DeserializeSearch(oBytes)
oSearches.Add(oSearch)
Next
Return oSearches
End Function
Public Function LoadPredefinedSearches() As List(Of SavedSearch)
Return New List(Of SavedSearch) From {
New PredefinedDateSearch() With {
Public Function LoadPredefinedSearches() As List(Of SavedSearch.SavedSearch)
Return New List(Of SavedSearch.SavedSearch) From {
New SavedSearch.PredefinedDateSearch() With {
.Name = "Heute",
.Description = "Dokumente, die heute abgelegt wurden",
.DateConstraint = SearchRunner.DateConstraint.Today,
.Image = Images.Item("today")
},
New PredefinedDateSearch() With {
New SavedSearch.PredefinedDateSearch() With {
.Name = "Gestern",
.Description = "Dokumente, die gestern abgelegt wurden",
.DateConstraint = SearchRunner.DateConstraint.Yesterday,
.Image = Images.Item("yesterday")
},
New PredefinedDateSearch() With {
New SavedSearch.PredefinedDateSearch() With {
.Name = "Letzte 7 Tage",
.Description = "Dokumente, die in den letzten 7 Tagen abgelegt wurden",
.DateConstraint = SearchRunner.DateConstraint.Last7Days,
.Image = Images.Item("week")
},
New PredefinedDateSearch() With {
New SavedSearch.PredefinedDateSearch() With {
.Name = "Dieser Monat",
.Description = "Dokumente, die in diesem Monat abgelegt wurden",
.DateConstraint = SearchRunner.DateConstraint.CurrentMonth,
.Image = Images.Item("month")
},
New PredefinedDateSearch() With {
New SavedSearch.PredefinedDateSearch() With {
.Name = "Letzter Monat",
.Description = "Dokumente, die im letzten Monat abgelegt wurden",
.DateConstraint = SearchRunner.DateConstraint.LastMonth,
.Image = Images.Item("month")
},
New PredefinedDateSearch() With {
New SavedSearch.PredefinedDateSearch() With {
.Name = "Dieses Jahr",
.Description = "Dokumente, die in diesem Jahr abgelegt wurden",
.DateConstraint = SearchRunner.DateConstraint.CurrentYear,
.Image = Images.Item("year")
},
New PredefinedDateSearch() With {
New SavedSearch.PredefinedDateSearch() With {
.Name = "Letztes Jahr",
.Description = "Dokumente, die im letzten Jahr abgelegt wurden",
.DateConstraint = SearchRunner.DateConstraint.LastYear,
@@ -120,62 +138,86 @@ Namespace Search
}
End Function
'Private Function SerializeSearch(pSearch As CustomSearch) As Byte()
' Try
' Using oStream As New MemoryStream
' Serializer.Serialize(oStream, pSearch)
' Return oStream.ToArray()
' End Using
' Catch ex As Exception
' Logger.Error(ex)
' Return Nothing
' End Try
'End Function
Private Function ConvertSvgImageToString(pImage As SvgImage) As String
Dim oItem = ImageTable.Where(Function(item) item.Image.Equals(pImage)).FirstOrDefault()
If oItem Is Nothing Then
Return Nothing
End If
'Private Function DeserializeSearch(pBytes As Byte()) As CustomSearch
' Try
' Using oStream As New MemoryStream(pBytes)
' Return Serializer.Deserialize(oStream)
' End Using
' Catch ex As Exception
' Logger.Error(ex)
' Return Nothing
' End Try
'End Function
Return oItem.Name
End Function
Public Class PredefinedSQLSearch
Public Property SQLCommand As String
Private Function ConvertStringToImageName(pName As String) As SvgImage
Dim oItem = ImageTable.Where(Function(item) item.Name.Equals(pName)).FirstOrDefault()
If oItem Is Nothing Then
Return Nothing
End If
Return oItem.Image
End Function
Private Function GetImageTable(pImageCollection As SvgImageCollection) As List(Of ImageTableItem)
Dim oList As New List(Of ImageTableItem)
For Each oImageName In pImageCollection.Keys
Dim oSvgImage = pImageCollection.Item(oImageName)
oList.Add(New ImageTableItem(oImageName, oSvgImage))
Next
Return oList
End Function
Private Function SerializeSearch(pSearch As SavedSearch.CustomSearch) As Byte()
Try
Dim oSearch As New SavedSearch.CustomSearchSerializable With {
.Name = pSearch.Name,
.Description = pSearch.Description,
.GroupText = pSearch.GroupText,
.Tokens = pSearch.Tokens,
.ImageName = ConvertSvgImageToString(pSearch.Image)
}
Using oStream As New MemoryStream
Serializer.Serialize(oStream, oSearch)
Return oStream.ToArray()
End Using
Catch ex As Exception
Logger.Error(ex)
Return Nothing
End Try
End Function
Private Function DeserializeSearch(pBytes As Byte()) As SavedSearch.CustomSearch
Try
Using oStream As New MemoryStream(pBytes)
Dim oSearch As SavedSearch.CustomSearchSerializable = Serializer.Deserialize(oStream)
Return New SavedSearch.CustomSearch With {
.Name = oSearch.Name,
.Description = oSearch.Description,
.GroupText = oSearch.GroupText,
.Tokens = oSearch.Tokens,
.Image = ConvertStringToImageName(oSearch.ImageName)
}
End Using
Catch ex As Exception
Logger.Error(ex)
Return Nothing
End Try
End Function
Private Class ImageTableItem
Public ReadOnly Name As String
Public ReadOnly Image As SvgImage
Public Sub New(pName As String, pImage As SvgImage)
Name = pName
Image = pImage
End Sub
End Class
Public Class PredefinedDateSearch
Inherits SavedSearch
Public Overrides Property GroupText As String = "Vordefiniert"
Public Property DateConstraint As SearchRunner.DateConstraint
End Class
Public Class CustomSearch
Inherits SavedSearch
Public Overrides Property GroupText As String = "Eigene"
Public Tokens As New List(Of Token)
End Class
Public MustInherit Class SavedSearch
Public Property Name As String
Public Property Description As String
Public Property Image As SvgImage
Public Property Count As Integer = 0
Public Overridable Property GroupText As String = "Vordefiniert"
Public ReadOnly Property DisplayName As String
Get
Return Name
End Get
End Property
End Class
End Class
End Namespace