mirror of
https://github.com/gedoor/legado.git
synced 2024-07-04 23:36:56 +08:00
优化
This commit is contained in:
parent
2aed021e08
commit
5eaf2f034f
|
@ -71,6 +71,8 @@ open class WebDav(
|
||||||
<resourcetype />
|
<resourcetype />
|
||||||
</prop>
|
</prop>
|
||||||
</propfind>"""
|
</propfind>"""
|
||||||
|
|
||||||
|
private const val DEFAULT_CONTENT_TYPE = "application/octet-stream"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -304,18 +306,12 @@ open class WebDav(
|
||||||
* 上传文件
|
* 上传文件
|
||||||
*/
|
*/
|
||||||
@Throws(WebDavException::class)
|
@Throws(WebDavException::class)
|
||||||
suspend fun upload(
|
suspend fun upload(localPath: String, contentType: String = DEFAULT_CONTENT_TYPE) {
|
||||||
localPath: String,
|
|
||||||
contentType: String = "application/octet-stream"
|
|
||||||
) {
|
|
||||||
upload(File(localPath), contentType)
|
upload(File(localPath), contentType)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Throws(WebDavException::class)
|
@Throws(WebDavException::class)
|
||||||
suspend fun upload(
|
suspend fun upload(file: File, contentType: String = DEFAULT_CONTENT_TYPE) {
|
||||||
file: File,
|
|
||||||
contentType: String = "application/octet-stream"
|
|
||||||
) {
|
|
||||||
kotlin.runCatching {
|
kotlin.runCatching {
|
||||||
withContext(IO) {
|
withContext(IO) {
|
||||||
if (!file.exists()) throw WebDavException("文件不存在")
|
if (!file.exists()) throw WebDavException("文件不存在")
|
||||||
|
@ -336,7 +332,7 @@ open class WebDav(
|
||||||
}
|
}
|
||||||
|
|
||||||
@Throws(WebDavException::class)
|
@Throws(WebDavException::class)
|
||||||
suspend fun upload(byteArray: ByteArray, contentType: String) {
|
suspend fun upload(byteArray: ByteArray, contentType: String = DEFAULT_CONTENT_TYPE) {
|
||||||
// 务必注意RequestBody不要嵌套,不然上传时内容可能会被追加多余的文件信息
|
// 务必注意RequestBody不要嵌套,不然上传时内容可能会被追加多余的文件信息
|
||||||
kotlin.runCatching {
|
kotlin.runCatching {
|
||||||
withContext(IO) {
|
withContext(IO) {
|
||||||
|
@ -356,7 +352,7 @@ open class WebDav(
|
||||||
}
|
}
|
||||||
|
|
||||||
@Throws(WebDavException::class)
|
@Throws(WebDavException::class)
|
||||||
suspend fun upload(uri: Uri, contentType: String) {
|
suspend fun upload(uri: Uri, contentType: String = DEFAULT_CONTENT_TYPE) {
|
||||||
// 务必注意RequestBody不要嵌套,不然上传时内容可能会被追加多余的文件信息
|
// 务必注意RequestBody不要嵌套,不然上传时内容可能会被追加多余的文件信息
|
||||||
kotlin.runCatching {
|
kotlin.runCatching {
|
||||||
withContext(IO) {
|
withContext(IO) {
|
||||||
|
|
|
@ -14,10 +14,7 @@ import io.legado.app.model.analyzeRule.CustomUrl
|
||||||
import io.legado.app.model.localBook.LocalBook
|
import io.legado.app.model.localBook.LocalBook
|
||||||
import io.legado.app.utils.NetworkUtils
|
import io.legado.app.utils.NetworkUtils
|
||||||
import io.legado.app.utils.isContentScheme
|
import io.legado.app.utils.isContentScheme
|
||||||
import io.legado.app.utils.readBytes
|
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import splitties.init.appCtx
|
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
class RemoteBookWebDav(
|
class RemoteBookWebDav(
|
||||||
val rootBookUrl: String,
|
val rootBookUrl: String,
|
||||||
|
@ -71,20 +68,17 @@ class RemoteBookWebDav(
|
||||||
override suspend fun upload(book: Book) {
|
override suspend fun upload(book: Book) {
|
||||||
if (!NetworkUtils.isAvailable()) throw NoStackTraceException("网络不可用")
|
if (!NetworkUtils.isAvailable()) throw NoStackTraceException("网络不可用")
|
||||||
val localBookUri = Uri.parse(book.bookUrl)
|
val localBookUri = Uri.parse(book.bookUrl)
|
||||||
val putUrl = "$rootBookUrl${File.separator}${book.originName}"
|
val putUrl = "$rootBookUrl${book.originName}"
|
||||||
val webDav = WebDav(putUrl, authorization)
|
val webDav = WebDav(putUrl, authorization)
|
||||||
if (localBookUri.isContentScheme()) {
|
if (localBookUri.isContentScheme()) {
|
||||||
webDav.upload(
|
webDav.upload(localBookUri)
|
||||||
byteArray = localBookUri.readBytes(appCtx),
|
|
||||||
contentType = "application/octet-stream"
|
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
webDav.upload(localBookUri.path!!)
|
webDav.upload(localBookUri.path!!)
|
||||||
}
|
}
|
||||||
book.origin = BookType.webDavTag + CustomUrl(putUrl)
|
book.origin = BookType.webDavTag + CustomUrl(putUrl)
|
||||||
.putAttribute("serverID", serverID)
|
.putAttribute("serverID", serverID)
|
||||||
.toString()
|
.toString()
|
||||||
book.save()
|
book.update()
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun delete(remoteBookUrl: String) {
|
override suspend fun delete(remoteBookUrl: String) {
|
||||||
|
|
|
@ -20,7 +20,7 @@ import kotlinx.coroutines.channels.awaitClose
|
||||||
import kotlinx.coroutines.flow.callbackFlow
|
import kotlinx.coroutines.flow.callbackFlow
|
||||||
import kotlinx.coroutines.flow.flowOn
|
import kotlinx.coroutines.flow.flowOn
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import java.util.*
|
import java.util.Collections
|
||||||
|
|
||||||
class RemoteBookViewModel(application: Application) : BaseViewModel(application) {
|
class RemoteBookViewModel(application: Application) : BaseViewModel(application) {
|
||||||
var sortKey = RemoteBookSort.Default
|
var sortKey = RemoteBookSort.Default
|
||||||
|
@ -78,6 +78,7 @@ class RemoteBookViewModel(application: Application) : BaseViewModel(application)
|
||||||
}
|
}
|
||||||
return@sortedWith compare
|
return@sortedWith compare
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> list.sortedWith { o1, o2 ->
|
else -> list.sortedWith { o1, o2 ->
|
||||||
val compare = -compareValues(o1.isDir, o2.isDir)
|
val compare = -compareValues(o1.isDir, o2.isDir)
|
||||||
if (compare == 0) {
|
if (compare == 0) {
|
||||||
|
@ -132,10 +133,8 @@ class RemoteBookViewModel(application: Application) : BaseViewModel(application)
|
||||||
val downloadBookUri = bookWebDav.downloadRemoteBook(remoteBook)
|
val downloadBookUri = bookWebDav.downloadRemoteBook(remoteBook)
|
||||||
LocalBook.importFiles(downloadBookUri).forEach { book ->
|
LocalBook.importFiles(downloadBookUri).forEach { book ->
|
||||||
book.origin = BookType.webDavTag + CustomUrl(remoteBook.path)
|
book.origin = BookType.webDavTag + CustomUrl(remoteBook.path)
|
||||||
.putAttribute(
|
.putAttribute("serverID", bookWebDav.serverID)
|
||||||
"serverID",
|
.toString()
|
||||||
bookWebDav.serverID
|
|
||||||
).toString()
|
|
||||||
book.save()
|
book.save()
|
||||||
}
|
}
|
||||||
remoteBook.isOnBookShelf = true
|
remoteBook.isOnBookShelf = true
|
||||||
|
@ -152,7 +151,7 @@ class RemoteBookViewModel(application: Application) : BaseViewModel(application)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateCallBackFlow(filterKey: String?) {
|
fun updateCallBackFlow(filterKey: String?) {
|
||||||
dataCallback?.screen(filterKey)
|
dataCallback?.screen(filterKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
interface DataCallback {
|
interface DataCallback {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user