Skip to content

Commit 86cb541

Browse files
author
JojiiOfficial
committed
add delete files
1 parent afdf3fc commit 86cb541

File tree

3 files changed

+54
-16
lines changed

3 files changed

+54
-16
lines changed

dmfs/data.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ func (data *dataStruct) loadFiles(attributes libdatamanager.FileAttributes) ([]l
6666

6767
if time.Now().Unix()-5 > lastLoad {
6868
fmt.Println("fresh file load")
69+
data.lastFileload[attributes.Namespace] = time.Now().Unix()
6970
resp, err := data.libdm.ListFiles("", 0, false, attributes, 0)
7071
if err != nil {
7172
return nil, err
@@ -81,9 +82,6 @@ func (data *dataStruct) loadFiles(attributes libdatamanager.FileAttributes) ([]l
8182

8283
func (data *dataStruct) getLastFileLoad(namespace string) int64 {
8384
v, h := data.lastFileload[namespace]
84-
defer func() {
85-
data.lastFileload[namespace] = time.Now().Unix()
86-
}()
8785

8886
if !h {
8987
return 0

dmfs/fsGroup.go

Lines changed: 47 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package dmfs
33
import (
44
"context"
55
"fmt"
6+
"sync"
67
"syscall"
78

89
"github.com/DataManager-Go/libdatamanager"
@@ -31,6 +32,8 @@ type groupNode struct {
3132
isNoGroupPlaceholder bool
3233

3334
files []libdm.FileResponseItem
35+
36+
mx sync.Mutex
3437
}
3538

3639
// Create a new group node
@@ -89,6 +92,9 @@ func (groupNode *groupNode) loadfiles() error {
8992
}
9093

9194
func (groupNode *groupNode) Lookup(ctx context.Context, name string, out *fuse.EntryOut) (*fs.Inode, syscall.Errno) {
95+
groupNode.mx.Lock()
96+
defer groupNode.mx.Unlock()
97+
9298
file := groupNode.findFile(name)
9399
if file == nil {
94100
return nil, syscall.ENOENT
@@ -108,16 +114,6 @@ func (groupNode *groupNode) Lookup(ctx context.Context, name string, out *fuse.E
108114
return child, 0
109115
}
110116

111-
func (groupNode *groupNode) findFile(name string) *libdatamanager.FileResponseItem {
112-
for i := range groupNode.files {
113-
if groupNode.files[i].Name == name {
114-
return &groupNode.files[i]
115-
}
116-
}
117-
118-
return nil
119-
}
120-
121117
// Set file attributes for files
122118
func (groupNode *groupNode) setFileAttrs(file *libdatamanager.FileResponseItem, out *fuse.EntryOut) {
123119
out.Size = uint64(file.Size)
@@ -139,11 +135,49 @@ func (groupNode *groupNode) setFileAttrs(file *libdatamanager.FileResponseItem,
139135

140136
// Delete file
141137
func (groupNode *groupNode) Unlink(ctx context.Context, name string) syscall.Errno {
142-
file := groupNode.findFile(name)
143-
if file == nil {
138+
f := groupNode.findFile(name)
139+
if f == nil {
144140
return syscall.ENOENT
145141
}
142+
file := *f
143+
144+
// Remove local
145+
groupNode.removeFile(file)
146+
147+
// Make delete http request
148+
_, err := data.libdm.DeleteFile("", file.ID, false, groupNode.getRequestAttributes())
149+
if err != nil {
150+
printResponseError(err, "deleting file")
151+
return syscall.EIO
152+
}
153+
154+
// FIXME delete correctly from slice
146155

147-
// TODO delete file remotely
148156
return 0
149157
}
158+
159+
// Find file by name
160+
func (groupNode *groupNode) findFile(name string) *libdatamanager.FileResponseItem {
161+
for i := range groupNode.files {
162+
if groupNode.files[i].Name == name {
163+
return &groupNode.files[i]
164+
}
165+
}
166+
167+
return nil
168+
}
169+
170+
// Remove file from list
171+
func (groupNode *groupNode) removeFile(file libdatamanager.FileResponseItem) bool {
172+
groupNode.mx.Lock()
173+
defer groupNode.mx.Unlock()
174+
175+
for i := range groupNode.files {
176+
if groupNode.files[i].ID == file.ID {
177+
groupNode.files = removeFileByIndex(groupNode.files, i)
178+
return true
179+
}
180+
}
181+
182+
return false
183+
}

dmfs/utils.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package dmfs
33
import (
44
"fmt"
55

6+
"github.com/DataManager-Go/libdatamanager"
67
libdm "github.com/DataManager-Go/libdatamanager"
78
)
89

@@ -60,3 +61,8 @@ func removeFromStringSlice(s []string, sub string) []string {
6061
s[len(s)-1], s[i] = s[i], s[len(s)-1]
6162
return s[:len(s)-1]
6263
}
64+
65+
func removeFileByIndex(s []libdatamanager.FileResponseItem, index int) []libdatamanager.FileResponseItem {
66+
s[len(s)-1], s[index] = s[index], s[len(s)-1]
67+
return s[:len(s)-1]
68+
}

0 commit comments

Comments
 (0)