Zooflow: Work on Custom Searches
This commit is contained in:
182
GUIs.ZooFlow/Search/SearchLoader.vb
Normal file
182
GUIs.ZooFlow/Search/SearchLoader.vb
Normal file
@@ -0,0 +1,182 @@
|
||||
Imports System.IO
|
||||
Imports System.Xml.Serialization
|
||||
Imports DevExpress.Utils
|
||||
Imports DevExpress.Utils.Svg
|
||||
Imports DigitalData.GUIs.ZooFlow.frmSearchFlow
|
||||
Imports DigitalData.GUIs.ZooFlow.Search.SearchToken
|
||||
Imports DigitalData.Modules.Base
|
||||
Imports DigitalData.Modules.Config
|
||||
Imports DigitalData.Modules.Logging
|
||||
Imports DigitalData.Modules.Language
|
||||
|
||||
Namespace Search
|
||||
Public Class SearchLoader
|
||||
Inherits BaseClass
|
||||
|
||||
Private Const CUSTOM_SEARCH_DIRECTORY = ""
|
||||
|
||||
Private ReadOnly Images As SvgImageCollection
|
||||
Private ReadOnly Config As ConfigManager(Of UIConfig)
|
||||
Private ReadOnly Serializer As New XmlSerializer(GetType(CustomSearch))
|
||||
|
||||
Public Property CustomSearches As List(Of CustomSearch)
|
||||
|
||||
Public Sub New(pLogConfig As LogConfig, pConfig As ConfigManager(Of UIConfig), pSvgImages As SvgImageCollection)
|
||||
MyBase.New(pLogConfig)
|
||||
Images = pSvgImages
|
||||
Config = pConfig
|
||||
End Sub
|
||||
|
||||
Private Function GetSearchDirectoryPath() As String
|
||||
Dim oConfigPath As String = Config.UserConfigPath
|
||||
Dim oConfigDirectory As String = IO.Path.Combine(IO.Path.GetDirectoryName(oConfigPath), CUSTOM_SEARCH_DIRECTORY)
|
||||
|
||||
If IO.Directory.Exists(oConfigDirectory) = False Then
|
||||
Try
|
||||
IO.Directory.CreateDirectory(oConfigDirectory)
|
||||
Catch ex As Exception
|
||||
Logger.Error(ex)
|
||||
End Try
|
||||
End If
|
||||
|
||||
Return oConfigDirectory
|
||||
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 {
|
||||
.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)
|
||||
|
||||
IO.File.WriteAllBytes(oFilePath, oBuffer)
|
||||
End Sub
|
||||
|
||||
Public Function LoadSearches() As List(Of SavedSearch)
|
||||
Dim oSearches As New List(Of SavedSearch)
|
||||
Dim oCustomSearches = LoadCustomSearches()
|
||||
Dim oPredefinedSearches = LoadPredefinedSearches()
|
||||
|
||||
Return oSearches.
|
||||
Concat(oCustomSearches).
|
||||
Concat(oPredefinedSearches).
|
||||
ToList()
|
||||
End Function
|
||||
|
||||
Public Function LoadCustomSearches() As List(Of SavedSearch)
|
||||
Return New List(Of SavedSearch)
|
||||
End Function
|
||||
|
||||
Public Function LoadPredefinedSearches() As List(Of SavedSearch)
|
||||
Return New List(Of SavedSearch) From {
|
||||
New PredefinedDateSearch() With {
|
||||
.Name = "Heute",
|
||||
.Description = "Dokumente, die heute abgelegt wurden",
|
||||
.DateConstraint = SearchRunner.DateConstraint.Today,
|
||||
.Image = Images.Item("today")
|
||||
},
|
||||
New PredefinedDateSearch() With {
|
||||
.Name = "Gestern",
|
||||
.Description = "Dokumente, die gestern abgelegt wurden",
|
||||
.DateConstraint = SearchRunner.DateConstraint.Yesterday,
|
||||
.Image = Images.Item("yesterday")
|
||||
},
|
||||
New 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 {
|
||||
.Name = "Dieser Monat",
|
||||
.Description = "Dokumente, die in diesem Monat abgelegt wurden",
|
||||
.DateConstraint = SearchRunner.DateConstraint.CurrentMonth,
|
||||
.Image = Images.Item("month")
|
||||
},
|
||||
New PredefinedDateSearch() With {
|
||||
.Name = "Letzter Monat",
|
||||
.Description = "Dokumente, die im letzten Monat abgelegt wurden",
|
||||
.DateConstraint = SearchRunner.DateConstraint.LastMonth,
|
||||
.Image = Images.Item("month")
|
||||
},
|
||||
New PredefinedDateSearch() With {
|
||||
.Name = "Dieses Jahr",
|
||||
.Description = "Dokumente, die in diesem Jahr abgelegt wurden",
|
||||
.DateConstraint = SearchRunner.DateConstraint.CurrentYear,
|
||||
.Image = Images.Item("year")
|
||||
},
|
||||
New PredefinedDateSearch() With {
|
||||
.Name = "Letztes Jahr",
|
||||
.Description = "Dokumente, die im letzten Jahr abgelegt wurden",
|
||||
.DateConstraint = SearchRunner.DateConstraint.LastYear,
|
||||
.Image = Images.Item("year")
|
||||
}
|
||||
}
|
||||
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 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
|
||||
|
||||
Public Class PredefinedSQLSearch
|
||||
Public Property SQLCommand As String
|
||||
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 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