mirror of
				https://gitea.com/gitea/tea.git
				synced 2025-10-31 09:15:26 +01:00 
			
		
		
		
	Implement notification subcommands (#389)
- [x] enhance notification listing - add `--states` and `--type` filters - toggle per-user or per-repo listing via `--mine` flag - print more fields - [x] add subcommands to mark notifications as read, unread, pinned, unpinned. operates on - all notifications matching the `--state` and `--mine` filter flags, or - a notification specified by ID. - [ ] ~~add a `--fields` flag for notifications listing.~~ *not in this PR* - [ ] ~~interactive mode~~ *not in this PR*. this would go well together with #324 fixes #243, fixes #155 based on initial work in #283 and #386, but opening a new PR for @6543 to review as I changed quite a lot --- ### ⚠️ breaking ⚠️ - `tea notifications --all` has moved to `tea notifications --mine` - `tea notifications` now only works with the context of a remote repo. To run this outside of a local git dir, run either `tea n --mine` or `tea n --repo <my/repo>` --- Co-authored-by: Karl Heinz Marbaise <kama@soebes.de> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: Norwin Roosen <git@nroo.de> Reviewed-on: https://gitea.com/gitea/tea/pulls/389 Reviewed-by: 6543 <6543@obermui.de> Reviewed-by: Alexey 〒erentyev <axifive@noreply.gitea.io> Co-authored-by: Norwin <noerw@noreply.gitea.io> Co-committed-by: Norwin <noerw@noreply.gitea.io>
This commit is contained in:
		
							
								
								
									
										89
									
								
								cmd/notifications/list.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								cmd/notifications/list.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| // Copyright 2021 The Gitea Authors. All rights reserved. | ||||
| // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package notifications | ||||
|  | ||||
| import ( | ||||
| 	"log" | ||||
|  | ||||
| 	"code.gitea.io/tea/cmd/flags" | ||||
| 	"code.gitea.io/tea/modules/context" | ||||
| 	"code.gitea.io/tea/modules/print" | ||||
|  | ||||
| 	"code.gitea.io/sdk/gitea" | ||||
| 	"github.com/urfave/cli/v2" | ||||
| ) | ||||
|  | ||||
| var notifTypeFlag = flags.NewCsvFlag("types", "subject types to filter by", []string{"t"}, | ||||
| 	[]string{"issue", "pull", "repository", "commit"}, nil) | ||||
|  | ||||
| // CmdNotificationsList represents a sub command of notifications to list notifications | ||||
| var CmdNotificationsList = cli.Command{ | ||||
| 	Name:        "ls", | ||||
| 	Aliases:     []string{"list"}, | ||||
| 	Usage:       "List notifications", | ||||
| 	Description: `List notifications`, | ||||
| 	Action:      RunNotificationsList, | ||||
| 	Flags:       append([]cli.Flag{notifTypeFlag}, flags.NotificationFlags...), | ||||
| } | ||||
|  | ||||
| // RunNotificationsList list notifications | ||||
| func RunNotificationsList(ctx *cli.Context) error { | ||||
| 	var states []gitea.NotifyStatus | ||||
| 	statesStr, err := flags.NotificationStateFlag.GetValues(ctx) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	for _, s := range statesStr { | ||||
| 		states = append(states, gitea.NotifyStatus(s)) | ||||
| 	} | ||||
|  | ||||
| 	var types []gitea.NotifySubjectType | ||||
| 	typesStr, err := notifTypeFlag.GetValues(ctx) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	for _, t := range typesStr { | ||||
| 		types = append(types, gitea.NotifySubjectType(t)) | ||||
| 	} | ||||
|  | ||||
| 	return listNotifications(ctx, states, types) | ||||
| } | ||||
|  | ||||
| // listNotifications will get the notifications based on status and subject type | ||||
| func listNotifications(cmd *cli.Context, status []gitea.NotifyStatus, subjects []gitea.NotifySubjectType) error { | ||||
| 	var news []*gitea.NotificationThread | ||||
| 	var err error | ||||
|  | ||||
| 	ctx := context.InitCommand(cmd) | ||||
| 	client := ctx.Login.Client() | ||||
| 	all := ctx.Bool("mine") | ||||
|  | ||||
| 	// This enforces pagination (see https://github.com/go-gitea/gitea/issues/16733) | ||||
| 	listOpts := ctx.GetListOptions() | ||||
| 	if listOpts.Page == 0 { | ||||
| 		listOpts.Page = 1 | ||||
| 	} | ||||
|  | ||||
| 	if all { | ||||
| 		news, _, err = client.ListNotifications(gitea.ListNotificationOptions{ | ||||
| 			ListOptions:  listOpts, | ||||
| 			Status:       status, | ||||
| 			SubjectTypes: subjects, | ||||
| 		}) | ||||
| 	} else { | ||||
| 		ctx.Ensure(context.CtxRequirement{RemoteRepo: true}) | ||||
| 		news, _, err = client.ListRepoNotifications(ctx.Owner, ctx.Repo, gitea.ListNotificationOptions{ | ||||
| 			ListOptions:  listOpts, | ||||
| 			Status:       status, | ||||
| 			SubjectTypes: subjects, | ||||
| 		}) | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		log.Fatal(err) | ||||
| 	} | ||||
|  | ||||
| 	print.NotificationsList(news, ctx.Output, all) | ||||
| 	return nil | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Norwin
					Norwin