diff --git a/internal/files/set.go b/internal/files/set.go index 11c28480..112c7386 100644 --- a/internal/files/set.go +++ b/internal/files/set.go @@ -42,6 +42,7 @@ type Set struct { mutex sync.Mutex folder string db *leveldb.DB + blockmap *BlockMap } func NewSet(folder string, db *leveldb.DB) *Set { @@ -49,6 +50,7 @@ func NewSet(folder string, db *leveldb.DB) *Set { localVersion: make(map[protocol.DeviceID]uint64), folder: folder, db: db, + blockmap: NewBlockMap(db, folder), } var deviceID protocol.DeviceID @@ -80,6 +82,10 @@ func (s *Set) Replace(device protocol.DeviceID, fs []protocol.FileInfo) { // Reset the local version if all files were removed. s.localVersion[device] = 0 } + if device == protocol.LocalDeviceID { + s.blockmap.Drop() + s.blockmap.Add(fs) + } } func (s *Set) ReplaceWithDelete(device protocol.DeviceID, fs []protocol.FileInfo) { @@ -92,6 +98,10 @@ func (s *Set) ReplaceWithDelete(device protocol.DeviceID, fs []protocol.FileInfo if lv := ldbReplaceWithDelete(s.db, []byte(s.folder), device[:], fs); lv > s.localVersion[device] { s.localVersion[device] = lv } + if device == protocol.LocalDeviceID { + s.blockmap.Drop() + s.blockmap.Add(fs) + } } func (s *Set) Update(device protocol.DeviceID, fs []protocol.FileInfo) { @@ -104,6 +114,9 @@ func (s *Set) Update(device protocol.DeviceID, fs []protocol.FileInfo) { if lv := ldbUpdate(s.db, []byte(s.folder), device[:], fs); lv > s.localVersion[device] { s.localVersion[device] = lv } + if device == protocol.LocalDeviceID { + s.blockmap.Update(fs) + } } func (s *Set) WithNeed(device protocol.DeviceID, fn fileIterator) { @@ -179,6 +192,11 @@ func ListFolders(db *leveldb.DB) []string { // database. func DropFolder(db *leveldb.DB, folder string) { ldbDropFolder(db, []byte(folder)) + bm := &BlockMap{ + db: db, + folder: folder, + } + bm.Drop() } func normalizeFilenames(fs []protocol.FileInfo) {