mirror of https://github.com/cloudreve/Cloudreve
76 lines
2.0 KiB
Go
76 lines
2.0 KiB
Go
package explorer
|
|
|
|
import (
|
|
"github.com/cloudreve/Cloudreve/v4/application/dependency"
|
|
"github.com/cloudreve/Cloudreve/v4/inventory"
|
|
"github.com/cloudreve/Cloudreve/v4/inventory/types"
|
|
"github.com/cloudreve/Cloudreve/v4/pkg/filemanager/fs"
|
|
"github.com/cloudreve/Cloudreve/v4/pkg/serializer"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/samber/lo"
|
|
)
|
|
|
|
type (
|
|
PinFileService struct {
|
|
Uri string `json:"uri" binding:"required"`
|
|
Name string `json:"name"`
|
|
}
|
|
PinFileParameterCtx struct{}
|
|
)
|
|
|
|
// PinFileService pins new uri to sidebar
|
|
func (service *PinFileService) PinFile(c *gin.Context) error {
|
|
dep := dependency.FromContext(c)
|
|
user := inventory.UserFromContext(c)
|
|
userClient := dep.UserClient()
|
|
|
|
uri, err := fs.NewUriFromString(service.Uri)
|
|
if err != nil {
|
|
return serializer.NewError(serializer.CodeParamErr, "unknown uri", err)
|
|
}
|
|
|
|
uriStr := uri.String()
|
|
for _, pin := range user.Settings.Pined {
|
|
if pin.Uri == uriStr {
|
|
if pin.Name != service.Name {
|
|
return serializer.NewError(serializer.CodeObjectExist, "uri already pinned with different name", nil)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
}
|
|
|
|
user.Settings.Pined = append(user.Settings.Pined, types.PinedFile{
|
|
Uri: uriStr,
|
|
Name: service.Name,
|
|
})
|
|
if err := userClient.SaveSettings(c, user); err != nil {
|
|
return serializer.NewError(serializer.CodeDBError, "failed to save settings", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// UnpinFile removes uri from sidebar
|
|
func (service *PinFileService) UnpinFile(c *gin.Context) error {
|
|
dep := dependency.FromContext(c)
|
|
user := inventory.UserFromContext(c)
|
|
userClient := dep.UserClient()
|
|
|
|
uri, err := fs.NewUriFromString(service.Uri)
|
|
if err != nil {
|
|
return serializer.NewError(serializer.CodeParamErr, "unknown uri", err)
|
|
}
|
|
|
|
uriStr := uri.String()
|
|
user.Settings.Pined = lo.Filter(user.Settings.Pined, func(pin types.PinedFile, index int) bool {
|
|
return pin.Uri != uriStr
|
|
})
|
|
|
|
if err := userClient.SaveSettings(c, user); err != nil {
|
|
return serializer.NewError(serializer.CodeDBError, "failed to save settings", err)
|
|
}
|
|
|
|
return nil
|
|
}
|