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

157 lines
4.2 KiB
Plaintext

; ============================================================================
; DataModel Module - Data Structures and Utilities
; ============================================================================
Module DataModel
EnableExplicit
; -- Private Procedure Declarations --
Declare LoadMimeTypes()
; ========================================================================
; Response Parsing Utilities
; ========================================================================
Procedure.s StripPrefix(Result.s, Prefix.s)
ProcedureReturn RemoveString(Result, Prefix, #PB_String_CaseSensitive, 0, 1)
EndProcedure
Procedure.s GetField(Record.s, Index)
ProcedureReturn StringField(Record, Index, General::#FieldSeparator)
EndProcedure
Procedure GetRecordCount(Result.s)
ProcedureReturn CountString(Result, General::#RecordSeparator)
EndProcedure
Procedure.s GetRecord(Result.s, Index)
ProcedureReturn StringField(Result, Index, General::#RecordSeparator)
EndProcedure
Procedure.b ValidateResponse(Result.s, ExpectedPrefix.s)
ProcedureReturn Bool(Left(Result, Len(ExpectedPrefix)) = ExpectedPrefix)
EndProcedure
; ========================================================================
; Formatting for List Display
; ========================================================================
Procedure.s FormatArticleListItem(*Article.Article)
Protected Status.s
If *Article\Draft
Status = "Draft"
Else
Status = "Published"
EndIf
ProcedureReturn *Article\Title + Chr(10) + Status + Chr(10) + FormatDate("%yy-%mm-%dd", *Article\Date)
EndProcedure
Procedure.s FormatTagListItem(*Tag.Tag)
ProcedureReturn *Tag\DefaultName + Chr(10) + *Tag\Color
EndProcedure
; ========================================================================
; Lookup Functions
; ========================================================================
Procedure FindArticleByID(ID)
ForEach Articles()
If Articles()\ID = ID
ProcedureReturn #True
EndIf
Next
ProcedureReturn #False
EndProcedure
Procedure FindFileByID(ID)
ForEach Files()
If Files()\ID = ID
ProcedureReturn #True
EndIf
Next
ProcedureReturn #False
EndProcedure
Procedure FindTagByID(ID)
ForEach Tags()
If Tags()\ID = ID
ProcedureReturn #True
EndIf
Next
ProcedureReturn #False
EndProcedure
; ========================================================================
; MIME Type Loading
; ========================================================================
Procedure LoadMimeTypes()
Protected.s Ext, Type
Restore MimeData
Read.s Ext
While Ext <> "END"
Read.s Type
MIMETypes(Ext) = Type
Read.s Ext
Wend
EndProcedure
; -- Module Initialization --
LoadMimeTypes()
; ========================================================================
; MIME Type Data
; ========================================================================
DataSection
MimeData:
Data.s "aac", "audio/aac"
Data.s "abw", "application/x-abiword"
Data.s "apng", "image/apng"
Data.s "avi", "video/x-msvideo"
Data.s "bin", "application/octet-stream"
Data.s "bmp", "image/bmp"
Data.s "css", "text/css"
Data.s "csv", "text/csv"
Data.s "doc", "application/msword"
Data.s "gif", "image/gif"
Data.s "htm", "text/html"
Data.s "html", "text/html"
Data.s "ico", "image/x-icon"
Data.s "jpeg", "image/jpeg"
Data.s "jpg", "image/jpeg"
Data.s "js", "text/javascript"
Data.s "json", "application/json"
Data.s "mp3", "audio/mpeg"
Data.s "mp4", "video/mp4"
Data.s "mpeg", "video/mpeg"
Data.s "otf", "font/otf"
Data.s "png", "image/png"
Data.s "pdf", "application/pdf"
Data.s "php", "application/x-httpd-php"
Data.s "svg", "image/svg+xml"
Data.s "txt", "text/plain"
Data.s "wav", "audio/wav"
Data.s "webm", "video/webm"
Data.s "webp", "image/webp"
Data.s "woff", "font/woff"
Data.s "woff2", "font/woff2"
Data.s "xml", "application/xml"
Data.s "zip", "application/zip"
Data.s "END"
EndDataSection
EndModule
; IDE Options = SpiderBasic 3.10 (Linux - x64)
; CursorPosition = 9
; FirstLine = 42
; Folding = BA-
; iOSAppOrientation = 0
; AndroidAppCode = 0
; AndroidAppOrientation = 0
; EnableXP
; DPIAware
; CompileSourceDirectory