diff --git a/models/attachment.go b/models/attachment.go index af7cafe53..d482a9018 100755 --- a/models/attachment.go +++ b/models/attachment.go @@ -18,6 +18,7 @@ import ( "code.gitea.io/gitea/modules/timeutil" gouuid "github.com/satori/go.uuid" + "xorm.io/builder" "xorm.io/xorm" ) @@ -55,6 +56,19 @@ type AttachmentUsername struct { Name string } +type AttachmentInfo struct { + Attachment `xorm:"extends"` + Repo *Repository `xorm:"extends"` +} + +type AttachmentsOptions struct { + ListOptions + DatasetID int8 + DecompressState int + Type int + NeedRepoInfo bool +} + func (a *Attachment) AfterUpdate() { if a.DatasetID > 0 { datasetIsPublicCount, err := x.Where("dataset_id = ? AND is_private = ?", a.DatasetID, false).Count(new(Attachment)) @@ -504,3 +518,71 @@ func GetAttachmentSizeByDatasetID(datasetID int64) (int64, error) { func GetAllAttachmentSize() (int64, error) { return x.SumInt(&Attachment{}, "size") } + +func Attachments(opts *AttachmentsOptions) ([]*AttachmentInfo, int64, error) { + sess := x.NewSession() + defer sess.Close() + + var cond = builder.NewCond() + if opts.DatasetID > 0 { + cond = cond.And( + builder.Eq{"attachment.dataset_id": opts.DatasetID}, + ) + } + + if opts.DecompressState > 0 { + cond = cond.And( + builder.Eq{"attachment.decompress_state": opts.DecompressState}, + ) + } + + if (opts.Type) >= 0 { + cond = cond.And( + builder.Eq{"cloudbrain.type": opts.Type}, + ) + } + + var count int64 + var err error + if opts.DatasetID > 0 { + count, err = sess.Where(cond).Count(new(Attachment)) + } + + if err != nil { + return nil, 0, fmt.Errorf("Count: %v", err) + } + + if opts.Page >= 0 && opts.PageSize > 0 { + var start int + if opts.Page == 0 { + start = 0 + } else { + start = (opts.Page - 1) * opts.PageSize + } + sess.Limit(opts.PageSize, start) + } + + sess.OrderBy("attachment.created_unix DESC") + attachments := make([]*AttachmentInfo, 0, setting.UI.IssuePagingNum) + if err := sess.Table(&Attachment{}).Where(cond). + Find(&attachments); err != nil { + return nil, 0, fmt.Errorf("Find: %v", err) + } + + if opts.NeedRepoInfo { + for _, attachment := range attachments { + dataset, err := GetDatasetByID(attachment.DatasetID) + if err != nil { + return nil, 0, fmt.Errorf("GetDatasetByID failed error: %v", err) + } + repo, err := GetRepositoryByID(dataset.RepoID) + if err == nil { + attachment.Repo = repo + } else { + return nil, 0, fmt.Errorf("GetRepositoryByID failed error: %v", err) + } + } + } + + return attachments, count, nil +} diff --git a/routers/repo/dataset.go b/routers/repo/dataset.go index c3f4de52a..7b3625d49 100755 --- a/routers/repo/dataset.go +++ b/routers/repo/dataset.go @@ -1,6 +1,7 @@ package repo import ( + "encoding/json" "net/http" "regexp" "sort" @@ -19,6 +20,7 @@ const ( tplIndex base.TplName = "repo/datasets/index" tplDatasetCreate base.TplName = "repo/datasets/create" tplDatasetEdit base.TplName = "repo/datasets/edit" + taskstplIndex base.TplName = "repo/datasets/tasks/index" ) var titlePattern = regexp.MustCompile(`^[A-Za-z0-9-_\\.]{1,100}$`) @@ -280,3 +282,35 @@ func DatasetAction(ctx *context.Context) { } } + +func TasksDatasetIndex(ctx *context.Context) { + page := ctx.QueryInt("page") + // repo := ctx.Repo.Repository + + datasets, count, err := models.Attachments(&models.AttachmentsOptions{ + ListOptions: models.ListOptions{ + Page: page, + PageSize: setting.UI.IssuePagingNum, + }, + Type: models.TypeCloudBrainTwo, + }) + if err != nil { + ctx.ServerError("datasets", err) + return + } + + data, err := json.Marshal(datasets) + if err != nil { + log.Error("json.Marshal failed:", err.Error()) + ctx.JSON(200, map[string]string{ + "result_code": "-1", + "error_msg": err.Error(), + "data": "", + }) + return + } + ctx.JSON(200, map[string]string{ + "data": string(data), + "count": strconv.FormatInt(count, 10), + }) +} diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 1bf80ec82..84d01cdb1 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -6,13 +6,14 @@ package routes import ( "bytes" - "code.gitea.io/gitea/routers/authentication" "encoding/gob" "net/http" "path" "text/template" "time" + "code.gitea.io/gitea/routers/authentication" + "code.gitea.io/gitea/modules/cloudbrain" "code.gitea.io/gitea/routers/operation" @@ -984,6 +985,7 @@ func RegisterRoutes(m *macaron.Macaron) { m.Post("/create", reqRepoDatasetWriter, bindIgnErr(auth.CreateDatasetForm{}), repo.CreateDatasetPost) m.Get("/edit/:id", reqRepoDatasetWriter, repo.EditDataset) m.Post("/edit", reqRepoDatasetWriter, bindIgnErr(auth.EditDatasetForm{}), repo.EditDatasetPost) + m.Get("/tasks", reqRepoDatasetReader, repo.TasksDatasetIndex) m.Group("/dirs", func() { m.Get("/:uuid", reqRepoDatasetReader, repo.DirIndex) diff --git a/templates/repo/datasets/tasks/index.tmpl b/templates/repo/datasets/tasks/index.tmpl new file mode 100644 index 000000000..e69de29bb