files: change directory monitor return
Only return the outermost monitor, hook onto that to cancel the nested ones Also use the monitor flags in hopes of it actually picking up changes to files (it doesnt)
This commit is contained in:
parent
630885daab
commit
619508b16c
2 changed files with 8 additions and 8 deletions
|
|
@ -58,10 +58,10 @@ export default class Wallpapers extends GObject.Object {
|
|||
|
||||
let monitors = config.paths
|
||||
.get()
|
||||
.flatMap(p => monitorDirectory(p.path, () => this.update().catch(console.error), p.recursive));
|
||||
.map(p => monitorDirectory(p.path, () => this.update().catch(console.error), p.recursive));
|
||||
config.paths.subscribe(v => {
|
||||
for (const m of monitors) m.cancel();
|
||||
monitors = v.flatMap(p => monitorDirectory(p.path, () => this.update().catch(console.error), p.recursive));
|
||||
monitors = v.map(p => monitorDirectory(p.path, () => this.update().catch(console.error), p.recursive));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,18 +78,18 @@ export const bindCurrentTime = (
|
|||
|
||||
export const monitorDirectory = (path: string, callback: (path: string) => void, recursive?: boolean) => {
|
||||
const file = Gio.file_new_for_path(path.replace("~", HOME));
|
||||
const monitor = file.monitor_directory(null, null);
|
||||
const monitor = file.monitor_directory(Gio.FileMonitorFlags.WATCH_MOUNTS | Gio.FileMonitorFlags.WATCH_MOVES, null);
|
||||
monitor.connect("changed", callback);
|
||||
|
||||
const monitors = [monitor];
|
||||
|
||||
if (recursive) {
|
||||
const enumerator = file.enumerate_children("standard::*", null, null);
|
||||
let child;
|
||||
while ((child = enumerator.next_file(null)))
|
||||
if (child.get_file_type() === Gio.FileType.DIRECTORY)
|
||||
monitors.push(...monitorDirectory(`${path}/${child.get_name()}`, callback, recursive));
|
||||
if (child.get_file_type() === Gio.FileType.DIRECTORY) {
|
||||
const m = monitorDirectory(`${path}/${child.get_name()}`, callback, recursive);
|
||||
monitor.connect("notify::cancelled", () => m.cancel());
|
||||
}
|
||||
}
|
||||
|
||||
return monitors;
|
||||
return monitor;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue