Zooflow: Custom Searches
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user