only scan once per week
This commit is contained in:
parent
881940cd88
commit
fe66d5842e
|
@ -2,6 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"h4kor/owl-blogs"
|
"h4kor/owl-blogs"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
@ -56,13 +57,18 @@ var webmentionCmd = &cobra.Command{
|
||||||
|
|
||||||
webmentions := post.OutgoingWebmentions()
|
webmentions := post.OutgoingWebmentions()
|
||||||
println("Found ", len(webmentions), " links")
|
println("Found ", len(webmentions), " links")
|
||||||
|
wg := sync.WaitGroup{}
|
||||||
|
wg.Add(len(webmentions))
|
||||||
for _, webmention := range webmentions {
|
for _, webmention := range webmentions {
|
||||||
|
go func(webmention owl.WebmentionOut) {
|
||||||
|
defer wg.Done()
|
||||||
err = post.SendWebmention(webmention)
|
err = post.SendWebmention(webmention)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
println("Error sending webmentions: ", err.Error())
|
println("Error sending webmentions: ", err.Error())
|
||||||
} else {
|
} else {
|
||||||
println("Webmention sent to ", webmention.Target)
|
println("Webmention sent to ", webmention.Target)
|
||||||
}
|
}
|
||||||
|
}(webmention)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
6
post.go
6
post.go
|
@ -305,6 +305,12 @@ func (post *Post) ScanForLinks() error {
|
||||||
|
|
||||||
func (post *Post) SendWebmention(webmention WebmentionOut) error {
|
func (post *Post) SendWebmention(webmention WebmentionOut) error {
|
||||||
defer post.PersistOutgoingWebmention(&webmention)
|
defer post.PersistOutgoingWebmention(&webmention)
|
||||||
|
|
||||||
|
// if last scan is less than 7 days ago, don't send webmention
|
||||||
|
if webmention.ScannedAt.After(time.Now().Add(-7*24*time.Hour)) && !webmention.Supported {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
webmention.ScannedAt = time.Now()
|
webmention.ScannedAt = time.Now()
|
||||||
|
|
||||||
resp, err := post.user.repo.HttpClient.Get(webmention.Target)
|
resp, err := post.user.repo.HttpClient.Get(webmention.Target)
|
||||||
|
|
32
post_test.go
32
post_test.go
|
@ -375,6 +375,38 @@ func TestCanSendWebmention(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSendWebmentionOnlyScansOncePerWeek(t *testing.T) {
|
||||||
|
repo := getTestRepo(owl.RepoConfig{})
|
||||||
|
repo.HttpClient = &MockHttpClient{}
|
||||||
|
repo.Parser = &MockHtmlParser{}
|
||||||
|
user, _ := repo.CreateUser("testuser")
|
||||||
|
post, _ := user.CreateNewPost("testpost")
|
||||||
|
|
||||||
|
webmention := owl.WebmentionOut{
|
||||||
|
Target: "http://example.com",
|
||||||
|
ScannedAt: time.Now().Add(time.Hour * -24 * 6),
|
||||||
|
}
|
||||||
|
|
||||||
|
post.PersistOutgoingWebmention(&webmention)
|
||||||
|
webmentions := post.OutgoingWebmentions()
|
||||||
|
webmention = webmentions[0]
|
||||||
|
|
||||||
|
err := post.SendWebmention(webmention)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Error sending webmention: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
webmentions = post.OutgoingWebmentions()
|
||||||
|
|
||||||
|
if len(webmentions) != 1 {
|
||||||
|
t.Errorf("Expected 1 webmention, got %d", len(webmentions))
|
||||||
|
}
|
||||||
|
|
||||||
|
if webmentions[0].ScannedAt != webmention.ScannedAt {
|
||||||
|
t.Errorf("Expected ScannedAt to be unchanged. Expected: %v, got %v", webmention.ScannedAt, webmentions[0].ScannedAt)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestSendingMultipleWebmentions(t *testing.T) {
|
func TestSendingMultipleWebmentions(t *testing.T) {
|
||||||
repo := getTestRepo(owl.RepoConfig{})
|
repo := getTestRepo(owl.RepoConfig{})
|
||||||
repo.HttpClient = &MockHttpClient{}
|
repo.HttpClient = &MockHttpClient{}
|
||||||
|
|
Loading…
Reference in New Issue