Initial Release
This commit is contained in:
Vendored
+75
@@ -0,0 +1,75 @@
|
||||
package env
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"log"
|
||||
"os"
|
||||
"path"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
type DatabaseRoot struct {
|
||||
Stickers []DatabaseSticker `json:"stickers"`
|
||||
}
|
||||
|
||||
type DatabaseSticker struct {
|
||||
Created time.Time `json:"created"` // Sticker Created
|
||||
UserAddress string `json:"user_address"` // User IP Address (For Manual Bans)
|
||||
UserName string `json:"user_name"` // User Name
|
||||
UserURL string `json:"user_url"` // User URL (Optional)
|
||||
Message string `json:"message"` // Sticker Message
|
||||
Visible bool `json:"visible"` // Sticker Visible?
|
||||
OffsetX int `json:"offset_x"` // Placement X
|
||||
OffsetY int `json:"offset_y"` // Placement Y
|
||||
ImageScale float64 `json:"image_scale"` // Image Scale
|
||||
ImageHeight int `json:"image_height"` // Image Height
|
||||
ImageWidth int `json:"image_width"` // Image Width
|
||||
ImageType ImageType `json:"image_type"` // Original Image File Type
|
||||
ImageHash string `json:"image_hash"` // Original Image File Hash
|
||||
}
|
||||
|
||||
var (
|
||||
Database DatabaseRoot
|
||||
DatabaseMtx sync.RWMutex
|
||||
)
|
||||
|
||||
func SetupDatabase(stop context.Context, await *sync.WaitGroup) {
|
||||
t := time.Now()
|
||||
p := path.Join(DATA_DIRECTORY, "database.json")
|
||||
|
||||
// Decode File
|
||||
b, err := os.ReadFile(p)
|
||||
if err != nil {
|
||||
if !errors.Is(err, os.ErrNotExist) {
|
||||
log.Fatalln("[db] Read Database Error:", err)
|
||||
}
|
||||
Database.Stickers = make([]DatabaseSticker, 0)
|
||||
}
|
||||
if err == nil {
|
||||
if err := json.Unmarshal(b, &Database); err != nil {
|
||||
log.Fatalln("[db] Parse Database Error:", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Shutdown Logic
|
||||
await.Add(1)
|
||||
go func() {
|
||||
defer await.Done()
|
||||
<-stop.Done()
|
||||
|
||||
// Write Database To Disk
|
||||
b, err := json.MarshalIndent(&Database, "", " ")
|
||||
if err != nil {
|
||||
log.Fatalln("[db] Cannot Marshal Database:", err)
|
||||
}
|
||||
if err := os.WriteFile(p, b, FILE_MODE); err != nil {
|
||||
log.Fatalln("[db] Cannot Write Database:", err)
|
||||
}
|
||||
log.Println("[db] Database Saved")
|
||||
}()
|
||||
|
||||
log.Println("[db] Ready in", time.Since(t))
|
||||
}
|
||||
Reference in New Issue
Block a user