collection.go 857 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. return &c, nil
  22. }
  23. func (c *Collection) Export(filename string) error {
  24. c.mutex.RLock()
  25. defer c.mutex.RUnlock()
  26. b, err := json.Marshal(c)
  27. if err != nil {
  28. return err
  29. }
  30. err = ioutil.WriteFile(filename, b, 0644)
  31. if err != nil {
  32. return err
  33. }
  34. c.hasChanged = false
  35. return nil
  36. }
  37. func (c *Collection) Add(m *Movie) {
  38. c.mutex.Lock()
  39. defer c.mutex.Unlock()
  40. c.Movies = append(c.Movies, m)
  41. c.hasChanged = true
  42. }
  43. func (c *Collection) HasChanged() bool {
  44. return c.hasChanged
  45. }