-
Notifications
You must be signed in to change notification settings - Fork 17
/
load_article_details.go
106 lines (88 loc) · 2.33 KB
/
load_article_details.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package cron
import (
"context"
"time"
"github.com/Ptt-official-app/go-openbbsmiddleware/api"
"github.com/Ptt-official-app/go-openbbsmiddleware/schema"
"github.com/Ptt-official-app/go-pttbbs/bbs"
"github.com/sirupsen/logrus"
)
func RetryLoadArticleDetails(ctx context.Context) error {
for {
select {
case <-ctx.Done():
return nil
default:
logrus.Infof("RetryLoadArticleDetails: to LoadArticleDetails")
_ = LoadArticleDetails()
select {
case <-ctx.Done():
return nil
default:
logrus.Infof("RetryLoadArticleDetails: to sleep 1 min")
time.Sleep(1 * time.Minute)
}
}
}
}
func LoadArticleDetails() (err error) {
nextBrdname := ""
count := 0
for {
boardIDs, err := schema.GetBoardIDs(nextBrdname, false, N_BOARDS+1, true)
if err != nil {
return err
}
newNextBrdname := ""
if len(boardIDs) == N_BOARDS+1 {
newNextBoardID := boardIDs[N_BOARDS]
newNextBrdname = newNextBoardID.Brdname
boardIDs = boardIDs[:N_BOARDS]
}
for _, each := range boardIDs {
err = loadArticleDetails(each.BBoardID)
if err == nil {
count++
}
}
if newNextBrdname == "" {
logrus.Infof("cron.LoadArticleDetails: load %v boards", count)
return nil
}
nextBrdname = newNextBrdname
}
}
func loadArticleDetails(boardID bbs.BBoardID) (err error) {
nextIdx := ""
count := 0
for {
articleDetailSummaries, err := schema.GetArticleDetailSummaries(boardID, nextIdx, false, N_ARTICLE_DETAILS+1, true)
if err != nil {
return err
}
newNextIdx := ""
if len(articleDetailSummaries) == N_ARTICLE_DETAILS+1 {
nextDetailSummary := articleDetailSummaries[N_ARTICLE_DETAILS]
newNextIdx = nextDetailSummary.Idx
articleDetailSummaries = articleDetailSummaries[:N_ARTICLE_DETAILS]
}
origCount := count
for _, each := range articleDetailSummaries {
if each.MTime <= each.ContentMTime && each.MTime < each.ContentUpdateNanoTS {
continue
}
_, _, _, _, _, _, _, _, _, _, _, _, err = api.TryGetArticleContentInfo("SYSOP", each.BBoardID, each.ArticleID, nil, true, false, false)
if err == nil {
count++
}
}
if origCount != count {
logrus.Infof("cron.loadArticleDetails: bid: %v count: %v", boardID, count)
}
if newNextIdx == "" {
logrus.Infof("cron.loadArticleDetails: bid: %v load %v articles", boardID, count)
return nil
}
nextIdx = newNextIdx
}
}