112 lines
2.9 KiB
Go
112 lines
2.9 KiB
Go
package nintendo_switch
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/fmartingr/games-screenshot-mananger/pkg/games"
|
|
"github.com/fmartingr/games-screenshot-mananger/pkg/helpers"
|
|
)
|
|
|
|
const providerName = "nintendo-switch"
|
|
const gameListURL = "https://fmartingr.github.io/switch-games-json/switch_games.json"
|
|
|
|
type SwitchGame struct {
|
|
Name string `json:"description"`
|
|
EncryptedGameID string `json:"encrypted_game_id"`
|
|
}
|
|
|
|
func findGameByEncryptedID(gameList []SwitchGame, encryptedGameID string) SwitchGame {
|
|
var gameFound SwitchGame = SwitchGame{EncryptedGameID: encryptedGameID}
|
|
for _, game := range gameList {
|
|
if strings.ToUpper(game.EncryptedGameID) == strings.ToUpper(encryptedGameID) {
|
|
gameFound = game
|
|
}
|
|
}
|
|
|
|
return gameFound
|
|
}
|
|
|
|
func getSwitchGameList() []SwitchGame {
|
|
response, err := helpers.DoRequest("GET", gameListURL)
|
|
if err != nil {
|
|
log.Panic(err)
|
|
}
|
|
|
|
if response.Body != nil {
|
|
defer response.Body.Close()
|
|
}
|
|
|
|
body, err := ioutil.ReadAll(response.Body)
|
|
if err != nil {
|
|
log.Panic(err)
|
|
}
|
|
|
|
switchGameList := []SwitchGame{}
|
|
jsonErr := json.Unmarshal(body, &switchGameList)
|
|
if jsonErr != nil {
|
|
log.Fatal(jsonErr)
|
|
}
|
|
|
|
log.Printf("Updated Nintendo Switch game list. Found %d games.", len(switchGameList))
|
|
|
|
return switchGameList
|
|
}
|
|
|
|
func addScreenshotToGame(userGames []games.Game, switchGame SwitchGame, screenshot games.Screenshot) []games.Game {
|
|
var foundGame games.Game
|
|
for gameIndex, game := range userGames {
|
|
if game.ID == switchGame.EncryptedGameID {
|
|
foundGame = game
|
|
userGames[gameIndex].Screenshots = append(userGames[gameIndex].Screenshots, screenshot)
|
|
}
|
|
}
|
|
|
|
if foundGame.ID == "" {
|
|
foundGame := games.Game{Name: switchGame.Name, ID: switchGame.EncryptedGameID, Platform: "Nintendo Switch", Provider: providerName}
|
|
foundGame.Screenshots = append(foundGame.Screenshots, screenshot)
|
|
userGames = append(userGames, foundGame)
|
|
}
|
|
|
|
return userGames
|
|
}
|
|
|
|
func GetGames(inputPath string) []games.Game {
|
|
switchGames := getSwitchGameList()
|
|
var userGames []games.Game
|
|
|
|
err := filepath.Walk(inputPath,
|
|
func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !info.IsDir() {
|
|
filename := filepath.Base(path)
|
|
extension := filepath.Ext(filepath.Base(path))
|
|
|
|
filenameParsed := strings.Split(filename[:len(filename)-len(extension)], "-")
|
|
switchGame := findGameByEncryptedID(switchGames, filenameParsed[1])
|
|
|
|
layout := "20060102150405"
|
|
destinationName, err := time.Parse(layout, filenameParsed[0][0:14])
|
|
|
|
if err != nil {
|
|
log.Panic("Could not parse filename: ", err)
|
|
}
|
|
|
|
screenshot := games.Screenshot{Path: path, DestinationName: destinationName.Format(games.DatetimeFormat) + extension}
|
|
userGames = addScreenshotToGame(userGames, switchGame, screenshot)
|
|
}
|
|
return nil
|
|
})
|
|
if err != nil {
|
|
log.Panic(err)
|
|
}
|
|
return userGames
|
|
}
|