From 702832cbe429f4cde5b03a59bdf3cb64855268e4 Mon Sep 17 00:00:00 2001 From: Mariotaku Lee Date: Thu, 2 Feb 2017 14:22:00 +0800 Subject: [PATCH] reduced rate limit when add/remove users from lists #694 --- .../twidere/fragment/UserFragment.kt | 45 +++++++++++++------ 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFragment.kt index f28bb84cc..3e5ec20f6 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFragment.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFragment.kt @@ -83,9 +83,11 @@ import org.mariotaku.chameleon.Chameleon import org.mariotaku.chameleon.ChameleonUtils import org.mariotaku.kpreferences.get import org.mariotaku.ktextension.* +import org.mariotaku.microblog.library.MicroBlog import org.mariotaku.microblog.library.MicroBlogException import org.mariotaku.microblog.library.twitter.model.FriendshipUpdate 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.R import org.mariotaku.twidere.activity.AccountSelectorActivity @@ -915,21 +917,38 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener, ProgressDialogFragment.show(fragmentManager, "get_list_progress") } }.then { + fun MicroBlog.getUserListOwnerMemberships(id: String): ArrayList { + val result = ArrayList() + 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 ownedLists = ArrayList() + val listMemberships = microBlog.getUserListOwnerMemberships(user.key.id) val paging = Paging() - val ownedLists = microBlog.getUserListOwnerships(paging) - var nextCursor = ownedLists.nextCursor - while (nextCursor != 0L) { - val list = microBlog.getUserListOwnerships(paging) - ownedLists.addAll(list) - nextCursor = list.nextCursor - } - val userListMemberships = microBlog.getUserListMemberships(user.key.id, null, true) - return@then Array(ownedLists.size) { idx -> - val list = ParcelableUserListUtils.from(ownedLists[idx], user.account_key) - list.is_user_inside = userListMemberships.firstOrNull { it.id == ownedLists[idx].id } != null - return@Array list - } + paging.count(100) + var nextCursor: Long + do { + val resp = microBlog.getUserListOwnerships(paging) + resp.mapTo(ownedLists) { item -> + val userList = ParcelableUserListUtils.from(item, user.account_key) + userList.is_user_inside = listMemberships.any { it.id == item.id } + return@mapTo userList + } + nextCursor = resp.nextCursor + paging.cursor(nextCursor) + } while (nextCursor > 0) + return@then ownedLists.toTypedArray() }.alwaysUi { executeAfterFragmentResumed { val df = fragmentManager.findFragmentByTag("get_list_progress") as? DialogFragment