add subcomands for notifications #283
|
@ -91,3 +91,14 @@ var IssuePRFlags = append([]cli.Flag{
|
||||||
&PaginationPageFlag,
|
&PaginationPageFlag,
|
||||||
&PaginationLimitFlag,
|
&PaginationLimitFlag,
|
||||||
}, AllDefaultFlags...)
|
}, AllDefaultFlags...)
|
||||||
|
|
||||||
|
// NotificationFlags defines flags that should be available on notifications.
|
||||||
|
var NotificationFlags = append([]cli.Flag{
|
||||||
|
&cli.BoolFlag{
|
||||||
|
Name: "all",
|
||||||
|
Aliases: []string{"a"},
|
||||||
|
Usage: "Show notifications across all your repositories instead of the current repository only",
|
||||||
|
},
|
||||||
|
&PaginationPageFlag,
|
||||||
|
&PaginationLimitFlag,
|
||||||
|
}, AllDefaultFlags...)
|
||||||
|
|
|
@ -5,7 +5,9 @@
|
||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"code.gitea.io/tea/cmd/flags"
|
"log"
|
||||||
|
|
||||||
|
"code.gitea.io/tea/cmd/notifications"
|
||||||
"code.gitea.io/tea/modules/context"
|
"code.gitea.io/tea/modules/context"
|
||||||
"code.gitea.io/tea/modules/print"
|
"code.gitea.io/tea/modules/print"
|
||||||
|
|
||||||
|
@ -18,27 +20,26 @@ var CmdNotifications = cli.Command{
|
||||||
Name: "notifications",
|
Name: "notifications",
|
||||||
Aliases: []string{"notification", "n"},
|
Aliases: []string{"notification", "n"},
|
||||||
Usage: "Show notifications",
|
Usage: "Show notifications",
|
||||||
Description: "Show notifications, by default based of the current repo and unread one",
|
Description: "Show notifications, by default based of the current repo",
|
||||||
Action: runNotifications,
|
Action: runNotifications,
|
||||||
|
Subcommands: []*cli.Command{
|
||||||
|
¬ifications.CmdNotificationsList,
|
||||||
|
¬ifications.CmdNotificationsPinned,
|
||||||
|
¬ifications.CmdNotificationsRead,
|
||||||
|
¬ifications.CmdNotificationsUnread,
|
||||||
|
},
|
||||||
Flags: append([]cli.Flag{
|
Flags: append([]cli.Flag{
|
||||||
&cli.BoolFlag{
|
&cli.BoolFlag{
|
||||||
Name: "all",
|
Name: "all",
|
||||||
Aliases: []string{"a"},
|
Aliases: []string{"a"},
|
||||||
Usage: "show all notifications of related gitea instance",
|
Usage: "show all notifications of related gitea instance",
|
||||||
},
|
},
|
||||||
&cli.BoolFlag{
|
&cli.StringFlag{
|
||||||
Name: "read",
|
Name: "state",
|
||||||
Aliases: []string{"rd"},
|
Usage: "set milestone state (default is open)",
|
||||||
Usage: "show read notifications instead unread",
|
DefaultText: "open",
|
||||||
},
|
},
|
||||||
&cli.BoolFlag{
|
}),
|
||||||
Name: "pinned",
|
|
||||||
Aliases: []string{"pd"},
|
|
||||||
Usage: "show pinned notifications instead unread",
|
|
||||||
},
|
|
||||||
&flags.PaginationPageFlag,
|
|
||||||
&flags.PaginationLimitFlag,
|
|
||||||
}, flags.AllDefaultFlags...),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func runNotifications(cmd *cli.Context) error {
|
func runNotifications(cmd *cli.Context) error {
|
||||||
|
|||||||
|
@ -80,3 +81,8 @@ func runNotifications(cmd *cli.Context) error {
|
||||||
print.NotificationsList(news, ctx.Output, ctx.Bool("all"))
|
print.NotificationsList(news, ctx.Output, ctx.Bool("all"))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func runNotificationsDetails(ctx *cli.Context) error {
|
||||||
|
log.Fatal("Use tea notif --help to see all available commands.")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
61
cmd/notifications/list.go
Normal file
61
cmd/notifications/list.go
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
// Copyright 2020 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 (
|
||||||
|
"code.gitea.io/sdk/gitea"
|
||||||
|
"fmt"
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 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,
|
||||||
noerw marked this conversation as resolved
Outdated
noerw
commented
```diff
- Usage: "List notifications....",
+ Usage: "List notifications",
```
|
|||||||
|
// Flags: flags.NotificationFlags,
|
||||||
|
Flags: append([]cli.Flag{
|
||||||
|
&cli.BoolFlag{
|
||||||
noerw marked this conversation as resolved
Outdated
noerw
commented
Please move these common flags into Please move these common flags into `cmd/flags/flags.go` as `NotificationFlags`
khmarbaise
commented
Good idea not even realized that. Thanks. Good idea not even realized that. Thanks.
|
|||||||
|
Name: "all",
|
||||||
|
Aliases: []string{"a"},
|
||||||
|
Usage: "show all notifications of related gitea instance",
|
||||||
noerw marked this conversation as resolved
Outdated
noerw
commented
```diff
- Usage: "show all notifications of related gitea instance",
+ Usage: "Show notifications across all your repos instead of the current repo only",
```
|
|||||||
|
},
|
||||||
khmarbaise marked this conversation as resolved
Outdated
6543
commented
@khmarbaise can you move task.ListNotifications back to cmd/notification module I dont see a reason to add cli & flag dependency into task module @khmarbaise can you move task.ListNotifications back to cmd/notification module
I dont see a reason to add **cli** & **flag** dependency into task module
khmarbaise
commented
So making a file So making a file `notifications_list.go` which contains that. I will do and change it accordingly.
khmarbaise
commented
Done as suggested. Done as suggested.
|
|||||||
|
&cli.StringFlag{
|
||||||
|
Name: "state",
|
||||||
|
Usage: "set notification state (default is all), pinned,read,unread",
|
||||||
noerw marked this conversation as resolved
Outdated
noerw
commented
- Are valid states really called all/open/closed? all/read/unread?
- Doesn't this flag duplicate functionality from the subcommands read/unread?
- s/milestone/notification
khmarbaise
commented
Yes of course. Yes of course.
|
|||||||
|
DefaultText: "xxx",
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
|
||||||
|
// notif ls
|
||||||
|
// notif ls --state all
|
||||||
|
// notif ls --state pinned
|
||||||
|
// notif ls --state read
|
||||||
|
// notif ls --state unread
|
||||||
|
|
||||||
|
// RunNotificationsList list notifications
|
||||||
|
func RunNotificationsList(ctx *cli.Context) error {
|
||||||
|
// --states all
|
||||||
|
|
||||||
|
states := []gitea.NotifyStatus{}
|
||||||
|
|
||||||
|
switch ctx.String("state") {
|
||||||
|
case "all":
|
||||||
|
states = []gitea.NotifyStatus{gitea.NotifyStatusPinned, gitea.NotifyStatusRead, gitea.NotifyStatusUnread}
|
||||||
|
case "pinned":
|
||||||
|
states = []gitea.NotifyStatus{gitea.NotifyStatusPinned}
|
||||||
|
case "read":
|
||||||
|
states = []gitea.NotifyStatus{gitea.NotifyStatusRead}
|
||||||
|
case "unread":
|
||||||
|
states = []gitea.NotifyStatus{gitea.NotifyStatusUnread}
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("invalid notification state type '%s'. valid: all, pinned,read,unread", ctx.String("state"))
|
||||||
|
}
|
||||||
|
|
||||||
|
return listNotifications(ctx, states)
|
||||||
|
}
|
54
cmd/notifications/notifications_list.go
Normal file
54
cmd/notifications/notifications_list.go
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
// Copyright 2020 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 (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"code.gitea.io/tea/cmd/flags"
|
||||||
|
"code.gitea.io/tea/modules/config"
|
||||||
|
"code.gitea.io/tea/modules/print"
|
||||||
|
|
||||||
|
"code.gitea.io/sdk/gitea"
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
//listNotifications will get the notifications based on status
|
||||||
|
func listNotifications(ctx *cli.Context, status []gitea.NotifyStatus) error {
|
||||||
|
|
||||||
|
//This enforces pagination.
|
||||||
|
listOpts := flags.GetListOptions(ctx)
|
||||||
|
if listOpts.Page == 0 {
|
||||||
|
listOpts.Page = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
var news []*gitea.NotificationThread
|
||||||
|
var err error
|
||||||
|
|
||||||
|
var allRelated = ctx.Bool("all")
|
||||||
|
fmt.Printf("allRelated: %t\n", allRelated)
|
||||||
|
|
||||||
|
login, owner, repo := config.InitCommand(flags.GlobalRepoValue, flags.GlobalLoginValue, flags.GlobalRemoteValue)
|
||||||
|
if allRelated {
|
||||||
|
fmt.Printf("login: %s owner: %s repo:%s\n", login.Name, owner, repo)
|
||||||
|
news, _, err = login.Client().ListNotifications(gitea.ListNotificationOptions{
|
||||||
|
ListOptions: listOpts,
|
||||||
|
Status: status,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
fmt.Printf("login: %s owner: %s repo:%s\n", login.Name, owner, repo)
|
||||||
|
news, _, err = login.Client().ListRepoNotifications(owner, repo, gitea.ListNotificationOptions{
|
||||||
|
ListOptions: listOpts,
|
||||||
|
Status: status,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
print.NotificationsList(news, flags.GlobalOutputValue, allRelated)
|
||||||
|
return nil
|
||||||
|
}
|
27
cmd/notifications/pinned.go
Normal file
27
cmd/notifications/pinned.go
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
// Copyright 2020 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 (
|
||||||
|
"code.gitea.io/sdk/gitea"
|
||||||
|
"code.gitea.io/tea/cmd/flags"
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CmdNotificationsPinned represents a sub command of notifications to list pinned notifications
|
||||||
|
var CmdNotificationsPinned = cli.Command{
|
||||||
|
Name: "pinned",
|
||||||
|
Aliases: []string{"pd"},
|
||||||
|
Usage: "show pinned notifications",
|
||||||
noerw marked this conversation as resolved
Outdated
noerw
commented
"pin" makes it sound like a verb, not a read list-command. "pin" makes it sound like a verb, not a read list-command.
I'd drop this alias
khmarbaise
commented
What about with an alias What about with an alias `pd` instead?
|
|||||||
|
Description: `show pinned notifications`,
|
||||||
|
Action: RunNotificationsPinned,
|
||||||
|
Flags: flags.NotificationFlags,
|
||||||
|
}
|
||||||
|
|
||||||
|
// RunNotificationsPinned will show notifications with status pinned.
|
||||||
|
func RunNotificationsPinned(ctx *cli.Context) error {
|
||||||
|
var statuses = []gitea.NotifyStatus{gitea.NotifyStatusPinned}
|
||||||
|
return listNotifications(ctx, statuses)
|
||||||
|
}
|
27
cmd/notifications/read.go
Normal file
27
cmd/notifications/read.go
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
// Copyright 2020 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 (
|
||||||
|
"code.gitea.io/sdk/gitea"
|
||||||
|
"code.gitea.io/tea/cmd/flags"
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CmdNotificationsRead represents a sub command of notifications to list read notifications
|
||||||
|
var CmdNotificationsRead = cli.Command{
|
||||||
|
Name: "read",
|
||||||
|
Aliases: []string{},
|
||||||
|
Usage: "show read notifications instead",
|
||||||
|
Description: `show read notifications instead`,
|
||||||
|
Action: RunNotificationsRead,
|
||||||
|
Flags: flags.NotificationFlags,
|
||||||
|
}
|
||||||
|
|
||||||
|
// RunNotificationsRead will show notifications with status read.
|
||||||
|
func RunNotificationsRead(ctx *cli.Context) error {
|
||||||
|
var statuses = []gitea.NotifyStatus{gitea.NotifyStatusRead}
|
||||||
|
return listNotifications(ctx, statuses)
|
||||||
|
}
|
27
cmd/notifications/unread.go
Normal file
27
cmd/notifications/unread.go
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
// Copyright 2020 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 (
|
||||||
|
"code.gitea.io/sdk/gitea"
|
||||||
|
"code.gitea.io/tea/cmd/flags"
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CmdNotificationsUnread represents a sub command of notifications to list unread notifications.
|
||||||
|
var CmdNotificationsUnread = cli.Command{
|
||||||
|
Name: "unread",
|
||||||
|
Aliases: []string{},
|
||||||
|
Usage: "show unread notifications",
|
||||||
|
Description: `show unread notifications`,
|
||||||
|
Action: RunNotificationsUnread,
|
||||||
|
Flags: flags.NotificationFlags,
|
||||||
|
}
|
||||||
|
|
||||||
|
// RunNotificationsUnread will show notifications with status unread.
|
||||||
|
func RunNotificationsUnread(ctx *cli.Context) error {
|
||||||
|
var statuses = []gitea.NotifyStatus{gitea.NotifyStatusUnread}
|
||||||
|
return listNotifications(ctx, statuses)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user
I would print
use --help to see all options