diff --git a/app/src/main/java/telegra/ph/Api.kt b/app/src/main/java/telegra/ph/Api.kt index d4ab1e8..59cfde2 100644 --- a/app/src/main/java/telegra/ph/Api.kt +++ b/app/src/main/java/telegra/ph/Api.kt @@ -8,24 +8,36 @@ class Api { private val ApiBase = "https://api.telegra.ph/" - fun getPage(id: String?, accessToken: String?, callback: (page: Page?) -> Unit) { - Bridge.get("${ApiBase}getPage/$id?return_content=true" + if (accessToken != null) "&access_token=$accessToken" else "").asJsonObject { response, jsonObject, bridgeException -> - if (jsonObject != null) callback(jsonObject.parsePage()) - else callback(null) + 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()) + } catch (e: Exception) { + callback(false, null) + } + else callback(false, null) } } - fun createPage(accessToken: String?, content: String?, title: String?, callback: (Page?) -> Unit) { - Bridge.get("${ApiBase}createPage?access_token=$accessToken&title=%s&content=$content&return_content=true", title).asJsonObject { response, jsonObject, bridgeException -> - if (jsonObject != null) callback(jsonObject.parsePage()) - else callback(null) + 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()) + } catch (e: Exception) { + callback(false, null) + } + else callback(false, null) } } - fun editPage(accessToken: String?, path: String?, content: String?, title: String?, callback: (Page?) -> Unit) { - Bridge.get("${ApiBase}editPage/$path?access_token=$accessToken&title=%s&content=$content&return_content=true", title).asJsonObject { response, jsonObject, bridgeException -> - if (jsonObject != null) callback(jsonObject.parsePage()) - else callback(null) + 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()) + } catch (e: Exception) { + callback(false, null) + } + else callback(false, null) } } diff --git a/app/src/main/java/telegra/ph/MainActivity.kt b/app/src/main/java/telegra/ph/MainActivity.kt index b935310..c6ab0b6 100644 --- a/app/src/main/java/telegra/ph/MainActivity.kt +++ b/app/src/main/java/telegra/ph/MainActivity.kt @@ -11,10 +11,6 @@ import com.afollestad.materialdialogs.MaterialDialog import im.delight.android.webview.AdvancedWebView class MainActivity : AppCompatActivity(), AdvancedWebView.Listener { - - private val htmlHead = "
" - private val htmlEnd = "" - private val webView: AdvancedWebView? by lazy { findViewById(R.id.webView) as AdvancedWebView? } private val editor: Editor? by lazy { findViewById(R.id.editor) as Editor? } @@ -37,6 +33,9 @@ class MainActivity : AppCompatActivity(), AdvancedWebView.Listener { isVerticalScrollBarEnabled = false overScrollMode = View.OVER_SCROLL_NEVER } + if (accessToken().isNullOrBlank()) Api().createAccount { accessToken -> + if (accessToken != null) saveAccessToken(accessToken) + } if (intent.action == Intent.ACTION_VIEW && !intent.dataString.isNullOrBlank() && intent.dataString.contains("telegra.ph")) loadPage(intent.dataString.split("/").last()) else loadEditor() } @@ -51,12 +50,13 @@ class MainActivity : AppCompatActivity(), AdvancedWebView.Listener { webView?.visibility = View.GONE currentPage = null // Load - if (path != null) Api().getPage(path, accessToken()) { page -> - runOnUiThread { + if (path != null) Api().getPage(path, accessToken()) { success, page -> + if (success) runOnUiThread { isEdit = true currentPage = page editor?.setText(page?.content ?: "") } + else showError() } } } @@ -70,8 +70,9 @@ class MainActivity : AppCompatActivity(), AdvancedWebView.Listener { editor?.visibility = View.GONE currentPage = null // Load - Api().getPage(path, accessToken()) { page -> - showPage(page) + Api().getPage(path, accessToken()) { success, page -> + if (success) showPage(page) + else showError() } } } @@ -86,19 +87,29 @@ class MainActivity : AppCompatActivity(), AdvancedWebView.Listener { currentPage = page // Show page?.let { - var html = htmlHead + var html = getString(R.string.viewer_html_head) html += "