File watcher now also watched new added directories
This commit is contained in:
parent
aae80445f9
commit
33eb0f3c8a
@ -1,9 +1,12 @@
|
|||||||
package app.git
|
package app.git
|
||||||
|
|
||||||
import app.extensions.systemSeparator
|
import app.extensions.systemSeparator
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||||
import kotlinx.coroutines.flow.SharedFlow
|
import kotlinx.coroutines.flow.SharedFlow
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.nio.file.*
|
import java.nio.file.*
|
||||||
import java.nio.file.StandardWatchEventKinds.*
|
import java.nio.file.StandardWatchEventKinds.*
|
||||||
@ -47,7 +50,7 @@ class FileChangesWatcher @Inject constructor() {
|
|||||||
|
|
||||||
var key: WatchKey
|
var key: WatchKey
|
||||||
while (watchService.take().also { key = it } != null) {
|
while (watchService.take().also { key = it } != null) {
|
||||||
key.pollEvents()
|
val events = key.pollEvents()
|
||||||
|
|
||||||
println("Polled events on dir ${keys[key]}")
|
println("Polled events on dir ${keys[key]}")
|
||||||
|
|
||||||
@ -59,6 +62,27 @@ class FileChangesWatcher @Inject constructor() {
|
|||||||
|
|
||||||
_changesNotifier.emit(hasGitDirectoryChanged)
|
_changesNotifier.emit(hasGitDirectoryChanged)
|
||||||
|
|
||||||
|
// Check if new directories have been added to add them to the watchService
|
||||||
|
launch(Dispatchers.IO) {
|
||||||
|
for (event in events) {
|
||||||
|
if (event.kind() == ENTRY_CREATE) {
|
||||||
|
try {
|
||||||
|
val eventFile = File(dir.toAbsolutePath().toString() + systemSeparator + event.context())
|
||||||
|
|
||||||
|
if (eventFile.isDirectory) {
|
||||||
|
val eventPath = eventFile.toPath()
|
||||||
|
println("New directory $eventFile detected, adding it to watchService")
|
||||||
|
val watchKey =
|
||||||
|
eventPath.register(watchService, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY)
|
||||||
|
keys[watchKey] = eventPath
|
||||||
|
}
|
||||||
|
} catch (ex: Exception) {
|
||||||
|
ex.printStackTrace()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
key.reset()
|
key.reset()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -152,6 +152,8 @@ class TabViewModel @Inject constructor(
|
|||||||
launch {
|
launch {
|
||||||
fileChangesWatcher.changesNotifier.collect { latestUpdateChangedGitDir ->
|
fileChangesWatcher.changesNotifier.collect { latestUpdateChangedGitDir ->
|
||||||
if (!tabState.operationRunning) { // Only update if there isn't any process running
|
if (!tabState.operationRunning) { // Only update if there isn't any process running
|
||||||
|
println("Detected changes in the repository's directory")
|
||||||
|
|
||||||
if(latestUpdateChangedGitDir) {
|
if(latestUpdateChangedGitDir) {
|
||||||
hasGitDirChanged = true
|
hasGitDirChanged = true
|
||||||
}
|
}
|
||||||
@ -181,6 +183,8 @@ class TabViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
lastNotify = currentTimeMillis
|
lastNotify = currentTimeMillis
|
||||||
|
} else {
|
||||||
|
println("Ignoring changed occurred during operation running...")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user