config.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package main
  2. import (
  3. "log"
  4. "os"
  5. "time"
  6. "gopkg.in/yaml.v2"
  7. )
  8. var (
  9. configFile string
  10. )
  11. type feed struct {
  12. URL, Template string
  13. Format string
  14. Visibility string
  15. Sensitive bool
  16. ContentWarning string
  17. }
  18. type config struct {
  19. Accounts []account
  20. LastUpdated time.Time
  21. }
  22. type account struct {
  23. AccessToken string
  24. Name string
  25. InstanceURL string
  26. Feeds []feed
  27. }
  28. func readConfig(fileName string) *config {
  29. log.Println("reading config...")
  30. configFile = fileName
  31. config := new(config)
  32. cf, err := os.ReadFile(configFile)
  33. if err != nil {
  34. log.Fatalln("Failed to read config: ", err)
  35. }
  36. err = yaml.Unmarshal(cf, &config)
  37. if err != nil {
  38. log.Panic(err)
  39. }
  40. if debug {
  41. log.Printf("Config:\n\n%v", config)
  42. }
  43. return config
  44. }
  45. func (cf *config) updateLastUpdated() {
  46. log.Println("updating LastUpdated key...")
  47. cf.LastUpdated = time.Now()
  48. }
  49. func (cf *config) Save() error {
  50. log.Println("saving config to file...")
  51. cfBytes, err := yaml.Marshal(cf)
  52. if err != nil {
  53. return err
  54. }
  55. err = os.WriteFile(configFile, cfBytes, 0644)
  56. if err != nil {
  57. return err
  58. }
  59. return nil
  60. }