84 lines
1.8 KiB
Go
84 lines
1.8 KiB
Go
|
package webfilesystem
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
|
||
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
||
|
)
|
||
|
|
||
|
func (fs *WebFileSystem) NewRead(filePath string) (*WebFSFile, error) {
|
||
|
splittedPath := fs.SplitPath(filePath)
|
||
|
read := readStruct{
|
||
|
File: &WebFSFile{},
|
||
|
Filter: primitive.M{
|
||
|
"name": splittedPath[len(splittedPath)-1],
|
||
|
},
|
||
|
}
|
||
|
fileRaw, err := fs.readMongo(read)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
file := castToFile(fileRaw)
|
||
|
|
||
|
return file, nil
|
||
|
}
|
||
|
|
||
|
func (fs *WebFileSystem) NewCreateDirectory(dirPath string) (primitive.ObjectID, error) {
|
||
|
splittedPath := fs.SplitPath(dirPath)
|
||
|
parentPath := fs.GetParentPath(dirPath)
|
||
|
|
||
|
parentDirRaw, err := fs.NewRead(parentPath)
|
||
|
if err != nil {
|
||
|
return primitive.NilObjectID, err
|
||
|
}
|
||
|
|
||
|
newDir := WebFSFile{
|
||
|
MongoId: primitive.NewObjectID(),
|
||
|
Name: splittedPath[len(splittedPath)-1],
|
||
|
Type: "directory",
|
||
|
Data: FolderData{
|
||
|
Parent: parentDirRaw.MongoId,
|
||
|
Children: []primitive.ObjectID{},
|
||
|
},
|
||
|
Icon: "",
|
||
|
}
|
||
|
objectId, err := fs.writeMongo(newDir, parentPath)
|
||
|
if err != nil {
|
||
|
return primitive.NilObjectID, err
|
||
|
}
|
||
|
|
||
|
return objectId, nil
|
||
|
}
|
||
|
|
||
|
func (fs *WebFileSystem) NewList(dirPath string) ([]*WebFSFile, error) {
|
||
|
dirFile, err := fs.NewRead(dirPath)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if dirFile.Type != "directory" {
|
||
|
return nil, errors.New("file is not a directory")
|
||
|
}
|
||
|
|
||
|
fileData, err := castToDirectory(dirFile.Data)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
files := []*WebFSFile{}
|
||
|
for _, child := range fileData.Children {
|
||
|
file, err := fs.ReadByObjectID(child)
|
||
|
if err != nil {
|
||
|
println(err.Error())
|
||
|
continue
|
||
|
}
|
||
|
files = append(files, file)
|
||
|
}
|
||
|
return files, nil
|
||
|
}
|
||
|
|
||
|
func (fs *WebFileSystem) CreateFile(file *WebFSFile, parentPath string) error {
|
||
|
fs.writeMongo(*file, parentPath)
|
||
|
return errors.New("Not ready yet")
|
||
|
}
|