Skip to content

Instantly share code, notes, and snippets.

@psykidellic
Created March 3, 2014 06:53
Show Gist options
  • Save psykidellic/9319694 to your computer and use it in GitHub Desktop.
Save psykidellic/9319694 to your computer and use it in GitHub Desktop.
diff --git a/app/assets/javascripts/modules/models/providers/youtube.js.coffee b/app/assets/javascripts/modules/models/providers/youtube.js.coffee
index 8b8cd65..d307e46 100644
--- a/app/assets/javascripts/modules/models/providers/youtube.js.coffee
+++ b/app/assets/javascripts/modules/models/providers/youtube.js.coffee
@@ -23,7 +23,7 @@ define (require) ->
find: (type, str, callback) -> # find == search?!
if type == 'playlists'
- @fetchVideosFromPlaylist("#{str}?v=2", callback)
+ @fetchPlaylist(str, callback)
else
@search(str, callback)
@@ -86,10 +86,26 @@ define (require) ->
callback(playlists)
)
+ fetchPlaylist: (uri, callback) ->
+ youtube_base_url = 'http://gdata.youtube.com/feeds/api/playlists'
+ params = { alt: 'json', v: '2' }
+ # RN: the "?" is important
+ url = "#{youtube_base_url}/#{uri}?&#{$.param params}"
+
+ console.log("Fetch videos from playlist #{url}")
+
+ # $.get(url)
+ # .done((data) ->
+ # console.log data
+
+
fetchVideosFromPlaylist: (uri, callback) ->
youtube_base_url = 'http://gdata.youtube.com/feeds/api/playlists'
params = alt: 'json'
- url = "#{youtube_base_url}/#{uri}&#{$.param params}"
+ # RN: the "?" is important
+ url = "#{youtube_base_url}/#{uri}?&#{$.param params}"
+
+ console.log("Fetch videos from playlist #{url}")
$.get(url)
.done((data) ->
@@ -108,6 +124,7 @@ define (require) ->
# coverart_medium: data.feed['media$group']['media$thumbnail'][1].url
# }
for video in data.feed.entry
+ debugger
try
tracks.push
uri: video.media$group.yt$videoid.$t
@@ -119,6 +136,7 @@ define (require) ->
coverart_medium: video['media$group']['media$thumbnail']?[1].url
author: video.author?[0].name.$t
catch e
+ console.log(e)
# Youtube apparently has integrity problems, ignore songs without usable metadata
callback(tracks) if callback?
# callback(tracks, playlist) if callback?
diff --git a/app/assets/javascripts/modules/models/search.js.coffee b/app/assets/javascripts/modules/models/search.js.coffee
index b77de1c..4fbc502 100644
--- a/app/assets/javascripts/modules/models/search.js.coffee
+++ b/app/assets/javascripts/modules/models/search.js.coffee
@@ -18,10 +18,10 @@ define (require) ->
filter_exists = @get('filter')?
filter = @get('filter')
# @searchBeamto(callback, type: 'artist') unless filter_exists and filter isnt "artist"
- @searchBeamto(callback, type: ['album', 'song']) unless filter_exists and filter isnt "music"
+ # @searchBeamto(callback, type: ['album', 'song']) unless filter_exists and filter isnt "music"
@searchYoutube(callback) unless filter_exists and filter isnt "music"
- @searchSoundcloud(callback) unless filter_exists and filter isnt "music"
- @searchForPlaylist(callback) unless filter_exists and filter isnt "playlist"
+ # @searchSoundcloud(callback) unless filter_exists and filter isnt "music"
+ # @searchForPlaylist(callback) unless filter_exists and filter isnt "playlist"
# Apart from beamto we also need to search for
# albums having an artist named by it. So we want to discover
diff --git a/app/assets/javascripts/modules/router.js.coffee b/app/assets/javascripts/modules/router.js.coffee
index 695a967..da5f2ae 100644
--- a/app/assets/javascripts/modules/router.js.coffee
+++ b/app/assets/javascripts/modules/router.js.coffee
@@ -143,9 +143,14 @@ define (require) ->
@explore()
media: (source, type, id) ->
- console.log "initialize url media/"
provider = app.get(source)
- provider.find(type, id, (track, playlist=null) =>
+ provider.find(type, id , (obj) =>
+ # obj can be of, youtube-playlist, youtube, soundcloud-playlist or soundcloud
+ # if type == 'playlist'
+
+ # else type == 'asdasd'
+
+
if source == 'youtube'
if playlist == null
$.each(track, (idx, val) =>
diff --git a/app/assets/javascripts/modules/views/media/item.js.coffee b/app/assets/javascripts/modules/views/media/item.js.coffee
index 0a3a210..5eebdbf 100644
--- a/app/assets/javascripts/modules/views/media/item.js.coffee
+++ b/app/assets/javascripts/modules/views/media/item.js.coffee
@@ -80,7 +80,9 @@ define (require) ->
# to something like Twisted's maybeDeferred() role. Because, the playables
# can be coming from HTTP call resulting in response later on.
yt = app.get('youtube')
- yt.fetchVideosFromPlaylist(@model.get('uri'), (tracks) =>
+ # Playlist contains /playlist already as we want to show a link to it.
+ playlist_id = @model.get('uri').split('/').pop()
+ yt.fetchVideosFromPlaylist(playlist_id, (tracks) =>
playables = _.map(tracks, (track) ->
new Santoor.Playable(
source: 'youtube'
@@ -92,6 +94,7 @@ define (require) ->
collection_source: 'playlist'
)
)
+ app.trigger('player:playSongs', playables)
)
else
console.log("Invalid source #{@model.get('source')}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment