Feat: alsit and emby add page query

pull/47/head
zijiren233 2 years ago
parent e6efe3d258
commit 539950a46f

@ -17,6 +17,7 @@ import (
"github.com/synctv-org/synctv/internal/settings"
"github.com/synctv-org/synctv/internal/vendor"
"github.com/synctv-org/synctv/server/model"
"github.com/synctv-org/synctv/utils"
"golang.org/x/exp/maps"
"google.golang.org/grpc/connectivity"
"gorm.io/gorm"
@ -97,7 +98,7 @@ func AdminSettings(ctx *gin.Context) {
func Users(ctx *gin.Context) {
// user := ctx.MustGet("user").(*op.User)
page, pageSize, err := GetPageAndPageSize(ctx)
page, pageSize, err := utils.GetPageAndMax(ctx)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
return
@ -176,7 +177,7 @@ func GetRoomUsers(ctx *gin.Context) {
return
}
page, pageSize, err := GetPageAndPageSize(ctx)
page, pageSize, err := utils.GetPageAndMax(ctx)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
return
@ -331,7 +332,7 @@ func UnBanUser(ctx *gin.Context) {
func Rooms(ctx *gin.Context) {
// user := ctx.MustGet("user").(*op.User)
page, pageSize, err := GetPageAndPageSize(ctx)
page, pageSize, err := utils.GetPageAndMax(ctx)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
return
@ -396,7 +397,7 @@ func GetUserRooms(ctx *gin.Context) {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorStringResp("user id error"))
return
}
page, pageSize, err := GetPageAndPageSize(ctx)
page, pageSize, err := utils.GetPageAndMax(ctx)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
return
@ -712,7 +713,7 @@ func AdminGetVendorBackends(ctx *gin.Context) {
// user := ctx.MustGet("user").(*op.User)
conns := vendor.LoadConns()
page, size, err := GetPageAndPageSize(ctx)
page, size, err := utils.GetPageAndMax(ctx)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
return

@ -30,20 +30,8 @@ import (
"golang.org/x/exp/maps"
)
func GetPageAndPageSize(ctx *gin.Context) (int, int, error) {
pageSize, err := strconv.Atoi(ctx.DefaultQuery("max", "10"))
if err != nil {
return 0, 0, errors.New("max must be a number")
}
page, err := strconv.Atoi(ctx.DefaultQuery("page", "1"))
if err != nil {
return 0, 0, errors.New("page must be a number")
}
return page, pageSize, nil
}
func GetPageItems[T any](ctx *gin.Context, items []T) ([]T, error) {
page, max, err := GetPageAndPageSize(ctx)
page, max, err := utils.GetPageAndMax(ctx)
if err != nil {
return nil, err
}
@ -55,7 +43,7 @@ func MovieList(ctx *gin.Context) {
room := ctx.MustGet("room").(*op.Room)
user := ctx.MustGet("user").(*op.User)
page, max, err := GetPageAndPageSize(ctx)
page, max, err := utils.GetPageAndMax(ctx)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
return
@ -147,7 +135,7 @@ func Movies(ctx *gin.Context) {
room := ctx.MustGet("room").(*op.Room)
user := ctx.MustGet("user").(*op.User)
page, max, err := GetPageAndPageSize(ctx)
page, max, err := utils.GetPageAndMax(ctx)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
return

@ -104,7 +104,7 @@ var roomHotCache = refreshcache.NewRefreshCache[[]*model.RoomListResp](func(cont
}, time.Second*3)
func RoomHotList(ctx *gin.Context) {
page, pageSize, err := GetPageAndPageSize(ctx)
page, pageSize, err := utils.GetPageAndMax(ctx)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
return
@ -123,7 +123,7 @@ func RoomHotList(ctx *gin.Context) {
}
func RoomList(ctx *gin.Context) {
page, pageSize, err := GetPageAndPageSize(ctx)
page, pageSize, err := utils.GetPageAndMax(ctx)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
return
@ -320,7 +320,7 @@ func SetRoomSetting(ctx *gin.Context) {
func RoomUsers(ctx *gin.Context) {
room := ctx.MustGet("room").(*op.Room)
page, pageSize, err := GetPageAndPageSize(ctx)
page, pageSize, err := utils.GetPageAndMax(ctx)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
return

@ -11,6 +11,7 @@ import (
"github.com/synctv-org/synctv/internal/provider/providers"
"github.com/synctv-org/synctv/server/middlewares"
"github.com/synctv-org/synctv/server/model"
"github.com/synctv-org/synctv/utils"
"gorm.io/gorm"
)
@ -73,7 +74,7 @@ func LogoutUser(ctx *gin.Context) {
func UserRooms(ctx *gin.Context) {
user := ctx.MustGet("user").(*op.User)
page, pageSize, err := GetPageAndPageSize(ctx)
page, pageSize, err := utils.GetPageAndMax(ctx)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
return

@ -13,6 +13,7 @@ import (
"github.com/synctv-org/synctv/internal/op"
"github.com/synctv-org/synctv/internal/vendor"
"github.com/synctv-org/synctv/server/model"
"github.com/synctv-org/synctv/utils"
"github.com/synctv-org/vendors/api/alist"
)
@ -58,6 +59,12 @@ func List(ctx *gin.Context) {
return
}
page, size, err := utils.GetPageAndMax(ctx)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
return
}
var cli = vendor.LoadAlistClient(ctx.Query("backend"))
data, err := cli.FsList(ctx, &alist.FsListReq{
Token: aucd.Token,
@ -65,9 +72,11 @@ func List(ctx *gin.Context) {
Path: req.Path,
Host: aucd.Host,
Refresh: req.Refresh,
Page: uint64(page),
PerPage: uint64(size),
})
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
ctx.AbortWithStatusJSON(http.StatusInternalServerError, model.NewApiErrorResp(err))
return
}

@ -8,6 +8,7 @@ import (
"github.com/synctv-org/synctv/internal/op"
"github.com/synctv-org/synctv/internal/vendor"
"github.com/synctv-org/synctv/server/model"
"github.com/synctv-org/synctv/utils"
"github.com/synctv-org/vendors/api/emby"
)
@ -41,14 +42,22 @@ func List(ctx *gin.Context) {
return
}
page, size, err := utils.GetPageAndMax(ctx)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
return
}
cli := vendor.LoadEmbyClient(ctx.Query("backend"))
data, err := cli.FsList(ctx, &emby.FsListReq{
Host: aucd.Host,
Path: req.Path,
Token: aucd.ApiKey,
Host: aucd.Host,
Path: req.Path,
Token: aucd.ApiKey,
Limit: uint64(size),
StartIndex: uint64((page - 1) * size),
})
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
ctx.AbortWithStatusJSON(http.StatusInternalServerError, model.NewApiErrorResp(err))
return
}

@ -2,6 +2,7 @@ package utils
import (
"encoding/hex"
"errors"
"fmt"
"math/rand"
"net"
@ -14,6 +15,7 @@ import (
"sync"
"sync/atomic"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
"github.com/synctv-org/synctv/cmd/flags"
"github.com/zijiren233/go-colorable"
@ -359,3 +361,23 @@ func ForceColor() bool {
})
return needColor
}
func GetPageAndMax(ctx *gin.Context) (page int, max int, err error) {
max, err = strconv.Atoi(ctx.DefaultQuery("max", "10"))
if err != nil {
return 0, 0, errors.New("max must be a number")
}
page, err = strconv.Atoi(ctx.DefaultQuery("page", "1"))
if err != nil {
return 0, 0, errors.New("page must be a number")
}
if page <= 0 {
page = 1
}
if max <= 0 {
max = 10
} else if max > 100 {
max = 100
}
return
}

Loading…
Cancel
Save