11package cmd
22
33import (
4+ "errors"
45 "fmt"
56 "io"
67 "net/http"
@@ -9,6 +10,7 @@ import (
910 "strings"
1011
1112 "github.com/adrg/xdg"
13+ "github.com/code-game-project/go-utils/cgfile"
1214 "github.com/code-game-project/go-utils/cggenevents"
1315 "github.com/code-game-project/go-utils/exec"
1416 "github.com/spf13/cobra"
@@ -18,11 +20,44 @@ import (
1820var genEventsCmd = & cobra.Command {
1921 Use : "gen-events" ,
2022 Short : "Generate event definitions from CGE files." ,
21- Args : cobra .ExactArgs (1 ),
23+ Args : cobra .MaximumNArgs (1 ),
2224 Run : func (cmd * cobra.Command , args []string ) {
23- filename := args [0 ]
25+ var output string
26+ output , err := cmd .Flags ().GetString ("output" )
27+ abort (err )
28+ languages , err := cmd .Flags ().GetStringSlice ("languages" )
29+ abort (err )
30+
31+ var filename string
32+ if len (args ) == 0 {
33+ root , err := cgfile .FindProjectRootRelative ()
34+ if err != nil || cmd .Flags ().Changed ("output" ) || cmd .Flags ().Changed ("languages" ) {
35+ fmt .Println (err , output , languages )
36+ abort (errors .New ("Expected game URL." ))
37+ }
38+ data , err := cgfile .LoadCodeGameFile (root )
39+ if err != nil {
40+ abortf ("Failed to load CodeGame data: %s" , err )
41+ }
42+ if data .Type == "client" {
43+ abort (errors .New ("Use `codegame update` instead." ))
44+ } else if data .Type != "server" {
45+ fmt .Println ("hi" )
46+ abort (errors .New ("Expected game URL." ))
47+ } else {
48+ filename = filepath .Join (root , "events.cge" )
49+ languages = []string {data .Lang }
50+ switch data .Lang {
51+ case "go" :
52+ output = filepath .Join (root , strings .ReplaceAll (strings .ReplaceAll (data .Game , "_" , "" ), "-" , "" ))
53+ default :
54+ abort (errors .New ("Expected game URL." ))
55+ fmt .Println ("hi2" )
56+ }
57+ }
58+ }
59+
2460 var cge []byte
25- var err error
2661 if strings .HasPrefix (filename , "http://" ) || strings .HasPrefix (filename , "https://" ) {
2762 if ! strings .HasSuffix (filename , "/api/events" ) && ! strings .HasSuffix (filename , ".cge" ) {
2863 if strings .HasSuffix (filename , "/api" ) {
@@ -47,17 +82,12 @@ var genEventsCmd = &cobra.Command{
4782 abortf ("Failed to read CGE file: %s" , err )
4883 } else {
4984 cge , err = os .ReadFile (filename )
50- abortf ("Failed to read CGE file: " , err )
85+ abortf ("Failed to read CGE file: %s " , err )
5186 }
5287
5388 cgeVersion , err := cggenevents .ParseCGEVersion (string (cge ))
5489 abortf ("Failed to determine CGE file version: %s" , err )
5590
56- output , err := cmd .Flags ().GetString ("output" )
57- abort (err )
58- languages , err := cmd .Flags ().GetStringSlice ("languages" )
59- abort (err )
60-
6191 cgGenEvents , err := cggenevents .InstallCGGenEvents (cgeVersion )
6292 abortf ("Failed to install cg-gen-events: %s" , err )
6393 _ , err = exec .Execute (false , filepath .Join (xdg .DataHome , "codegame" , "bin" , "cg-gen-events" , cgGenEvents ), filename , "-o" , output , "-l" , strings .Join (languages , "," ))
0 commit comments