diff -r eb83fd052cc5 -r 0c581e0108da account.go --- a/account.go Sat Apr 29 10:51:45 2017 +0200 +++ b/account.go Sat Apr 29 12:16:16 2017 +0200 @@ -59,7 +59,7 @@ } var account Account - if err := mc.apiCall(endPoint, method, nil, nil, &account); err != nil { + if err := mc.apiCall(endPoint, method, nil, nil, nil, &account); err != nil { return nil, err } return &account, nil @@ -90,6 +90,11 @@ return []Account{}, ErrInvalidParameter } endPoint = "accounts/" + op + case "reblogged_by", "favourited_by": + if opts == nil || opts.ID < 1 { + return []Account{}, ErrInvalidID + } + endPoint = "statuses/" + strconv.Itoa(opts.ID) + "/" + op default: return nil, ErrInvalidParameter } @@ -101,9 +106,22 @@ } var accounts []Account - if err := mc.apiCall(endPoint, rest.Get, params, lopt, &accounts); err != nil { + var links apiLinks + if err := mc.apiCall(endPoint, rest.Get, params, lopt, &links, &accounts); err != nil { return nil, err } + if lopt != nil { // Fetch more pages to reach our limit + var accountSlice []Account + for lopt.Limit > len(accounts) && links.next != nil { + newlopt := links.next + links = apiLinks{} + if err := mc.apiCall(endPoint, rest.Get, params, newlopt, &links, &accountSlice); err != nil { + return nil, err + } + accounts = append(accounts, accountSlice...) + accountSlice = accountSlice[:0] // Clear struct + } + } return accounts, nil } @@ -180,7 +198,7 @@ params["uri"] = uri var account Account - if err := mc.apiCall("follows", rest.Post, params, nil, &account); err != nil { + if err := mc.apiCall("follows", rest.Post, params, nil, nil, &account); err != nil { return nil, err } if account.ID == 0 { @@ -281,7 +299,7 @@ } var rl []Relationship - if err := mc.apiCall("accounts/relationships", rest.Get, params, nil, &rl); err != nil { + if err := mc.apiCall("accounts/relationships", rest.Get, params, nil, nil, &rl); err != nil { return nil, err } return rl, nil @@ -305,9 +323,22 @@ } var sl []Status - if err := mc.apiCall(endPoint, rest.Get, params, lopt, &sl); err != nil { + var links apiLinks + if err := mc.apiCall(endPoint, rest.Get, params, lopt, &links, &sl); err != nil { return nil, err } + if lopt != nil { // Fetch more pages to reach our limit + var statusSlice []Status + for lopt.Limit > len(sl) && links.next != nil { + newlopt := links.next + links = apiLinks{} + if err := mc.apiCall(endPoint, rest.Get, params, newlopt, &links, &statusSlice); err != nil { + return nil, err + } + sl = append(sl, statusSlice...) + statusSlice = statusSlice[:0] // Clear struct + } + } return sl, nil }