-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnew.go
106 lines (100 loc) · 2.45 KB
/
new.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package ma
import (
"fmt"
"github.com/bzimmer/smugmug"
"github.com/rs/zerolog/log"
"github.com/urfave/cli/v2"
)
func knew(c *cli.Context) error {
var url string
name := c.Args().First()
switch c.NArg() {
case 1:
url = smugmug.URLName(name, runtime(c).Language)
case 2:
url = c.Args().Get(1)
if err := validate(url); err != nil {
return err
}
}
nodelet := &smugmug.Nodelet{
Name: name,
Type: titlecase(c, c.Command.Name),
URLName: url,
Privacy: c.String("privacy"),
}
client := runtime(c).Smugmug()
node, err := client.Node.Create(c.Context, c.String("parent"), nodelet)
if err != nil {
return err
}
runtime(c).Metrics.IncrCounter([]string{"album", c.Command.Name}, 1)
msg := log.Info().
Str("name", node.Name).
Str("nodeID", node.NodeID).
Str("nodeURI", node.URI).
Str("urlName", node.URLName).
Str("webURI", node.WebURI)
if nodelet.Type == smugmug.TypeAlbum {
node, err = client.Node.Node(c.Context, node.NodeID, smugmug.WithExpansions("Album"))
if err != nil {
return err
}
msg = msg.Str("albumKey", node.Album.AlbumKey)
}
msg.Msg(c.Command.Name)
return runtime(c).Encoder.Encode(node)
}
func CommandNew() *cli.Command {
before := func(c *cli.Context) error {
n := c.NArg()
if n == 0 || n > 2 {
return fmt.Errorf("expected one or two arguments, not {%d}", n)
}
switch p := c.String("privacy"); p {
case "":
case "Unlisted", "Private", "Public":
default:
return fmt.Errorf("privacy one of [Unlisted, Private, Public], not {%s}", p)
}
return nil
}
return &cli.Command{
Name: "new",
HelpName: "new",
Aliases: []string{"create"},
Usage: "Create a new node",
Description: "Create a new album or folder",
ArgsUsage: "<node name> [<node url>]",
Flags: []cli.Flag{
&cli.StringFlag{
Name: "parent",
Required: true,
Usage: "the parent node at which the new node will be rooted",
},
&cli.StringFlag{
Name: "privacy",
Value: "",
Usage: "the privacy settings for the new album",
},
},
Subcommands: []*cli.Command{
{
Name: "album",
HelpName: "album",
Usage: "create a new album",
Description: "create a new album for images",
Before: before,
Action: knew,
},
{
Name: "folder",
HelpName: "folder",
Usage: "create a new folder",
Description: "create a new folder for albums",
Before: before,
Action: knew,
},
},
}
}