diff --git a/app/src/main/java/org/kiwix/kiwixmobile/main/MainActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/main/MainActivity.java index 2694b1316..005d80f1f 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/main/MainActivity.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/main/MainActivity.java @@ -99,6 +99,7 @@ import org.kiwix.kiwixmobile.R; import org.kiwix.kiwixmobile.base.BaseActivity; import org.kiwix.kiwixmobile.bookmark.BookmarkItem; import org.kiwix.kiwixmobile.bookmark.BookmarksActivity; +import org.kiwix.kiwixmobile.extensions.ContextExtensionsKt; import org.kiwix.kiwixmobile.help.HelpActivity; import org.kiwix.kiwixmobile.history.HistoryActivity; import org.kiwix.kiwixmobile.history.HistoryListItem; @@ -1090,24 +1091,26 @@ public class MainActivity extends BaseActivity implements WebViewCallback, && Build.VERSION.SDK_INT != 23)) { if (file.exists()) { zimReaderContainer.setZimFile(file); - if (clearHistory) { - requestClearHistoryAfterLoad = true; - } - if (menu != null) { - initAllMenuItems(); + if (zimReaderContainer.getZimFileReader() != null) { + if (clearHistory) { + requestClearHistoryAfterLoad = true; + } + if (menu != null) { + initAllMenuItems(); + } else { + // Menu may not be initialized yet. In this case + // signal to menu create to show + requestInitAllMenuItems = true; + } + openMainPage(); + presenter.loadCurrentZimBookmarksUrl(); } else { - // Menu may not be initialized yet. In this case - // signal to menu create to show - requestInitAllMenuItems = true; + ContextExtensionsKt.toast(this, R.string.error_file_invalid, Toast.LENGTH_LONG); + showHomePage(); } - openMainPage(); - presenter.loadCurrentZimBookmarksUrl(); } else { Log.w(TAG_KIWIX, "ZIM file doesn't exist at " + file.getAbsolutePath()); - - Toast.makeText(this, getResources().getString(R.string.error_file_not_found), - Toast.LENGTH_LONG) - .show(); + ContextExtensionsKt.toast(this, R.string.error_file_not_found, Toast.LENGTH_LONG); showHomePage(); } } else { diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimFileReader.kt b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimFileReader.kt index eecfea347..a9ba63cb0 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimFileReader.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimFileReader.kt @@ -26,6 +26,7 @@ import android.webkit.MimeTypeMap import androidx.core.net.toUri import io.reactivex.Single import io.reactivex.schedulers.Schedulers +import org.kiwix.kiwixlib.JNIKiwixException import org.kiwix.kiwixlib.JNIKiwixInt import org.kiwix.kiwixlib.JNIKiwixReader import org.kiwix.kiwixlib.JNIKiwixString @@ -51,11 +52,15 @@ class ZimFileReader( private val sharedPreferenceUtil: SharedPreferenceUtil ) { interface Factory { - fun create(file: File): ZimFileReader + fun create(file: File): ZimFileReader? class Impl @Inject constructor(val sharedPreferenceUtil: SharedPreferenceUtil) : Factory { override fun create(file: File) = - ZimFileReader(file, sharedPreferenceUtil = sharedPreferenceUtil) + try { + ZimFileReader(file, sharedPreferenceUtil = sharedPreferenceUtil) + } catch (ignore: JNIKiwixException) { + null + } } } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/fileselect_view/StorageObserver.kt b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/fileselect_view/StorageObserver.kt index 7b095bd20..f2fd4fcfc 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/fileselect_view/StorageObserver.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/fileselect_view/StorageObserver.kt @@ -1,5 +1,6 @@ package org.kiwix.kiwixmobile.zim_manager.fileselect_view +import io.reactivex.Flowable import io.reactivex.functions.BiFunction import io.reactivex.schedulers.Schedulers import org.kiwix.kiwixmobile.database.newdb.dao.FetchDownloadDao @@ -16,10 +17,10 @@ class StorageObserver @Inject constructor( private val zimReaderFactory: ZimFileReader.Factory ) { - val booksOnFileSystem + val booksOnFileSystem: Flowable> get() = scanFiles() .withLatestFrom(downloadDao.downloads(), BiFunction(::toFilesThatAreNotDownloading)) - .map { it.map(::convertToBookOnDisk) } + .map { it.mapNotNull(::convertToBookOnDisk) } private fun scanFiles() = fileSearch.scan().subscribeOn(Schedulers.io()) @@ -29,5 +30,6 @@ class StorageObserver @Inject constructor( private fun fileHasNoMatchingDownload(downloads: List, file: File) = downloads.firstOrNull { file.absolutePath.endsWith(it.fileNameFromUrl) } == null - private fun convertToBookOnDisk(file: File) = BookOnDisk(file, zimReaderFactory.create(file)) + private fun convertToBookOnDisk(file: File) = + zimReaderFactory.create(file)?.let { BookOnDisk(file, it) } }