collection.go 998 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package movies
  2. import (
  3. "encoding/json"
  4. "io/ioutil"
  5. "sync"
  6. )
  7. type Collection struct {
  8. Movies []*Movie
  9. mutex sync.RWMutex
  10. hasChanged bool
  11. }
  12. func Import(filename string) (*Collection, error) {
  13. b, err := ioutil.ReadFile(filename)
  14. if err != nil {
  15. return nil, err
  16. }
  17. var c Collection
  18. if err := json.Unmarshal(b, &c); err != nil {
  19. return nil, err
  20. }
  21. for _, m := range c.Movies {
  22. m.FillFromOMDB()
  23. }
  24. return &c, nil
  25. }
  26. func (c *Collection) Export(filename string) error {
  27. c.mutex.RLock()
  28. defer c.mutex.RUnlock()
  29. b, err := json.Marshal(c)
  30. if err != nil {
  31. return err
  32. }
  33. err = ioutil.WriteFile(filename, b, 0644)
  34. if err != nil {
  35. return err
  36. }
  37. c.hasChanged = false
  38. return nil
  39. }
  40. func (c *Collection) Add(m *Movie) {
  41. c.mutex.Lock()
  42. defer c.mutex.Unlock()
  43. for _, present := range c.Movies {
  44. if m.IMDBID == present.IMDBID {
  45. return
  46. }
  47. }
  48. c.Movies = append(c.Movies, m)
  49. c.hasChanged = true
  50. }
  51. func (c *Collection) HasChanged() bool {
  52. return c.hasChanged
  53. }