Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions app/src/main/java/org/cis_india/wsreader/api/models/Book.kt
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,12 @@ data class Book(
val publishers: List<Publisher>,
@SerialName("places_of_publication")
val place_of_publication: List<PlacesOfPublication>,
@SerialName("literary_genres")
val literaryGenres: List<Genre> = emptyList(),
@SerialName("main_subjects")
val mainSubjects: List<Subject> = emptyList(),
@SerialName("form_of_work")
val formOfWork: List<FormOfWork> = emptyList(),
) {
val id: Int
get() = wikidataQid.removePrefix("Q").toInt()
Expand Down
14 changes: 14 additions & 0 deletions app/src/main/java/org/cis_india/wsreader/api/models/FormOfWork.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.cis_india.wsreader.api.models

import androidx.annotation.Keep
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Keep
@Serializable
data class FormOfWork(
@SerialName("type_of_work")
val typeOfWork: String? = null,
@SerialName("type_of_work_wikidata_qid")
val typeOfWorkWikidataQid: String? = null,
)
14 changes: 14 additions & 0 deletions app/src/main/java/org/cis_india/wsreader/api/models/Genre.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.cis_india.wsreader.api.models

import androidx.annotation.Keep
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Keep
@Serializable
data class Genre(
@SerialName("name")
val name: String? = null,
@SerialName("genre_wikidata_qid")
val genreWikidataQid: String? = null,
)
14 changes: 14 additions & 0 deletions app/src/main/java/org/cis_india/wsreader/api/models/Subject.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.cis_india.wsreader.api.models

import androidx.annotation.Keep
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Keep
@Serializable
data class Subject(
@SerialName("name")
val name: String? = null,
@SerialName("subject_wikidata_qid")
val subjectWikidataQid: String? = null,
)
42 changes: 42 additions & 0 deletions app/src/main/java/org/cis_india/wsreader/helpers/book/BookUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ package org.cis_india.wsreader.helpers.book

import org.cis_india.wsreader.api.models.Author
import org.cis_india.wsreader.api.models.Editor
import org.cis_india.wsreader.api.models.FormOfWork
import org.cis_india.wsreader.api.models.Genre
import org.cis_india.wsreader.api.models.Subject
import org.cis_india.wsreader.api.models.Translator
import kotlinx.coroutines.*
import kotlinx.coroutines.Dispatchers
Expand Down Expand Up @@ -161,6 +164,45 @@ object BookUtils {
}.filter { it.isNotBlank() }
}

suspend fun getLiteraryGenres(genres: List<Genre>, language: String): List<String> {
if (genres.isEmpty()) return emptyList()

return coroutineScope {
genres.map { genre ->
async {
val name = fetchLabelFromWikidata(genre.genreWikidataQid, language)
name ?: genre.name ?: ""
}
}.awaitAll()
}.filter { it.isNotBlank() }
}

suspend fun getMainSubjects(subjects: List<Subject>, language: String): List<String> {
if (subjects.isEmpty()) return emptyList()

return coroutineScope {
subjects.map { subject ->
async {
val name = fetchLabelFromWikidata(subject.subjectWikidataQid, language)
name ?: subject.name ?: ""
}
}.awaitAll()
}.filter { it.isNotBlank() }
}

suspend fun getFormOfWork(formsOfWork: List<FormOfWork>, language: String): List<String> {
if (formsOfWork.isEmpty()) return emptyList()

return coroutineScope {
formsOfWork.map { form ->
async {
val name = fetchLabelFromWikidata(form.typeOfWorkWikidataQid, language)
name ?: form.typeOfWork ?: ""
}
}.awaitAll()
}.filter { it.isNotBlank() }
}

/**
* For some weird reasons, gutenberg gives name of authors in
* reversed, where first name and last are separated by a comma
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -258,8 +258,20 @@ private fun BookDetailContents(
}


val genres = book.genre.filter { it.isNotBlank() }
val subjects = book.subjects.filter { it.isNotBlank() }
var literaryGenres by remember { mutableStateOf<List<String>>(emptyList()) }
LaunchedEffect(book.literaryGenres, firstLanguage) {
literaryGenres = BookUtils.getLiteraryGenres(book.literaryGenres, firstLanguage)
}

var mainSubjects by remember { mutableStateOf<List<String>>(emptyList()) }
LaunchedEffect(book.mainSubjects, firstLanguage) {
mainSubjects = BookUtils.getMainSubjects(book.mainSubjects, firstLanguage)
}

var formOfWork by remember { mutableStateOf<List<String>>(emptyList()) }
LaunchedEffect(book.formOfWork, firstLanguage) {
formOfWork = BookUtils.getFormOfWork(book.formOfWork, firstLanguage)
}

// Checks if there are values of publisher or places of publication
val isPublishersBlank = book.publishers.all { it.name?.isBlank() ?: true }
Expand Down Expand Up @@ -463,12 +475,13 @@ private fun BookDetailContents(
*/
} else {
Column {
InfoLine(stringResource(id = R.string.editors_info), editors)
InfoLine(stringResource(R.string.translators_info), translators)
InfoLine(stringResource(R.string.genres_info), genres)
InfoLine(stringResource(R.string.subjects_info), subjects)
InfoLine(stringResource(id = R.string.editors_info), editors)
InfoStringContent(stringResource(R.string.publishers_info), publishers, isPublishersBlank)
InfoStringContent(stringResource(R.string.place_of_publication_info),placeOfPublication, isPlaceOfPublicationBlank)
InfoLine(stringResource(R.string.form_of_work_info), formOfWork)
InfoLine(stringResource(R.string.genres_info), literaryGenres)
InfoLine(stringResource(R.string.subjects_info), mainSubjects)
}
}
}
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@
<string name="translators_info">Translators</string>
<string name="genres_info">Genres</string>
<string name="subjects_info">Subjects</string>
<string name="form_of_work_info">Forms of Work</string>
<string name="publishers_info">Publisher</string>
<string name="unknown_publishers_info">Unknown Publisher</string>
<string name="place_of_publication_info">Place Of Publication</string>
Expand Down