Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

multiple bug fixes #126

Merged
merged 19 commits into from
May 26, 2020
Merged
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
8 changes: 8 additions & 0 deletions common/src/main/res/drawable/ic_clock_outline.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<!-- drawable/clock_time_four_outline.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#FFFFFF" android:pathData="M12 20C16.4 20 20 16.4 20 12S16.4 4 12 4 4 7.6 4 12 7.6 20 12 20M12 2C17.5 2 22 6.5 22 12S17.5 22 12 22C6.5 22 2 17.5 2 12C2 6.5 6.5 2 12 2M17 13.9L16.3 15.2L11 12.3V7H12.5V11.4L17 13.9Z" />
</vector>
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ package com.allsoftdroid.audiobook.feature.feature_audiobook_enhance_details.dat

data class BookDetails(
var webDocument: WebDocument? = null,
val runtime:String,
val archiveUrl : String,
val gutenbergUrl:String,
val description:String,
val genres:String,
val language:String,
val runtime:String="",
val archiveUrl : String="",
val gutenbergUrl:String="",
val description:String="",
val genres:String="",
val language:String="",
val chapters : List<Chapter>
)
Original file line number Diff line number Diff line change
Expand Up @@ -30,55 +30,62 @@ class SaveMetadataInDatabase(metadataDao: MetadataDao) : SaveInDatabase<Metadata
return this
}

override suspend fun execute(){
override suspend fun execute():Int{

//safe check performed
val result = mData

val metadata = DatabaseMetadataEntity(
identifier = result.metadata.identifier,
creator = result.metadata.creator,
date = result.metadata.date,
description = result.metadata.description,
licenseUrl = result.metadata.licenseurl,
tag = result.metadata.subject,
title = result.metadata.title,
release_year = result.metadata.publicdate,
runtime = result.metadata.runtime?:"NA"
)

val trackList = ArrayList<DatabaseTrackEntity>()

//scan the list and build the new track list to be inserted in the database
val tracks = result.files.filter {
it.format.toLowerCase(Locale.getDefault()).contains("mp3")
try{
val metadata = DatabaseMetadataEntity(
identifier = result.metadata.identifier,
creator = result.metadata.creator,
date = result.metadata.date,
description = result.metadata.description,
licenseUrl = result.metadata.licenseurl,
tag = result.metadata.subject,
title = result.metadata.title,
release_year = result.metadata.publicdate,
runtime = result.metadata.runtime?:"NA"
)

val trackList = ArrayList<DatabaseTrackEntity>()

//scan the list and build the new track list to be inserted in the database
val tracks = result.files.filter {
it.format.toLowerCase(Locale.getDefault()).contains("mp3")
}

for(track in tracks){
trackList.add(track.toDatabaseModel(metadata.identifier))
}

val album = DatabaseAlbumEntity(
identifier = result.metadata.identifier,
albumName = tracks[0].album,
creator = metadata.creator
)


mDao.insertMetadata(metadata)
Timber.d("Metadata loaded")
mDao.insertAlbum(album)
Timber.d("Album details loaded")
mDao.insertAllTracks(trackList)
Timber.d("#${trackList.size} tracks loaded in the DB")

val list = mDao.getTrackDetails(metadata_id = metadata.identifier).value

list?.forEach {
Timber.d(it.trackAlbum_id)
Timber.d(it.trackTitle)
}

list?: emptyList()
}catch (e:Exception){
e.printStackTrace()
return -1
}

for(track in tracks){
trackList.add(track.toDatabaseModel(metadata.identifier))
}

val album = DatabaseAlbumEntity(
identifier = result.metadata.identifier,
albumName = tracks[0].album,
creator = metadata.creator
)


mDao.insertMetadata(metadata)
Timber.d("Metadata loaded")
mDao.insertAlbum(album)
Timber.d("Album details loaded")
mDao.insertAllTracks(trackList)
Timber.d("#${trackList.size} tracks loaded in the DB")

val list = mDao.getTrackDetails(metadata_id = metadata.identifier).value

list?.forEach {
Timber.d(it.trackAlbum_id)
Timber.d(it.trackTitle)
}

list?: emptyList()
return 0
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.allsoftdroid.feature.book_details.data.repository

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Transformations
import com.allsoftdroid.common.base.extension.Event
import com.allsoftdroid.common.base.extension.Variable
Expand All @@ -10,12 +9,9 @@ import com.allsoftdroid.database.common.SaveInDatabase
import com.allsoftdroid.database.metadataCacheDB.MetadataDao
import com.allsoftdroid.feature.book_details.data.databaseExtension.SaveMetadataInDatabase
import com.allsoftdroid.feature.book_details.data.databaseExtension.asMetadataDomainModel
import com.allsoftdroid.feature.book_details.data.databaseExtension.asTrackDomainModel
import com.allsoftdroid.feature.book_details.data.model.TrackFormat
import com.allsoftdroid.feature.book_details.data.network.response.GetAudioBookMetadataResponse
import com.allsoftdroid.feature.book_details.data.network.service.ArchiveMetadataService
import com.allsoftdroid.feature.book_details.domain.model.AudioBookMetadataDomainModel
import com.allsoftdroid.feature.book_details.domain.model.AudioBookTrackDomainModel
import com.allsoftdroid.feature.book_details.domain.repository.IMetadataRepository
import com.allsoftdroid.feature.book_details.utils.NetworkState
import com.google.gson.Gson
Expand Down Expand Up @@ -68,7 +64,7 @@ class MetadataRepositoryImpl(
metadataDataSource.getMetadata(bookId).enqueue(object : Callback<String> {
override fun onFailure(call: Call<String>, t: Throwable) {
Timber.i("Failure occur:${t.message}")
_networkResponse.value= Event(NetworkState.ERROR)
_networkResponse.value= Event(NetworkState.CONNECTION_ERROR)
}

override fun onResponse(call: Call<String>, response: Response<String>) {
Expand All @@ -86,9 +82,13 @@ class MetadataRepositoryImpl(
* Run with application scope
*/
GlobalScope.launch {
saveInDatabase
val dbResponse = saveInDatabase
.addData(result)
.execute()

if (dbResponse!=0){
_networkResponse.value = Event(NetworkState.SERVER_ERROR)
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,16 @@ class GetMetadataUsecase( private val metadataRepository: IMetadataRepository) :
it.getContentIfNotHandled()?.let { networkState ->
when(networkState){

NetworkState.ERROR -> {
NetworkState.SERVER_ERROR,
NetworkState.CONNECTION_ERROR -> {
GlobalScope.launch(Dispatchers.Main) {
useCaseCallback?.onError(Error("Network Error"))
useCaseCallback?.onError(Error(networkState.value))
}
}

NetworkState.COMPLETED->{
GlobalScope.launch(Dispatchers.Main) {
val responseValues = ResponseValues(Event(Unit))
val responseValues = ResponseValues(Event(networkState.value))
useCaseCallback?.onSuccess(responseValues)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,13 +152,22 @@ class AudioBookDetailsFragment : BaseUIFragment(),KoinComponent {
removeLoading()
setVisibility(dataBindingReference.pbContentLoading,set = false)
Timber.d("Completed")}
NetworkState.ERROR -> {
NetworkState.CONNECTION_ERROR -> {
setVisibility(dataBinding.pbContentLoading,set = false)

if(bookDetailsViewModel.audioBookTracks.value.isNullOrEmpty()){
setVisibility(dataBinding.networkNoConnection,set = true)
}
Toast.makeText(activity,"Connection Error",Toast.LENGTH_SHORT).show()}
Toast.makeText(activity,"Connection Error",Toast.LENGTH_SHORT).show()
}
NetworkState.SERVER_ERROR -> {
setVisibility(dataBinding.pbContentLoading,set = false)

if(bookDetailsViewModel.audioBookTracks.value.isNullOrEmpty()){
setVisibility(dataBinding.serverError,set = true)
}
Toast.makeText(activity,"Server Error",Toast.LENGTH_SHORT).show()
}
}
}
})
Expand Down Expand Up @@ -236,8 +245,8 @@ class AudioBookDetailsFragment : BaseUIFragment(),KoinComponent {
it.getContentIfNotHandled()?.let { isAdded ->
dataBinding.imgViewBookListenLater.apply {
setImageResource(when(isAdded){
true -> R.drawable.ic_bookmark_minus
else -> R.drawable.ic_bookmark_plus_outline
true -> R.drawable.ic_clock
else -> R.drawable.ic_clock_outline
})
}
}
Expand Down Expand Up @@ -267,7 +276,7 @@ class AudioBookDetailsFragment : BaseUIFragment(),KoinComponent {
dataBinding.imgViewBookDownload.setOnClickListener {
val isSent = bookDetailsViewModel.downloadAllChapters()
if (!isSent) {
Toast.makeText(this.requireActivity(),"Download will soon start...",Toast.LENGTH_SHORT).show()
Toast.makeText(this.requireActivity(),getString(R.string.download_soon_start),Toast.LENGTH_SHORT).show()
}

it.setBackgroundResource(R.drawable.gradiant_background)
Expand All @@ -277,12 +286,16 @@ class AudioBookDetailsFragment : BaseUIFragment(),KoinComponent {
resumeOrPlayFromStart()
}

dataBinding.bookMediaActionsListen.setOnClickListener {
dataBinding.bookMediaActionsRead.setOnClickListener {
bookDetailsViewModel.additionalBookDetails.value?.let {
val uri = Uri.parse(it.gutenbergUrl)
val intent = Intent(Intent.ACTION_VIEW,uri)
startActivity(Intent.createChooser(intent,"Open with"))
}?:Toast.makeText(this.requireActivity(),"No Link Found",Toast.LENGTH_SHORT).show()
if (it.archiveUrl.isEmpty()){
Toast.makeText(this.requireActivity(),getString(R.string.no_link_found),Toast.LENGTH_SHORT).show()
}else{
val uri = Uri.parse(it.gutenbergUrl)
val intent = Intent(Intent.ACTION_VIEW,uri)
startActivity(Intent.createChooser(intent,getString(R.string.open_with_label)))
}
}?:Toast.makeText(this.requireActivity(),getString(R.string.wait_message),Toast.LENGTH_SHORT).show()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,7 @@ internal class BookDetailsViewModel(
}

override suspend fun onError(t: Throwable) {
_additionalBookDetails.value = BookDetails(chapters = emptyList())
Timber.d("Enhanced Error:${t.message}")
}
}
Expand All @@ -210,7 +211,7 @@ internal class BookDetailsViewModel(
it.webDocument = webDocument
_additionalBookDetails.value = it
}else{
_additionalBookDetails.value = null
_additionalBookDetails.value = BookDetails(chapters = emptyList())
}
}

Expand Down Expand Up @@ -273,7 +274,11 @@ internal class BookDetailsViewModel(
}

override suspend fun onError(t: Throwable) {
_networkResponse.value = Event(NetworkState.ERROR)
_networkResponse.value = when(t.message){
NetworkState.CONNECTION_ERROR.value -> Event(NetworkState.CONNECTION_ERROR)
else -> Event(NetworkState.SERVER_ERROR)
}

metadataStateChangeEvent.value = Event(Unit)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,9 @@ Binding adapter for updating the title in list items
fun TextView.setBookPlayTime2(item: BookDetails?){
item?.let {
if(text=="NA"){
text = it.runtime
if(it.runtime.isNotEmpty()){
text = it.runtime
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.allsoftdroid.feature.book_details.utils

enum class NetworkState {
ERROR,
LOADING,
COMPLETED
enum class NetworkState(val value:String) {
CONNECTION_ERROR("Network Error"),
SERVER_ERROR("Server Error"),
LOADING("Loading"),
COMPLETED("Done")
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,12 @@
android:visibility="gone"
layout="@layout/layout_no_connection"/>

<include android:id="@+id/server_error"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
layout="@layout/layout_server_error"/>

<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
Expand Down Expand Up @@ -88,10 +94,11 @@

<ImageView
android:id="@+id/imgView_book_listen_later"
android:src="@drawable/ic_bookmark_plus_outline"
android:src="@drawable/ic_clock_outline"
android:layout_width="@dimen/track_item_control_btn_size"
android:layout_height="@dimen/track_item_control_btn_size"
android:layout_marginEnd="@dimen/banner_image_margin_end_normal"
android:padding="@dimen/padding_min"
android:contentDescription="@string/banner_image_listen_later"
android:layout_marginTop="@dimen/track_item_control_btn_margin"
android:clickable="true"
Expand All @@ -106,6 +113,7 @@
android:layout_width="@dimen/track_item_control_btn_size"
android:layout_height="@dimen/track_item_control_btn_size"
android:layout_marginTop="@dimen/track_item_control_btn_margin"
android:padding="@dimen/padding_min"
android:contentDescription="@string/banner_image_download"
app:layout_constraintEnd_toEndOf="@+id/imgView_book_listen_later"
app:layout_constraintStart_toStartOf="@+id/imgView_book_listen_later"
Expand All @@ -117,6 +125,7 @@
android:layout_width="@dimen/track_item_control_btn_size"
android:layout_height="@dimen/track_item_control_btn_size"
android:layout_marginTop="@dimen/track_item_control_btn_margin"
android:padding="@dimen/padding_min"
android:contentDescription="@string/banner_image_share"
app:layout_constraintEnd_toEndOf="@+id/imgView_book_listen_later"
app:layout_constraintStart_toStartOf="@+id/imgView_book_listen_later"
Expand All @@ -128,6 +137,7 @@
android:layout_width="@dimen/track_item_control_btn_size"
android:layout_height="@dimen/track_item_control_btn_size"
android:layout_marginTop="@dimen/track_item_control_btn_margin"
android:padding="@dimen/padding_min"
android:clickable="true"
android:focusable="true"
android:contentDescription="@string/banner_image_info"
Expand All @@ -150,7 +160,7 @@
app:layout_constraintTop_toBottomOf="@+id/fl_book_image_holder">

<LinearLayout
android:id="@+id/book_media_actions_listen"
android:id="@+id/book_media_actions_read"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="match_parent"
Expand Down
Loading