Skip to content

Commit

Permalink
Release 1.1.7 (#180)
Browse files Browse the repository at this point in the history
* Bump golang.org/x/oauth2 from 0.0.0-20221014153046-6fdb5e3db783 to 0.6.0

Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.0.0-20221014153046-6fdb5e3db783 to 0.6.0.
- [Release notes](https://github.com/golang/oauth2/releases)
- [Commits](https://github.com/golang/oauth2/commits/v0.6.0)

---
updated-dependencies:
- dependency-name: golang.org/x/oauth2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump github.com/golang/glog from 1.0.0 to 1.1.1

Bumps [github.com/golang/glog](https://github.com/golang/glog) from 1.0.0 to 1.1.1.
- [Release notes](https://github.com/golang/glog/releases)
- [Commits](golang/glog@v1.0.0...v1.1.1)

---
updated-dependencies:
- dependency-name: github.com/golang/glog
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump github.com/spf13/cobra from 1.6.1 to 1.7.0

Bumps [github.com/spf13/cobra](https://github.com/spf13/cobra) from 1.6.1 to 1.7.0.
- [Release notes](https://github.com/spf13/cobra/releases)
- [Commits](spf13/cobra@v1.6.1...v1.7.0)

---
updated-dependencies:
- dependency-name: github.com/spf13/cobra
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump golang.org/x/oauth2 from 0.6.0 to 0.7.0

Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.6.0 to 0.7.0.
- [Release notes](https://github.com/golang/oauth2/releases)
- [Commits](golang/oauth2@v0.6.0...v0.7.0)

---
updated-dependencies:
- dependency-name: golang.org/x/oauth2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump github.com/zalando/go-keyring from 0.2.2 to 0.2.3

Bumps [github.com/zalando/go-keyring](https://github.com/zalando/go-keyring) from 0.2.2 to 0.2.3.
- [Release notes](https://github.com/zalando/go-keyring/releases)
- [Commits](zalando/go-keyring@v0.2.2...v0.2.3)

---
updated-dependencies:
- dependency-name: github.com/zalando/go-keyring
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump golang.org/x/oauth2 from 0.7.0 to 0.9.0

Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.7.0 to 0.9.0.
- [Commits](golang/oauth2@v0.7.0...v0.9.0)

---
updated-dependencies:
- dependency-name: golang.org/x/oauth2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump github.com/spf13/viper from 1.15.0 to 1.16.0

Bumps [github.com/spf13/viper](https://github.com/spf13/viper) from 1.15.0 to 1.16.0.
- [Release notes](https://github.com/spf13/viper/releases)
- [Commits](spf13/viper@v1.15.0...v1.16.0)

---
updated-dependencies:
- dependency-name: github.com/spf13/viper
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump golang.org/x/oauth2 from 0.9.0 to 0.10.0

Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.9.0 to 0.10.0.
- [Commits](golang/oauth2@v0.9.0...v0.10.0)

---
updated-dependencies:
- dependency-name: golang.org/x/oauth2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump golang.org/x/oauth2 from 0.10.0 to 0.12.0

Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.10.0 to 0.12.0.
- [Commits](golang/oauth2@v0.10.0...v0.12.0)

---
updated-dependencies:
- dependency-name: golang.org/x/oauth2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump github.com/golang/glog from 1.1.1 to 1.1.2

Bumps [github.com/golang/glog](https://github.com/golang/glog) from 1.1.1 to 1.1.2.
- [Release notes](https://github.com/golang/glog/releases)
- [Commits](golang/glog@v1.1.1...v1.1.2)

---
updated-dependencies:
- dependency-name: github.com/golang/glog
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>

* Prep for release 1.1.6

* Refactoring release build workflow (#159)

* Various tweaks (#158)

* Use the latest version of the build release action (#160)

* Update release-drafter, add new permissions

* Update README.md

Fix the badge on the README to reflect the main branch name

* Add fedora and ubuntu badges

* Bump golang.org/x/oauth2 from 0.12.0 to 0.13.0

Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.12.0 to 0.13.0.
- [Commits](golang/oauth2@v0.12.0...v0.13.0)

---
updated-dependencies:
- dependency-name: golang.org/x/oauth2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump github.com/spf13/viper from 1.16.0 to 1.17.0

Bumps [github.com/spf13/viper](https://github.com/spf13/viper) from 1.16.0 to 1.17.0.
- [Release notes](https://github.com/spf13/viper/releases)
- [Commits](spf13/viper@v1.16.0...v1.17.0)

---
updated-dependencies:
- dependency-name: github.com/spf13/viper
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* Add missing depends, notably gnome-keyring

* Bump golang to 1.20

* Bump golang.org/x/net from 0.16.0 to 0.17.0

Bumps [golang.org/x/net](https://github.com/golang/net) from 0.16.0 to 0.17.0.
- [Commits](golang/net@v0.16.0...v0.17.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump github.com/zmb3/spotify from 1.3.0 to 2.4.0

* Refactor auth logic in authHelp.go

* Refactor error handling and client calls

* Update docs

* Bump github.com/spf13/cobra from 1.7.0 to 1.8.0

Bumps [github.com/spf13/cobra](https://github.com/spf13/cobra) from 1.7.0 to 1.8.0.
- [Release notes](https://github.com/spf13/cobra/releases)
- [Commits](spf13/cobra@v1.7.0...v1.8.0)

---
updated-dependencies:
- dependency-name: github.com/spf13/cobra
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump golang.org/x/oauth2 from 0.13.0 to 0.14.0

Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.13.0 to 0.14.0.
- [Commits](golang/oauth2@v0.13.0...v0.14.0)

---
updated-dependencies:
- dependency-name: golang.org/x/oauth2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump github.com/spf13/viper from 1.17.0 to 1.18.0

Bumps [github.com/spf13/viper](https://github.com/spf13/viper) from 1.17.0 to 1.18.0.
- [Release notes](https://github.com/spf13/viper/releases)
- [Commits](spf13/viper@v1.17.0...v1.18.0)

---
updated-dependencies:
- dependency-name: github.com/spf13/viper
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump github.com/ktr0731/go-fuzzyfinder from 0.7.0 to 0.8.0

Bumps [github.com/ktr0731/go-fuzzyfinder](https://github.com/ktr0731/go-fuzzyfinder) from 0.7.0 to 0.8.0.
- [Release notes](https://github.com/ktr0731/go-fuzzyfinder/releases)
- [Commits](ktr0731/go-fuzzyfinder@v0.7.0...v0.8.0)

---
updated-dependencies:
- dependency-name: github.com/ktr0731/go-fuzzyfinder
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump github.com/golang/glog from 1.1.2 to 1.2.0

Bumps [github.com/golang/glog](https://github.com/golang/glog) from 1.1.2 to 1.2.0.
- [Release notes](https://github.com/golang/glog/releases)
- [Commits](golang/glog@v1.1.2...v1.2.0)

---
updated-dependencies:
- dependency-name: github.com/golang/glog
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump github.com/spf13/viper from 1.18.0 to 1.18.1

Bumps [github.com/spf13/viper](https://github.com/spf13/viper) from 1.18.0 to 1.18.1.
- [Release notes](https://github.com/spf13/viper/releases)
- [Commits](spf13/viper@v1.18.0...v1.18.1)

---
updated-dependencies:
- dependency-name: github.com/spf13/viper
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump github.com/spf13/viper from 1.18.1 to 1.18.2

Bumps [github.com/spf13/viper](https://github.com/spf13/viper) from 1.18.1 to 1.18.2.
- [Release notes](https://github.com/spf13/viper/releases)
- [Commits](spf13/viper@v1.18.1...v1.18.2)

---
updated-dependencies:
- dependency-name: github.com/spf13/viper
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>

* Release bumping

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: giovannism20 <[email protected]>
Co-authored-by: lemorage <[email protected]>
Co-authored-by: dvdmuckle <[email protected]>
  • Loading branch information
5 people authored Dec 25, 2023
1 parent 4e54f22 commit 7de57f6
Show file tree
Hide file tree
Showing 21 changed files with 313 additions and 1,575 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
- name: Set up Go 1.x
uses: actions/setup-go@v4
with:
go-version: ^1.19
go-version: ^1.20
id: go

- name: Check out code into the Go module directory
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/release-drafter.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,16 @@ on:
- '[0-9]+.[0-9]+.[0-9]+'
jobs:
update_release_draft:
permissions:
contents: write
pull-requests: read
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set output
id: vars
run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
- uses: release-drafter/release-drafter@v5.15.0
- uses: release-drafter/release-drafter@v5.21.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# spc

![Go](https://github.com/dvdmuckle/spc/workflows/Go/badge.svg?branch=master)
![Go](https://github.com/dvdmuckle/spc/workflows/Go/badge.svg?branch=main)
[![rpmbuild](https://copr.fedorainfracloud.org/coprs/dvdmuckle/spc/package/spc/status_image/last_build.png)](https://copr.fedorainfracloud.org/coprs/dvdmuckle/spc/package/spc/)
![Ubuntu](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fapi.launchpad.net%2F1.0%2F~dvdmuckle%2F%2Barchive%2Fspc%3Fws.op%3DgetBuildRecords&query=%24.entries.0.buildstate&logo=ubuntu&label=Build&color=orange&link=https%3A%2F%2Flaunchpad.net%2F~dvdmuckle%2F%2Barchive%2Fubuntu%2Fspc)

A lightweight mutliplatform CLI for Spotify

Expand Down
62 changes: 44 additions & 18 deletions cmd/helper/authHelp.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
Expand All @@ -16,6 +16,7 @@ limitations under the License.
package helper

import (
"context"
"encoding/json"
"fmt"
"io/ioutil"
Expand All @@ -28,22 +29,38 @@ import (

"github.com/spf13/cobra"
"github.com/zalando/go-keyring"
"github.com/zmb3/spotify"
"github.com/zmb3/spotify/v2"
"github.com/zmb3/spotify/v2/auth"
"golang.org/x/oauth2"
)

const redirectURI = "http://localhost:8888/callback"

var (
authenticator = spotify.NewAuthenticator(redirectURI, spotify.ScopeStreaming, spotify.ScopeUserModifyPlaybackState, spotify.ScopeUserReadPlaybackState, spotify.ScopePlaylistModifyPrivate, spotify.ScopePlaylistModifyPublic)
ch = make(chan *spotify.Client)
clientID string
secret string
state = "ringdingthing"
authenticator *spotifyauth.Authenticator
ch = make(chan *spotify.Client)
clientID string
secret string
state = "ringdingthing"
)

func initAuthenticator(clientID string, secret string) {
authenticator = spotifyauth.New(
spotifyauth.WithRedirectURL(redirectURI),
spotifyauth.WithClientID(clientID),
spotifyauth.WithClientSecret(secret),
spotifyauth.WithScopes(
spotifyauth.ScopeStreaming,
spotifyauth.ScopeUserModifyPlaybackState,
spotifyauth.ScopeUserReadPlaybackState,
spotifyauth.ScopePlaylistModifyPrivate,
spotifyauth.ScopePlaylistModifyPublic,
),
)
}

func completeAuth(w http.ResponseWriter, r *http.Request) {
tok, err := authenticator.Token(state, r)
tok, err := authenticator.Token(r.Context(), state, r)
if err != nil {
http.Error(w, "Couldn't get token", http.StatusForbidden)
LogErrorAndExit(err)
Expand All @@ -53,15 +70,16 @@ func completeAuth(w http.ResponseWriter, r *http.Request) {
LogErrorAndExit(fmt.Sprintf("State mismatch: %s != %s\n", st, state))
}
// use the token to get an authenticated client
client := authenticator.NewClient(tok)
client := spotify.New(authenticator.Client(r.Context(), tok))
fmt.Fprintf(w, "Login Completed!")
ch <- &client
ch <- client
}

//Auth authenticates with Spotify and refreshes the token
// Auth authenticates with Spotify and refreshes the token
func Auth(cmd *cobra.Command, cfgFile string, conf *Config) {
clientID = conf.ClientID
secret = conf.Secret
initAuthenticator(clientID, secret)
curUser, err := user.Current()
if err != nil {
LogErrorAndExit(err)
Expand Down Expand Up @@ -91,15 +109,18 @@ func Auth(cmd *cobra.Command, cfgFile string, conf *Config) {
}
} else {
fmt.Println("Getting token...")
authenticator.SetAuthInfo(clientID, secret)
http.HandleFunc("/callback", completeAuth)
go http.ListenAndServe(":8888", nil)
url := authenticator.AuthURL(state)
fmt.Println("Please log in to Spotify by clicking the following link, or copying it to a web browser:", url)
//wait for auth to finish
client := <-ch
if client == nil {
fmt.Println("Client is not initialized")
os.Exit(1)
}

user, err := client.CurrentUser()
user, err := client.CurrentUser(context.Background())
if err != nil {
LogErrorAndExit(err)
}
Expand All @@ -119,13 +140,13 @@ func Auth(cmd *cobra.Command, cfgFile string, conf *Config) {
}
}

//RefreshToken refreshes the auth token from Spotify
// RefreshToken refreshes the auth token from Spotify
func RefreshToken(client string, secret string, refreshToken string) *oauth2.Token {
var token *oauth2.Token = &oauth2.Token{}

if refreshToken != "" {
const grantType string = "refresh_token"
const tokenURL string = spotify.TokenURL
const tokenURL string = spotifyauth.TokenURL
const contentType string = "application/x-www-form-urlencoded"
form := url.Values{}
form.Add("grant_type", grantType)
Expand Down Expand Up @@ -153,8 +174,8 @@ func RefreshToken(client string, secret string, refreshToken string) *oauth2.Tok
return nil
}

//SetClient sets the Client field of Config struct to a valid Spotify client
//The Token field in the Config struct must be set
// SetClient sets the Client field of Config struct to a valid Spotify client
// The Token field in the Config struct must be set
func SetClient(conf *Config) {
curUser, err := user.Current()
if err != nil {
Expand Down Expand Up @@ -187,5 +208,10 @@ func SetClient(conf *Config) {
LogErrorAndExit("Error saving token to keyring", err)
}
}
conf.Client = spotify.NewAuthenticator(redirectURI).NewClient(&conf.Token)
httpClient := spotifyauth.New().Client(context.Background(), &conf.Token)
conf.Client = spotify.New(httpClient)
if conf.Client == nil {
fmt.Println("Client is not initialized")
os.Exit(1)
}
}
14 changes: 8 additions & 6 deletions cmd/helper/playback.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
Expand All @@ -16,23 +16,25 @@ limitations under the License.
package helper

import (
"github.com/zmb3/spotify"
"context"

"github.com/zmb3/spotify/v2"
)

//Pause wraps the spotify.Client.Pause() method for easy error checking
// Pause wraps the spotify.Client.Pause() method for easy error checking
func Pause(conf *Config) {
var opts spotify.PlayOptions
opts.DeviceID = &conf.DeviceID
if err := conf.Client.PauseOpt(&opts); err != nil {
if err := conf.Client.PauseOpt(context.Background(), &opts); err != nil {
LogErrorAndExit(err)
}
}

//Play wraps the spotify.Client.Play() method for easy error checking
// Play wraps the spotify.Client.Play() method for easy error checking
func Play(conf *Config) {
var opts spotify.PlayOptions
opts.DeviceID = &conf.DeviceID
if err := conf.Client.PlayOpt(&opts); err != nil {
if err := conf.Client.PlayOpt(context.Background(), &opts); err != nil {
LogErrorAndExit(err)
}
}
8 changes: 4 additions & 4 deletions cmd/helper/structs.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
Expand All @@ -16,15 +16,15 @@ limitations under the License.
package helper

import (
"github.com/zmb3/spotify"
"github.com/zmb3/spotify/v2"
"golang.org/x/oauth2"
)

//Config stores constantly accessed variables in memory
// Config stores constantly accessed variables in memory
type Config struct {
ClientID string
Secret string
Token oauth2.Token
Client spotify.Client
Client *spotify.Client
DeviceID spotify.ID
}
8 changes: 5 additions & 3 deletions cmd/next.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
Expand All @@ -16,9 +16,11 @@ limitations under the License.
package cmd

import (
"context"

"github.com/dvdmuckle/spc/cmd/helper"
"github.com/spf13/cobra"
"github.com/zmb3/spotify"
"github.com/zmb3/spotify/v2"
)

// nextCmd represents the next command
Expand All @@ -28,7 +30,7 @@ var nextCmd = &cobra.Command{
Long: `Skips the track currently playing. Will use the currently configured device.`,
Run: func(cmd *cobra.Command, args []string) {
helper.SetClient(&conf)
conf.Client.NextOpt(&spotify.PlayOptions{DeviceID: &conf.DeviceID})
conf.Client.NextOpt(context.Background(), &spotify.PlayOptions{DeviceID: &conf.DeviceID})
},
Aliases: []string{"skip"},
}
Expand Down
13 changes: 9 additions & 4 deletions cmd/previous.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
Expand All @@ -16,9 +16,11 @@ limitations under the License.
package cmd

import (
"context"

"github.com/dvdmuckle/spc/cmd/helper"
"github.com/spf13/cobra"
"github.com/zmb3/spotify"
"github.com/zmb3/spotify/v2"
)

// previousCmd represents the previous command
Expand All @@ -30,13 +32,16 @@ var previousCmd = &cobra.Command{
var opts spotify.PlayOptions
helper.SetClient(&conf)
opts.DeviceID = &conf.DeviceID

ctx := context.Background()

//We want to go to the last song playing, but
//spotify.Previous() will rewind the current song
//unless the current song is close to the beginning
//of playback, so we seek to zero here before calling
//spotify.Previous()
conf.Client.SeekOpt(0, &opts)
conf.Client.PreviousOpt(&opts)
conf.Client.SeekOpt(ctx, 0, &opts)
conf.Client.PreviousOpt(ctx, &opts)
},
Aliases: []string{"prev"},
}
Expand Down
4 changes: 2 additions & 2 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
Expand All @@ -23,7 +23,7 @@ import (
"strings"

"github.com/dvdmuckle/spc/cmd/helper"
"github.com/zmb3/spotify"
"github.com/zmb3/spotify/v2"

"github.com/spf13/cobra"

Expand Down
Loading

0 comments on commit 7de57f6

Please sign in to comment.