From dcf355895eb42b50c873edb3f282e65ff1bd0e47 Mon Sep 17 00:00:00 2001 From: Jan-Lk Else Date: Thu, 22 Dec 2016 08:55:38 +0100 Subject: [PATCH] Post list --- app/src/main/java/telegra/ph/Api.kt | 74 +++++++++++++++----- app/src/main/java/telegra/ph/MainActivity.kt | 17 +++++ app/src/main/res/menu/activity_main.xml | 8 ++- app/src/main/res/values/strings.xml | 1 + 4 files changed, 79 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/telegra/ph/Api.kt b/app/src/main/java/telegra/ph/Api.kt index 59cfde2..f77d010 100644 --- a/app/src/main/java/telegra/ph/Api.kt +++ b/app/src/main/java/telegra/ph/Api.kt @@ -11,7 +11,7 @@ class Api { fun getPage(path: String?, accessToken: String?, callback: (success: Boolean, page: Page?) -> Unit) { Bridge.get("${ApiBase}getPage/$path?access_token=%s&return_content=true", accessToken).asString { response, s, bridgeException -> if (!s.isNullOrBlank() && bridgeException == null) try { - callback(true, JSONObject(s).parsePage()) + callback(true, JSONObject(s).parsePageResponse()) } catch (e: Exception) { callback(false, null) } @@ -22,7 +22,7 @@ class Api { fun createPage(accessToken: String?, content: String?, title: String?, callback: (success: Boolean, Page?) -> Unit) { Bridge.get("${ApiBase}createPage?access_token=%s&title=%s&content=%s&return_content=true", accessToken, title, content).asString { response, s, bridgeException -> if (!s.isNullOrBlank() && bridgeException == null) try { - callback(true, JSONObject(s).parsePage()) + callback(true, JSONObject(s).parsePageResponse()) } catch (e: Exception) { callback(false, null) } @@ -33,7 +33,7 @@ class Api { fun editPage(accessToken: String?, path: String?, content: String?, title: String?, callback: (success: Boolean, Page?) -> Unit) { Bridge.get("${ApiBase}editPage/$path?access_token=%s&title=%s&content=%s&return_content=true", accessToken, title, content).asString { response, s, bridgeException -> if (!s.isNullOrBlank() && bridgeException == null) try { - callback(true, JSONObject(s).parsePage()) + callback(true, JSONObject(s).parsePageResponse()) } catch (e: Exception) { callback(false, null) } @@ -42,28 +42,64 @@ class Api { } fun createAccount(callback: (accessToken: String?) -> Unit) { - Bridge.get("${ApiBase}createAccount?short_name=teleposter").asJsonObject { response, jsonObject, bridgeException -> - if (jsonObject != null) callback(jsonObject.optJSONObject("result")?.optString("access_token")) + Bridge.get("${ApiBase}createAccount?short_name=teleposter").asString { response, s, bridgeException -> + if (!s.isNullOrBlank() && bridgeException == null) try { + callback(JSONObject(s).optJSONObject("result")?.optString("access_token")) + } catch (e: Exception) { + callback(null) + } else callback(null) } } + fun getPageList(accessToken: String?, offset: Int = 0, callback: (success: Boolean, MutableList?) -> Unit) { + Bridge.get("${ApiBase}getPageList?access_token=%s&limit=200&offset=$offset", accessToken).asString { response, s, bridgeException -> + if (!s.isNullOrBlank() && bridgeException == null) try { + JSONObject(s).optJSONObject("result")?.let { + val totalCount = it.optInt("total_count") + var currentCount = 200 + offset + val result = mutableListOf() + it.optJSONArray("pages")?.let { + for (i in 0 until it.length()) { + val page = it.optJSONObject(i)?.parsePage() + if (page != null) result.add(page) + } + } + if (currentCount < totalCount) { + getPageList(accessToken, currentCount) { success, pages -> + if (success && pages != null) { + result.addAll(pages) + callback(true, result) + } + if (!success) callback(false, null) + } + currentCount += 200 + } else callback(true, result) + } ?: callback(false, null) + } catch (e: Exception) { + callback(false, null) + } + else callback(false, null) + } + } + + private fun JSONObject.parsePageResponse(): Page? { + if (optBoolean("ok", false)) optJSONObject("result")?.let { return it.parsePage() } + return null + } + private fun JSONObject.parsePage(): Page? { val result: Page = Page() - if (optBoolean("ok", false)) { - optJSONObject("result")?.let { - result.path = it.optString("path", "") - result.url = it.optString("url", "") - result.title = it.optString("title", "") - result.description = it.optString("description", "") - result.author_name = it.optString("author_name", "") - result.author_url = it.optString("author_url", "") - result.image_url = it.optString("image_url", "") - it.optJSONArray("content")?.parseContent(result) - result.views = it.optInt("views", 0) - result.can_edit = it.optBoolean("can_edit", false) - } - } + result.path = optString("path", "") + result.url = optString("url", "") + result.title = optString("title", "") + result.description = optString("description", "") + result.author_name = optString("author_name", "") + result.author_url = optString("author_url", "") + result.image_url = optString("image_url", "") + optJSONArray("content")?.parseContent(result) + result.views = optInt("views", 0) + result.can_edit = optBoolean("can_edit", false) return result } diff --git a/app/src/main/java/telegra/ph/MainActivity.kt b/app/src/main/java/telegra/ph/MainActivity.kt index 48a345a..8220ae6 100644 --- a/app/src/main/java/telegra/ph/MainActivity.kt +++ b/app/src/main/java/telegra/ph/MainActivity.kt @@ -198,6 +198,7 @@ class MainActivity : AppCompatActivity(), AdvancedWebView.Listener { R.id.bookmarks -> { MaterialDialog.Builder(this) .title(R.string.bookmarks) + .positiveText(android.R.string.ok) .items(bookmarks().reversed().map { it.split("xxx;xxx")[1] }) .itemsCallback { materialDialog, view, i, charSequence -> loadPage(bookmarks().reversed().map { it.split("xxx;xxx")[0] }[i]) @@ -217,6 +218,22 @@ class MainActivity : AppCompatActivity(), AdvancedWebView.Listener { .show() true } + R.id.published -> { + Api().getPageList(accessToken()) { success, result -> + if (!success || result == null || result.isEmpty()) showError() + else { + MaterialDialog.Builder(this) + .title(R.string.published) + .positiveText(android.R.string.ok) + .items(result.map(Page::title)) + .itemsCallback { materialDialog, view, i, charSequence -> + loadPage(result.map(Page::path)[i]) + } + .show() + } + } + true + } R.id.bookmark -> { MaterialDialog.Builder(this) .title(R.string.title_question) diff --git a/app/src/main/res/menu/activity_main.xml b/app/src/main/res/menu/activity_main.xml index b414f14..136c591 100644 --- a/app/src/main/res/menu/activity_main.xml +++ b/app/src/main/res/menu/activity_main.xml @@ -17,13 +17,17 @@ android:id="@+id/try_edit" android:title="@string/try_edit" app:showAsAction="ifRoom"/> + ]]> + Published posts