feat: remove the on/off watcher, too unreliable

This commit is contained in:
aro 2022-11-27 21:48:11 +01:00
parent 4e7f2b4a68
commit b56fb3b601
5 changed files with 39 additions and 124 deletions

View file

@ -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) }
}

View file

@ -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) }
}

View file

@ -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)
)
}
}

View file

@ -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")
}
}

View file

@ -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
}
}