59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package data
|
|
|
|
import (
|
|
"crawshaw.dev/jsonfile"
|
|
"errors"
|
|
"fmt"
|
|
"golang.org/x/oauth2"
|
|
"os"
|
|
)
|
|
|
|
type data struct {
|
|
SpotifyOauthToken *oauth2.Token
|
|
}
|
|
|
|
type Store struct {
|
|
driver *jsonfile.JSONFile[data]
|
|
}
|
|
|
|
func NewStore(filename string) (*Store, error) {
|
|
s := new(Store)
|
|
if err := s.Open(filename); err != nil {
|
|
return nil, fmt.Errorf("open JSON file: %w", err)
|
|
}
|
|
return s, nil
|
|
}
|
|
|
|
func (s *Store) Open(filename string) error {
|
|
var err error
|
|
s.driver, err = jsonfile.Load[data](filename)
|
|
if errors.Is(err, os.ErrNotExist) {
|
|
s.driver, err = jsonfile.New[data](filename)
|
|
}
|
|
if err != nil {
|
|
return fmt.Errorf("open data store: %w", err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (s *Store) HasSpotifyOAuthToken() bool {
|
|
return s.GetSpotifyOAuthToken() != nil
|
|
}
|
|
|
|
func (s *Store) GetSpotifyOAuthToken() *oauth2.Token {
|
|
var tok *oauth2.Token
|
|
s.driver.Read(func(data *data) {
|
|
tok = data.SpotifyOauthToken
|
|
})
|
|
return tok
|
|
}
|
|
|
|
func (s *Store) SetSpotifyOAuthToken(tok *oauth2.Token) error {
|
|
if err := s.driver.Write(func(d *data) error {
|
|
d.SpotifyOauthToken = tok
|
|
return nil
|
|
}); err != nil {
|
|
return fmt.Errorf("save spotify OAuth token: %w", err)
|
|
}
|
|
return nil
|
|
}
|