Skip to content
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
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ internal class RemoteFilesWrapper(
}

internal fun FolderWrapper.update(data: GroupFilesResp) {
data.folders?.toMiraiFolders(contact)?.also { folders.addAll(it) }
data.files?.toMiraiFiles(contact)?.also { files.addAll(it) }
data.folders?.toMiraiFolders(contact, this)?.also { folders.addAll(it) }
data.files?.toMiraiFiles(contact, this)?.also { files.addAll(it) }
}
}
}
Expand Down Expand Up @@ -87,7 +87,7 @@ internal class FolderWrapper(
}

override suspend fun files(): Flow<AbsoluteFile> {
return files.asFlow()
return files.toList().asFlow()
}

override suspend fun refresh(): Boolean {
Expand Down Expand Up @@ -247,7 +247,7 @@ internal class FolderWrapper(

internal class FileWrapper(
override val contact: GroupWrapper,
override val parent: FolderWrapper?,
override var parent: FolderWrapper,
override val id: String,
override val name: String,
override val md5: ByteArray,
Expand All @@ -267,7 +267,7 @@ internal class FileWrapper(
get() {
val parent = parent
return when {
parent == null || parent.name == "/" -> "/$name"
parent.name == "/" -> "/$name"
else -> "${parent.absolutePath}/$name"
}
}
Expand All @@ -291,19 +291,28 @@ internal class FileWrapper(
}

override suspend fun moveTo(folder: AbsoluteFolder): Boolean {
val success = impl.moveGroupFIle(contact.id, id, absolutePath, folder.absolutePath).data?.ok ?: false
when (contact.bot.appName.lowercase()) {
"napcat" -> return success
else -> throw PermissionDeniedException("当前 Onebot 实现不支持移动文件")
if (folder.absolutePath == this.parent.absolutePath) return true
if (!contact.bot.appName.lowercase().contains("napcat")) {
throw PermissionDeniedException("当前 Onebot 实现不支持移动文件")
}
if (folder !is FolderWrapper)
return false
val success =
impl.moveGroupFIle(contact.id, id, parent.id, folder.id).data?.ok ?: false
if (success) {
parent.files.remove(this)
parent = folder
folder.files.add(this)
}
return success
}

override suspend fun refresh(): Boolean {
return refreshed() != null
}

override suspend fun refreshed(): AbsoluteFile? {
val data = parent?.refreshFromOnebot() ?: return null
val data = parent.refreshFromOnebot() ?: return null
return data.files?.firstOrNull { it.fileId == id }?.toMiraiFile(contact, parent)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,20 +115,20 @@ internal fun MsgId?.safeMessageIds(bot: RemoteBot): IntArray {
return this?.messageId?.run { intArrayOf(this) } ?: throw IllegalStateException("消息发送失败,详见网络日志 (logs/onebot/*.log) 和 Onebot 实现 (${bot.appName} v${bot.appVersion}) 的日志")
}

internal fun List<GroupFilesResp.Files>.toMiraiFiles(group: GroupWrapper, parent: FolderWrapper? = null): List<FileWrapper> {
internal fun List<GroupFilesResp.Files>.toMiraiFiles(group: GroupWrapper, parent: FolderWrapper): List<FileWrapper> {
return map { it.toMiraiFile(group, parent) }
}
internal fun GroupFilesResp.Files.toMiraiFile(group: GroupWrapper, parent: FolderWrapper? = null): FileWrapper {
internal fun GroupFilesResp.Files.toMiraiFile(group: GroupWrapper, parent: FolderWrapper): FileWrapper {
val md5 = md5?.hexToBytes() ?: ByteArray(16)
val sha1 = sha1?.hexToBytes() ?: ByteArray(16)
return FileWrapper(group, parent,
fileId, fileName, md5, sha1, fileSize, deadTime, modifyTime, uploadTime, uploader, busid
)
}
internal fun List<GroupFilesResp.Folders>.toMiraiFolders(group: GroupWrapper, parent: FolderWrapper? = null): List<FolderWrapper> {
internal fun List<GroupFilesResp.Folders>.toMiraiFolders(group: GroupWrapper, parent: FolderWrapper): List<FolderWrapper> {
return map { it.toMiraiFolder(group, parent) }
}
internal fun GroupFilesResp.Folders.toMiraiFolder(group: GroupWrapper, parent: FolderWrapper? = null): FolderWrapper {
internal fun GroupFilesResp.Folders.toMiraiFolder(group: GroupWrapper, parent: FolderWrapper): FolderWrapper {
return FolderWrapper(group, parent,
folderId, folderName, createTime, createTime, creator, totalFileCount
)
Expand Down