88 lines
2.9 KiB
Go
88 lines
2.9 KiB
Go
package cli
|
|
|
|
import (
|
|
"context"
|
|
"flag"
|
|
"os"
|
|
|
|
"github.com/fmartingr/games-screenshot-manager/internal/models"
|
|
"github.com/fmartingr/games-screenshot-manager/pkg/cache"
|
|
"github.com/fmartingr/games-screenshot-manager/pkg/processor"
|
|
"github.com/fmartingr/games-screenshot-manager/pkg/providers/minecraft"
|
|
"github.com/fmartingr/games-screenshot-manager/pkg/providers/playstation4"
|
|
"github.com/fmartingr/games-screenshot-manager/pkg/providers/retroarch"
|
|
"github.com/fmartingr/games-screenshot-manager/pkg/providers/steam"
|
|
"github.com/fmartingr/games-screenshot-manager/pkg/registry"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
const defaultOutputPath string = "./Output"
|
|
|
|
const defaultInputPath string = ""
|
|
const defaultProvider string = "steam"
|
|
const defaultDryRun bool = false
|
|
const defaultDownloadCovers bool = false
|
|
|
|
func Start() {
|
|
logger := logrus.New()
|
|
flagSet := flag.NewFlagSet("gsm", flag.ExitOnError)
|
|
|
|
cache := cache.NewFileCache(logger)
|
|
|
|
registry := registry.NewProviderRegistry(logger, cache)
|
|
registry.Register(minecraft.Name, minecraft.NewMinecraftProvider)
|
|
registry.Register(playstation4.Name, playstation4.NewPlaystation4Provider)
|
|
registry.Register(steam.Name, steam.NewSteamProvider)
|
|
registry.Register(retroarch.Name, retroarch.NewRetroArchProvider)
|
|
|
|
options := models.Options{
|
|
ProcessBufferSize: 32,
|
|
}
|
|
|
|
flagSet.StringVar(&options.OutputPath, "output-path", defaultOutputPath, "The destination path of the screenshots")
|
|
flagSet.BoolVar(&options.DownloadCovers, "download-covers", defaultDownloadCovers, "use to enable the download of covers (if the provider supports it)")
|
|
flagSet.BoolVar(&options.DryRun, "dry-run", defaultDryRun, "Use to disable write actions on filesystem")
|
|
flagSet.IntVar(&options.WorkersNum, "workers-num", 2, "Number of workers to use to process games")
|
|
|
|
var providerName = flagSet.String("provider", defaultProvider, "steam")
|
|
providerOptions := models.ProviderOptions{}
|
|
flagSet.StringVar(&providerOptions.InputPath, "input-path", defaultInputPath, "Input path for the provider that requires it")
|
|
|
|
loglevelFlag := flagSet.String("log-level", logrus.InfoLevel.String(), "Log level")
|
|
|
|
if err := flagSet.Parse(os.Args[1:]); err != nil {
|
|
logger.Errorf("error parsing args: %s", err)
|
|
}
|
|
|
|
loglevel, err := logrus.ParseLevel(*loglevelFlag)
|
|
if err != nil {
|
|
logger.Warnf("Invalid loglevel %s, using %s instead.", *loglevelFlag, logrus.InfoLevel.String())
|
|
loglevel = logrus.InfoLevel
|
|
}
|
|
logger.SetLevel(loglevel)
|
|
|
|
provider, err := registry.Get(*providerName)
|
|
if err != nil {
|
|
logger.Errorf("Provider %s not found!", *providerName)
|
|
return
|
|
}
|
|
games, err := provider.FindGames(providerOptions)
|
|
if err != nil {
|
|
logger.Errorf("Error obtaining game list: %s", err)
|
|
return
|
|
}
|
|
|
|
if len(games) > 0 {
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
processor := processor.NewProcessor(logger, options)
|
|
processor.Start(ctx)
|
|
|
|
for _, g := range games {
|
|
processor.Process(g)
|
|
}
|
|
|
|
processor.Wait()
|
|
cancel()
|
|
}
|
|
}
|