Zooflow: Load searches from Database
This commit is contained in:
@@ -2,49 +2,34 @@
|
||||
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
|
||||
Imports System.Reflection
|
||||
Imports DigitalData.Modules.Database
|
||||
Imports DigitalData.Modules.ZooFlow.State
|
||||
|
||||
Namespace Search
|
||||
Public Class SearchLoader
|
||||
Inherits BaseClass
|
||||
|
||||
Private Const CUSTOM_SEARCH_DIRECTORY = "Searches"
|
||||
|
||||
Private ReadOnly Images As SvgImageCollection
|
||||
Private ReadOnly ImageTable As List(Of ImageTableItem)
|
||||
|
||||
Private ReadOnly Config As ConfigManager(Of SystemConfig)
|
||||
Private ReadOnly Serializer As XmlSerializer
|
||||
Private ReadOnly Database As MSSQLServer
|
||||
Private ReadOnly UserState As UserState
|
||||
|
||||
Public Sub New(pLogConfig As LogConfig, pConfig As ConfigManager(Of SystemConfig), pSvgImages As SvgImageCollection)
|
||||
Public Sub New(pLogConfig As LogConfig, pDatabase As MSSQLServer, pUserState As UserState, pSvgImages As SvgImageCollection)
|
||||
MyBase.New(pLogConfig)
|
||||
|
||||
Images = pSvgImages
|
||||
ImageTable = GetImageTable(pSvgImages)
|
||||
Config = pConfig
|
||||
Database = pDatabase
|
||||
UserState = pUserState
|
||||
Serializer = New XmlSerializer(GetType(SavedSearch.CustomSearchSerializable))
|
||||
End Sub
|
||||
|
||||
Public 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 SavedSearch.CustomSearch With {
|
||||
.Name = pTitle,
|
||||
@@ -54,11 +39,18 @@ Namespace Search
|
||||
}
|
||||
|
||||
Try
|
||||
Dim oSlug = Utils.ConvertTextToSlug(pTitle)
|
||||
Dim oFilePath As String = IO.Path.Combine(GetSearchDirectoryPath(), $"{oSlug}.xml")
|
||||
Dim oBuffer As Byte() = SerializeSearch(oSearch)
|
||||
Dim oBase64 = System.Convert.ToBase64String(oBuffer)
|
||||
|
||||
File.WriteAllBytes(oFilePath, oBuffer)
|
||||
If Database.ExecuteNonQuery(
|
||||
$"INSERT INTO TBIDB_SEARCH_DEFINITION (TITLE, DESCRIPTION, XML_VALUE, SYS_SEARCH, ADDED_WHO)
|
||||
VALUES ('{pTitle}', '{pDescription}', '{oBase64}', 0, '{UserState.UserName}')"
|
||||
) = True Then
|
||||
Dim oSearchId = Database.GetScalarValue("SELECT MAX(GUID) FROM TBIDB_SEARCH_DEFINITION")
|
||||
Database.ExecuteNonQuery(
|
||||
$"INSERT INTO TBIDB_SEARCH_DEF_RELATIONS (SEARCH_ID, USR_ID, ADDED_WHO)
|
||||
VALUES ({oSearchId}, {UserState.UserId}, '{UserState.UserName}')")
|
||||
End If
|
||||
Catch ex As Exception
|
||||
Logger.Warn("Custom Search could not be saved!")
|
||||
Logger.Error(ex)
|
||||
@@ -78,13 +70,18 @@ Namespace Search
|
||||
|
||||
Public Function LoadCustomSearches() As List(Of SavedSearch.SavedSearch)
|
||||
Dim oSearches As New List(Of SavedSearch.SavedSearch)
|
||||
Dim oPath = GetSearchDirectoryPath()
|
||||
Dim oSQL As String = $"
|
||||
SELECT DEF.*
|
||||
FROM [TBIDB_SEARCH_DEFINITION] DEF
|
||||
JOIN [TBIDB_SEARCH_DEF_RELATIONS] REL ON REL.SEARCH_ID = DEF.GUID
|
||||
WHERE REL.USR_ID = {UserState.UserId}
|
||||
"
|
||||
Dim oTable = Database.GetDatatable(oSQL)
|
||||
|
||||
Dim oFiles = Directory.GetFiles(oPath, "*.xml")
|
||||
|
||||
For Each oFile In oFiles
|
||||
Dim oBytes = File.ReadAllBytes(oFile)
|
||||
Dim oSearch = DeserializeSearch(oBytes)
|
||||
For Each oRow As DataRow In oTable.Rows
|
||||
Dim oBase64 = oRow.Item("XML_VALUE")
|
||||
Dim oBuffer = System.Convert.FromBase64String(oBase64)
|
||||
Dim oSearch = DeserializeSearch(oBuffer)
|
||||
oSearches.Add(oSearch)
|
||||
Next
|
||||
|
||||
@@ -215,9 +212,5 @@ Namespace Search
|
||||
Image = pImage
|
||||
End Sub
|
||||
End Class
|
||||
|
||||
|
||||
|
||||
|
||||
End Class
|
||||
End Namespace
|
||||
|
||||
Reference in New Issue
Block a user