123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- 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
- }
- for _, m := range c.Movies {
- m.FillFromOMDB()
- }
- 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()
- for _, present := range c.Movies {
- if m.IMDBID == present.IMDBID {
- return
- }
- }
- c.Movies = append(c.Movies, m)
- c.hasChanged = true
- }
- func (c *Collection) HasChanged() bool {
- return c.hasChanged
- }
|