@@ -2,56 +2,20 @@ package main
22
33import (
44 "encoding/json"
5- "errors"
6- "fmt"
75 "io/ioutil"
86 "log"
97 "os"
10- "time"
118)
129
13- const (
14- leetCodeJSON = "leetcode.json"
15- )
16-
17- type leetcode struct {
18- Username string // 用户名
19- Ranking int // 网站排名
20- Updated time.Time // 数据更新时间
21-
22- Record record // 已解答题目与全部题目的数量,按照难度统计
23- Problems problems // 所有问题的集合
24- }
25-
26- func newLeetCode () * leetcode {
27- log .Println ("开始,获取 LeetCode 数据" )
28-
29- lc , err := readLeetCode ()
30- if err != nil {
31- log .Println ("读取 LeetCode 的记录失败,正在重新生成 LeetCode 记录。失败原因:" , err .Error ())
32- lc = latestLeetCode ()
33- }
34-
35- lc .refresh ()
36-
37- lc .save ()
38-
39- log .Println ("获取 LeetCode 的最新数据" )
40- return lc
41- }
42-
43- func readLeetCode () (* leetcode , error ) {
10+ func readLeetCode () * leetcode {
4411 data , err := ioutil .ReadFile (leetCodeJSON )
45- if err != nil {
46- return nil , errors .New ("读取文件失败:" + err .Error ())
47- }
12+ check (err )
4813
4914 lc := new (leetcode )
50- if err := json .Unmarshal (data , lc ); err != nil {
51- return nil , errors .New ("转换成 leetcode 时,失败:" + err .Error ())
52- }
15+ err = json .Unmarshal (data , lc )
16+ check (err )
5317
54- return lc , nil
18+ return lc
5519}
5620
5721func (lc * leetcode ) save () {
@@ -71,74 +35,6 @@ func (lc *leetcode) save() {
7135 return
7236}
7337
74- func (lc * leetcode ) refresh () {
75- if time .Since (lc .Updated ) < time .Minute {
76- log .Printf ("LeetCode 数据在 %s 前刚刚更新过,跳过此次刷新\n " , time .Since (lc .Updated ))
77- return
78- }
79-
80- log .Println ("开始,刷新 LeetCode 数据" )
81- newLC := latestLeetCode ()
82-
83- logDiff (lc , newLC )
84-
85- * lc = * newLC
86- }
87-
88- func logDiff (old , new * leetcode ) {
89- // 对比 ranking
90- str := fmt .Sprintf ("当前排名 %d" , new .Ranking )
91- verb , delta := "进步" , old .Ranking - new .Ranking
92- if new .Ranking > old .Ranking {
93- verb , delta = "后退" , new .Ranking - old .Ranking
94- }
95- str += fmt .Sprintf (",%s了 %d 名" , verb , delta )
96- log .Println (str )
97-
98- lenOld , lenNew := len (old .Problems ), len (new .Problems )
99- hasNewFinished := false
100-
101- i := 0
102-
103- // 检查新旧都有的问题
104- for i < lenOld && i < lenNew {
105- o , n := old .Problems [i ], new .Problems [i ]
106- // 检查是 n 是否是新 完成
107- if o .IsAccepted == false && n .IsAccepted == true {
108- log .Printf ("~新完成~ %d - %s" , n .ID , n .Title )
109- hasNewFinished = true
110- }
111- // 检查是 n 是否是新 收藏
112- if o .IsFavor == false && n .IsFavor == true {
113- log .Printf ("~新收藏~ %d - %s" , n .ID , n .Title )
114- } else if o .IsFavor == true && n .IsFavor == false {
115- log .Printf ("~取消收藏~ %d - %s" , o .ID , o .Title )
116- time .Sleep (time .Second )
117- }
118-
119- // 有时候,会在中间添加新题
120- if o .Title == "" && n .Title != "" {
121- log .Printf ("新题: %d - %s" , new .Problems [i ].ID , new .Problems [i ].Title )
122- }
123-
124- i ++
125- }
126-
127- log .Printf ("已经检查完了 %d 题\n " , i )
128-
129- if ! hasNewFinished {
130- log .Println ("~ 没有新完成习题 ~" )
131- }
132-
133- // 检查新添加的习题
134- for i < lenNew {
135- if new .Problems [i ].isAvailable () {
136- log .Printf ("新题: %d - %s" , new .Problems [i ].ID , new .Problems [i ].Title )
137- }
138- i ++
139- }
140- }
141-
14238func (lc * leetcode ) ProgressTable () string {
14339 return lc .Record .progressTable ()
14440}
0 commit comments