diff --git a/src/feed/feed.go b/src/feed/feed.go
index 7e45006..daaab1a 100644
--- a/src/feed/feed.go
+++ b/src/feed/feed.go
@@ -8,6 +8,7 @@ import (
"io"
"net/url"
"strings"
+ "time"
)
var UnknownFormat = errors.New("unknown feed format")
@@ -42,21 +43,43 @@ func sniff(lookup string) (string, processor) {
}
func Parse(r io.Reader) (*Feed, error) {
- chunk := make([]byte, 1024)
- if _, err := r.Read(chunk); err != nil {
+ lookup := make([]byte, 1024)
+ if _, err := r.Read(lookup); err != nil {
return nil, fmt.Errorf("Failed to read input: %s", err)
}
- _, callback := sniff(string(chunk))
+ _, callback := sniff(string(lookup))
if callback == nil {
return nil, UnknownFormat
}
- r = io.MultiReader(bytes.NewReader(chunk), r)
- return callback(r)
+ feed, err := callback(io.MultiReader(bytes.NewReader(lookup), r))
+ if feed != nil {
+ feed.cleanup()
+ }
+ return feed, err
}
-func FixURLs(feed *Feed, base string) error {
+func (feed *Feed) cleanup() {
+ feed.Title = strings.TrimSpace(feed.Title)
+ feed.SiteURL = strings.TrimSpace(feed.SiteURL)
+ for i, item := range feed.Items {
+ feed.Items[i].GUID = strings.TrimSpace(item.GUID)
+ feed.Items[i].URL = strings.TrimSpace(item.URL)
+ feed.Items[i].Title = strings.TrimSpace(item.Title)
+ feed.Items[i].Content = strings.TrimSpace(item.Content)
+ }
+}
+
+func (feed *Feed) SetMissingDatesTo(newdate time.Time) {
+ for i, item := range feed.Items {
+ if item.Date.Equal(defaultTime) {
+ feed.Items[i].Date = newdate
+ }
+ }
+}
+
+func (feed *Feed) TranslateURLs(base string) error {
baseUrl, err := url.Parse(base)
if err != nil {
return fmt.Errorf("failed to parse base url: %#v", base)
diff --git a/src/feed/feed_test.go b/src/feed/feed_test.go
index ae2a158..addbc39 100644
--- a/src/feed/feed_test.go
+++ b/src/feed/feed_test.go
@@ -1,6 +1,10 @@
package feed
-import "testing"
+import (
+ "reflect"
+ "strings"
+ "testing"
+)
func TestSniff(t *testing.T) {
testcases := [][2]string{
@@ -34,3 +38,38 @@ func TestSniff(t *testing.T) {
}
}
}
+
+func TestParse(t *testing.T) {
+ have, _ := Parse(strings.NewReader(`
+
+