1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- package movies
- import (
- "encoding/json"
- "io/ioutil"
- "sync"
- )
- type Collection struct {
- Movies []*Movie
- mutex sync.RWMutex
- hasChanged bool
- }
- func Import(filename string) (*Collection, error) {
- b, err := ioutil.ReadFile(filename)
- if err != nil {
- return nil, err
- }
- var c Collection
- if err := json.Unmarshal(b, &c); err != nil {
- return nil, err
- }
- return &c, nil
- }
- func (c *Collection) Export(filename string) error {
- c.mutex.RLock()
- defer c.mutex.RUnlock()
- b, err := json.Marshal(c)
- if err != nil {
- return err
- }
- err = ioutil.WriteFile(filename, b, 0644)
- if err != nil {
- return err
- }
- c.hasChanged = false
- return nil
- }
- func (c *Collection) Add(m *Movie) {
- c.mutex.Lock()
- defer c.mutex.Unlock()
- c.Movies = append(c.Movies, m)
- c.hasChanged = true
- }
- func (c *Collection) HasChanged() bool {
- return c.hasChanged
- }
|