Skip to content

Commit 5f15e43

Browse files
committed
Rough in meta subcommands
1 parent 380570f commit 5f15e43

File tree

2 files changed

+186
-0
lines changed

2 files changed

+186
-0
lines changed

cmd/note/main.go

+2
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ func main() {
5353
subcommands.Register(&NewCmd{editor, config, aapi}, "")
5454
subcommands.Register(&EditCmd{editor: editor, api: aapi}, "")
5555

56+
subcommands.Register(&MetaCmd{api: aapi}, "details")
57+
5658
flag.Parse()
5759
ctx := context.Background()
5860
os.Exit(int(subcommands.Execute(ctx)))

cmd/note/meta.go

+184
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"flag"
6+
"fmt"
7+
"log"
8+
9+
sdk "github.com/NoteOf/sdk-go"
10+
"github.com/google/subcommands"
11+
)
12+
13+
type MetaCmd struct {
14+
api *sdk.AuthenticatedAPI
15+
}
16+
17+
func (*MetaCmd) Name() string { return "meta" }
18+
func (*MetaCmd) Synopsis() string { return "subcommands for working with note metadata" }
19+
func (*MetaCmd) Usage() string {
20+
return `meta:
21+
subcommands for working with note metadata.
22+
`
23+
}
24+
25+
func (p *MetaCmd) SetFlags(f *flag.FlagSet) {}
26+
27+
func (p *MetaCmd) Execute(ctx context.Context, fs *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus {
28+
29+
cmdr := subcommands.NewCommander(fs, subcommands.DefaultCommander.Name()+" "+p.Name())
30+
cmdr.Register(&MetaSetCmd{api: p.api}, "")
31+
cmdr.Register(&MetaGetCmd{api: p.api}, "")
32+
33+
list := &MetaListCmd{api: p.api}
34+
cmdr.Register(list, "")
35+
cmdr.Register(subcommands.Alias("ls", list), "")
36+
37+
delete := &MetaDeleteCmd{api: p.api}
38+
cmdr.Register(delete, "")
39+
cmdr.Register(subcommands.Alias("rm", delete), "")
40+
cmdr.Register(cmdr.HelpCommand(), "")
41+
42+
return cmdr.Execute(ctx)
43+
}
44+
45+
type MetaSetCmd struct {
46+
api *sdk.AuthenticatedAPI
47+
}
48+
49+
func (*MetaSetCmd) Name() string { return "set" }
50+
func (*MetaSetCmd) Synopsis() string { return "set a note metadata item" }
51+
func (*MetaSetCmd) Usage() string {
52+
return `set <noteID> <key> <value>:
53+
set note metadata item by key.
54+
`
55+
}
56+
57+
func (p *MetaSetCmd) SetFlags(f *flag.FlagSet) {}
58+
59+
func (p *MetaSetCmd) Execute(_ context.Context, fs *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus {
60+
if fs.NArg() != 3 {
61+
log.Fatal("Expects exactly three arguments: <noteID> <key> <value>")
62+
}
63+
64+
i := fs.Arg(0)
65+
n, err := p.api.GetNote(i)
66+
if err != nil {
67+
log.Fatal(err)
68+
}
69+
70+
n.Meta[fs.Arg(1)] = fs.Arg(2)
71+
_, err = p.api.PutUpdateNote(n)
72+
if err != nil {
73+
log.Println(err)
74+
return subcommands.ExitFailure
75+
}
76+
77+
return subcommands.ExitSuccess
78+
}
79+
80+
type MetaGetCmd struct {
81+
api *sdk.AuthenticatedAPI
82+
}
83+
84+
func (*MetaGetCmd) Name() string { return "get" }
85+
func (*MetaGetCmd) Synopsis() string { return "get a note metadata item" }
86+
func (*MetaGetCmd) Usage() string {
87+
return `get <noteID> <key>:
88+
get note metadata item by key.
89+
`
90+
}
91+
92+
func (p *MetaGetCmd) SetFlags(f *flag.FlagSet) {}
93+
94+
func (p *MetaGetCmd) Execute(_ context.Context, fs *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus {
95+
if fs.NArg() != 2 {
96+
log.Fatal("Expects exactly two arguments: <noteID> <key>")
97+
}
98+
99+
i := fs.Arg(0)
100+
n, err := p.api.GetNote(i)
101+
if err != nil {
102+
log.Fatal(err)
103+
}
104+
105+
v, ok := n.Meta[fs.Arg(1)]
106+
if !ok {
107+
log.Println("key not found")
108+
return subcommands.ExitFailure
109+
}
110+
111+
fmt.Println(v)
112+
113+
return subcommands.ExitSuccess
114+
}
115+
116+
type MetaListCmd struct {
117+
api *sdk.AuthenticatedAPI
118+
}
119+
120+
func (*MetaListCmd) Name() string { return "list" }
121+
func (*MetaListCmd) Synopsis() string { return "list note metadata items" }
122+
func (*MetaListCmd) Usage() string {
123+
return `list <noteID>:
124+
list note metadata items.
125+
`
126+
}
127+
128+
func (p *MetaListCmd) SetFlags(f *flag.FlagSet) {}
129+
130+
func (p *MetaListCmd) Execute(_ context.Context, fs *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus {
131+
if fs.NArg() != 1 {
132+
log.Fatal("Expects exactly one argument: <noteID>")
133+
}
134+
135+
i := fs.Arg(0)
136+
n, err := p.api.GetNote(i)
137+
if err != nil {
138+
log.Fatal(err)
139+
}
140+
141+
for k, v := range n.Meta {
142+
fmt.Println(k, v)
143+
}
144+
145+
return subcommands.ExitSuccess
146+
}
147+
148+
type MetaDeleteCmd struct {
149+
api *sdk.AuthenticatedAPI
150+
}
151+
152+
func (*MetaDeleteCmd) Name() string { return "delete" }
153+
func (*MetaDeleteCmd) Synopsis() string { return "delete a note metadata item" }
154+
func (*MetaDeleteCmd) Usage() string {
155+
return `delete <noteID> <key>:
156+
delete note metadata item by key.
157+
`
158+
}
159+
160+
func (p *MetaDeleteCmd) SetFlags(f *flag.FlagSet) {}
161+
162+
func (p *MetaDeleteCmd) Execute(_ context.Context, fs *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus {
163+
if fs.NArg() != 2 {
164+
log.Fatal("Expects exactly two arguments: <noteID> <key>")
165+
}
166+
167+
i := fs.Arg(0)
168+
n, err := p.api.GetNote(i)
169+
if err != nil {
170+
log.Fatal(err)
171+
}
172+
173+
key := fs.Arg(1)
174+
delete(n.Meta, key)
175+
_, err = p.api.PutUpdateNote(n)
176+
if err != nil {
177+
log.Println(err)
178+
return subcommands.ExitFailure
179+
}
180+
181+
fmt.Println(key, "DELETED")
182+
183+
return subcommands.ExitSuccess
184+
}

0 commit comments

Comments
 (0)