meowlib/client/config.go
2023-11-06 22:44:21 +01:00

106 lines
3.0 KiB
Go

package client
import (
"encoding/json"
"os"
"sync"
)
type Config struct {
// UserConfig
SavePassword bool `json:"save_password,omitempty"`
SavedPassword string `json:"saved_password,omitempty"`
// Technical
IdentityFile string `json:"identity_file,omitempty"`
StoragePath string `json:"storage_path,omitempty"`
MaxIdsPerUser int `json:"max_ids_per_user,omitempty"`
MsgDbRollingPeriod int `json:"msg_db_rolling_period,omitempty"`
Chunksize int64 `json:"chunksize,omitempty"`
ServerPollInterval int `json:"server_poll_interval,omitempty"`
DbSize int `json:"db_size,omitempty"`
// GUI
LastOpenChat string `json:"last_open_chat,omitempty"`
SoundNotificationEnable bool `json:"sound_notification_enable,omitempty"`
DefaultNotificationSound string `json:"default_notification_sound,omitempty"`
NotificationVibeEnable bool `json:"notification_vibe_enable,omitempty"`
DefaultNotificationVibe string `json:"default_notification_vibe,omitempty"`
NotificationLEDEnable bool `json:"notification_led_enable,omitempty"`
DefaultNotificationLEDColor string `json:"default_notification_led_color,omitempty"`
VisualNotificationEnable bool `json:"visual_notification_enable,omitempty"`
VisualNotificationModes string `json:"visual_notifiaction_modes,omitempty"`
PrivateChatNotificationsEnable bool `json:"private_chat_notifiactions_enable,omitempty"`
GroupChatNotificationsEnable bool `json:"group_chat_notifiactions_enable,omitempty"`
ChannelNotificationsEnable bool `json:"channel_notifications_enable,omitempty"`
Language string `json:"language,omitempty"`
Theme string `json:"theme,omitempty"`
FingerprintEnable bool `json:"fingerprint_enable,omitempty"`
ShowFavoriteContacts bool `json:"show_favorite_contacts,omitempty"`
NightModeEnable bool `json:"night_mode_enable,omitempty"`
// Debug
DbSuffix string `json:"db_suffix,omitempty"`
// Inner
memoryPassword string
additionalPasswords []string
me *Identity
}
var instance *Config
var once sync.Once
func GetConfig() *Config {
once.Do(func() {
instance = &Config{}
})
return instance
}
func (c *Config) Load(filename string) error {
data, err := os.ReadFile(filename)
if err != nil {
return err
}
err = json.Unmarshal(data, c)
if err != nil {
return err
}
return nil
}
func (c *Config) Save(filename string) error {
data, err := json.Marshal(c)
if err != nil {
return err
}
os.WriteFile(filename, data, 0644)
if err != nil {
return err
}
return nil
}
func (c *Config) SetMemPass(pass string) {
c.memoryPassword = pass
}
func (c *Config) GetMemPass() string {
return c.memoryPassword
}
func (c *Config) GetIdentity() *Identity {
return c.me
}
func (c *Config) SetIdentity(id *Identity) {
c.me = id
}
func (c *Config) SaveIdentity() error {
return c.me.Save()
}
func (c *Config) Clean() {
c.additionalPasswords = []string{}
}