From fd95e5475640bcf8b7163cf980822a3078808b7f Mon Sep 17 00:00:00 2001 From: Yuan Si Date: Mon, 10 Apr 2023 06:17:57 +0800 Subject: [PATCH] Exclude downloaded packages Signed-off-by: Yuan Si --- handler/download.go | 11 ++++++++++- model/download.go | 10 +++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/handler/download.go b/handler/download.go index e4e46af..5408f4a 100644 --- a/handler/download.go +++ b/handler/download.go @@ -10,6 +10,7 @@ import ( "honoka-chan/model" "honoka-chan/utils" "net/http" + "strings" "time" "github.com/gin-gonic/gin" @@ -146,7 +147,15 @@ func DownloadBatchHandler(ctx *gin.Context) { pkgList := []model.BatchResult{} if downloadReq.ClientVersion == PackageVersion && CdnUrl != "" { pkgType := downloadReq.PackageType - stmt, err := db.Prepare("SELECT pkg_id,pkg_order,pkg_size FROM download_db WHERE pkg_type = ? ORDER BY pkg_id ASC, pkg_order ASC") + exPkgId := "" + if len(downloadReq.ExcludedPackageIds) > 0 { + // https://stackoverflow.com/a/37533144 + exPkgId = strings.Trim(strings.Join(strings.Fields(fmt.Sprint(downloadReq.ExcludedPackageIds)), ","), "[]") + + exPkgId = fmt.Sprintf("AND pkg_id NOT IN (%s)", exPkgId) + } + fmt.Println(exPkgId) + stmt, err := db.Prepare("SELECT pkg_id,pkg_order,pkg_size FROM download_db WHERE pkg_type = ? " + exPkgId + " ORDER BY pkg_id ASC, pkg_order ASC") if err != nil { panic(err) } diff --git a/model/download.go b/model/download.go index e58c102..dee06dd 100644 --- a/model/download.go +++ b/model/download.go @@ -23,11 +23,11 @@ type AdditionalResp struct { } type BatchReq struct { - ClientVersion string `json:"client_version"` - Os string `json:"os"` - PackageType int `json:"package_type"` - ExcludedPackageIds []interface{} `json:"excluded_package_ids"` - CommandNum string `json:"commandNum"` + ClientVersion string `json:"client_version"` + Os string `json:"os"` + PackageType int `json:"package_type"` + ExcludedPackageIds []int `json:"excluded_package_ids"` + CommandNum string `json:"commandNum"` } type BatchResult struct {