reduced rate limit when add/remove users from lists #694

This commit is contained in:
Mariotaku Lee 2017-02-02 14:22:00 +08:00
parent 20ac36c07b
commit 702832cbe4
No known key found for this signature in database
GPG Key ID: 15C10F89D7C33535
1 changed files with 32 additions and 13 deletions

View File

@ -83,9 +83,11 @@ import org.mariotaku.chameleon.Chameleon
import org.mariotaku.chameleon.ChameleonUtils import org.mariotaku.chameleon.ChameleonUtils
import org.mariotaku.kpreferences.get import org.mariotaku.kpreferences.get
import org.mariotaku.ktextension.* import org.mariotaku.ktextension.*
import org.mariotaku.microblog.library.MicroBlog
import org.mariotaku.microblog.library.MicroBlogException import org.mariotaku.microblog.library.MicroBlogException
import org.mariotaku.microblog.library.twitter.model.FriendshipUpdate import org.mariotaku.microblog.library.twitter.model.FriendshipUpdate
import org.mariotaku.microblog.library.twitter.model.Paging import org.mariotaku.microblog.library.twitter.model.Paging
import org.mariotaku.microblog.library.twitter.model.UserList
import org.mariotaku.twidere.Constants.* import org.mariotaku.twidere.Constants.*
import org.mariotaku.twidere.R import org.mariotaku.twidere.R
import org.mariotaku.twidere.activity.AccountSelectorActivity import org.mariotaku.twidere.activity.AccountSelectorActivity
@ -915,21 +917,38 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
ProgressDialogFragment.show(fragmentManager, "get_list_progress") ProgressDialogFragment.show(fragmentManager, "get_list_progress")
} }
}.then { }.then {
fun MicroBlog.getUserListOwnerMemberships(id: String): ArrayList<UserList> {
val result = ArrayList<UserList>()
var nextCursor: Long
val paging = Paging()
paging.count(100)
do {
val resp = getUserListMemberships(user.key.id, paging, true)
result.addAll(resp)
nextCursor = resp.nextCursor
paging.cursor(nextCursor)
} while (nextCursor > 0)
return result
}
val microBlog = MicroBlogAPIFactory.getInstance(context, user.account_key) val microBlog = MicroBlogAPIFactory.getInstance(context, user.account_key)
val ownedLists = ArrayList<ParcelableUserList>()
val listMemberships = microBlog.getUserListOwnerMemberships(user.key.id)
val paging = Paging() val paging = Paging()
val ownedLists = microBlog.getUserListOwnerships(paging) paging.count(100)
var nextCursor = ownedLists.nextCursor var nextCursor: Long
while (nextCursor != 0L) { do {
val list = microBlog.getUserListOwnerships(paging) val resp = microBlog.getUserListOwnerships(paging)
ownedLists.addAll(list) resp.mapTo(ownedLists) { item ->
nextCursor = list.nextCursor val userList = ParcelableUserListUtils.from(item, user.account_key)
} userList.is_user_inside = listMemberships.any { it.id == item.id }
val userListMemberships = microBlog.getUserListMemberships(user.key.id, null, true) return@mapTo userList
return@then Array<ParcelableUserList>(ownedLists.size) { idx -> }
val list = ParcelableUserListUtils.from(ownedLists[idx], user.account_key) nextCursor = resp.nextCursor
list.is_user_inside = userListMemberships.firstOrNull { it.id == ownedLists[idx].id } != null paging.cursor(nextCursor)
return@Array list } while (nextCursor > 0)
} return@then ownedLists.toTypedArray()
}.alwaysUi { }.alwaysUi {
executeAfterFragmentResumed { executeAfterFragmentResumed {
val df = fragmentManager.findFragmentByTag("get_list_progress") as? DialogFragment val df = fragmentManager.findFragmentByTag("get_list_progress") as? DialogFragment