Merge pull request #54 from michael-k/time
Store time of last update as time.Time
This commit is contained in:
commit
8840cf6040
22
feed.go
22
feed.go
|
@ -98,7 +98,7 @@ type Feed struct {
|
||||||
|
|
||||||
// Last time content was fetched. Used in conjunction with CacheTimeout
|
// Last time content was fetched. Used in conjunction with CacheTimeout
|
||||||
// to ensure we don't get content too often.
|
// to ensure we don't get content too often.
|
||||||
lastupdate int64
|
lastupdate time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
// New is a helper function to stay semi-compatible with
|
// New is a helper function to stay semi-compatible with
|
||||||
|
@ -125,8 +125,9 @@ func NewWithHandlers(cachetimeout int, enforcecachelimit bool, ch ChannelHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
// This returns a timestamp of the last time the feed was updated.
|
// This returns a timestamp of the last time the feed was updated.
|
||||||
// The value is in seconds.
|
func (this *Feed) LastUpdate() time.Time {
|
||||||
func (this *Feed) LastUpdate() int64 { return this.lastupdate }
|
return this.lastupdate
|
||||||
|
}
|
||||||
|
|
||||||
// Fetch retrieves the feed's latest content if necessary.
|
// Fetch retrieves the feed's latest content if necessary.
|
||||||
//
|
//
|
||||||
|
@ -154,7 +155,7 @@ func (this *Feed) FetchClient(uri string, client *http.Client, charset xmlx.Char
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
this.lastupdate = time.Now().UTC().UnixNano()
|
this.lastupdate = time.Now().UTC()
|
||||||
this.Url = uri
|
this.Url = uri
|
||||||
doc := xmlx.New()
|
doc := xmlx.New()
|
||||||
|
|
||||||
|
@ -226,11 +227,12 @@ func (this *Feed) notifyListeners() {
|
||||||
func (this *Feed) CanUpdate() bool {
|
func (this *Feed) CanUpdate() bool {
|
||||||
// Make sure we are not within the specified cache-limit.
|
// Make sure we are not within the specified cache-limit.
|
||||||
// This ensures we don't request data too often.
|
// This ensures we don't request data too often.
|
||||||
utc := time.Now().UTC()
|
if SecondsTillUpdate() > 0 {
|
||||||
if utc.UnixNano()-this.lastupdate < int64(this.CacheTimeout*60) {
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
utc := time.Now().UTC()
|
||||||
|
|
||||||
// If skipDays or skipHours are set in the RSS feed, use these to see if
|
// If skipDays or skipHours are set in the RSS feed, use these to see if
|
||||||
// we can update.
|
// we can update.
|
||||||
if len(this.Channels) == 1 && this.Type == "rss" {
|
if len(this.Channels) == 1 && this.Type == "rss" {
|
||||||
|
@ -258,7 +260,13 @@ func (this *Feed) CanUpdate() bool {
|
||||||
// before the feed should update.
|
// before the feed should update.
|
||||||
func (this *Feed) SecondsTillUpdate() int64 {
|
func (this *Feed) SecondsTillUpdate() int64 {
|
||||||
utc := time.Now().UTC()
|
utc := time.Now().UTC()
|
||||||
return int64(this.CacheTimeout*60) - (utc.Unix() - (this.lastupdate / 1e9))
|
elapsed := utc.Sub(this.lastupdate)
|
||||||
|
return int64(this.CacheTimeout*60) - int64(elapsed.Seconds())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns the duration needed to elapse before the feed should update.
|
||||||
|
func (this *Feed) TillUpdate() (time.Duration, error) {
|
||||||
|
return time.ParseDuration(fmt.Sprintf("%ds", SecondsTillUpdate()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *Feed) buildFeed(doc *xmlx.Document) (err error) {
|
func (this *Feed) buildFeed(doc *xmlx.Document) (err error) {
|
||||||
|
|
Loading…
Reference in New Issue