Fix local pages uri

pull/137/head
Koitharu 4 years ago
parent 6b9fad493c
commit 8ee0dd9930
No known key found for this signature in database
GPG Key ID: 8E861F8CE6E7CE27

@ -106,8 +106,7 @@ class LocalMangaRepository(private val storageManager: LocalStorageManager) : Ma
url = fileUri, url = fileUri,
coverUrl = zipUri( coverUrl = zipUri(
file, file,
entryName = index.getCoverEntry() entryName = index.getCoverEntry() ?: findFirstImageEntry(zip.entries())?.name.orEmpty()
?: findFirstEntry(zip.entries(), isImage = true)?.name.orEmpty()
), ),
chapters = info.chapters?.map { c -> chapters = info.chapters?.map { c ->
c.copy(url = fileUri, source = MangaSource.LOCAL) c.copy(url = fileUri, source = MangaSource.LOCAL)
@ -129,7 +128,7 @@ class LocalMangaRepository(private val storageManager: LocalStorageManager) : Ma
url = fileUri, url = fileUri,
publicUrl = fileUri, publicUrl = fileUri,
source = MangaSource.LOCAL, source = MangaSource.LOCAL,
coverUrl = zipUri(file, findFirstEntry(zip.entries(), isImage = true)?.name.orEmpty()), coverUrl = zipUri(file, findFirstImageEntry(zip.entries())?.name.orEmpty()),
chapters = chapters.sortedWith(AlphanumComparator()).mapIndexed { i, s -> chapters = chapters.sortedWith(AlphanumComparator()).mapIndexed { i, s ->
MangaChapter( MangaChapter(
id = "$i$s".longHashCode(), id = "$i$s".longHashCode(),
@ -188,20 +187,16 @@ class LocalMangaRepository(private val storageManager: LocalStorageManager) : Ma
} }
} }
private fun zipUri(file: File, entryName: String) = Uri.fromParts("cbz", file.path, entryName).toString() private fun zipUri(file: File, entryName: String) = "cbz://${file.path}#$entryName"
private fun findFirstEntry(entries: Enumeration<out ZipEntry>, isImage: Boolean): ZipEntry? { private fun findFirstImageEntry(entries: Enumeration<out ZipEntry>): ZipEntry? {
val list = entries.toList() val list = entries.toList()
.filterNot { it.isDirectory } .filterNot { it.isDirectory }
.sortedWith(compareBy(AlphanumComparator()) { x -> x.name }) .sortedWith(compareBy(AlphanumComparator()) { x -> x.name })
return if (isImage) { val map = MimeTypeMap.getSingleton()
val map = MimeTypeMap.getSingleton() return list.firstOrNull {
list.firstOrNull { map.getMimeTypeFromExtension(it.name.substringAfterLast('.'))
map.getMimeTypeFromExtension(it.name.substringAfterLast('.')) ?.startsWith("image/") == true
?.startsWith("image/") == true
}
} else {
list.firstOrNull()
} }
} }

@ -186,7 +186,9 @@ class ReaderActivity :
R.id.action_save_page -> { R.id.action_save_page -> {
viewModel.getCurrentPage()?.also { page -> viewModel.getCurrentPage()?.also { page ->
viewModel.saveCurrentState(reader?.getCurrentState()) viewModel.saveCurrentState(reader?.getCurrentState())
val name = page.url.toUri().lastPathSegment val name = page.url.toUri().run {
fragment ?: lastPathSegment ?: ""
}
savePageRequest.launch(name) savePageRequest.launch(name)
} ?: showWaitWhileLoading() } ?: showWaitWhileLoading()
} }

Loading…
Cancel
Save