code.gitea.io/gitea@v1.21.7/routers/web/user/task.go (about)

     1  // Copyright 2020 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package user
     5  
     6  import (
     7  	"net/http"
     8  	"strconv"
     9  
    10  	admin_model "code.gitea.io/gitea/models/admin"
    11  	"code.gitea.io/gitea/modules/context"
    12  	"code.gitea.io/gitea/modules/json"
    13  )
    14  
    15  // TaskStatus returns task's status
    16  func TaskStatus(ctx *context.Context) {
    17  	task, opts, err := admin_model.GetMigratingTaskByID(ctx, ctx.ParamsInt64("task"), ctx.Doer.ID)
    18  	if err != nil {
    19  		if admin_model.IsErrTaskDoesNotExist(err) {
    20  			ctx.JSON(http.StatusNotFound, map[string]any{
    21  				"error": "task `" + strconv.FormatInt(ctx.ParamsInt64("task"), 10) + "` does not exist",
    22  			})
    23  			return
    24  		}
    25  		ctx.JSON(http.StatusInternalServerError, map[string]any{
    26  			"err": err,
    27  		})
    28  		return
    29  	}
    30  
    31  	message := task.Message
    32  
    33  	if task.Message != "" && task.Message[0] == '{' {
    34  		// assume message is actually a translatable string
    35  		var translatableMessage admin_model.TranslatableMessage
    36  		if err := json.Unmarshal([]byte(message), &translatableMessage); err != nil {
    37  			translatableMessage = admin_model.TranslatableMessage{
    38  				Format: "migrate.migrating_failed.error",
    39  				Args:   []any{task.Message},
    40  			}
    41  		}
    42  		message = ctx.Tr(translatableMessage.Format, translatableMessage.Args...)
    43  	}
    44  
    45  	ctx.JSON(http.StatusOK, map[string]any{
    46  		"status":    task.Status,
    47  		"message":   message,
    48  		"repo-id":   task.RepoID,
    49  		"repo-name": opts.RepoName,
    50  		"start":     task.StartTime,
    51  		"end":       task.EndTime,
    52  	})
    53  }