mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-08-03 18:56:44 -04:00
#12 Make three options to deactivate sidebars, tabs and reading - read from json - tidy file up
This commit is contained in:
parent
0153b4514d
commit
226e787f66
@ -18,32 +18,55 @@
|
|||||||
|
|
||||||
package custom
|
package custom
|
||||||
|
|
||||||
|
import org.json.simple.JSONObject
|
||||||
import java.text.ParseException
|
import java.text.ParseException
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
|
const val dateFormat = "YYYY-MM"
|
||||||
|
|
||||||
data class CustomApp(
|
data class CustomApp(
|
||||||
val name: String,
|
val name: String,
|
||||||
val url: String,
|
val url: String,
|
||||||
val enforcedLanguage: String,
|
val enforcedLanguage: String,
|
||||||
val displayName: String,
|
val displayName: String,
|
||||||
val versionName: String = parseVersionNameFromUrlOrUsePattern(url, "YYYY-MM")
|
val versionName: String,
|
||||||
|
val disableSideBar: Boolean = false,
|
||||||
|
val disableTabs: Boolean = false,
|
||||||
|
val disableReadAloud: Boolean = false
|
||||||
) {
|
) {
|
||||||
val versionCode: Int = formatDate("YYDDD0").toInt()
|
constructor(name: String, parsedJson: JSONObject) : this(
|
||||||
|
name,
|
||||||
|
parsedJson.getAndCast("zim_url"),
|
||||||
|
parsedJson.getAndCast("enforced_lang"),
|
||||||
|
parsedJson.getAndCast("app_name"),
|
||||||
|
readVersionOrInfer(parsedJson),
|
||||||
|
parsedJson.getAndCast("disable_sidebar") ?: false,
|
||||||
|
parsedJson.getAndCast("disable_tabs") ?: false,
|
||||||
|
parsedJson.getAndCast("disable_read_aloud") ?: false
|
||||||
|
)
|
||||||
|
|
||||||
|
val versionCode: Int = formatCurrentDate("YYDDD0").toInt()
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private fun readVersionOrInfer(parsedJson: JSONObject) =
|
||||||
|
(parsedJson.getAndCast("version_name")
|
||||||
|
?: versionNameFromUrl(parsedJson.getAndCast("zim_url")))
|
||||||
|
?: formatCurrentDate()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun parseVersionNameFromUrlOrUsePattern(url: String, pattern: String) =
|
private fun versionNameFromUrl(url: String) =
|
||||||
url.substringAfterLast("_")
|
url.substringAfterLast("_")
|
||||||
.substringBeforeLast(".")
|
.substringBeforeLast(".")
|
||||||
.takeIf {
|
.takeIf {
|
||||||
try {
|
try {
|
||||||
SimpleDateFormat(pattern, Locale.ROOT).parse(it) != null
|
SimpleDateFormat(dateFormat, Locale.ROOT).parse(it) != null
|
||||||
} catch (parseException: ParseException) {
|
} catch (parseException: ParseException) {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?: formatDate(pattern)
|
|
||||||
|
|
||||||
private fun formatDate(pattern: String) =
|
private fun formatCurrentDate(pattern: String = dateFormat) =
|
||||||
Date().let(SimpleDateFormat(pattern, Locale.ROOT)::format)
|
Date().let(SimpleDateFormat(pattern, Locale.ROOT)::format)
|
||||||
|
@ -24,201 +24,38 @@ import org.json.simple.JSONObject
|
|||||||
import org.json.simple.parser.JSONParser
|
import org.json.simple.parser.JSONParser
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
|
typealias ProductFlavors = NamedDomainObjectContainer<ProductFlavor>
|
||||||
|
|
||||||
object CustomApps {
|
object CustomApps {
|
||||||
private val example = CustomApp(
|
|
||||||
name = "customexample",
|
|
||||||
url = "http://download.kiwix.org/zim/wikipedia_fr_test.zim",
|
|
||||||
enforcedLanguage = "en",
|
|
||||||
displayName = "Test Custom App"
|
|
||||||
)
|
|
||||||
private val phet = CustomApp(
|
|
||||||
name = "phet",
|
|
||||||
url = "http://download.kiwix.org/zim/phet/phet_mul_2018-09.zim",
|
|
||||||
enforcedLanguage = "en",
|
|
||||||
displayName = "PhET"
|
|
||||||
)
|
|
||||||
private val tunisie = CustomApp(
|
|
||||||
name = "tunisie",
|
|
||||||
url = "http://download.kiwix.org/zim/wikipedia_fr_tunisie_novid.zim",
|
|
||||||
enforcedLanguage = "fr",
|
|
||||||
versionName = "2018-07",
|
|
||||||
displayName = "Encyclopédie de la Tunisie"
|
|
||||||
)
|
|
||||||
private val venezuela = CustomApp(
|
|
||||||
name = "venezuela",
|
|
||||||
url = "http://download.kiwix.org/zim/wikipedia/wikipedia_es_venezuela_2018-07.zim",
|
|
||||||
enforcedLanguage = "es",
|
|
||||||
displayName = "Enciclopedia de Venezuela"
|
|
||||||
)
|
|
||||||
private val wikimed = CustomApp(
|
|
||||||
name = "wikimed",
|
|
||||||
url = "http://download.kiwix.org/zim/wikipedia_en_medicine_novid.zim",
|
|
||||||
enforcedLanguage = "en",
|
|
||||||
versionName = "2018-08",
|
|
||||||
displayName = "Medical Wikipedia"
|
|
||||||
)
|
|
||||||
private val wikimedar = CustomApp(
|
|
||||||
name = "wikimedar",
|
|
||||||
url = "http://download.kiwix.org/zim/wikipedia/wikipedia_ar_medicine_novid_2018-08.zim",
|
|
||||||
enforcedLanguage = "ar",
|
|
||||||
displayName = "وِيكيبيديا الطبية (بلا اتصال بالانترنت)"
|
|
||||||
)
|
|
||||||
private val wikimedde = CustomApp(
|
|
||||||
name = "wikimedde",
|
|
||||||
url = "http://download.kiwix.org/zim/wikipedia/wikipedia_de_medicine_novid_2018-10.zim",
|
|
||||||
enforcedLanguage = "de",
|
|
||||||
displayName = "Wikipedia Medizin (Offline)"
|
|
||||||
)
|
|
||||||
private val wikimedes = CustomApp(
|
|
||||||
name = "wikimedes",
|
|
||||||
url = "http://download.kiwix.org/zim/wikipedia/wikipedia_es_medicine_novid_2018-10.zim",
|
|
||||||
enforcedLanguage = "es",
|
|
||||||
displayName = "Wikipedia Médica (Offline)"
|
|
||||||
)
|
|
||||||
private val wikimedfa = CustomApp(
|
|
||||||
name = "wikimedfa",
|
|
||||||
url = "http://download.kiwix.org/zim/wikipedia/wikipedia_fa_medicine_novid_2018-07.zim",
|
|
||||||
enforcedLanguage = "fa",
|
|
||||||
displayName = "ویکیپدیای پزشکی (آفلاین)"
|
|
||||||
)
|
|
||||||
private val wikimedfr = CustomApp(
|
|
||||||
name = "wikimedfr",
|
|
||||||
url = "http://download.kiwix.org/zim/wikipedia/wikipedia_fr_medicine_novid_2018-07.zim",
|
|
||||||
enforcedLanguage = "fr",
|
|
||||||
displayName = "Wikipédia médicale"
|
|
||||||
)
|
|
||||||
private val wikimedja = CustomApp(
|
|
||||||
name = "wikimedja",
|
|
||||||
url = "http://download.kiwix.org/zim/wikipedia/wikipedia_ja_medicine_novid_2018-07.zim",
|
|
||||||
enforcedLanguage = "ja",
|
|
||||||
displayName = "医療ウィキペディア(オフライン)"
|
|
||||||
)
|
|
||||||
private val wikimedmini = CustomApp(
|
|
||||||
name = "wikimedmini",
|
|
||||||
url = "http://download.kiwix.org/zim/wikipedia/wikipedia_en_medicine_nodet_2018-07.zim",
|
|
||||||
enforcedLanguage = "en",
|
|
||||||
displayName = "Offline WikiMed mini"
|
|
||||||
)
|
|
||||||
private val wikimedor = CustomApp(
|
|
||||||
name = "wikimedor",
|
|
||||||
url = "http://download.kiwix.org/zim/wikipedia/wikipedia_or_medicine_novid_2018-07.zim",
|
|
||||||
enforcedLanguage = "or",
|
|
||||||
displayName = "ମେଡିକାଲ ଉଇକିପିଡିଆ (ଅଫଲାଇନ)"
|
|
||||||
)
|
|
||||||
private val wikimedpt = CustomApp(
|
|
||||||
name = "wikimedpt",
|
|
||||||
url = "http://download.kiwix.org/zim/wikipedia/wikipedia_pt_medicine_2018-10.zim",
|
|
||||||
enforcedLanguage = "pt",
|
|
||||||
displayName = "Wikipédia Médica (Offline)"
|
|
||||||
)
|
|
||||||
private val wikimedzh = CustomApp(
|
|
||||||
name = "wikimedzh",
|
|
||||||
url = "http://download.kiwix.org/zim/wikipedia/wikipedia_zh_medicine_novid_2018-07.zim",
|
|
||||||
enforcedLanguage = "zh",
|
|
||||||
displayName = "醫學維基百科(離線版)"
|
|
||||||
)
|
|
||||||
private val wikispecies = CustomApp(
|
|
||||||
name = "wikispecies",
|
|
||||||
url = "http://download.kiwix.org/zim/wikispecies/wikispecies_en_all_novid_2018-08.zim",
|
|
||||||
enforcedLanguage = "en",
|
|
||||||
displayName = "WikiSpecies"
|
|
||||||
)
|
|
||||||
private val wikivoyage = CustomApp(
|
|
||||||
name = "wikivoyage",
|
|
||||||
url = "http://download.kiwix.org/zim/wikivoyage/wikivoyage_en_all_novid_2018-10.zim",
|
|
||||||
enforcedLanguage = "en",
|
|
||||||
displayName = "Wikivoyage"
|
|
||||||
)
|
|
||||||
private val wikivoyageeurope = CustomApp(
|
|
||||||
name = "wikivoyageeurope",
|
|
||||||
url = "http://download.kiwix.org/zim/wikivoyage/wikivoyage_en_europe_novid_2018-10.zim",
|
|
||||||
enforcedLanguage = "en",
|
|
||||||
displayName = "Wikivoyage European Travels"
|
|
||||||
)
|
|
||||||
private val wikivoyagede = CustomApp(
|
|
||||||
name = "wikivoyagede",
|
|
||||||
url = "http://download.kiwix.org/zim/wikivoyage/wikivoyage_de_all_novid_2018-10.zim",
|
|
||||||
enforcedLanguage = "de",
|
|
||||||
displayName = "Wikivoyage auf Deutsch"
|
|
||||||
)
|
|
||||||
private val all = listOf(
|
|
||||||
example,
|
|
||||||
phet,
|
|
||||||
tunisie,
|
|
||||||
venezuela,
|
|
||||||
wikimed,
|
|
||||||
wikimedar,
|
|
||||||
wikimedde,
|
|
||||||
wikimedes,
|
|
||||||
wikimedfa,
|
|
||||||
wikimedfr,
|
|
||||||
wikimedja,
|
|
||||||
wikimedmini,
|
|
||||||
wikimedor,
|
|
||||||
wikimedpt,
|
|
||||||
wikimedzh,
|
|
||||||
wikispecies,
|
|
||||||
wikivoyage,
|
|
||||||
wikivoyageeurope,
|
|
||||||
wikivoyagede
|
|
||||||
)
|
|
||||||
|
|
||||||
fun createStatically(productFlavors: NamedDomainObjectContainer<ProductFlavor>) {
|
fun createDynamically(srcFolder: File, productFlavors: ProductFlavors) {
|
||||||
productFlavors.create(all)
|
productFlavors.create(customApps(srcFolder))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createDynamically(
|
private fun customApps(srcFolder: File) = srcFolder.walk()
|
||||||
srcFolder: File,
|
|
||||||
productFlavors: NamedDomainObjectContainer<ProductFlavor>
|
|
||||||
) {
|
|
||||||
productFlavors.create(
|
|
||||||
srcFolder.walk()
|
|
||||||
.filter { it.name == "info.json" }
|
.filter { it.name == "info.json" }
|
||||||
.map {
|
.map { CustomApp(it.parentFile.name, JSONParser().parse(it.readText()) as JSONObject) }
|
||||||
val parsedJson = JSONParser().parse(it.readText()) as JSONObject
|
.toList()
|
||||||
createCustomAppFromJson(
|
|
||||||
it.parentFile.name,
|
|
||||||
parsedJson.getAndCast("zim_url"),
|
|
||||||
parsedJson.getAndCast("enforced_lang"),
|
|
||||||
parsedJson.getAndCast("app_name"),
|
|
||||||
parsedJson.getAndCast("version_name")
|
|
||||||
)
|
|
||||||
}.toList()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun NamedDomainObjectContainer<ProductFlavor>.create(customApps: List<CustomApp>) {
|
fun ProductFlavors.create(customApps: List<CustomApp>) {
|
||||||
customApps.forEach(this::create)
|
customApps.forEach { customApp ->
|
||||||
}
|
this.create(customApp.name) {
|
||||||
|
|
||||||
private fun createCustomAppFromJson(
|
|
||||||
name: String,
|
|
||||||
url: String,
|
|
||||||
enforcedLanguage: String,
|
|
||||||
displayName: String,
|
|
||||||
versionName: String?
|
|
||||||
) = if (versionName == null) CustomApp(name, url, enforcedLanguage, displayName)
|
|
||||||
else CustomApp(name, url, enforcedLanguage, displayName, versionName)
|
|
||||||
|
|
||||||
fun <T> JSONObject.getAndCast(columnName: String): T =
|
|
||||||
getOrDefault(columnName, null) as T
|
|
||||||
|
|
||||||
private fun NamedDomainObjectContainer<ProductFlavor>.create(
|
|
||||||
customApp: CustomApp
|
|
||||||
) {
|
|
||||||
create(customApp.name) {
|
|
||||||
versionName = customApp.versionName
|
versionName = customApp.versionName
|
||||||
versionCode = customApp.versionCode
|
versionCode = customApp.versionCode
|
||||||
applicationIdSuffix = ".kiwixcustom${customApp.name}"
|
applicationIdSuffix = ".kiwixcustom${customApp.name}"
|
||||||
buildConfigField("String", "ZIM_URL", "\"${customApp.url}\"")
|
buildConfigField("String", "ZIM_URL", "\"${customApp.url}\"")
|
||||||
buildConfigField("String", "ENFORCED_LANG", "\"${customApp.enforcedLanguage}\"")
|
buildConfigField("String", "ENFORCED_LANG", "\"${customApp.enforcedLanguage}\"")
|
||||||
buildConfigField("Boolean", "DISABLE_SIDEBAR", "false")
|
buildConfigField("Boolean", "DISABLE_SIDEBAR", "${customApp.disableSideBar}")
|
||||||
buildConfigField("Boolean", "DISABLE_READ_ALOUD", "false")
|
buildConfigField("Boolean", "DISABLE_TABS", "${customApp.disableTabs}")
|
||||||
buildConfigField("Boolean", "DISABLE_TABS", "false")
|
buildConfigField("Boolean", "DISABLE_READ_ALOUD", "${customApp.disableReadAloud}")
|
||||||
configureStrings(customApp.displayName)
|
configureStrings(customApp.displayName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T> JSONObject.getAndCast(columnName: String): T =
|
||||||
|
getOrDefault(columnName, null) as T
|
||||||
|
|
||||||
fun ProductFlavor.configureStrings(appName: String) {
|
fun ProductFlavor.configureStrings(appName: String) {
|
||||||
resValue("string", "app_name", appName)
|
resValue("string", "app_name", appName)
|
||||||
|
@ -21,9 +21,6 @@ android {
|
|||||||
|
|
||||||
flavorDimensions("default")
|
flavorDimensions("default")
|
||||||
productFlavors {
|
productFlavors {
|
||||||
|
|
||||||
// Uncomment for static productFlavors
|
|
||||||
// CustomApps.createStatically(this)
|
|
||||||
CustomApps.createDynamically(project.file("src"), this)
|
CustomApps.createDynamically(project.file("src"), this)
|
||||||
all {
|
all {
|
||||||
File("$projectDir/src", "$name/$name.zim").let {
|
File("$projectDir/src", "$name/$name.zim").let {
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
{
|
{
|
||||||
"app_name": "Test Custom App",
|
"app_name": "Test Custom App",
|
||||||
"zim_url": "http://download.kiwix.org/zim/wikipedia_fr_test.zim",
|
"zim_url": "http://download.kiwix.org/zim/wikipedia_fr_test.zim",
|
||||||
"enforced_lang": "en"
|
"enforced_lang": "en",
|
||||||
|
"disable_sidebar": false,
|
||||||
|
"disable_tabs": false,
|
||||||
|
"disable_read_aloud": false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user