diff --git a/app/src/main/java/com/capyreader/app/ui/accounts/LoginModule.kt b/app/src/main/java/com/capyreader/app/ui/accounts/LoginModule.kt index 34f0b5742..58269d559 100644 --- a/app/src/main/java/com/capyreader/app/ui/accounts/LoginModule.kt +++ b/app/src/main/java/com/capyreader/app/ui/accounts/LoginModule.kt @@ -1,6 +1,6 @@ package com.capyreader.app.ui.accounts -import org.koin.androidx.viewmodel.dsl.viewModel +import org.koin.core.module.dsl.viewModel import org.koin.dsl.module val loginModule = module { diff --git a/app/src/main/java/com/capyreader/app/ui/articles/ArticlesModule.kt b/app/src/main/java/com/capyreader/app/ui/articles/ArticlesModule.kt index 9e798bde5..3689b24b6 100644 --- a/app/src/main/java/com/capyreader/app/ui/articles/ArticlesModule.kt +++ b/app/src/main/java/com/capyreader/app/ui/articles/ArticlesModule.kt @@ -3,7 +3,7 @@ package com.capyreader.app.ui.articles import com.capyreader.app.preferences.AppPreferences import com.capyreader.app.ui.articles.feeds.edit.EditFeedViewModel import com.jocmp.capy.articles.ArticleRenderer -import org.koin.androidx.viewmodel.dsl.viewModel +import org.koin.core.module.dsl.viewModel import org.koin.dsl.module internal val articlesModule = module { diff --git a/app/src/main/java/com/capyreader/app/ui/settings/SettingsModule.kt b/app/src/main/java/com/capyreader/app/ui/settings/SettingsModule.kt index 45c72ad17..88e212e51 100644 --- a/app/src/main/java/com/capyreader/app/ui/settings/SettingsModule.kt +++ b/app/src/main/java/com/capyreader/app/ui/settings/SettingsModule.kt @@ -6,7 +6,7 @@ import com.capyreader.app.ui.settings.panels.DisplaySettingsViewModel import com.capyreader.app.ui.settings.panels.GeneralSettingsViewModel import com.capyreader.app.ui.settings.panels.GesturesSettingsViewModel import com.capyreader.app.ui.settings.panels.SettingsViewModel -import org.koin.androidx.viewmodel.dsl.viewModel +import org.koin.core.module.dsl.viewModel import org.koin.androidx.workmanager.dsl.worker import org.koin.dsl.module diff --git a/capy/src/main/java/com/jocmp/capy/articles/ArticleRenderer.kt b/capy/src/main/java/com/jocmp/capy/articles/ArticleRenderer.kt index 3f0a4f651..bd343428c 100644 --- a/capy/src/main/java/com/jocmp/capy/articles/ArticleRenderer.kt +++ b/capy/src/main/java/com/jocmp/capy/articles/ArticleRenderer.kt @@ -42,6 +42,10 @@ class ArticleRenderer( article.feedName } + val characters = article.content.length; + val charactersPerMinute = if (isCJK(article.content)) 265 else 500 + val readingTime = (characters + charactersPerMinute - 1) / charactersPerMinute; // Round up + val substitutions = colors + mapOf( "external_link" to article.externalLink(), "title" to title, @@ -52,6 +56,7 @@ class ArticleRenderer( "font_preload" to fontPreload(fontFamily), "top_margin" to topMargin(), "pre_white_space" to preWhiteSpace(), + "reading_time" to "$readingTime min read" ) val html = MacroProcessor( @@ -106,6 +111,36 @@ class ArticleRenderer( """.trimIndent() } } + + fun isCJK(text: String): Boolean { + var totalCJK = 0 + var totalChecked = 0 + + for (r in text) { + if (totalChecked >= 50) break + totalChecked++ + + val block = Character.UnicodeBlock.of(r) + if (block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || + block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || + block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B || + block == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS || + block == Character.UnicodeBlock.CJK_COMPATIBILITY_FORMS || + block == Character.UnicodeBlock.HIRAGANA || + block == Character.UnicodeBlock.KATAKANA || + block == Character.UnicodeBlock.HANGUL_SYLLABLES || + block == Character.UnicodeBlock.HANGUL_JAMO || + block == Character.UnicodeBlock.HANGUL_COMPATIBILITY_JAMO || + block == Character.UnicodeBlock.BOPOMOFO || + block == Character.UnicodeBlock.YI_SYLLABLES || + block == Character.UnicodeBlock.YI_RADICALS + ) { + totalCJK++ + } + } + + return totalChecked > 0 && totalCJK * 2 >= totalChecked + } } private val Document.content diff --git a/capy/src/main/res/raw/template.html b/capy/src/main/res/raw/template.html index 661902f48..1dc18f3c0 100644 --- a/capy/src/main/res/raw/template.html +++ b/capy/src/main/res/raw/template.html @@ -32,6 +32,7 @@