diff --git a/pkg/rustmaps/config_test.go b/pkg/rustmaps/config_test.go index f6fe78c..07efdb9 100644 --- a/pkg/rustmaps/config_test.go +++ b/pkg/rustmaps/config_test.go @@ -22,6 +22,16 @@ func TestGenerator_LoadConfig(t *testing.T) { }), wantErr: false, }, + { + name: "Test LoadConfig with file", + generator: NewMockedGenerator(t, &Generator{ + configPath: "/etc/hosts", + config: types.Config{}, + maps: []*types.Map{}, + rmcli: &api.RustMapsClient{}, + }), + wantErr: true, + }, { name: "Test LoadConfig fail", generator: NewMockedGenerator(t, &Generator{ @@ -32,6 +42,16 @@ func TestGenerator_LoadConfig(t *testing.T) { }), wantErr: true, }, + { + name: "Test LoadConfig fail tmp", + generator: NewMockedGenerator(t, &Generator{ + configPath: "/tmp/", + config: types.Config{}, + maps: []*types.Map{}, + rmcli: &api.RustMapsClient{}, + }), + wantErr: true, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -48,7 +68,25 @@ func TestGenerator_SaveConfig(t *testing.T) { generator *Generator wantErr bool }{ - // TODO: Add test cases. + { + name: "Test SaveConfig", + generator: NewMockedGenerator(t, &Generator{ + config: types.Config{}, + maps: []*types.Map{}, + rmcli: &api.RustMapsClient{}, + }), + wantErr: false, + }, + { + name: "Test SaveConfig fail", + generator: NewMockedGenerator(t, &Generator{ + configPath: "/tmp/asdfjasdlf/sadf432323/./.23", + config: types.Config{}, + maps: []*types.Map{}, + rmcli: &api.RustMapsClient{}, + }), + wantErr: true, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/pkg/rustmaps/download.go b/pkg/rustmaps/download.go index 2e9f89e..948a317 100644 --- a/pkg/rustmaps/download.go +++ b/pkg/rustmaps/download.go @@ -1,6 +1,7 @@ package rustmaps import ( + "encoding/json" "fmt" "io" "net/http" @@ -12,6 +13,13 @@ import ( "go.uber.org/zap" ) +type DownloadLinks struct { + MapURL string `json:"map_url"` + ImageURL string `json:"image_url"` + ImageIconURL string `json:"image_icon_url"` + ThumbnailURL string `json:"thumbnail_url"` +} + func (g *Generator) OverrideDownloadsDir(log *zap.Logger, dir string) { g.downloadsDir = dir if err := os.MkdirAll(dir, 0755); err != nil { @@ -89,11 +97,35 @@ func (g *Generator) Download(log *zap.Logger, version string) error { log.Error("Error creating downloads directory", zap.Error(err)) return err } - mapTarget := filepath.Join(downloadsDir, fmt.Sprintf("%s_%d_%s.map", m.Seed, m.Size, m.MapID)) - imageTarget := filepath.Join(downloadsDir, fmt.Sprintf("%s_%d_%s.png", m.Seed, m.Size, m.MapID)) - imageWithIconsTarget := filepath.Join(downloadsDir, fmt.Sprintf("%s_%d_%s_icons.png", m.Seed, m.Size, m.MapID)) - thumbnailTarget := filepath.Join(downloadsDir, fmt.Sprintf("%s_%d_%s_thumbnail.png", m.Seed, m.Size, m.MapID)) - fmt.Printf("Download URL: %s\n", status.Data.DownloadURL) + savedConfig := m.SavedConfig + if savedConfig == "" { + savedConfig = "procedural" + } + prefix := fmt.Sprintf("%s_%d_%s_%t_%s", m.Seed, m.Size, savedConfig, m.Staging, m.MapID) + mapTarget := filepath.Join(downloadsDir, fmt.Sprintf("%s.map", prefix)) + imageTarget := filepath.Join(downloadsDir, fmt.Sprintf("%s.png", prefix)) + imageWithIconsTarget := filepath.Join(downloadsDir, fmt.Sprintf("%s_icons.png", prefix)) + thumbnailTarget := filepath.Join(downloadsDir, fmt.Sprintf("%s_thumbnail.png", prefix)) + downloadLinksTarget := filepath.Join(downloadsDir, fmt.Sprintf("%s_download_links.json", prefix)) + // create a json file next to the rest that contains the download urls + log.Info("Downloading assets", zap.String("seed", m.Seed), zap.String("map_id", m.MapID)) + links := DownloadLinks{ + MapURL: status.Data.DownloadURL, + ImageURL: status.Data.ImageURL, + ImageIconURL: status.Data.ImageIconURL, + ThumbnailURL: status.Data.ThumbnailURL, + } + downloadLinksData, err := json.MarshalIndent(links, "", " ") + if err != nil { + log.Error("Error marshalling JSON", zap.Error(err)) + return err + } + log.Info("Writing download links", zap.String("target", downloadLinksTarget)) + if err := os.WriteFile(downloadLinksTarget, downloadLinksData, 0644); err != nil { + log.Error("Error writing JSON file", zap.Error(err)) + return err + } + if err := g.DownloadFile(log, status.Data.DownloadURL, mapTarget); err != nil { log.Error("Error downloading map", zap.String("seed", m.Seed), zap.Error(err)) return err