Add saving and loading
This commit is contained in:
parent
a59d3f1128
commit
88b3d7e159
47
feed.go
47
feed.go
@ -1,8 +1,10 @@
|
|||||||
package rss
|
package rss
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/gob"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -30,10 +32,6 @@ func initFeed() *Feed {
|
|||||||
ContentNamespace: "http://purl.org/rss/1.0/modules/content/",
|
ContentNamespace: "http://purl.org/rss/1.0/modules/content/",
|
||||||
}
|
}
|
||||||
|
|
||||||
feed.wg.Add(1)
|
|
||||||
go feed.start()
|
|
||||||
feed.wg.Wait()
|
|
||||||
|
|
||||||
return feed
|
return feed
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,9 +50,48 @@ func (f *Feed) check() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewFeed() *Feed {
|
func NewFeed() *Feed {
|
||||||
return initFeed()
|
feed := initFeed()
|
||||||
|
|
||||||
|
feed.wg.Add(1)
|
||||||
|
go feed.start()
|
||||||
|
feed.wg.Wait()
|
||||||
|
|
||||||
|
return feed
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Feed) AddChannel(c *Channel) {
|
func (f *Feed) AddChannel(c *Channel) {
|
||||||
f.addChannel <- c
|
f.addChannel <- c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *Feed) Save(filename string) error {
|
||||||
|
file, err := os.Create(filename)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error creating file %v: %v", filename, err)
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
if err := gob.NewEncoder(file).Encode(f); err != nil {
|
||||||
|
return fmt.Errorf("error encoding feed in file %v: %v", filename, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func OpenFeed(filename string) (*Feed, error) {
|
||||||
|
file, err := os.Open(filename)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error opening file %v: %v", filename, err)
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
feed := initFeed()
|
||||||
|
feed.wg.Add(1)
|
||||||
|
go feed.start()
|
||||||
|
feed.wg.Wait()
|
||||||
|
|
||||||
|
if err := gob.NewDecoder(file).Decode(feed); err != nil {
|
||||||
|
return nil, fmt.Errorf("error decoding file %v: %v", filename, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
6
item.go
6
item.go
@ -7,6 +7,11 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type Content struct {
|
||||||
|
XMLName xml.Name `xml:"content:encoded"`
|
||||||
|
Value string `xml:",cdata"`
|
||||||
|
}
|
||||||
|
|
||||||
type Item struct {
|
type Item struct {
|
||||||
addCategory chan string
|
addCategory chan string
|
||||||
XMLName xml.Name `xml:"item"`
|
XMLName xml.Name `xml:"item"`
|
||||||
@ -19,6 +24,7 @@ type Item struct {
|
|||||||
Guid string `xml:"guid,omitempty"`
|
Guid string `xml:"guid,omitempty"`
|
||||||
PubDate string `xml:"pubDate,omitempty"`
|
PubDate string `xml:"pubDate,omitempty"`
|
||||||
Source *Source
|
Source *Source
|
||||||
|
Content *Content
|
||||||
Categories []string `xml:"category,omitempty"`
|
Categories []string `xml:"category,omitempty"`
|
||||||
wg sync.WaitGroup
|
wg sync.WaitGroup
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user