From 6574cd561d85a9fe2ebce3d0f82115ae75d17651 Mon Sep 17 00:00:00 2001 From: Evan You Date: Sun, 13 Apr 2025 11:02:09 +0800 Subject: [PATCH] 1.14.2 --- app/build.gradle.kts | 4 +- .../donut/mixfile/server/core/utils/Util.kt | 4 +- .../mixfile/ui/routes/favorites/Dialogs.kt | 6 --- .../mixfile/ui/routes/home/DownloadTask.kt | 1 - .../java/com/donut/mixfile/util/CommonUtil.kt | 4 +- .../com/donut/mixfile/util/file/FileCard.kt | 38 +++++++++++++------ 6 files changed, 31 insertions(+), 26 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7323467..80529d6 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -15,8 +15,8 @@ android { applicationId = "com.donut.mixfile" minSdk = 26 targetSdk = 35 - versionCode = 106 - versionName = "1.14.1" + versionCode = 107 + versionName = "1.14.2" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/app/src/main/java/com/donut/mixfile/server/core/utils/Util.kt b/app/src/main/java/com/donut/mixfile/server/core/utils/Util.kt index 1274a2d..f60e0e9 100644 --- a/app/src/main/java/com/donut/mixfile/server/core/utils/Util.kt +++ b/app/src/main/java/com/donut/mixfile/server/core/utils/Util.kt @@ -6,6 +6,7 @@ import com.github.amr.mimetypes.MimeTypes import io.ktor.client.request.forms.FormBuilder import io.ktor.http.Headers import io.ktor.http.HttpHeaders +import io.ktor.http.encodeURLQueryComponent import io.ktor.http.quote import io.ktor.server.application.ApplicationCall import io.ktor.util.pipeline.PipelineContext @@ -15,7 +16,6 @@ import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream import java.net.MalformedURLException import java.net.URL -import java.net.URLEncoder import java.util.concurrent.CopyOnWriteArrayList import java.util.zip.GZIPInputStream import java.util.zip.GZIPOutputStream @@ -121,7 +121,7 @@ fun decompressGzip(compressed: ByteArray): String { } fun String.encodeURL(): String { - return URLEncoder.encode(this, "UTF-8") + return encodeURLQueryComponent() } fun String.parseFileMimeType() = MimeTypes.getInstance() diff --git a/app/src/main/java/com/donut/mixfile/ui/routes/favorites/Dialogs.kt b/app/src/main/java/com/donut/mixfile/ui/routes/favorites/Dialogs.kt index 05d494c..c3ddbf5 100644 --- a/app/src/main/java/com/donut/mixfile/ui/routes/favorites/Dialogs.kt +++ b/app/src/main/java/com/donut/mixfile/ui/routes/favorites/Dialogs.kt @@ -82,12 +82,6 @@ fun editCategory(name: String, callback: (String) -> Unit = {}) { favCategories += newName currentCategory = newName showToast("修改分类名称成功") - favorites.forEach { - if (it.category.contentEquals(name)) { - it.category = newName - } - } - favorites = favorites.map { if (it.category.contentEquals(name)) { it.copy(category = newName) diff --git a/app/src/main/java/com/donut/mixfile/ui/routes/home/DownloadTask.kt b/app/src/main/java/com/donut/mixfile/ui/routes/home/DownloadTask.kt index 8176f1f..2a516ae 100644 --- a/app/src/main/java/com/donut/mixfile/ui/routes/home/DownloadTask.kt +++ b/app/src/main/java/com/donut/mixfile/ui/routes/home/DownloadTask.kt @@ -36,7 +36,6 @@ import com.donut.mixfile.currentActivity import com.donut.mixfile.ui.component.common.MixDialogBuilder import com.donut.mixfile.ui.theme.colorScheme import com.donut.mixfile.util.file.InfoText -import com.donut.mixfile.util.file.sanitizeFileName import com.donut.mixfile.util.file.saveFileToStorage import com.donut.mixfile.util.formatFileSize import com.donut.mixfile.util.objects.AnimatedLoadingBar diff --git a/app/src/main/java/com/donut/mixfile/util/CommonUtil.kt b/app/src/main/java/com/donut/mixfile/util/CommonUtil.kt index 6e2785f..e8a1d10 100644 --- a/app/src/main/java/com/donut/mixfile/util/CommonUtil.kt +++ b/app/src/main/java/com/donut/mixfile/util/CommonUtil.kt @@ -16,7 +16,6 @@ import com.donut.mixfile.server.core.utils.ignoreError import com.donut.mixfile.server.mixFileServer import com.donut.mixfile.ui.routes.home.getLocalServerAddress import io.ktor.http.URLBuilder -import io.ktor.http.path import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -263,8 +262,7 @@ fun getFileAccessUrl( shareInfo: String, fileName: String ): String { - return URLBuilder(host).apply { - path("api", "download", fileName.encodeURL()) + return URLBuilder("${host}/api/download/${fileName.encodeURL()}").apply { fragment = fileName parameters.apply { append("s", shareInfo) diff --git a/app/src/main/java/com/donut/mixfile/util/file/FileCard.kt b/app/src/main/java/com/donut/mixfile/util/file/FileCard.kt index 60aaac0..5664b62 100644 --- a/app/src/main/java/com/donut/mixfile/util/file/FileCard.kt +++ b/app/src/main/java/com/donut/mixfile/util/file/FileCard.kt @@ -19,7 +19,6 @@ import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.CheckCircle -import androidx.compose.material3.CardDefaults import androidx.compose.material3.ElevatedCard import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon @@ -35,7 +34,6 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.donut.mixfile.server.core.utils.parseFileMimeType import com.donut.mixfile.server.serverStarted -import com.donut.mixfile.ui.routes.home.tryResolveFile import com.donut.mixfile.ui.theme.colorScheme import com.donut.mixfile.util.cachedMutableOf import com.donut.mixfile.util.formatFileSize @@ -49,7 +47,9 @@ var filePreview by cachedMutableOf("关闭", "mix_file_preview") fun PreviewCard( fileDataLog: FileDataLog, showDate: Boolean = true, - longClick: () -> Unit = {}, + longClick: (FileDataLog) -> Unit = {}, + selected: Boolean, + onClick: (FileDataLog) -> Unit ) { val isImage = fileDataLog.name.parseFileMimeType().run { this.startsWith("image/") @@ -62,24 +62,34 @@ fun PreviewCard( LaunchedEffect(favorites) { } + + val color = remember(selected) { + if (selected) + Color(107, 184, 242, 84) + else + Color(107, 218, 246, 0) + } + ElevatedCard( - colors = CardDefaults.cardColors( -// containerColor = Color(107, 218, 246, 0), - ), +// colors = CardDefaults.cardColors( +// contentColor = color, +// ), modifier = Modifier .fillMaxSize() .padding(5.dp) .combinedClickable( onLongClick = { - longClick() + longClick(fileDataLog) } ) { - tryResolveFile(fileDataLog.shareInfoData) + onClick(fileDataLog) } ) { Column( - modifier = Modifier.fillMaxSize(), + modifier = Modifier + .fillMaxSize() + .background(color), verticalArrangement = Arrangement.Bottom ) { if (serverStarted) { @@ -144,9 +154,13 @@ fun FileCardList( columns = GridCells.Fixed(2), ) { items(cardList.size) { index -> - PreviewCard(cardList[index]) { - longClick(cardList[index]) - } + val log = cardList[index] + PreviewCard( + log, + onClick = onClick, + longClick = longClick, + selected = selected.contains(log) + ) } } return