forked from TrueCloudLab/rclone
union: fix ChangeNotify to support multiple remotes
To correctly support multiple remotes, each remote has to receive a value on the input channel.
This commit is contained in:
parent
364fca5cea
commit
1e2676df26
1 changed files with 15 additions and 0 deletions
|
@ -152,11 +152,26 @@ func (f *Fs) DirMove(src fs.Fs, srcRemote, dstRemote string) error {
|
||||||
// regulary. When the channel gets closed, the implemantion
|
// regulary. When the channel gets closed, the implemantion
|
||||||
// should stop polling and release resources.
|
// should stop polling and release resources.
|
||||||
func (f *Fs) ChangeNotify(fn func(string, fs.EntryType), ch <-chan time.Duration) {
|
func (f *Fs) ChangeNotify(fn func(string, fs.EntryType), ch <-chan time.Duration) {
|
||||||
|
var remoteChans []chan time.Duration
|
||||||
|
|
||||||
for _, remote := range f.remotes {
|
for _, remote := range f.remotes {
|
||||||
if ChangeNotify := remote.Features().ChangeNotify; ChangeNotify != nil {
|
if ChangeNotify := remote.Features().ChangeNotify; ChangeNotify != nil {
|
||||||
|
ch := make(chan time.Duration)
|
||||||
|
remoteChans = append(remoteChans, ch)
|
||||||
ChangeNotify(fn, ch)
|
ChangeNotify(fn, ch)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
for i := range ch {
|
||||||
|
for _, c := range remoteChans {
|
||||||
|
c <- i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, c := range remoteChans {
|
||||||
|
close(c)
|
||||||
|
}
|
||||||
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
// DirCacheFlush resets the directory cache - used in testing
|
// DirCacheFlush resets the directory cache - used in testing
|
||||||
|
|
Loading…
Add table
Reference in a new issue