From b56fb3b60154487109341e58819a2bc1f61f055d Mon Sep 17 00:00:00 2001 From: aro Date: Sun, 27 Nov 2022 21:48:11 +0100 Subject: [PATCH] feat: remove the on/off watcher, too unreliable --- .../wrench/components/WrenchScaffold.kt | 14 +++-- .../wrench/components/bottom/BottomBar.kt | 16 ++--- .../{center => bottom}/FloatingAddButton.kt | 17 ++++- .../components/bottom/WatcherStatusButton.kt | 63 +------------------ .../xyz/atnrch/wrench/watcher/Watcher.kt | 53 ++++------------ 5 files changed, 39 insertions(+), 124 deletions(-) rename src/main/kotlin/xyz/atnrch/wrench/components/{center => bottom}/FloatingAddButton.kt (67%) diff --git a/src/main/kotlin/xyz/atnrch/wrench/components/WrenchScaffold.kt b/src/main/kotlin/xyz/atnrch/wrench/components/WrenchScaffold.kt index 947f0ac..211c028 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/components/WrenchScaffold.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/components/WrenchScaffold.kt @@ -3,8 +3,12 @@ package xyz.atnrch.wrench.components import androidx.compose.material.Scaffold import androidx.compose.material.ScaffoldState import androidx.compose.material.rememberScaffoldState -import androidx.compose.runtime.* -import xyz.atnrch.wrench.components.center.AddButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateMapOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import xyz.atnrch.wrench.components.bottom.BottomAppBar +import xyz.atnrch.wrench.components.bottom.FloatingButton import xyz.atnrch.wrench.components.top.TopBar import xyz.atnrch.wrench.compose.SnackBarDataHolder import xyz.atnrch.wrench.watcher.Watcher @@ -18,14 +22,12 @@ fun WrenchScaffold() { val snackBarDataHolder = SnackBarDataHolder(scaffoldState, rememberCoroutineScope()) val watcherManager = remember { WatcherManager(entries) } val watcher = remember { Watcher(watcherManager, snackBarDataHolder) } - var watcherState by remember { mutableStateOf(false) } Scaffold( scaffoldState = scaffoldState, topBar = { TopBar() }, - floatingActionButton = { AddButton(watcherManager) }, + floatingActionButton = { FloatingButton(watcherManager) }, isFloatingActionButtonDocked = true, - bottomBar = { BottomAppBar(watcher, watcherState, snackBarDataHolder) { watcherState = it } } + bottomBar = { BottomAppBar(watcher) } ) { WatcherDisplay(watcherManager) } - } \ No newline at end of file diff --git a/src/main/kotlin/xyz/atnrch/wrench/components/bottom/BottomBar.kt b/src/main/kotlin/xyz/atnrch/wrench/components/bottom/BottomBar.kt index 32a95b4..72f01d6 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/components/bottom/BottomBar.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/components/bottom/BottomBar.kt @@ -1,27 +1,19 @@ -package xyz.atnrch.wrench.components +package xyz.atnrch.wrench.components.bottom import androidx.compose.foundation.shape.CornerSize import androidx.compose.material.MaterialTheme import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.shadow -import androidx.compose.ui.unit.dp -import xyz.atnrch.wrench.compose.SnackBarDataHolder import xyz.atnrch.wrench.ui.UIColors import xyz.atnrch.wrench.watcher.Watcher @Composable fun BottomAppBar( - watcher: Watcher, - state: Boolean, - snackBarDataHolder: SnackBarDataHolder, - onStateChange: (state: Boolean) -> Unit + watcher: Watcher ) { androidx.compose.material.BottomAppBar( cutoutShape = MaterialTheme.shapes.small.copy( CornerSize(percent = 50) ), - backgroundColor = UIColors.PRIMARY, - modifier = Modifier.shadow(20.dp, MaterialTheme.shapes.small, true) - ) { BottomRow(watcher, state, onStateChange, snackBarDataHolder) } + backgroundColor = UIColors.PRIMARY + ) { BottomRowNew(watcher) } } \ No newline at end of file diff --git a/src/main/kotlin/xyz/atnrch/wrench/components/center/FloatingAddButton.kt b/src/main/kotlin/xyz/atnrch/wrench/components/bottom/FloatingAddButton.kt similarity index 67% rename from src/main/kotlin/xyz/atnrch/wrench/components/center/FloatingAddButton.kt rename to src/main/kotlin/xyz/atnrch/wrench/components/bottom/FloatingAddButton.kt index 1335797..c45f29e 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/components/center/FloatingAddButton.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/components/bottom/FloatingAddButton.kt @@ -1,20 +1,24 @@ -package xyz.atnrch.wrench.components.center +package xyz.atnrch.wrench.components.bottom +import androidx.compose.foundation.border import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CornerSize import androidx.compose.material.FloatingActionButton import androidx.compose.material.Icon +import androidx.compose.material.MaterialTheme import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.PostAdd import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp +import xyz.atnrch.wrench.components.center.showFilePicker import xyz.atnrch.wrench.logger.Logger import xyz.atnrch.wrench.ui.UIColors import xyz.atnrch.wrench.watcher.WatcherManager @Composable -fun AddButton( +fun FloatingButton( watcherManager: WatcherManager ) { FloatingActionButton( @@ -27,12 +31,19 @@ fun AddButton( }) }, backgroundColor = UIColors.PRIMARY, + modifier = Modifier.border( + 4.dp, + UIColors.ORANGE, + MaterialTheme.shapes.small.copy( + CornerSize(percent = 50) + ) + ) ) { Icon( Icons.Rounded.PostAdd, tint = Color.White, contentDescription = "Add file...", - modifier = Modifier.size(28.dp) + modifier = Modifier.size(32.dp) ) } } \ No newline at end of file diff --git a/src/main/kotlin/xyz/atnrch/wrench/components/bottom/WatcherStatusButton.kt b/src/main/kotlin/xyz/atnrch/wrench/components/bottom/WatcherStatusButton.kt index c869ce9..4d65027 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/components/bottom/WatcherStatusButton.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/components/bottom/WatcherStatusButton.kt @@ -1,10 +1,9 @@ -package xyz.atnrch.wrench.components +package xyz.atnrch.wrench.components.bottom import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.Button import androidx.compose.material.ButtonDefaults @@ -13,72 +12,15 @@ import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Update import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.draw.shadow import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp -import xyz.atnrch.wrench.compose.SnackBarDataHolder import xyz.atnrch.wrench.ui.UIColors import xyz.atnrch.wrench.watcher.Watcher @Composable -fun BottomRow( - watcher: Watcher, - state: Boolean, - onStateChange: (state: Boolean) -> Unit, - snackBarDataHolder: SnackBarDataHolder -) { - val buttonColors = remember { arrayOf(UIColors.WATCHER_START_BG) } - - Spacer(Modifier.width(5.dp)) - /*Button( - { - if (state) { - buttonColors[0] = UIColors.WATCHER_START_BG - run { watcher.stop() } - onStateChange(false) - snackBarDataHolder.coroutineScope.launch { - snackBarDataHolder.scaffoldState.snackbarHostState.currentSnackbarData?.dismiss() - snackBarDataHolder.scaffoldState.snackbarHostState.showSnackbar( - message = "Stopped Watcher.", - duration = SnackbarDuration.Short, - ) - } - } else { - buttonColors[0] = UIColors.WATCHER_STOP_BG - run { watcher.start() } - onStateChange(true) - snackBarDataHolder.coroutineScope.launch { - snackBarDataHolder.scaffoldState.snackbarHostState.currentSnackbarData?.dismiss() - snackBarDataHolder.scaffoldState.snackbarHostState.showSnackbar( - message = "Started Watcher.", - duration = SnackbarDuration.Short - ) - } - } - }, - colors = ButtonDefaults.buttonColors(buttonColors[0], Color.White), - contentPadding = ButtonDefaults.ContentPadding, - shape = RoundedCornerShape(100), - modifier = Modifier.shadow(15.dp, RoundedCornerShape(100), false) - ) { - if (state) { - Icon( - Icons.Filled.Close, - tint = UIColors.WATCHER_STOP_FG, - contentDescription = "Stop", - modifier = Modifier.size(28.dp) - ) - } else { - Icon( - Icons.Filled.PlayArrow, - tint = UIColors.WATCHER_START_FG, - contentDescription = "Start", - modifier = Modifier.size(28.dp) - ) - } - }*/ +fun BottomRowNew(watcher: Watcher) { Button( onClick = { watcher.move() }, colors = ButtonDefaults.buttonColors(UIColors.PRIMARY, Color.White), @@ -101,5 +43,4 @@ fun BottomRow( Spacer(Modifier.size(ButtonDefaults.IconSpacing)) Text("Move files") } - } \ No newline at end of file diff --git a/src/main/kotlin/xyz/atnrch/wrench/watcher/Watcher.kt b/src/main/kotlin/xyz/atnrch/wrench/watcher/Watcher.kt index 5027f6b..cadd86e 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/watcher/Watcher.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/watcher/Watcher.kt @@ -1,11 +1,7 @@ package xyz.atnrch.wrench.watcher import androidx.compose.material.SnackbarDuration -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.cancel import kotlinx.coroutines.launch -import kotlinx.coroutines.swing.Swing import xyz.atnrch.wrench.compose.SnackBarDataHolder import xyz.atnrch.wrench.logger.Logger import java.nio.file.Files @@ -16,25 +12,8 @@ class Watcher( private val watcherManager: WatcherManager, private val snackBarDataHolder: SnackBarDataHolder ) { - companion object { - var WATCHING = false - } - - private var coroutineScope = CoroutineScope(Dispatchers.Swing) - - fun start() { - if (WATCHING) return - - coroutineScope.launch { - WATCHING = true - Logger.info("Started Watcher.") - while (WATCHING) { - move() - } - } - } - fun move() { + Logger.info("Moving files...") snackBarDataHolder.coroutineScope.launch { var filesTotal = 0 var foldersTotal = 0 @@ -42,32 +21,22 @@ class Watcher( filesTotal += 1 entry.map.forEach { val movePath = "${it.toAbsolutePath()}/${entry.file.name}" - println(movePath) Files.copy(entry.file.toPath(), Path.of(movePath), StandardCopyOption.REPLACE_EXISTING) foldersTotal += 1 } } - snackBarDataHolder.scaffoldState.snackbarHostState.currentSnackbarData?.dismiss() - println(foldersTotal) - if (foldersTotal < 1) { - println(foldersTotal) - snackBarDataHolder.scaffoldState.snackbarHostState.showSnackbar( - message = "No files to move, skipped.", - duration = SnackbarDuration.Short - ) + val logMessage: String = if (foldersTotal < 1) { + "No files to move!" } else { - snackBarDataHolder.scaffoldState.snackbarHostState.showSnackbar( - message = "Successfully moved $filesTotal ${if (filesTotal > 1) "files" else "file"} to $foldersTotal different ${if (foldersTotal > 1) "folders" else "folder"}", - duration = SnackbarDuration.Short - ) + "Successfully moved $filesTotal ${if (filesTotal > 1) "files" else "file"} to $foldersTotal different ${if (foldersTotal > 1) "folders" else "folder"}." } + Logger.info(logMessage) + Logger.info("Done moving files.") + snackBarDataHolder.scaffoldState.snackbarHostState.currentSnackbarData?.dismiss() + snackBarDataHolder.scaffoldState.snackbarHostState.showSnackbar( + message = logMessage, + duration = SnackbarDuration.Short + ) } } - - fun stop() { - Logger.info("Stopped Watcher.") - coroutineScope.cancel() - coroutineScope = CoroutineScope(Dispatchers.Main) - WATCHING = false - } } \ No newline at end of file