mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-11-19 03:59:19 +01:00
Tweak saved filename byte size limiting logic
Based on comment from 6940ad3fd9
This commit is contained in:
parent
5e9496ef36
commit
1c978f64b1
@ -21,6 +21,8 @@ import eu.kanade.tachiyomi.ui.reader.loader.DownloadPageLoader
|
|||||||
import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter
|
import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter
|
||||||
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
|
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
|
||||||
import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters
|
import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters
|
||||||
|
import eu.kanade.tachiyomi.util.lang.byteSize
|
||||||
|
import eu.kanade.tachiyomi.util.lang.takeBytes
|
||||||
import eu.kanade.tachiyomi.util.storage.DiskUtil
|
import eu.kanade.tachiyomi.util.storage.DiskUtil
|
||||||
import eu.kanade.tachiyomi.util.system.ImageUtil
|
import eu.kanade.tachiyomi.util.system.ImageUtil
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@ -450,7 +452,7 @@ class ReaderPresenter(
|
|||||||
// Build destination file.
|
// Build destination file.
|
||||||
val filenameSuffix = " - ${page.number}.${type.extension}"
|
val filenameSuffix = " - ${page.number}.${type.extension}"
|
||||||
val filename = DiskUtil.buildValidFilename(
|
val filename = DiskUtil.buildValidFilename(
|
||||||
"${manga.title} - ${chapter.name}".take(MAX_FILE_NAME_LENGTH - filenameSuffix.length)
|
"${manga.title} - ${chapter.name}".takeBytes(MAX_FILE_NAME_BYTES - filenameSuffix.byteSize())
|
||||||
) + filenameSuffix
|
) + filenameSuffix
|
||||||
|
|
||||||
val destFile = File(directory, filename)
|
val destFile = File(directory, filename)
|
||||||
@ -641,7 +643,7 @@ class ReaderPresenter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
// Safe max filename size is 255 bytes and 1 char = 2 bytes
|
// Safe theoretical max filename size is 255 bytes and 1 char = 2-4 bytes (UTF-8)
|
||||||
private const val MAX_FILE_NAME_LENGTH = 127
|
private const val MAX_FILE_NAME_BYTES = 250
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,3 +32,24 @@ fun String.truncateCenter(count: Int, replacement: String = "..."): String {
|
|||||||
fun String.compareToCaseInsensitiveNaturalOrder(other: String): Int {
|
fun String.compareToCaseInsensitiveNaturalOrder(other: String): Int {
|
||||||
return String.CASE_INSENSITIVE_ORDER.then(naturalOrder()).compare(this, other)
|
return String.CASE_INSENSITIVE_ORDER.then(naturalOrder()).compare(this, other)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the size of the string as the number of bytes.
|
||||||
|
*/
|
||||||
|
fun String.byteSize(): Int {
|
||||||
|
return toByteArray(Charsets.UTF_8).size
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a string containing the first [n] bytes from this string, or the entire string if this
|
||||||
|
* string is shorter.
|
||||||
|
*/
|
||||||
|
@UseExperimental(ExperimentalStdlibApi::class)
|
||||||
|
fun String.takeBytes(n: Int): String {
|
||||||
|
val bytes = toByteArray(Charsets.UTF_8)
|
||||||
|
return if (bytes.size <= n) {
|
||||||
|
this
|
||||||
|
} else {
|
||||||
|
bytes.decodeToString(endIndex = n).replace("\uFFFD", "")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user