SelfHost/Admin/Includes/General.sbi
2025-12-15 19:46:13 +01:00

140 lines
4.3 KiB
Plaintext

; ============================================================================
; General Module - Data Loading and Initialization
; ============================================================================
Module General
EnableExplicit
; -- Loading State --
Enumeration LoadingStages
#Load_Files
#Load_Tags
#Load_Articles
#Load_Languages
EndEnumeration
#TotalLoadingStages = 4
Global LoadingProgress = 0
; -- Private Procedure Declarations --
Declare LoadingCallback(Success, Result.s, UserData)
Declare ParseFiles(Result.s)
Declare ParseArticles(Result.s)
Declare ParseLanguages(Result.s)
Declare ParseTags(Result.s)
; ========================================================================
; Initialization
; ========================================================================
Procedure Init()
; Load all required data from server in parallel
HTTPRequest(#PB_HTTP_Get, #Address + "admin/", "listfiles", @LoadingCallback(), #Load_Files)
HTTPRequest(#PB_HTTP_Get, #Address + "admin/", "listtags", @LoadingCallback(), #Load_Tags)
HTTPRequest(#PB_HTTP_Get, #Address + "admin/", "listlanguages", @LoadingCallback(), #Load_Languages)
HTTPRequest(#PB_HTTP_Get, #Address + "admin/", "listarticles", @LoadingCallback(), #Load_Articles)
EndProcedure
; ========================================================================
; Loading Callbacks
; ========================================================================
Procedure LoadingCallback(Success, Result.s, UserData)
If Not Success
Debug "[Error] Failed to load data for stage: " + Str(UserData)
ProcedureReturn
EndIf
Select UserData
Case #Load_Files
ParseFiles(Result)
Case #Load_Tags
ParseTags(Result)
Case #Load_Articles
ParseArticles(Result)
Case #Load_Languages
ParseLanguages(Result)
EndSelect
LoadingProgress + 1
If LoadingProgress = #TotalLoadingStages
MainWindow::Open()
EndIf
EndProcedure
; ========================================================================
; Data Parsers
; ========================================================================
Procedure ParseFiles(Result.s)
Protected Count, i, Entry.s
Result = DataModel::StripPrefix(Result, #Prefix_ListFiles)
Count = DataModel::GetRecordCount(Result)
For i = 1 To Count
Entry = DataModel::GetRecord(Result, i)
AddElement(DataModel::Files())
DataModel::Files()\ID = Val(DataModel::GetField(Entry, 1))
DataModel::Files()\Name = DataModel::GetField(Entry, 2)
DataModel::Files()\Type = DataModel::MIMETypes(GetExtensionPart(DataModel::Files()\Name))
Next
EndProcedure
Procedure ParseArticles(Result.s)
Protected Count, i, Entry.s
Result = DataModel::StripPrefix(Result, #Prefix_ListArticles)
Count = DataModel::GetRecordCount(Result)
For i = 1 To Count
Entry = DataModel::GetRecord(Result, i)
AddElement(DataModel::Articles())
DataModel::Articles()\ID = Val(DataModel::GetField(Entry, 1))
DataModel::Articles()\Title = DataModel::GetField(Entry, 2)
DataModel::Articles()\Draft = Val(DataModel::GetField(Entry, 3))
DataModel::Articles()\Tags = Val(DataModel::GetField(Entry, 4))
DataModel::Articles()\Date = Val(DataModel::GetField(Entry, 5))
Next
EndProcedure
Procedure ParseLanguages(Result.s)
Protected Count, i
Result = DataModel::StripPrefix(Result, #Prefix_ListLanguages)
Count = DataModel::GetRecordCount(Result)
For i = 1 To Count
AddElement(DataModel::Language())
DataModel::Language() = DataModel::GetRecord(Result, i)
Next
EndProcedure
Procedure ParseTags(Result.s)
Protected Count, i, Entry.s
Result = DataModel::StripPrefix(Result, #Prefix_ListTags)
Count = DataModel::GetRecordCount(Result)
For i = 1 To Count
Entry = DataModel::GetRecord(Result, i)
AddElement(DataModel::Tags())
DataModel::Tags()\ID = Val(DataModel::GetField(Entry, 1))
DataModel::Tags()\DefaultName = DataModel::GetField(Entry, 2)
DataModel::Tags()\Color = DataModel::GetField(Entry, 3)
DataModel::Tags()\BinaryID = Pow(2, ListIndex(DataModel::Tags()))
Next
EndProcedure
EndModule
; IDE Options = SpiderBasic 3.10 (Linux - x64)
; CursorPosition = 128
; Folding = B+
; iOSAppOrientation = 0
; AndroidAppCode = 0
; AndroidAppOrientation = 0
; EnableXP
; DPIAware
; CompileSourceDirectory