Skip to content

Commit 8f5618d

Browse files
committed
Detect game URL from .codegame.json in share commands
1 parent 637ae40 commit 8f5618d

File tree

5 files changed

+62
-29
lines changed

5 files changed

+62
-29
lines changed

cmd/share.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cmd
22

33
import (
4+
"github.com/code-game-project/go-utils/cgfile"
45
"github.com/spf13/cobra"
56
)
67

@@ -10,6 +11,20 @@ var shareCmd = &cobra.Command{
1011
Short: "A CLI interface for share.code-game.org.",
1112
}
1213

14+
func findGameURL() string {
15+
projectRoot, err := cgfile.FindProjectRoot()
16+
if err != nil {
17+
return ""
18+
}
19+
20+
config, err := cgfile.LoadCodeGameFile(projectRoot)
21+
if err != nil {
22+
return ""
23+
}
24+
25+
return config.URL
26+
}
27+
1328
func init() {
1429
rootCmd.AddCommand(shareCmd)
1530
}

cmd/share_game.go

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
"github.com/Bananenpro/cli"
99
"github.com/code-game-project/go-utils/sessions"
10+
"github.com/google/uuid"
1011
"github.com/spf13/cobra"
1112
)
1213

@@ -19,41 +20,57 @@ var shareGameCmd = &cobra.Command{
1920
var gameURL string
2021
var gameId string
2122

23+
cgConfURL := findGameURL()
24+
2225
if len(args) > 0 {
2326
gameURL = args[0]
2427
if len(args) > 1 {
2528
gameId = args[1]
29+
} else if _, err := uuid.Parse(gameURL); err == nil && cgConfURL != "" {
30+
gameId = gameURL
31+
gameURL = ""
2632
}
2733
}
2834

2935
var err error
3036
if gameURL == "" {
31-
fromSession, err := cli.YesNo("Select game URL from session?", true)
32-
abort(err)
33-
if fromSession {
34-
urls, err := sessions.ListGames()
35-
abortf("Failed to load games: %s", err)
36-
selected, err := cli.Select("Game URL:", urls)
37-
abort(err)
38-
gameURL = urls[selected]
37+
if cgConfURL != "" {
38+
gameURL = cgConfURL
39+
cli.Print("Game URL: %s", gameURL)
3940
} else {
40-
gameURL, err = cli.Input("Game URL:")
41+
fromSession, err := cli.YesNo("Select game URL from session?", true)
4142
abort(err)
43+
if fromSession {
44+
urls, err := sessions.ListGames()
45+
abortf("Failed to load games: %s", err)
46+
selected, err := cli.Select("Game URL:", urls)
47+
abort(err)
48+
gameURL = urls[selected]
49+
cli.Print("Game URL: %s", gameURL)
50+
} else {
51+
gameURL, err = cli.Input("Game URL:")
52+
abort(err)
53+
}
4254
}
4355
}
4456

4557
if gameId == "" {
46-
fromSession, err := cli.YesNo("Select game ID from session?", true)
47-
abort(err)
48-
if fromSession {
49-
usernames, err := sessions.ListUsernames(gameURL)
50-
abortf("Failed to load usernames: %s", err)
51-
selected, err := cli.Select("Username:", usernames)
58+
usernames, err := sessions.ListUsernames(gameURL)
59+
if len(usernames) > 0 {
60+
fromSession, err := cli.YesNo("Select game ID from session?", true)
5261
abort(err)
53-
session, err := sessions.LoadSession(gameURL, usernames[selected])
54-
abortf("Failed to load session: %s", err)
55-
gameId = session.GameId
56-
} else {
62+
if fromSession {
63+
usernames, err := sessions.ListUsernames(gameURL)
64+
abortf("Failed to load usernames: %s", err)
65+
selected, err := cli.Select("Username:", usernames)
66+
abort(err)
67+
session, err := sessions.LoadSession(gameURL, usernames[selected])
68+
abortf("Failed to load session: %s", err)
69+
gameId = session.GameId
70+
cli.Print("Game ID: %s", gameId)
71+
}
72+
}
73+
if gameId == "" {
5774
gameId, err = cli.Input("Game ID:")
5875
abort(err)
5976
}

cmd/share_spectate.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ var shareSpectateCmd = &cobra.Command{
3030
playerId = session.PlayerId
3131
playerSecret = session.PlayerSecret
3232
} else {
33+
if len(args) > 0 {
34+
gameURL = args[0]
35+
} else if gameURL = findGameURL(); gameURL != "" {
36+
cli.Print("Game URL: %s", gameURL)
37+
} else {
38+
gameURL, err = cli.Input("Game URL:")
39+
abort(err)
40+
}
3341
gameId, err = cli.Input("Game ID:")
3442
abort(err)
3543
playerId, err = cli.Input("Player ID:")

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ require (
77
github.com/adrg/xdg v0.4.0
88
github.com/code-game-project/go-utils v0.2.5
99
github.com/gomarkdown/markdown v0.0.0-20220731190611-dcdaee8e7a53
10+
github.com/google/uuid v1.3.0
1011
github.com/mattn/go-colorable v0.1.12
1112
github.com/spf13/cobra v1.5.0
1213
)

go.sum

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,11 @@
11
github.com/AlecAivazis/survey/v2 v2.3.5 h1:A8cYupsAZkjaUmhtTYv3sSqc7LO5mp1XDfqe5E/9wRQ=
22
github.com/AlecAivazis/survey/v2 v2.3.5/go.mod h1:4AuI9b7RjAR+G7v9+C4YSlX/YL3K3cWNXgWXOhllqvI=
3-
github.com/Bananenpro/cli v0.2.1 h1:gzW9QCGFo5QbevVdcVbNFBTbQaM4piLd57TPWBehPCU=
4-
github.com/Bananenpro/cli v0.2.1/go.mod h1:JBXpIAXo/D0rlsfgCViQBicjcJY6UWUldmxvKM+ijRc=
53
github.com/Bananenpro/cli v0.2.2 h1:7nMlgMGMT1rxkuqCiJuo/Jd89HTnw9psE3h/vQW57nk=
64
github.com/Bananenpro/cli v0.2.2/go.mod h1:JBXpIAXo/D0rlsfgCViQBicjcJY6UWUldmxvKM+ijRc=
75
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s=
86
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w=
97
github.com/adrg/xdg v0.4.0 h1:RzRqFcjH4nE5C6oTAxhBtoE2IRyjBSa62SCbyPidvls=
108
github.com/adrg/xdg v0.4.0/go.mod h1:N6ag73EX4wyxeaoeHctc1mas01KZgsj5tYiAIwqJE/E=
11-
github.com/code-game-project/go-utils v0.2.3 h1:nyejoWxktnX9SywtcV8v5BF0xS9M3kwy1v7Xl3RyHp4=
12-
github.com/code-game-project/go-utils v0.2.3/go.mod h1:kQ6kH9XDzdM2pnJUI1lw61Gp8XOams/E2dKABa1mBI8=
13-
github.com/code-game-project/go-utils v0.2.4 h1:UhWy1vJeXCaV4qjbFcIo9b0tzv69DK4HPwRFbrrDKF4=
14-
github.com/code-game-project/go-utils v0.2.4/go.mod h1:kQ6kH9XDzdM2pnJUI1lw61Gp8XOams/E2dKABa1mBI8=
159
github.com/code-game-project/go-utils v0.2.5 h1:f5IbAsUMu+e0eiDlbzbpJ5Hg2jJOCZLdcDvY3CpmGSg=
1610
github.com/code-game-project/go-utils v0.2.5/go.mod h1:kQ6kH9XDzdM2pnJUI1lw61Gp8XOams/E2dKABa1mBI8=
1711
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
@@ -22,6 +16,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
2216
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
2317
github.com/gomarkdown/markdown v0.0.0-20220731190611-dcdaee8e7a53 h1:JguE3sS3yLzLiCTCnsmzVFuTvTMDJALbzCgurwY5G/0=
2418
github.com/gomarkdown/markdown v0.0.0-20220731190611-dcdaee8e7a53/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA=
19+
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
20+
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
2521
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog=
2622
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68=
2723
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
@@ -54,10 +50,6 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc
5450
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
5551
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
5652
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
57-
golang.org/x/sys v0.0.0-20220731174439-a90be440212d h1:Sv5ogFZatcgIMMtBSTTAgMYsicp25MXBubjXNDKwm80=
58-
golang.org/x/sys v0.0.0-20220731174439-a90be440212d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
59-
golang.org/x/sys v0.0.0-20220803195053-6e608f9ce704 h1:Y7NOhdqIOU8kYI7BxsgL38d0ot0raxvcW+EMQU2QrT4=
60-
golang.org/x/sys v0.0.0-20220803195053-6e608f9ce704/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
6153
golang.org/x/sys v0.0.0-20220804214406-8e32c043e418 h1:9vYwv7OjYaky/tlAeD7C4oC9EsPTlaFl1H2jS++V+ME=
6254
golang.org/x/sys v0.0.0-20220804214406-8e32c043e418/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
6355
golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY=

0 commit comments

Comments
 (0)