fix: sync Android cursor tolerance fixes
This commit is contained in:
parent
ca79562fd8
commit
2d5a6236c2
5 changed files with 198 additions and 8 deletions
|
|
@ -77,6 +77,13 @@ func (r *Router) onStoriesGetAllStories(ctx context.Context, req *tg.StoriesGetA
|
|||
now := int(r.clock.Now().Unix())
|
||||
var cursor domain.StoryListCursor
|
||||
if next {
|
||||
if digest, ok := storyAllStoriesDigestFromCompleteState(requestState, hidden); ok {
|
||||
list := domain.StoryList{Hidden: hidden, Count: digest.Count, State: requestState}
|
||||
if r.deps.Stories == nil || userID == 0 {
|
||||
return tgStoriesAllStories(userID, list), nil
|
||||
}
|
||||
return r.tgStoriesAllStories(ctx, userID, list), nil
|
||||
}
|
||||
cursor, err = storyAllStoriesCursorFromState(requestState, hidden)
|
||||
if err != nil {
|
||||
return nil, offsetInvalidErr()
|
||||
|
|
@ -135,7 +142,16 @@ func validateStoriesGetAllStoriesRequest(req *tg.StoriesGetAllStoriesRequest) er
|
|||
next := storyAllStoriesNext(req)
|
||||
hidden := storyAllStoriesHidden(req)
|
||||
if next {
|
||||
if !hasState || state == "" || !storyAllStoriesCursorStateToken(state) {
|
||||
if !hasState || state == "" {
|
||||
return offsetInvalidErr()
|
||||
}
|
||||
if storyAllStoriesCompleteState(state) {
|
||||
if !storyAllStoriesCompleteStateForHidden(state, hidden) {
|
||||
return offsetInvalidErr()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
if !storyAllStoriesCursorStateToken(state) {
|
||||
return offsetInvalidErr()
|
||||
}
|
||||
if _, err := storyAllStoriesCursorFromState(state, hidden); err != nil {
|
||||
|
|
@ -172,6 +188,22 @@ func storyAllStoriesCompleteState(state string) bool {
|
|||
return strings.HasPrefix(state, "ts1:")
|
||||
}
|
||||
|
||||
func storyAllStoriesDigestFromCompleteState(state string, hidden bool) (domain.StoryListDigest, bool) {
|
||||
if !storyAllStoriesCompleteStateForHidden(state, hidden) {
|
||||
return domain.StoryListDigest{}, false
|
||||
}
|
||||
parts := strings.Split(state, ":")
|
||||
count, err := strconv.Atoi(parts[2])
|
||||
if err != nil || count < 0 {
|
||||
return domain.StoryListDigest{}, false
|
||||
}
|
||||
hash, err := strconv.ParseUint(parts[3], 16, 64)
|
||||
if err != nil {
|
||||
return domain.StoryListDigest{}, false
|
||||
}
|
||||
return domain.StoryListDigest{Count: count, Hash: hash}, true
|
||||
}
|
||||
|
||||
func storyAllStoriesCompleteStateForHidden(state string, hidden bool) bool {
|
||||
parts := strings.Split(state, ":")
|
||||
if len(parts) != 4 || parts[0] != "ts1" {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue