Update folder entries
This commit is contained in:
parent
b75c58cc64
commit
ee701d9e02
@ -182,7 +182,7 @@ func (cp *corsoProgress) FinishedFile(relativePath string, err error) {
|
|||||||
parent = nextParent
|
parent = nextParent
|
||||||
}
|
}
|
||||||
|
|
||||||
cp.deets.AddFolders(folders)
|
cp.deets.AddFoldersForItem(folders, d.info)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Kopia interface function used as a callback when kopia finishes hashing a file.
|
// Kopia interface function used as a callback when kopia finishes hashing a file.
|
||||||
|
|||||||
@ -111,8 +111,8 @@ type Details struct {
|
|||||||
DetailsModel
|
DetailsModel
|
||||||
|
|
||||||
// internal
|
// internal
|
||||||
mu sync.Mutex `json:"-"`
|
mu sync.Mutex `json:"-"`
|
||||||
knownFolders map[string]struct{} `json:"-"`
|
knownFolders map[string]FolderEntry `json:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Details) Add(repoRef, shortRef, parentRef string, updated bool, info ItemInfo) {
|
func (d *Details) Add(repoRef, shortRef, parentRef string, updated bool, info ItemInfo) {
|
||||||
@ -127,23 +127,11 @@ func (d *Details) Add(repoRef, shortRef, parentRef string, updated bool, info It
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddFolders adds entries for the given folders. It skips adding entries that
|
func (d *Details) Finalize() {
|
||||||
// have been added by previous calls.
|
|
||||||
func (d *Details) AddFolders(folders []FolderEntry) {
|
|
||||||
d.mu.Lock()
|
d.mu.Lock()
|
||||||
defer d.mu.Unlock()
|
defer d.mu.Unlock()
|
||||||
|
|
||||||
if d.knownFolders == nil {
|
for _, folder := range d.knownFolders {
|
||||||
d.knownFolders = map[string]struct{}{}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, folder := range folders {
|
|
||||||
if _, ok := d.knownFolders[folder.ShortRef]; ok {
|
|
||||||
// Entry already exists, nothing to do.
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
d.knownFolders[folder.ShortRef] = struct{}{}
|
|
||||||
d.Entries = append(d.Entries, DetailsEntry{
|
d.Entries = append(d.Entries, DetailsEntry{
|
||||||
RepoRef: folder.RepoRef,
|
RepoRef: folder.RepoRef,
|
||||||
ShortRef: folder.ShortRef,
|
ShortRef: folder.ShortRef,
|
||||||
@ -153,6 +141,29 @@ func (d *Details) AddFolders(folders []FolderEntry) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AddFoldersForItem adds entries for the given folders. It skips adding entries that
|
||||||
|
// have been added by previous calls.
|
||||||
|
func (d *Details) AddFoldersForItem(folders []FolderEntry, itemInfo ItemInfo) {
|
||||||
|
d.mu.Lock()
|
||||||
|
defer d.mu.Unlock()
|
||||||
|
|
||||||
|
if d.knownFolders == nil {
|
||||||
|
d.knownFolders = make(map[string]FolderEntry)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, folder := range folders {
|
||||||
|
if existing, ok := d.knownFolders[folder.ShortRef]; ok {
|
||||||
|
folder = existing
|
||||||
|
}
|
||||||
|
folder.Info.Folder.Size += itemInfo.Exchange.Size
|
||||||
|
if folder.Info.Folder.Modified.Before(itemInfo.Exchange.Modified) {
|
||||||
|
folder.Info.Folder.Modified = itemInfo.Exchange.Modified
|
||||||
|
}
|
||||||
|
|
||||||
|
d.knownFolders[folder.ShortRef] = folder
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
// Entry
|
// Entry
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
|
|||||||
@ -222,6 +222,12 @@ func (suite *DetailsUnitSuite) TestDetailsModel_Items() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite *DetailsUnitSuite) TestDetails_AddFolders() {
|
func (suite *DetailsUnitSuite) TestDetails_AddFolders() {
|
||||||
|
itemInfo := details.ItemInfo{
|
||||||
|
Exchange: &details.ExchangeInfo{
|
||||||
|
Size: 1,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
table := []struct {
|
table := []struct {
|
||||||
name string
|
name string
|
||||||
folders []details.FolderEntry
|
folders []details.FolderEntry
|
||||||
@ -234,11 +240,17 @@ func (suite *DetailsUnitSuite) TestDetails_AddFolders() {
|
|||||||
RepoRef: "rr1",
|
RepoRef: "rr1",
|
||||||
ShortRef: "sr1",
|
ShortRef: "sr1",
|
||||||
ParentRef: "pr1",
|
ParentRef: "pr1",
|
||||||
|
Info: details.ItemInfo{
|
||||||
|
Folder: &details.FolderInfo{},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
RepoRef: "rr2",
|
RepoRef: "rr2",
|
||||||
ShortRef: "sr2",
|
ShortRef: "sr2",
|
||||||
ParentRef: "pr2",
|
ParentRef: "pr2",
|
||||||
|
Info: details.ItemInfo{
|
||||||
|
Folder: &details.FolderInfo{},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
expectedShortRefs: []string{"sr1", "sr2"},
|
expectedShortRefs: []string{"sr1", "sr2"},
|
||||||
@ -250,21 +262,33 @@ func (suite *DetailsUnitSuite) TestDetails_AddFolders() {
|
|||||||
RepoRef: "rr1",
|
RepoRef: "rr1",
|
||||||
ShortRef: "sr1",
|
ShortRef: "sr1",
|
||||||
ParentRef: "pr1",
|
ParentRef: "pr1",
|
||||||
|
Info: details.ItemInfo{
|
||||||
|
Folder: &details.FolderInfo{},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
RepoRef: "rr2",
|
RepoRef: "rr2",
|
||||||
ShortRef: "sr2",
|
ShortRef: "sr2",
|
||||||
ParentRef: "pr2",
|
ParentRef: "pr2",
|
||||||
|
Info: details.ItemInfo{
|
||||||
|
Folder: &details.FolderInfo{},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
RepoRef: "rr1",
|
RepoRef: "rr1",
|
||||||
ShortRef: "sr1",
|
ShortRef: "sr1",
|
||||||
ParentRef: "pr1",
|
ParentRef: "pr1",
|
||||||
|
Info: details.ItemInfo{
|
||||||
|
Folder: &details.FolderInfo{},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
RepoRef: "rr3",
|
RepoRef: "rr3",
|
||||||
ShortRef: "sr3",
|
ShortRef: "sr3",
|
||||||
ParentRef: "pr3",
|
ParentRef: "pr3",
|
||||||
|
Info: details.ItemInfo{
|
||||||
|
Folder: &details.FolderInfo{},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
expectedShortRefs: []string{"sr1", "sr2", "sr3"},
|
expectedShortRefs: []string{"sr1", "sr2", "sr3"},
|
||||||
@ -273,8 +297,8 @@ func (suite *DetailsUnitSuite) TestDetails_AddFolders() {
|
|||||||
for _, test := range table {
|
for _, test := range table {
|
||||||
suite.T().Run(test.name, func(t *testing.T) {
|
suite.T().Run(test.name, func(t *testing.T) {
|
||||||
deets := details.Details{}
|
deets := details.Details{}
|
||||||
deets.AddFolders(test.folders)
|
deets.AddFoldersForItem(test.folders, itemInfo)
|
||||||
|
deets.Finalize()
|
||||||
assert.Len(t, deets.Entries, len(test.expectedShortRefs))
|
assert.Len(t, deets.Entries, len(test.expectedShortRefs))
|
||||||
|
|
||||||
for _, e := range deets.Entries {
|
for _, e := range deets.Entries {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user