88 "log"
99 "net/http"
1010 "os"
11+ "path/filepath"
1112 "strconv"
1213
1314 "github.com/gorilla/mux"
@@ -18,6 +19,11 @@ type JSONResponse struct {
1819 Data interface {} `json:"data,string"`
1920}
2021
22+ type ModPack struct {
23+ Mods []string `json:"mods"`
24+ Title string `json:"title"`
25+ }
26+
2127// Returns JSON response of all mods installed in factorio/mods
2228func ListInstalledMods (w http.ResponseWriter , r * http.Request ) {
2329 var err error
@@ -201,6 +207,76 @@ func DownloadMod(w http.ResponseWriter, r *http.Request) {
201207 http .ServeFile (w , r , modFile )
202208}
203209
210+ func CreateModPackHandler (w http.ResponseWriter , r * http.Request ) {
211+ var err error
212+ resp := JSONResponse {
213+ Success : false ,
214+ }
215+
216+ w .Header ().Set ("Content-Type" , "application/json;charset=UTF-8" )
217+
218+ switch r .Method {
219+ case "GET" :
220+ resp .Data = "Unsupported method"
221+ resp .Success = false
222+ if err = json .NewEncoder (w ).Encode (resp ); err != nil {
223+ log .Printf ("Get request to modpack handler: %s" , err )
224+ }
225+ case "POST" :
226+ var mods ModPack
227+ body , err := ioutil .ReadAll (r .Body )
228+ if err != nil {
229+ log .Printf ("Error in create mod pack handler body: %s" , err )
230+ return
231+ }
232+
233+ log .Printf ("Creating modpack with contents: %v" , string (body ))
234+
235+ err = json .Unmarshal (body , & mods )
236+ if err != nil {
237+ log .Printf ("Error unmarshaling server settings JSON: %s" , err )
238+ return
239+ }
240+
241+ err = createModPack (mods .Title , mods .Mods ... )
242+ if err != nil {
243+ log .Printf ("Error in creating modpack handler: %s" , err )
244+ return
245+ }
246+
247+ resp .Success = true
248+ resp .Data = fmt .Sprintf ("Created modpack: %s" , mods .Title )
249+ if err := json .NewEncoder (w ).Encode (resp ); err != nil {
250+ log .Printf ("Error listing saves: %s" , err )
251+ }
252+ }
253+ }
254+
255+ func ListModPacks (w http.ResponseWriter , r * http.Request ) {
256+ var err error
257+ resp := JSONResponse {
258+ Success : false ,
259+ }
260+
261+ w .Header ().Set ("Content-Type" , "application/json;charset=UTF-8" )
262+
263+ resp .Data , err = listModPacks (filepath .Join (config .FactorioDir , "modpacks" ))
264+ if err != nil {
265+ resp .Success = false
266+ resp .Data = fmt .Sprintf ("Error listing modpack files: %s" , err )
267+ if err := json .NewEncoder (w ).Encode (resp ); err != nil {
268+ log .Printf ("Error listing modpacks: %s" , err )
269+ }
270+ return
271+ }
272+
273+ resp .Success = true
274+
275+ if err := json .NewEncoder (w ).Encode (resp ); err != nil {
276+ log .Printf ("Error listing saves: %s" , err )
277+ }
278+ }
279+
204280// Lists all save files in the factorio/saves directory
205281func ListSaves (w http.ResponseWriter , r * http.Request ) {
206282 var err error
0 commit comments