diff --git a/chaturbate/manager.go b/chaturbate/manager.go index 18c31ad..446e85e 100644 --- a/chaturbate/manager.go +++ b/chaturbate/manager.go @@ -1,7 +1,9 @@ package chaturbate import ( + "encoding/json" "errors" + "os" "github.com/google/uuid" "github.com/urfave/cli/v2" @@ -161,3 +163,45 @@ func (m *Manager) StopListenUpdate(id string) error { close(v) return nil } + +// SaveChannels +func (m *Manager) SaveChannels() error { + configs := make([]*Config, 0) + for _, v := range m.Channels { + configs = append(configs, &Config{ + Username: v.Username, + Framerate: v.Framerate, + Resolution: v.Resolution, + ResolutionFallback: v.ResolutionFallback, + FilenamePattern: v.filenamePattern, + SplitDuration: v.SplitDuration, + SplitFilesize: v.SplitFilesize, + }) + } + b, err := json.MarshalIndent(configs, "", " ") + if err != nil { + return err + } + return os.WriteFile("chaturbate_channels.json", b, 0777) +} + +// LoadChannels +func (m *Manager) LoadChannels() error { + b, err := os.ReadFile("chaturbate_channels.json") + if err != nil { + if os.IsNotExist(err) { + return nil + } + return err + } + var configs []*Config + if err := json.Unmarshal(b, &configs); err != nil { + return err + } + for _, v := range configs { + if err := m.CreateChannel(v); err != nil { + return err + } + } + return nil +} diff --git a/handler/create_channel.go b/handler/create_channel.go index dcac798..d3ac4e3 100644 --- a/handler/create_channel.go +++ b/handler/create_channel.go @@ -60,5 +60,9 @@ func (h *CreateChannelHandler) Handle(c *gin.Context) { c.AbortWithError(http.StatusInternalServerError, err) return } + if err := h.chaturbate.SaveChannels(); err != nil { + c.AbortWithError(http.StatusInternalServerError, err) + return + } c.JSON(http.StatusOK, &CreateChannelResponse{}) } diff --git a/handler/delete_channel.go b/handler/delete_channel.go index fac3b66..f393c06 100644 --- a/handler/delete_channel.go +++ b/handler/delete_channel.go @@ -46,5 +46,9 @@ func (h *DeleteChannelHandler) Handle(c *gin.Context) { c.AbortWithError(http.StatusInternalServerError, err) return } + if err := h.chaturbate.SaveChannels(); err != nil { + c.AbortWithError(http.StatusInternalServerError, err) + return + } c.JSON(http.StatusOK, &DeleteChannelResponse{}) } diff --git a/main.go b/main.go index ef52ef8..7a4f9a4 100644 --- a/main.go +++ b/main.go @@ -132,6 +132,9 @@ func startWeb(c *cli.Context) error { //r.Use(cors.Default()) m := chaturbate.NewManager(c) + if err := m.LoadChannels(); err != nil { + return err + } fe, err := fs.Sub(FS, "handler/view") if err != nil {