chore: move package
CI / android (push) Failing after 2m14s

This commit is contained in:
anran
2026-01-31 02:50:05 +08:00
parent 4e868d9f7f
commit e5a779e48a
49 changed files with 177 additions and 169 deletions
+2 -3
View File
@@ -1,4 +1,3 @@
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
@@ -66,11 +65,11 @@ kotlin {
}
android {
namespace = "moe.uni.comfy_kmp"
namespace = "moe.uni.comfyKmp"
compileSdk = libs.versions.android.compileSdk.get().toInt()
defaultConfig {
applicationId = "moe.uni.comfy_kmp"
applicationId = "moe.uni.comfyKmp"
minSdk = libs.versions.android.minSdk.get().toInt()
targetSdk = libs.versions.android.targetSdk.get().toInt()
versionCode = 1
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp
package moe.uni.comfyKmp
import android.content.Context
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp
package moe.uni.comfyKmp
import android.content.Context
import android.net.Uri
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp
package moe.uni.comfyKmp
import android.os.Bundle
import androidx.activity.ComponentActivity
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp
package moe.uni.comfyKmp
import android.os.Build
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp
package moe.uni.comfyKmp
import android.app.Activity
import androidx.compose.runtime.Composable
@@ -1,10 +1,10 @@
package moe.uni.comfy_kmp.data
package moe.uni.comfyKmp.data
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import java.io.File
import kotlin.math.max
import moe.uni.comfy_kmp.AndroidAppContext
import moe.uni.comfyKmp.AndroidAppContext
actual fun saveCoverImage(bytes: ByteArray, filenameHint: String): String {
val safeName = filenameHint.replace(Regex("[^A-Za-z0-9._-]"), "_")
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.data
package moe.uni.comfyKmp.data
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.network
package moe.uni.comfyKmp.network
import io.ktor.client.HttpClient
import io.ktor.client.engine.okhttp.OkHttp
@@ -1,3 +1,3 @@
<resources>
<string name="app_name">comfy_kmp</string>
<string name="app_name">comfyKmp</string>
</resources>
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp
package moe.uni.comfyKmp
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.runtime.Composable
@@ -6,10 +6,10 @@ import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.remember
import androidx.compose.ui.tooling.preview.Preview
import cafe.adriel.voyager.navigator.Navigator
import moe.uni.comfy_kmp.di.AppContainer
import moe.uni.comfy_kmp.di.LocalAppContainer
import moe.uni.comfy_kmp.ui.screens.ServerScreen
import moe.uni.comfy_kmp.ui.theme.ComfyTheme
import moe.uni.comfyKmp.di.AppContainer
import moe.uni.comfyKmp.di.LocalAppContainer
import moe.uni.comfyKmp.ui.screens.ServerScreen
import moe.uni.comfyKmp.ui.theme.ComfyTheme
@Composable
@Preview
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp
package moe.uni.comfyKmp
import androidx.compose.runtime.Composable
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp
package moe.uni.comfyKmp
class Greeting {
private val platform = getPlatform()
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp
package moe.uni.comfyKmp
interface Platform {
val name: String
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp
package moe.uni.comfyKmp
import androidx.compose.runtime.Composable
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.data
package moe.uni.comfyKmp.data
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonElement
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.data
package moe.uni.comfyKmp.data
import okio.FileSystem
import okio.Path.Companion.toPath
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.data
package moe.uni.comfyKmp.data
import okio.FileSystem
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.data
package moe.uni.comfyKmp.data
import kotlinx.serialization.json.JsonArray
import kotlinx.serialization.json.JsonElement
@@ -1,3 +1,3 @@
package moe.uni.comfy_kmp.data
package moe.uni.comfyKmp.data
expect suspend fun saveImageToGallery(bytes: ByteArray, filenameHint: String): String
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.data
package moe.uni.comfyKmp.data
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.JsonArray
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.data
package moe.uni.comfyKmp.data
import kotlinx.serialization.json.JsonArray
import kotlinx.serialization.json.JsonElement
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.di
package moe.uni.comfyKmp.di
import androidx.compose.runtime.compositionLocalOf
@@ -1,11 +1,11 @@
package moe.uni.comfy_kmp.di
package moe.uni.comfyKmp.di
import moe.uni.comfy_kmp.network.ComfyApiClient
import moe.uni.comfy_kmp.network.ComfyWebSocketClient
import moe.uni.comfy_kmp.network.createHttpClient
import moe.uni.comfy_kmp.storage.ServerRepository
import moe.uni.comfy_kmp.storage.SettingsStorage
import moe.uni.comfy_kmp.storage.WorkflowRepository
import moe.uni.comfyKmp.network.ComfyApiClient
import moe.uni.comfyKmp.network.ComfyWebSocketClient
import moe.uni.comfyKmp.network.createHttpClient
import moe.uni.comfyKmp.storage.ServerRepository
import moe.uni.comfyKmp.storage.SettingsStorage
import moe.uni.comfyKmp.storage.WorkflowRepository
class AppContainer(
private val storage: SettingsStorage = SettingsStorage()
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.network
package moe.uni.comfyKmp.network
import io.ktor.client.HttpClient
import io.ktor.client.call.body
@@ -10,8 +10,8 @@ import io.ktor.http.ContentType
import io.ktor.http.contentType
import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.JsonObject
import moe.uni.comfy_kmp.data.PromptRequest
import moe.uni.comfy_kmp.data.PromptResponse
import moe.uni.comfyKmp.data.PromptRequest
import moe.uni.comfyKmp.data.PromptResponse
class ComfyApiClient(
private val httpClient: HttpClient
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.network
package moe.uni.comfyKmp.network
import io.ktor.client.HttpClient
import io.ktor.client.plugins.websocket.webSocket
@@ -25,8 +25,8 @@ import kotlinx.coroutines.launch
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
import moe.uni.comfy_kmp.data.ComfyJson
import moe.uni.comfy_kmp.data.WsMessage
import moe.uni.comfyKmp.data.ComfyJson
import moe.uni.comfyKmp.data.WsMessage
import kotlin.math.min
import kotlin.random.Random
@@ -1,11 +1,11 @@
package moe.uni.comfy_kmp.network
package moe.uni.comfyKmp.network
import io.ktor.client.HttpClient
import io.ktor.client.HttpClientConfig
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
import io.ktor.client.plugins.websocket.WebSockets
import io.ktor.serialization.kotlinx.json.json
import moe.uni.comfy_kmp.data.ComfyJson
import moe.uni.comfyKmp.data.ComfyJson
internal fun HttpClientConfig<*>.installComfyPlugins() {
install(ContentNegotiation) {
@@ -1,7 +1,7 @@
package moe.uni.comfy_kmp.storage
package moe.uni.comfyKmp.storage
import moe.uni.comfy_kmp.data.ServerConfig
import moe.uni.comfy_kmp.data.WorkflowEntity
import moe.uni.comfyKmp.data.ServerConfig
import moe.uni.comfyKmp.data.WorkflowEntity
import kotlin.random.Random
import kotlin.time.Clock
@@ -1,13 +1,12 @@
package moe.uni.comfy_kmp.storage
package moe.uni.comfyKmp.storage
import com.russhwolf.settings.Settings
import moe.uni.comfy_kmp.data.ComfyJson
import moe.uni.comfy_kmp.data.ServerConfig
import moe.uni.comfy_kmp.data.WorkflowEntity
import moe.uni.comfy_kmp.data.saveCoverImage
import moe.uni.comfyKmp.data.ComfyJson
import moe.uni.comfyKmp.data.ServerConfig
import moe.uni.comfyKmp.data.WorkflowEntity
import moe.uni.comfyKmp.data.saveCoverImage
import kotlinx.serialization.builtins.ListSerializer
import kotlinx.serialization.encodeToString
import kotlinx.serialization.decodeFromString
import okio.FileSystem
import okio.Path.Companion.toPath
import kotlin.io.encoding.Base64
@@ -1,8 +1,6 @@
package moe.uni.comfy_kmp.ui.components
package moe.uni.comfyKmp.ui.components
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.Row
@@ -14,7 +12,6 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
@@ -25,8 +22,8 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties
import moe.uni.comfy_kmp.ui.theme.ComfySpacing
import moe.uni.comfy_kmp.ui.theme.comfyColors
import moe.uni.comfyKmp.ui.theme.ComfySpacing
import moe.uni.comfyKmp.ui.theme.comfyColors
@Composable
fun ComfyDialog(
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.ui.components
package moe.uni.comfyKmp.ui.components
import androidx.compose.animation.animateColorAsState
import androidx.compose.animation.core.animateDpAsState
@@ -23,8 +23,8 @@ import androidx.compose.ui.draw.shadow
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import moe.uni.comfy_kmp.ui.theme.ComfySpacing
import moe.uni.comfy_kmp.ui.theme.comfyColors
import moe.uni.comfyKmp.ui.theme.ComfySpacing
import moe.uni.comfyKmp.ui.theme.comfyColors
@Composable
fun GlassCard(
@@ -1,17 +1,19 @@
package moe.uni.comfy_kmp.ui.components
package moe.uni.comfyKmp.ui.components
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.widthIn
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.shape.CircleShape
@@ -33,8 +35,8 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.unit.dp
import moe.uni.comfy_kmp.ui.theme.ComfySpacing
import moe.uni.comfy_kmp.ui.theme.comfyColors
import moe.uni.comfyKmp.ui.theme.ComfySpacing
import moe.uni.comfyKmp.ui.theme.comfyColors
data class GalleryImage(
val filename: String,
@@ -49,18 +51,24 @@ fun ImageGallery(
onImageClick: ((Int) -> Unit)? = null,
onSaveClick: ((Int) -> Unit)? = null
) {
Box(modifier = modifier.fillMaxSize()) {
BoxWithConstraints(modifier = modifier.fillMaxSize()) {
val availableWidth = maxWidth
val availableHeight = maxHeight
if (images.isEmpty()) {
EmptyGalleryState(modifier = Modifier.align(Alignment.Center))
} else {
LazyColumn(
contentPadding = PaddingValues(ComfySpacing.lg),
verticalArrangement = Arrangement.spacedBy(ComfySpacing.md),
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.fillMaxSize()
) {
itemsIndexed(images) { index, image ->
GalleryImageItem(
image = image,
availableWidth = availableWidth,
availableHeight = availableHeight,
onClick = {
onImageClick?.invoke(index)
},
@@ -75,37 +83,57 @@ fun ImageGallery(
@Composable
private fun GalleryImageItem(
image: GalleryImage,
availableWidth: androidx.compose.ui.unit.Dp,
availableHeight: androidx.compose.ui.unit.Dp,
onClick: () -> Unit,
onSave: (() -> Unit)?
) {
val shape = RoundedCornerShape(12.dp)
val aspectRatio = image.bitmap?.let { it.width.toFloat() / it.height.toFloat() } ?: 1f
val bitmap = image.bitmap
// Calculate max dimensions (leave padding space)
val padding = ComfySpacing.lg * 2
val maxWidth = availableWidth - padding
val maxHeight = availableHeight - padding
// Calculate fitted size maintaining aspect ratio
val (fittedWidth, fittedHeight) = if (bitmap != null) {
val imageAspect = bitmap.width.toFloat() / bitmap.height.toFloat()
val containerAspect = maxWidth / maxHeight
if (imageAspect > containerAspect) {
// Image is wider - fit to width
maxWidth to (maxWidth / imageAspect)
} else {
// Image is taller - fit to height
(maxHeight * imageAspect) to maxHeight
}
} else {
maxWidth to (maxWidth * 0.75f) // Default 4:3 for placeholder
}
Column(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(ComfySpacing.sm)
verticalArrangement = Arrangement.spacedBy(ComfySpacing.sm),
horizontalAlignment = Alignment.CenterHorizontally
) {
Box(
modifier = Modifier
.fillMaxWidth()
.widthIn(max = fittedWidth)
.heightIn(max = fittedHeight)
.shadow(4.dp, shape)
.clip(shape)
.background(MaterialTheme.comfyColors.cardBackground)
.clickable(onClick = onClick)
) {
when {
image.bitmap != null -> {
bitmap != null -> {
Image(
bitmap = image.bitmap,
bitmap = bitmap,
contentDescription = image.filename,
contentScale = ContentScale.FillWidth,
contentScale = ContentScale.Fit,
modifier = Modifier
.fillMaxWidth()
.then(
if (aspectRatio.isFinite() && aspectRatio > 0f) {
Modifier.aspectRatio(aspectRatio)
} else Modifier
)
.widthIn(max = fittedWidth)
.heightIn(max = fittedHeight)
)
// Filename badge at bottom
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.ui.components
package moe.uni.comfyKmp.ui.components
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.animateColorAsState
@@ -14,19 +14,16 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Casino
import androidx.compose.material.icons.filled.ExpandLess
import androidx.compose.material.icons.filled.ExpandMore
import androidx.compose.material.icons.filled.Refresh
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExposedDropdownMenuBox
@@ -57,9 +54,9 @@ import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.contentOrNull
import kotlinx.serialization.json.longOrNull
import moe.uni.comfy_kmp.data.NodeStatus
import moe.uni.comfy_kmp.ui.theme.ComfySpacing
import moe.uni.comfy_kmp.ui.theme.comfyColors
import moe.uni.comfyKmp.data.NodeStatus
import moe.uni.comfyKmp.ui.theme.ComfySpacing
import moe.uni.comfyKmp.ui.theme.comfyColors
import kotlin.math.roundToInt
@Composable
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.ui.components
package moe.uni.comfyKmp.ui.components
import androidx.compose.animation.AnimatedContent
import androidx.compose.animation.animateColorAsState
@@ -21,7 +21,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.LinearProgressIndicator
@@ -35,8 +34,8 @@ import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.StrokeCap
import androidx.compose.ui.unit.dp
import moe.uni.comfy_kmp.ui.theme.ComfySpacing
import moe.uni.comfy_kmp.ui.theme.comfyColors
import moe.uni.comfyKmp.ui.theme.ComfySpacing
import moe.uni.comfyKmp.ui.theme.comfyColors
enum class ExecutionStatus {
IDLE,
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.ui.screens
package moe.uni.comfyKmp.ui.screens
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
@@ -24,7 +24,6 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.input.pointer.pointerInput
@@ -33,8 +32,8 @@ import androidx.compose.ui.unit.dp
import cafe.adriel.voyager.core.screen.Screen
import cafe.adriel.voyager.navigator.LocalNavigator
import cafe.adriel.voyager.navigator.currentOrThrow
import moe.uni.comfy_kmp.SystemBarsEffect
import moe.uni.comfy_kmp.ui.theme.ComfySpacing
import moe.uni.comfyKmp.SystemBarsEffect
import moe.uni.comfyKmp.ui.theme.ComfySpacing
import org.jetbrains.compose.resources.decodeToImageBitmap
data class ImagePreviewScreen(
@@ -1,6 +1,6 @@
@file:OptIn(ExperimentalMaterial3Api::class)
package moe.uni.comfy_kmp.ui.screens
package moe.uni.comfyKmp.ui.screens
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.tween
@@ -30,7 +30,6 @@ import androidx.compose.material.icons.filled.Check
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material.icons.filled.Dns
import androidx.compose.material.icons.filled.Edit
import androidx.compose.material.icons.filled.RadioButtonChecked
import androidx.compose.material.icons.filled.RadioButtonUnchecked
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
@@ -40,7 +39,6 @@ import androidx.compose.material3.ExtendedFloatingActionButton
import androidx.compose.material3.FilledTonalButton
import androidx.compose.material3.FabPosition
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.OutlinedTextField
@@ -65,13 +63,13 @@ import cafe.adriel.voyager.core.model.rememberScreenModel
import cafe.adriel.voyager.core.screen.Screen
import cafe.adriel.voyager.navigator.LocalNavigator
import cafe.adriel.voyager.navigator.currentOrThrow
import moe.uni.comfy_kmp.data.ServerConfig
import moe.uni.comfy_kmp.di.LocalAppContainer
import moe.uni.comfy_kmp.storage.generateId
import moe.uni.comfy_kmp.ui.components.ComfyDialog
import moe.uni.comfy_kmp.ui.components.GlassCard
import moe.uni.comfy_kmp.ui.theme.ComfySpacing
import moe.uni.comfy_kmp.ui.theme.comfyColors
import moe.uni.comfyKmp.data.ServerConfig
import moe.uni.comfyKmp.di.LocalAppContainer
import moe.uni.comfyKmp.storage.generateId
import moe.uni.comfyKmp.ui.components.ComfyDialog
import moe.uni.comfyKmp.ui.components.GlassCard
import moe.uni.comfyKmp.ui.theme.ComfySpacing
import moe.uni.comfyKmp.ui.theme.comfyColors
class ServerScreen : Screen {
@Composable
@@ -223,7 +221,7 @@ class ServerScreen : Screen {
}
private class ServerScreenModel(
private val repository: moe.uni.comfy_kmp.storage.ServerRepository
private val repository: moe.uni.comfyKmp.storage.ServerRepository
) : ScreenModel {
var servers by mutableStateOf(repository.getServers())
private set
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.ui.screens
package moe.uni.comfyKmp.ui.screens
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.tween
@@ -31,9 +31,7 @@ import androidx.compose.material.icons.automirrored.filled.Assignment
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material.icons.filled.FolderOpen
import androidx.compose.material.icons.filled.Image
import androidx.compose.material.icons.filled.PlayArrow
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.FilledTonalButton
import androidx.compose.material3.FilledTonalIconButton
@@ -45,7 +43,6 @@ import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
@@ -59,7 +56,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.shadow
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
@@ -68,15 +64,15 @@ import cafe.adriel.voyager.core.model.rememberScreenModel
import cafe.adriel.voyager.core.screen.Screen
import cafe.adriel.voyager.navigator.LocalNavigator
import cafe.adriel.voyager.navigator.currentOrThrow
import moe.uni.comfy_kmp.data.WorkflowEntity
import moe.uni.comfy_kmp.data.loadCoverImageBytes
import moe.uni.comfy_kmp.di.LocalAppContainer
import moe.uni.comfy_kmp.isFilePickerSupported
import moe.uni.comfy_kmp.rememberFilePickerLauncher
import moe.uni.comfy_kmp.storage.generateId
import moe.uni.comfy_kmp.ui.components.ComfyDialog
import moe.uni.comfy_kmp.ui.theme.ComfySpacing
import moe.uni.comfy_kmp.ui.theme.comfyColors
import moe.uni.comfyKmp.data.WorkflowEntity
import moe.uni.comfyKmp.data.loadCoverImageBytes
import moe.uni.comfyKmp.di.LocalAppContainer
import moe.uni.comfyKmp.isFilePickerSupported
import moe.uni.comfyKmp.rememberFilePickerLauncher
import moe.uni.comfyKmp.storage.generateId
import moe.uni.comfyKmp.ui.components.ComfyDialog
import moe.uni.comfyKmp.ui.theme.ComfySpacing
import moe.uni.comfyKmp.ui.theme.comfyColors
import org.jetbrains.compose.resources.decodeToImageBitmap
import kotlin.time.Clock
@@ -199,7 +195,7 @@ data class WorkflowListScreen(val serverId: String) : Screen {
private class WorkflowListScreenModel(
private val serverId: String,
private val repository: moe.uni.comfy_kmp.storage.WorkflowRepository
private val repository: moe.uni.comfyKmp.storage.WorkflowRepository
) : ScreenModel {
var workflows by mutableStateOf(repository.getWorkflows(serverId))
private set
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.ui.screens
package moe.uni.comfyKmp.ui.screens
import androidx.compose.animation.AnimatedContent
import androidx.compose.animation.fadeIn
@@ -68,36 +68,35 @@ import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.contentOrNull
import kotlinx.serialization.json.jsonArray
import kotlinx.serialization.json.jsonPrimitive
import moe.uni.comfy_kmp.data.ComfyJson
import moe.uni.comfy_kmp.data.ImageRef
import moe.uni.comfy_kmp.data.NodeExecutionState
import moe.uni.comfy_kmp.data.NodeStatus
import moe.uni.comfy_kmp.data.PromptRequest
import moe.uni.comfy_kmp.data.extractImagesFromHistory
import moe.uni.comfy_kmp.data.extractPromptObject
import moe.uni.comfy_kmp.data.parsePromptNodes
import moe.uni.comfy_kmp.data.saveCoverImage
import moe.uni.comfy_kmp.data.saveImageToGallery
import moe.uni.comfy_kmp.data.updateNodeInput
import moe.uni.comfy_kmp.di.LocalAppContainer
import moe.uni.comfy_kmp.network.ComfyApiClient
import moe.uni.comfy_kmp.network.ComfyWebSocketClient
import moe.uni.comfy_kmp.network.WsConnectionStatus
import moe.uni.comfy_kmp.storage.ServerRepository
import moe.uni.comfy_kmp.storage.WorkflowRepository
import moe.uni.comfy_kmp.storage.generateId
import moe.uni.comfy_kmp.ui.components.EditableNodeType
import moe.uni.comfy_kmp.ui.components.EditableNodeCard
import moe.uni.comfy_kmp.ui.components.ExecutionStatus
import moe.uni.comfy_kmp.ui.components.ExecutionStatusBar
import moe.uni.comfy_kmp.ui.components.GalleryImage
import moe.uni.comfy_kmp.ui.components.ImageGallery
import moe.uni.comfy_kmp.ui.components.detectNodeType
import moe.uni.comfy_kmp.ui.components.getModelFolder
import moe.uni.comfy_kmp.ui.theme.ComfySpacing
import moe.uni.comfy_kmp.ui.theme.comfyColors
import moe.uni.comfyKmp.data.ComfyJson
import moe.uni.comfyKmp.data.ImageRef
import moe.uni.comfyKmp.data.NodeExecutionState
import moe.uni.comfyKmp.data.NodeStatus
import moe.uni.comfyKmp.data.PromptRequest
import moe.uni.comfyKmp.data.extractImagesFromHistory
import moe.uni.comfyKmp.data.extractPromptObject
import moe.uni.comfyKmp.data.parsePromptNodes
import moe.uni.comfyKmp.data.saveCoverImage
import moe.uni.comfyKmp.data.saveImageToGallery
import moe.uni.comfyKmp.data.updateNodeInput
import moe.uni.comfyKmp.di.LocalAppContainer
import moe.uni.comfyKmp.network.ComfyApiClient
import moe.uni.comfyKmp.network.ComfyWebSocketClient
import moe.uni.comfyKmp.network.WsConnectionStatus
import moe.uni.comfyKmp.storage.ServerRepository
import moe.uni.comfyKmp.storage.WorkflowRepository
import moe.uni.comfyKmp.storage.generateId
import moe.uni.comfyKmp.ui.components.EditableNodeType
import moe.uni.comfyKmp.ui.components.EditableNodeCard
import moe.uni.comfyKmp.ui.components.ExecutionStatus
import moe.uni.comfyKmp.ui.components.ExecutionStatusBar
import moe.uni.comfyKmp.ui.components.GalleryImage
import moe.uni.comfyKmp.ui.components.ImageGallery
import moe.uni.comfyKmp.ui.components.detectNodeType
import moe.uni.comfyKmp.ui.components.getModelFolder
import moe.uni.comfyKmp.ui.theme.ComfySpacing
import moe.uni.comfyKmp.ui.theme.comfyColors
import org.jetbrains.compose.resources.decodeToImageBitmap
import kotlin.random.Random
import kotlin.time.Clock
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.ui.theme
package moe.uni.comfyKmp.ui.theme
import androidx.compose.animation.core.CubicBezierEasing
import androidx.compose.foundation.shape.RoundedCornerShape
@@ -11,10 +11,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.staticCompositionLocalOf
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp
package moe.uni.comfyKmp
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp
package moe.uni.comfyKmp
import androidx.compose.ui.window.ComposeUIViewController
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp
package moe.uni.comfyKmp
import platform.UIKit.UIDevice
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp
package moe.uni.comfyKmp
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
@@ -1,6 +1,6 @@
@file:OptIn(kotlinx.cinterop.ExperimentalForeignApi::class)
package moe.uni.comfy_kmp.data
package moe.uni.comfyKmp.data
import kotlinx.cinterop.addressOf
import kotlinx.cinterop.convert
@@ -11,7 +11,6 @@ import platform.Foundation.NSCachesDirectory
import platform.Foundation.NSData
import platform.Foundation.NSFileManager
import platform.Foundation.NSUserDomainMask
import platform.Foundation.URLByAppendingPathComponent
import platform.Foundation.dataWithBytes
import platform.UIKit.UIImage
import platform.UIKit.UIImageJPEGRepresentation
@@ -1,6 +1,6 @@
@file:OptIn(kotlinx.cinterop.ExperimentalForeignApi::class)
package moe.uni.comfy_kmp.data
package moe.uni.comfyKmp.data
import kotlinx.cinterop.addressOf
import kotlinx.cinterop.usePinned
@@ -1,4 +1,4 @@
package moe.uni.comfy_kmp.network
package moe.uni.comfyKmp.network
import io.ktor.client.HttpClient
import io.ktor.client.engine.darwin.Darwin
+2 -2
View File
@@ -1,7 +1,7 @@
TEAM_ID=
PRODUCT_NAME=comfy_kmp
PRODUCT_BUNDLE_IDENTIFIER=moe.uni.comfy_kmp.comfy_kmp$(TEAM_ID)
PRODUCT_NAME=comfyKmp
PRODUCT_BUNDLE_IDENTIFIER=moe.uni.comfyKmp.comfyKmp$(TEAM_ID)
CURRENT_PROJECT_VERSION=1
MARKETING_VERSION=1.0
+3 -3
View File
@@ -7,7 +7,7 @@
objects = {
/* Begin PBXFileReference section */
338A2ACE269EA4A9809609C8 /* comfy_kmp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = comfy_kmp.app; sourceTree = BUILT_PRODUCTS_DIR; };
338A2ACE269EA4A9809609C8 /* comfyKmp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = comfyKmp.app; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
@@ -59,7 +59,7 @@
657B04DAB4CB0FD124755A63 /* Products */ = {
isa = PBXGroup;
children = (
338A2ACE269EA4A9809609C8 /* comfy_kmp.app */,
338A2ACE269EA4A9809609C8 /* comfyKmp.app */,
);
name = Products;
sourceTree = "<group>";
@@ -87,7 +87,7 @@
packageProductDependencies = (
);
productName = iosApp;
productReference = 338A2ACE269EA4A9809609C8 /* comfy_kmp.app */;
productReference = 338A2ACE269EA4A9809609C8 /* comfyKmp.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
+1 -1
View File
@@ -1,4 +1,4 @@
rootProject.name = "comfy_kmp"
rootProject.name = "comfyKmp"
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
pluginManagement {