ficsit-cli-flake/cli/context.go

101 lines
2.3 KiB
Go
Raw Normal View History

2021-12-02 04:00:33 +00:00
package cli
2022-04-14 01:27:39 +00:00
import (
"github.com/Khan/genqlient/graphql"
"github.com/pkg/errors"
"github.com/spf13/viper"
2022-10-14 16:11:16 +00:00
"github.com/satisfactorymodding/ficsit-cli/cli/cache"
"github.com/satisfactorymodding/ficsit-cli/cli/provider"
2022-04-14 01:27:39 +00:00
"github.com/satisfactorymodding/ficsit-cli/ficsit"
)
2021-12-02 04:00:33 +00:00
type GlobalContext struct {
Installations *Installations
Profiles *Profiles
2022-04-14 01:27:39 +00:00
APIClient graphql.Client
Provider provider.Provider
2021-12-02 04:00:33 +00:00
}
var globalContext *GlobalContext
2022-10-14 16:11:16 +00:00
func InitCLI(apiOnly bool) (*GlobalContext, error) {
2021-12-02 04:00:33 +00:00
if globalContext != nil {
return globalContext, nil
}
apiClient := ficsit.InitAPI()
mixedProvider := provider.InitMixedProvider(apiClient)
if viper.GetBool("offline") {
mixedProvider.Offline = true
}
2022-10-14 16:11:16 +00:00
if !apiOnly {
profiles, err := InitProfiles()
if err != nil {
return nil, errors.Wrap(err, "failed to initialize profiles")
}
installations, err := InitInstallations()
if err != nil {
return nil, errors.Wrap(err, "failed to initialize installations")
}
_, err = cache.LoadCache()
if err != nil {
return nil, errors.Wrap(err, "failed to load cache")
}
2022-10-14 16:11:16 +00:00
globalContext = &GlobalContext{
Installations: installations,
Profiles: profiles,
APIClient: apiClient,
Provider: mixedProvider,
2022-10-14 16:11:16 +00:00
}
} else {
globalContext = &GlobalContext{
APIClient: apiClient,
Provider: mixedProvider,
2022-10-14 16:11:16 +00:00
}
2021-12-02 04:00:33 +00:00
}
2022-10-14 16:11:16 +00:00
return globalContext, nil
2021-12-02 04:00:33 +00:00
}
// Wipe will remove any trace of ficsit anywhere
func (g *GlobalContext) Wipe() error {
// Wipe all installations
for _, installation := range g.Installations.Installations {
if err := installation.Wipe(); err != nil {
return errors.Wrap(err, "failed wiping installation")
}
if err := g.Installations.DeleteInstallation(installation.Path); err != nil {
return errors.Wrap(err, "failed deleting installation")
}
}
// Wipe all profiles
for _, profile := range g.Profiles.Profiles {
if err := g.Profiles.DeleteProfile(profile.Name); err != nil {
return errors.Wrap(err, "failed deleting profile")
}
}
return g.Save()
}
2021-12-02 04:00:33 +00:00
func (g *GlobalContext) Save() error {
if err := g.Installations.Save(); err != nil {
return errors.Wrap(err, "failed to save installations")
2021-12-02 04:00:33 +00:00
}
if err := g.Profiles.Save(); err != nil {
return errors.Wrap(err, "failed to save profiles")
2021-12-02 04:00:33 +00:00
}
return nil
}