Git commit 131543e5ede308fc5d4e0c51fea934e3ac845773 by Robert Riemann. Committed on 01/09/2011 at 23:07. Pushed by rriemann into branch 'master'. adding automatic iterating of youtube el param For some videos Youtube allow only the playback when using a special el parameter while video requesting. The following patch iterates automatically over different parameters before stopping with an error message shown to the user. M +19 -5 lib/provider/youtube/Youtube.rb http://commits.kde.org/kubeplayer/131543e5ede308fc5d4e0c51fea934e3ac845773 diff --git a/lib/provider/youtube/Youtube.rb b/lib/provider/youtube/Youtube.rb index e04b518..e7fcb09 100644 --- a/lib/provider/youtube/Youtube.rb +++ b/lib/provider/youtube/Youtube.rb @@ -48,14 +48,17 @@ class Video < KubePlayer::Video def initialize kurl super(kurl) + + @el_mode_index = 0 end - REQUEST_URL = 'http://www.youtube.com/get_video_info?&video_id=%s&el=embedded&ps=default&eurl=&gl=US&hl=en' + REQUEST_URL = 'http://www.youtube.com/get_video_info?&video_id=%s&el=%s&ps=default&eurl=&gl=US&hl=en' + EL_MODE = %w{embedded vevo detailpage} def request_video_url if @video_url == nil @video_url = false @id = @url.url.match(/\bv=([^&]+)/)[1] - infoRequestUrl = KDE::Url.new(REQUEST_URL % @id) + infoRequestUrl = KDE::Url.new(REQUEST_URL % [@id, EL_MODE[@el_mode_index]]) # infoRequestUrl.add_query_item 'video_id', @id infoRequestJob = KIO::storedGet infoRequestUrl , KIO::NoReload, KIO::HideProgressInfo infoRequestJob.add_meta_data 'cookies', 'none' @@ -75,12 +78,23 @@ class Video < KubePlayer::Video end # http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs @fmtUrlMap.delete_if {|fmt,url| fmt > 40} # FIXME to bypass problems with webm (phonon?) - if video = @fmtUrlMap.max + if metaInfo[:status] == "ok" and video = @fmtUrlMap.max @video_url = KDE::Url.new video[1] emit got_video_url(Qt::Variant.from_value(self)) else - STDERR.puts "no accessible video found" - KDE::MessageBox.messageBox(nil, KDE::MessageBox::Sorry, "It was not possible to grap an accessible video.", "Youtube Video Plugin") + if @el_mode_index < EL_MODE.size - 1 + @el_mode_index += 1 + @video_url = nil + request_video_url # try same request with another el parameter see video.cpp from minitube + else + if metaInfo[:reason] + msg = "Youtube reports:

" + metaInfo[:reason].gsub('+',' ') + else + msg = "It was not possible to grap an accessible video." + end + STDERR.puts msg + KDE::MessageBox.messageBox(nil, KDE::MessageBox::Sorry, msg, "Youtube Video Plugin") + end end end elsif @video_url != false