@@ -3,13 +3,16 @@ package client
33import (
44 "fmt"
55 "net/http"
6+ "os"
67 "path/filepath"
78 "strings"
89
910 _ "embed"
1011
1112 "github.com/Bananenpro/cli"
1213 "github.com/code-game-project/codegame-cli-go/new"
14+ "github.com/code-game-project/codegame-cli-go/util"
15+ "github.com/code-game-project/codegame-cli/util/cgfile"
1316 "github.com/code-game-project/codegame-cli/util/cggenevents"
1417 "github.com/code-game-project/codegame-cli/util/exec"
1518 "github.com/code-game-project/codegame-cli/util/external"
@@ -63,7 +66,7 @@ func CreateNewClient(projectName, gameName, serverURL, libraryVersion string, ge
6366 }
6467 }
6568
66- err = createClientTemplate (projectName , module , gameName , serverURL , libraryURL , generateWrappers , eventNames )
69+ err = createClientTemplate (module , gameName , serverURL , libraryURL , generateWrappers , eventNames )
6770 if err != nil {
6871 return err
6972 }
@@ -79,12 +82,62 @@ func CreateNewClient(projectName, gameName, serverURL, libraryVersion string, ge
7982 return nil
8083}
8184
82- func createClientTemplate (projectName , modulePath , gameName , serverURL , libraryURL string , wrappers bool , eventNames []string ) error {
85+ func Update (libraryVersion string , config * cgfile.CodeGameFileData ) error {
86+ libraryURL , libraryTag , err := getClientLibraryURL (libraryVersion )
87+ if err != nil {
88+ return err
89+ }
90+
91+ url := baseURL (config .URL , isSSL (config .URL ))
92+
93+ var eventNames []string
94+ cgeVersion , err := cggenevents .GetCGEVersion (url )
95+ if err != nil {
96+ return err
97+ }
98+
99+ eventNames , err = cggenevents .GetEventNames (url , cgeVersion )
100+ if err != nil {
101+ return err
102+ }
103+
104+ module , err := util .GetModuleName ("" )
105+ if err != nil {
106+ return err
107+ }
108+
109+ err = updateClientTemplate (module , config .Game , config .URL , libraryURL , eventNames )
110+ if err != nil {
111+ return err
112+ }
113+
114+ cli .BeginLoading ("Updating dependencies..." )
115+ _ , err = exec .Execute (true , "go" , "get" , "-u" , "./..." )
116+ if err != nil {
117+ return err
118+ }
119+ _ , err = exec .Execute (true , "go" , "get" , fmt .Sprintf ("%s@%s" , libraryURL , libraryTag ))
120+ if err != nil {
121+ return err
122+ }
123+ _ , err = exec .Execute (true , "go" , "mod" , "tidy" )
124+ if err != nil {
125+ return err
126+ }
127+ cli .FinishLoading ()
128+ return nil
129+ }
130+
131+ func createClientTemplate (modulePath , gameName , serverURL , libraryURL string , wrappers bool , eventNames []string ) error {
83132 if ! wrappers {
84- return execClientMainTemplate (projectName , serverURL , libraryURL )
133+ return execClientMainTemplate (serverURL , libraryURL )
85134 }
86135
87- return execClientWrappersTemplate (projectName , modulePath , gameName , serverURL , libraryURL , eventNames )
136+ return execClientWrappersTemplate (modulePath , gameName , serverURL , libraryURL , eventNames , false )
137+ }
138+
139+ func updateClientTemplate (modulePath , gameName , serverURL , libraryURL string , eventNames []string ) error {
140+ return execClientWrappersTemplate (modulePath , gameName , serverURL , libraryURL , eventNames , true )
88141}
89142
90143func getClientLibraryURL (clientVersion string ) (url string , tag string , err error ) {
@@ -101,7 +154,7 @@ func getClientLibraryURL(clientVersion string) (url string, tag string, err erro
101154 return path , tag , nil
102155}
103156
104- func execClientMainTemplate (projectName , serverURL , libraryURL string ) error {
157+ func execClientMainTemplate (serverURL , libraryURL string ) error {
105158 type data struct {
106159 URL string
107160 LibraryURL string
@@ -113,11 +166,21 @@ func execClientMainTemplate(projectName, serverURL, libraryURL string) error {
113166 })
114167}
115168
116- func execClientWrappersTemplate (projectName , modulePath , gameName , serverURL , libraryURL string , eventNames []string ) error {
169+ func execClientWrappersTemplate (modulePath , gameName , serverURL , libraryURL string , eventNames []string , update bool ) error {
117170 gamePackageName := strings .ReplaceAll (strings .ReplaceAll (gameName , "-" , "" ), "_" , "" )
118-
119171 gameDir := strings .ReplaceAll (strings .ReplaceAll (gameName , "-" , "" ), "_" , "" )
120172
173+ if update {
174+ cli .Warn ("This action will ERASE and regenerate ALL files in '%s/'.\n You will have to manually update your code to work with the new version." , gameDir )
175+ ok , err := cli .YesNo ("Continue?" , false )
176+ if err != nil || ! ok {
177+ return cli .ErrCanceled
178+ }
179+ os .RemoveAll (gameDir )
180+ } else {
181+ cli .Warn ("DO NOT EDIT the `%s/` directory. ALL CHANGES WILL BE LOST when running `codegame update`." , gameDir )
182+ }
183+
121184 type event struct {
122185 Name string
123186 PascalName string
@@ -148,12 +211,14 @@ func execClientWrappersTemplate(projectName, modulePath, gameName, serverURL, li
148211 Events : events ,
149212 }
150213
151- err := new .ExecTemplate (wrapperMainTemplate , filepath .Join ("main.go" ), data )
152- if err != nil {
153- return err
214+ if ! update {
215+ err := new .ExecTemplate (wrapperMainTemplate , filepath .Join ("main.go" ), data )
216+ if err != nil {
217+ return err
218+ }
154219 }
155220
156- err = new .ExecTemplate (wrapperGameTemplate , filepath .Join (gameDir , "game.go" ), data )
221+ err : = new .ExecTemplate (wrapperGameTemplate , filepath .Join (gameDir , "game.go" ), data )
157222 if err != nil {
158223 return err
159224 }
0 commit comments