From 487a924582e0af8a179a66820f8578f9df4826f8 Mon Sep 17 00:00:00 2001 From: Carl Vuorinen Date: Wed, 22 Aug 2018 23:00:45 +0300 Subject: [PATCH] Create reusable methods in Task class to handle async markdown parsing --- .../android/habitica/models/tasks/Task.kt | 31 +++++++++++++++++++ .../habitica/ui/helpers/MarkdownParser.kt | 13 ++++++++ 2 files changed, 44 insertions(+) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt index 3c3f88777..aaa1e0460 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt @@ -8,6 +8,7 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.models.Tag import com.habitrpg.android.habitica.models.user.Stats import com.habitrpg.android.habitica.ui.helpers.MarkdownParser +import io.reactivex.functions.Consumer import io.realm.RealmList import io.realm.RealmObject import io.realm.annotations.Ignore @@ -191,6 +192,36 @@ open class Task : RealmObject, Parcelable { } + fun markdownText(callback: (CharSequence) -> Unit): CharSequence { + if (this.parsedText != null) { + return this.parsedText as CharSequence + } + + MarkdownParser.parseMarkdownAsync(this.text, Consumer { parsedText -> + this.parsedText = parsedText + callback(parsedText) + }) + + return this.text + } + + fun markdownNotes(callback: (CharSequence) -> Unit): CharSequence? { + if (this.parsedNotes != null) { + return this.parsedNotes as CharSequence + } + + if (this.notes?.isEmpty() == true) { + return null + } + + MarkdownParser.parseMarkdownAsync(this.notes, Consumer { parsedText -> + this.parsedNotes = parsedText + callback(parsedText) + }) + + return this.notes + } + override fun equals(other: Any?): Boolean { if (other == null) { return false diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/MarkdownParser.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/MarkdownParser.kt index 84523617d..04c8e32e5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/MarkdownParser.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/MarkdownParser.kt @@ -7,6 +7,11 @@ import com.commonsware.cwac.anddown.AndDown import net.pherth.android.emoji_library.EmojiParser import android.text.Html.FROM_HTML_MODE_LEGACY +import com.habitrpg.android.habitica.helpers.RxErrorHandler +import io.reactivex.Single +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.functions.Consumer +import io.reactivex.schedulers.Schedulers /** * @author data5tream @@ -35,6 +40,14 @@ object MarkdownParser { return output } + fun parseMarkdownAsync(input: String?, onSuccess: Consumer) { + Single.just(input) + .map { this.parseMarkdown(it) } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(onSuccess, RxErrorHandler.handleEmptyError()) + } + /** * Converts stylized CharSequence into markdown *