Init V4 community edition (#2265)
* Init V4 community edition * Init V4 community edition
This commit is contained in:
75
service/explorer/pin.go
Normal file
75
service/explorer/pin.go
Normal file
@@ -0,0 +1,75 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user