Skip to content

Commit

Permalink
🔨 Separate the design into expect / actual to possibly support the pl…
Browse files Browse the repository at this point in the history
…atform the jvm expects (#820)
  • Loading branch information
guiyanakuang authored Apr 29, 2024
1 parent d8c28e7 commit 1df1362
Show file tree
Hide file tree
Showing 54 changed files with 497 additions and 492 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@ package com.clipevery.config

import com.clipevery.app.AppEnv
import com.clipevery.presist.OneFilePersist
import com.clipevery.utils.DeviceUtils
import com.clipevery.utils.getDeviceUtils
import kotlinx.coroutines.CoroutineName
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch

abstract class ConfigManager(
private val configFilePersist: OneFilePersist,
deviceUtils: DeviceUtils,
private val appEnv: AppEnv,
) {
private val deviceUtils = getDeviceUtils()

var config: AppConfig

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.clipevery.presist

import com.clipevery.clip.item.ClipFile
import com.clipevery.clip.item.ClipFileImpl
import com.clipevery.utils.EncryptUtils
import com.clipevery.utils.getEncryptUtils
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
Expand Down Expand Up @@ -73,6 +73,8 @@ class SingleFileInfoTree(

class FileInfoTreeBuilder {

private val encryptUtils = getEncryptUtils()

private val tree = mutableMapOf<String, FileInfoTree>()

private var size = 0L
Expand All @@ -91,9 +93,9 @@ class FileInfoTreeBuilder {
fun build(path: Path): FileInfoTree {
val md5 =
if (md5List.isEmpty()) {
EncryptUtils.md5ByString(path.fileName.toString())
encryptUtils.md5ByString(path.fileName.toString())
} else {
EncryptUtils.md5ByArray(md5List.toTypedArray())
encryptUtils.md5ByArray(md5List.toTypedArray())
}
return DirFileInfoTree(tree, size, md5)
}
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import com.clipevery.presist.FilePersist
import com.clipevery.ui.base.AsyncView
import com.clipevery.ui.base.LoadImageData
import com.clipevery.ui.base.loadImage
import com.clipevery.utils.FileUtils
import com.clipevery.utils.getFileUtils
import java.awt.Desktop

@Composable
Expand All @@ -44,9 +44,10 @@ fun HtmlToImageDetailView(
val current = LocalKoinApplication.current
val density = LocalDensity.current
val filePersist = current.koin.get<FilePersist>()
val fileUtils = current.koin.get<FileUtils>()
val chromeService = current.koin.get<ChromeService>()

val fileUtils = getFileUtils()

val filePath by remember(clipData.id) { mutableStateOf(clipHtml.getHtmlImagePath()) }

var existFile by remember(clipData.id) { mutableStateOf(filePath.toFile().exists()) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ import com.clipevery.ui.base.ToastManager
import com.clipevery.ui.base.ToastStyle
import com.clipevery.ui.base.starRegular
import com.clipevery.ui.base.starSolid
import com.clipevery.utils.DateUtils
import com.clipevery.utils.getDateUtils
import io.realm.kotlin.types.RealmInstant
import kotlinx.coroutines.launch
import kotlin.reflect.KClass
Expand Down Expand Up @@ -188,12 +188,14 @@ fun ClipPreviewItemView(
}
}

val dateUtils = getDateUtils()

fun getDateText(
createTime: RealmInstant,
copywriter: Copywriter,
): String {
val date = DateUtils.convertRealmInstantToLocalDateTime(createTime)
DateUtils.getDateText(date)?.let {
val date = dateUtils.convertRealmInstantToLocalDateTime(createTime)
dateUtils.getDateText(date)?.let {
return copywriter.getText(it)
} ?: run {
return copywriter.getDate(date)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ import com.clipevery.ui.base.AsyncView
import com.clipevery.ui.base.LoadImageData
import com.clipevery.ui.base.html
import com.clipevery.ui.base.loadImage
import com.clipevery.utils.FileUtils
import com.clipevery.utils.getFileUtils
import java.awt.Desktop

@Composable
Expand All @@ -50,10 +50,11 @@ fun HtmlToImagePreviewView(clipData: ClipData) {
val current = LocalKoinApplication.current
val density = LocalDensity.current
val copywriter = current.koin.get<GlobalCopywriter>()
val fileUtils = current.koin.get<FileUtils>()
val filePersist = current.koin.get<FilePersist>()
val chromeService = current.koin.get<ChromeService>()

val fileUtils = getFileUtils()

val clipHtml = it as ClipHtml

val filePath by remember(clipData.id) { mutableStateOf(clipHtml.getHtmlImagePath()) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import com.clipevery.ui.base.file
import com.clipevery.ui.base.fileSlash
import com.clipevery.ui.base.folder
import com.clipevery.utils.FileExtUtils
import com.clipevery.utils.FileUtils
import com.clipevery.utils.getFileUtils
import io.ktor.util.*
import java.awt.Desktop
import java.nio.file.Path
Expand All @@ -41,7 +41,7 @@ import java.nio.file.Path
fun SingleFilePreviewView(filePath: Path) {
val current = LocalKoinApplication.current
val copywriter = current.koin.get<GlobalCopywriter>()
val fileUtils = current.koin.get<FileUtils>()
val fileUtils = getFileUtils()

val existFile by remember { mutableStateOf(filePath.toFile().exists()) }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import com.clipevery.ui.base.LoadImageData
import com.clipevery.ui.base.image
import com.clipevery.ui.base.imageSlash
import com.clipevery.ui.base.loadImage
import com.clipevery.utils.FileUtils
import com.clipevery.utils.getFileUtils
import java.awt.Desktop
import java.nio.file.Path
import kotlin.io.path.exists
Expand All @@ -43,7 +43,7 @@ fun SingleImagePreviewView(imagePath: Path) {
val current = LocalKoinApplication.current
val density = LocalDensity.current
val copywriter = current.koin.get<GlobalCopywriter>()
val fileUtils = current.koin.get<FileUtils>()
val fileUtils = getFileUtils()

val existFile by remember { mutableStateOf(imagePath.exists()) }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,15 @@ import com.clipevery.clip.item.ClipText
import com.clipevery.dao.clip.ClipData
import com.clipevery.i18n.GlobalCopywriter
import com.clipevery.ui.base.feed
import com.clipevery.utils.FileUtils
import com.clipevery.utils.getFileUtils
import java.awt.Desktop

@Composable
fun TextPreviewView(clipData: ClipData) {
clipData.getClipItem()?.let {
val current = LocalKoinApplication.current
val copywriter = current.koin.get<GlobalCopywriter>()
val fileUtils = current.koin.get<FileUtils>()
val fileUtils = getFileUtils()
ClipSpecificPreviewContentView(it, {
Text(
modifier =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ import com.clipevery.ui.base.ClipIconButton
import com.clipevery.ui.base.add
import com.clipevery.ui.base.magnifying
import com.clipevery.ui.base.warning
import com.clipevery.utils.JsonUtils
import com.clipevery.utils.getJsonUtils
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.serialization.encodeToString
Expand Down Expand Up @@ -229,7 +229,7 @@ fun NearbyDeviceView(syncInfo: SyncInfo) {
val deviceManager = current.koin.get<DeviceManager>()
val syncRuntimeInfoDao = current.koin.get<SyncRuntimeInfoDao>()
val configManager = current.koin.get<ConfigManager>()
val jsonUtils = current.koin.get<JsonUtils>()
val jsonUtils = getJsonUtils()
SyncDeviceView(syncInfo = syncInfo) {
ClipIconButton(
radius = 18.dp,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ import com.clipevery.ui.base.network
import com.clipevery.ui.base.remove
import com.clipevery.ui.base.towerBroadcast
import com.clipevery.ui.devices.SyncDeviceView
import com.clipevery.utils.JsonUtils
import com.clipevery.utils.NetUtils
import com.clipevery.utils.getJsonUtils
import com.clipevery.utils.getNetUtils
import kotlinx.serialization.encodeToString

@Composable
Expand All @@ -54,8 +54,8 @@ fun NetSettingsView() {
val configManager = current.koin.get<ConfigManager>()
val deviceManager = current.koin.get<DeviceManager>()
val copywriter = current.koin.get<GlobalCopywriter>()
val netUtils = current.koin.get<NetUtils>()
val jsonUtils = current.koin.get<JsonUtils>()
val netUtils = getNetUtils()
val jsonUtils = getJsonUtils()

var ip: String? by remember { mutableStateOf(null) }
var port: String? by remember { mutableStateOf(null) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ import com.clipevery.ui.base.link
import com.clipevery.ui.base.percent
import com.clipevery.ui.base.trash
import com.clipevery.ui.devices.measureTextWidth
import com.clipevery.utils.FileUtils
import com.clipevery.utils.Quadruple
import com.clipevery.utils.getFileUtils

@Composable
fun StoreSettingsView() {
Expand All @@ -68,7 +68,7 @@ fun StoreSettingsView() {
val configManager = current.koin.get<ConfigManager>()
val clipDao = current.koin.get<ClipDao>()
val copywriter = current.koin.get<GlobalCopywriter>()
val fileUtils = current.koin.get<FileUtils>()
val fileUtils = getFileUtils()

var clipCount: Long? by remember { mutableStateOf(null) }
var clipFormatSize: String? by remember { mutableStateOf(null) }
Expand Down
73 changes: 8 additions & 65 deletions composeApp/src/commonMain/kotlin/com/clipevery/utils/DateUtils.kt
Original file line number Diff line number Diff line change
@@ -1,83 +1,26 @@
package com.clipevery.utils

import io.realm.kotlin.types.RealmInstant
import java.time.Instant
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.format.DateTimeFormatter
import java.time.temporal.ChronoUnit
import java.util.Calendar
import java.util.Locale

object DateUtils {
expect fun getDateUtils(): DateUtils

val dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
interface DateUtils {

fun getPrevDay(): RealmInstant {
val calendar = Calendar.getInstance()
calendar.add(Calendar.DAY_OF_MONTH, -1)
// Convert milliseconds to seconds for the epochSeconds parameter
val epochSeconds = calendar.timeInMillis / 1000
// The nanosecondAdjustment parameter is 0 as we're not adjusting nanoseconds here
return RealmInstant.from(epochSeconds, 0)
}
fun getPrevDay(): RealmInstant

fun getRealmInstant(days: Int): RealmInstant {
val calendar = Calendar.getInstance()
calendar.add(Calendar.DAY_OF_MONTH, days)
// Convert milliseconds to seconds for the epochSeconds parameter
val epochSeconds = calendar.timeInMillis / 1000
// The nanosecondAdjustment parameter is 0 as we're not adjusting nanoseconds here
return RealmInstant.from(epochSeconds, 0)
}
fun getRealmInstant(days: Int): RealmInstant

fun getDateText(date: LocalDateTime): String? {
val now = LocalDateTime.now()
fun getDateText(date: LocalDateTime): String?

if (date.toLocalDate().isEqual(now.toLocalDate())) {
val hour = ChronoUnit.HOURS.between(date, now)
val minutes = ChronoUnit.MINUTES.between(date, now)
val seconds = ChronoUnit.SECONDS.between(date, now)

if (hour < 1 && minutes < 1 && seconds < 60) {
return "Just_now"
}
return "Today"
}

val yesterday = now.minusDays(1)
if (date.toLocalDate().isEqual(yesterday.toLocalDate())) {
return "Yesterday"
}

return null
}

fun getYYYYMMDD(date: LocalDateTime = LocalDateTime.now()): String {
return dateFormatter.format(date)
}
fun getYYYYMMDD(date: LocalDateTime = LocalDateTime.now()): String

fun getDateText(
date: LocalDateTime,
pattern: String,
locale: Locale,
): String {
val formatter: DateTimeFormatter =
Memoize.memoize(pattern, locale) {
DateTimeFormatter.ofPattern(pattern, locale)
}()
return formatter.format(date)
}

fun convertRealmInstantToLocalDateTime(realmInstant: RealmInstant): LocalDateTime {
// 1. 从 RealmInstant 获取秒和纳秒
val epochSeconds = realmInstant.epochSeconds
val nanosecondsOfSecond = realmInstant.nanosecondsOfSecond

// 2. 使用 Instant.ofEpochSecond 创建 Instant
val instant = Instant.ofEpochSecond(epochSeconds, nanosecondsOfSecond.toLong())
): String

// 3. 使用系统默认的时区将 Instant 转换为 LocalDateTime
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault())
}
fun convertRealmInstantToLocalDateTime(realmInstant: RealmInstant): LocalDateTime
}
Loading

0 comments on commit 1df1362

Please sign in to comment.