diff --git a/models/repo_watch.go b/models/repo_watch.go index 485874301..573a2d78a 100644 --- a/models/repo_watch.go +++ b/models/repo_watch.go @@ -183,6 +183,7 @@ func notifyWatchers(e Engine, actions ...*Action) error { var permCode []bool var permIssue []bool var permPR []bool + var permDataset []bool for _, act := range actions { repoChanged := repo == nil || repo.ID != act.RepoID @@ -234,12 +235,14 @@ func notifyWatchers(e Engine, actions ...*Action) error { permCode = make([]bool, len(watchers)) permIssue = make([]bool, len(watchers)) permPR = make([]bool, len(watchers)) + permDataset = make([]bool, len(watchers)) for i, watcher := range watchers { user, err := getUserByID(e, watcher.UserID) if err != nil { permCode[i] = false permIssue[i] = false permPR[i] = false + permDataset[i] = false continue } perm, err := getUserRepoPermission(e, repo, user) @@ -247,11 +250,13 @@ func notifyWatchers(e Engine, actions ...*Action) error { permCode[i] = false permIssue[i] = false permPR[i] = false + permDataset[i] = false continue } permCode[i] = perm.CanRead(UnitTypeCode) permIssue[i] = perm.CanRead(UnitTypeIssues) permPR[i] = perm.CanRead(UnitTypePullRequests) + permDataset[i] = perm.CanRead(UnitTypeDatasets) } } @@ -276,6 +281,10 @@ func notifyWatchers(e Engine, actions ...*Action) error { if !permPR[i] { continue } + case ActionDatasetRecommended: + if !permDataset[i] { + continue + } } if _, err = e.InsertOne(act); err != nil { diff --git a/models/task_config.go b/models/task_config.go index 8650851be..0d9d21187 100644 --- a/models/task_config.go +++ b/models/task_config.go @@ -21,7 +21,7 @@ const ( TaskCreateNewModelTask TaskType = "CreateNewModelTask" TaskBindWechat TaskType = "BindWechat" TaskCreateCloudbrainTask TaskType = "CreateCloudbrainTask" - TaskDatasetRecommended TaskType = "DatasetRecommended " + TaskDatasetRecommended TaskType = "DatasetRecommended" TaskCreateImage TaskType = "CreateImage" TaskImageRecommend TaskType = "ImageRecommend" TaskChangeUserAvatar TaskType = "ChangeUserAvatar" diff --git a/modules/notification/action/action.go b/modules/notification/action/action.go index 84181c555..5142369e3 100644 --- a/modules/notification/action/action.go +++ b/modules/notification/action/action.go @@ -363,22 +363,14 @@ func (t *actionNotifier) NotifyWechatBind(user *models.User, wechatOpenId string func (t *actionNotifier) NotifyDatasetRecommend(optUser *models.User, dataset *models.Dataset, action string) { switch action { case "recommend": - users, err := models.GetAllDatasetContributorByDatasetId(dataset.ID) - if err != nil { - return - } - var actions = make([]*models.Action, 0) - for _, user := range users { - actions = append(actions, &models.Action{ - OpType: models.ActionDatasetRecommended, - ActUserID: user.ID, - ActUser: user, - RepoID: dataset.RepoID, - Repo: dataset.Repo, - Content: fmt.Sprintf("%d|%s", dataset.ID, dataset.Title), - }) + act := &models.Action{ + OpType: models.ActionDatasetRecommended, + ActUserID: dataset.UserID, + RepoID: dataset.RepoID, + Content: fmt.Sprintf("%d|%s", dataset.ID, dataset.Title), } - if err := models.NotifyWatchers(actions...); err != nil { + + if err := models.NotifyWatchers(act); err != nil { log.Error("notifyWatchers: %v", err) } } diff --git a/services/task/task.go b/services/task/task.go index 5a2028572..ed320a3c5 100644 --- a/services/task/task.go +++ b/services/task/task.go @@ -6,6 +6,8 @@ import ( "code.gitea.io/gitea/services/reward" "code.gitea.io/gitea/services/reward/limiter" "fmt" + "strconv" + "strings" ) func Accomplish(action models.Action) { @@ -20,7 +22,8 @@ func Accomplish(action models.Action) { log.Info("Accomplish finished.taskType is not exist.action.ID=%d", action.ID) return } - + actions := make([]models.Action, 0) + actions = append(actions, action) switch taskType { //only creating public repo can be rewarded case models.TaskCreatePublicRepo: @@ -43,9 +46,35 @@ func Accomplish(action models.Action) { log.Debug("the wechat account has been bound before,wechatOpenId = %s", action.Content) return } + case models.TaskDatasetRecommended: + datasetIdStr := strings.Split(action.Content, "|")[0] + datasetId, _ := strconv.ParseInt(datasetIdStr, 10, 64) + users, err := models.GetAllDatasetContributorByDatasetId(datasetId) + if err != nil { + return + } + for _, user := range users { + if user.ID == action.ActUserID { + continue + } + actions = append(actions, models.Action{ + ID: action.ID, + OpType: models.ActionDatasetRecommended, + ActUserID: action.UserID, + UserID: user.ID, + RepoID: action.RepoID, + Content: action.Content, + }) + } + + } + batchAccomplish(taskType, actions...) +} +func batchAccomplish(taskType models.TaskType, actions ...models.Action) { + for _, act := range actions { + go accomplish(act, taskType) } - go accomplish(action, taskType) } func accomplish(action models.Action, taskType models.TaskType) error { @@ -55,7 +84,7 @@ func accomplish(action models.Action, taskType models.TaskType) error { log.Error("PANIC:%v", combinedErr) } }() - userId := action.ActUserID + userId := action.UserID //get task config config, err := GetTaskConfig(string(taskType))