feat: remove the on/off watcher, too unreliable
This commit is contained in:
parent
4e7f2b4a68
commit
b56fb3b601
5 changed files with 39 additions and 124 deletions
|
@ -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) }
|
||||
|
||||
}
|
|
@ -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) }
|
||||
}
|
|
@ -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)
|
||||
)
|
||||
}
|
||||
}
|
|
@ -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")
|
||||
}
|
||||
|
||||
}
|
|
@ -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 {
|
||||
"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 = "Successfully moved $filesTotal ${if (filesTotal > 1) "files" else "file"} to $foldersTotal different ${if (foldersTotal > 1) "folders" else "folder"}",
|
||||
message = logMessage,
|
||||
duration = SnackbarDuration.Short
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun stop() {
|
||||
Logger.info("Stopped Watcher.")
|
||||
coroutineScope.cancel()
|
||||
coroutineScope = CoroutineScope(Dispatchers.Main)
|
||||
WATCHING = false
|
||||
}
|
||||
}
|
Reference in a new issue