feat(dbfs): set default share shortcut for new users

This commit is contained in:
Aaron Liu
2025-05-23 15:39:57 +08:00
parent 9f5ebe11b6
commit c6ee3e5dcd
7 changed files with 104 additions and 7 deletions

View File

@@ -719,7 +719,7 @@ func (f *DBFS) getFileByPath(ctx context.Context, navigator Navigator, path *fs.
// initFs initializes the file system for the user.
func (f *DBFS) initFs(ctx context.Context, uid int) error {
f.l.Info("Initialize database file system for user %q", f.user.Email)
_, err := f.fileClient.CreateFolder(ctx, nil,
parent, err := f.fileClient.CreateFolder(ctx, nil,
&inventory.CreateFolderParameters{
Owner: uid,
Name: inventory.RootFolderName,
@@ -728,6 +728,58 @@ func (f *DBFS) initFs(ctx context.Context, uid int) error {
return fmt.Errorf("failed to create root folder: %w", err)
}
// Create default symbolics
symbolics := f.settingClient.DefaultSymbolics(ctx)
if len(symbolics) == 0 {
return nil
}
user, err := f.userClient.GetLoginUserByID(ctx, uid)
if err != nil {
return fmt.Errorf("failed to get user: %w", err)
}
parent.SetOwner(user)
ctx = context.WithValue(ctx, inventory.LoadShareFile{}, true)
ctx = context.WithValue(ctx, inventory.LoadShareUser{}, true)
shares, err := f.shareClient.GetByIDs(ctx, symbolics)
if err != nil {
return fmt.Errorf("failed to get shares: %w", err)
}
for _, share := range shares {
if share.Edges.File == nil || share.Edges.User == nil {
continue
}
shareOwner := hashid.EncodeUserID(f.hasher, share.Edges.User.ID)
shareUri := fs.NewShareUri(hashid.EncodeShareID(f.hasher, share.ID), share.Password)
shareUriParsed, err := fs.NewUriFromString(shareUri)
if err != nil {
continue
}
if share.Edges.File.Type == int(types.FileTypeFile) {
shareUriParsed.Join(share.Edges.File.Name)
}
parentFile := newFile(nil, parent)
parentFile.OwnerModel = user
if _, err := f.createFile(ctx, parentFile, share.Edges.File.Name, types.FileType(share.Edges.File.Type), &dbfsOption{
FsOption: &fs.FsOption{
Metadata: map[string]string{
MetadataSharedRedirect: shareUriParsed.String(),
MetadataSharedOwner: shareOwner,
},
},
errOnConflict: true,
isSymbolicLink: true,
}); err != nil {
f.l.Warning("Failed to create default symbolic link %q for user %q: %s", shareUriParsed, uid, err)
}
}
return nil
}

View File

@@ -53,6 +53,7 @@ const (
MetadataSharedRedirect = MetadataSysPrefix + "shared_redirect"
MetadataRestoreUri = MetadataSysPrefix + "restore_uri"
MetadataExpectedCollectTime = MetadataSysPrefix + "expected_collect_time"
MetadataSharedOwner = MetadataSysPrefix + "shared_owner"
ThumbMetadataPrefix = "thumb:"
ThumbDisabledKey = ThumbMetadataPrefix + "disabled"