Commit 8d20dd37 authored by vicotor's avatar vicotor

update idx

parent eeb28557
......@@ -2,7 +2,6 @@ package main
import (
"container/list"
"fmt"
"log/slog"
"time"
......@@ -22,7 +21,7 @@ x 4. 到最后也没匹配上,或者超过了多少页。 外面处理;
type Idx struct {
idx []UserTask
newIdx []UserTask
//newIdx []UserTask
//taskId string
List *list.List
}
......@@ -30,21 +29,21 @@ type Idx struct {
func NewIdx(i []UserTask) *Idx {
return &Idx{
idx: i,
newIdx: make([]UserTask, 0, 10),
//newIdx: make([]UserTask, 0, 10),
List: list.New(),
}
}
func (s *Idx) Idx(page []UserTask) (bool, *list.List) {
if len(s.newIdx) == 0 {
for k, v := range page {
s.newIdx = append(s.newIdx, v)
if k > 5 {
break
}
}
}
//if len(s.newIdx) == 0 {
// for k, v := range page {
// s.newIdx = append(s.newIdx, v)
// if k > 5 {
// break
// }
// }
//}
if s.idx != nil && len(s.idx) == 0 {
......@@ -54,43 +53,73 @@ func (s *Idx) Idx(page []UserTask) (bool, *list.List) {
newList.PushFront(v)
}
s.idx = s.newIdx
s.newIdx = make([]UserTask, 0, 10)
s.idx = page
return true, newList
}
//TODO 匹配多个元素,防止用户取消;
newItems := list.New()
for k, v := range page {
match := false
for ik, iv := range s.idx {
//slog.Info("match", "idx", iv.UserId, "page user id", v.UserId, "page user name", v.UserName)
if v.UserId == iv.UserId {
match = true
break
_, _ = k, ik
}
}
if match {
newList := s.List
if !match {
newItems.PushFront(v)
}
}
if newItems.Len() < len(page) {
// 连续, 更新 s.idx, 将新元素加入到 s.List中, 并将s.List 返回.
s.idx = page
for e := newItems.Front(); e != nil; e = e.Next() {
s.List.PushFront(e.Value)
}
newlist := s.List
s.List = list.New()
//idx
s.idx = s.newIdx
s.newIdx = make([]UserTask, 0, 10)
fmt.Println("newList", "new users", newList.Len())
return true, newList
return true, newlist
} else {
s.List.PushFront(v)
}
// 不连续, 不必更新 idx, 将所有新增元素加入到s.List中.
for e := newItems.Front(); e != nil; e = e.Next() {
s.List.PushFront(e.Value)
}
return false, nil
}
////TODO 匹配多个元素,防止用户取消;
//for k, v := range page {
//
// match := false
//
// for ik, iv := range s.idx {
// //slog.Info("match", "idx", iv.UserId, "page user id", v.UserId, "page user name", v.UserName)
// if v.UserId == iv.UserId {
// match = true
// break
// _, _ = k, ik
// }
// }
//
// if match {
//
// newList := s.List
// s.List = list.New()
// //idx
// s.idx = s.newIdx
// s.newIdx = make([]UserTask, 0, 10)
//
// fmt.Println("newList", "new users", newList.Len())
//
// return true, newList
//
// } else {
// s.List.PushFront(v)
// }
//}
//return false, nil
}
type PageUsers struct {
......@@ -117,7 +146,12 @@ func (p *PageUsers) Request(tweetId string, next string, f req) ([]UserTask, err
if err != nil {
return nil, err
}
slog.Debug("Request", "tweet id", tweetId, "next", newNext, "len(users)", len(users))
slog.Info("Request", "tweet id", tweetId, "next", next, "newnext", newNext, "len(users)", len(users))
//if len(users) > 0 && tweetId == "gokunocool" {
// for _, v := range users {
// fmt.Println("quest user id", v.ID, "user name", v.UserName)
// }
//}
// wait rate limit.
if rt != nil && rt.Remaining == 0 {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment