Fixed YouTube playback offsets
This commit is contained in:
parent
2f6bda5018
commit
138c1008eb
|
@ -1,6 +1,9 @@
|
|||
MumbleDJ Changelog
|
||||
==================
|
||||
|
||||
### November 5, 2016 -- `v3.2.1`
|
||||
* Fixed YouTube video offsets. Now YouTube URLs with `?t=<timestamp>` at the end will start the audio playback at the appropriate position.
|
||||
|
||||
### November 5, 2016 -- `v3.2.0`
|
||||
* Fixed a Go panic that would occur when a YouTube playlist contained a private video.
|
||||
* Added back immediate skipping for tracks/playlists that are skipped by the submitter. This was a feature that was present in the last major version of MumbleDJ but was forgotten when rewriting the bot (sorry!).
|
||||
|
|
2
main.go
2
main.go
|
@ -32,7 +32,7 @@ func init() {
|
|||
services.DJ = DJ
|
||||
bot.DJ = DJ
|
||||
|
||||
DJ.Version = "v3.2.0"
|
||||
DJ.Version = "v3.2.1"
|
||||
|
||||
logrus.SetLevel(logrus.WarnLevel)
|
||||
}
|
||||
|
|
|
@ -13,6 +13,8 @@ import (
|
|||
"math"
|
||||
"net/http"
|
||||
"regexp"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/ChannelMeter/iso8601duration"
|
||||
"github.com/antonholmquist/jason"
|
||||
|
@ -98,9 +100,12 @@ func (yt *YouTube) GetTracks(url string, submitter *gumble.User) ([]interfaces.T
|
|||
tracks []interfaces.Track
|
||||
)
|
||||
|
||||
dummyOffset, _ := time.ParseDuration("0s")
|
||||
urlSplit := strings.Split(url, "?t=")
|
||||
|
||||
playlistURL = "https://www.googleapis.com/youtube/v3/playlists?part=snippet&id=%s&key=%s"
|
||||
playlistItemsURL = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,contentDetails&playlistId=%s&maxResults=%d&key=%s&pageToken=%s"
|
||||
id, err = yt.getID(url)
|
||||
id, err = yt.getID(urlSplit[0])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -161,7 +166,7 @@ func (yt *YouTube) GetTracks(url string, submitter *gumble.User) ([]interfaces.T
|
|||
|
||||
// Unfortunately we have to execute another API call for each video as the YouTube API does not
|
||||
// return video durations from the playlistItems endpoint...
|
||||
newTrack, _ := yt.getTrack(videoID, submitter)
|
||||
newTrack, _ := yt.getTrack(videoID, submitter, dummyOffset)
|
||||
newTrack.Playlist = playlist
|
||||
tracks = append(tracks, newTrack)
|
||||
|
||||
|
@ -182,7 +187,13 @@ func (yt *YouTube) GetTracks(url string, submitter *gumble.User) ([]interfaces.T
|
|||
return tracks, nil
|
||||
}
|
||||
|
||||
track, err = yt.getTrack(id, submitter)
|
||||
// Submitter added a track!
|
||||
offset := dummyOffset
|
||||
if len(urlSplit) == 2 {
|
||||
offset, _ = time.ParseDuration(urlSplit[1])
|
||||
}
|
||||
|
||||
track, err = yt.getTrack(id, submitter, offset)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -190,7 +201,7 @@ func (yt *YouTube) GetTracks(url string, submitter *gumble.User) ([]interfaces.T
|
|||
return tracks, nil
|
||||
}
|
||||
|
||||
func (yt *YouTube) getTrack(id string, submitter *gumble.User) (bot.Track, error) {
|
||||
func (yt *YouTube) getTrack(id string, submitter *gumble.User, offset time.Duration) (bot.Track, error) {
|
||||
var (
|
||||
resp *http.Response
|
||||
err error
|
||||
|
@ -230,6 +241,7 @@ func (yt *YouTube) getTrack(id string, submitter *gumble.User) (bot.Track, error
|
|||
Filename: id + ".track",
|
||||
ThumbnailURL: thumbnail,
|
||||
Duration: duration,
|
||||
PlaybackOffset: offset,
|
||||
Playlist: nil,
|
||||
}, nil
|
||||
}
|
||||
|
|
Reference in a new issue