Hi, here's the debdiff for my libquvi NMU.
Cheers, Moritz
diff -Nru libquvi-0.2.0/debian/changelog libquvi-0.2.0/debian/changelog --- libquvi-0.2.0/debian/changelog 2010-05-17 21:54:26.000000000 -0400 +++ libquvi-0.2.0/debian/changelog 2010-08-05 11:50:48.000000000 -0400 @@ -1,3 +1,10 @@ +libquvi (0.2.0-1.1) unstable; urgency=low + + * Non-maintainer upload. + * Update Youtube support (Closes: #589976) + + -- Moritz Muehlenhoff <j...@debian.org> Thu, 05 Aug 2010 11:50:07 -0400 + libquvi (0.2.0-1) unstable; urgency=low * New upstream version diff -Nru libquvi-0.2.0/debian/patches/debian-changes-0.2.0-1.1 libquvi-0.2.0/debian/patches/debian-changes-0.2.0-1.1 --- libquvi-0.2.0/debian/patches/debian-changes-0.2.0-1.1 1969-12-31 19:00:00.000000000 -0500 +++ libquvi-0.2.0/debian/patches/debian-changes-0.2.0-1.1 2010-08-05 11:51:32.000000000 -0400 @@ -0,0 +1,255 @@ +Description: Upstream changes introduced in version 0.2.0-1.1 + This patch has been created by dpkg-source during the package build. + Here's the last changelog entry, hopefully it gives details on why + those changes were made: + . + libquvi (0.2.0-1.1) unstable; urgency=low + . + * Non-maintainer upload. + * Update Youtube support (Closes: #589976) + . + The person named in the Author field signed this changelog entry. +Author: Moritz Muehlenhoff <j...@debian.org> +Bug-Debian: http://bugs.debian.org/589976 + +--- +The information above should follow the Patch Tagging Guidelines, please +checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here +are templates for supplementary fields that you might want to add: + +Origin: <vendor|upstream|other>, <url of original patch> +Bug: <url in upstream bugtracker> +Bug-Debian: http://bugs.debian.org/<bugnumber> +Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber> +Forwarded: <no|not-needed|url proving that it has been forwarded> +Reviewed-By: <name and email of someone who approved the patch> +Last-Update: <YYYY-MM-DD> + +--- libquvi-0.2.0.orig/share/lua/website/youtube.lua ++++ libquvi-0.2.0/share/lua/website/youtube.lua +@@ -1,42 +1,22 @@ +---[[ +-/* +-* Copyright (C) 2010 Toni Gundogdu. +-* +-* This file is part of quvi, see http://quvi.googlecode.com/ +-* +-* This program is free software: you can redistribute it and/or modify +-* it under the terms of the GNU General Public License as published by +-* the Free Software Foundation, either version 3 of the License, or +-* (at your option) any later version. +-* +-* This program is distributed in the hope that it will be useful, +-* but WITHOUT ANY WARRANTY; without even the implied warranty of +-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-* GNU General Public License for more details. +-* +-* You should have received a copy of the GNU General Public License +-* along with this program. If not, see <http://www.gnu.org/licenses/>. +-*/ +-]]-- +- +--- If you make improvements to this script, drop a line. Thanks. +--- <http://quvi.googlecode.com/> +- +---[[ +-NOTES +-* This script fetches "video info" first +- - Advantages: requires less bandwidth, works around sign-in-to-view +- - Disadvantages: fails frequently for still unknown reason +-* If the above fails +- - Dump server returned error to stdout as a warning +- - Fetch and parse video page instead +- - Advantages: works for most (unrestricted) videos +- - Disadvantages: +- - Requires (a lot) more bandwidth +- - Does not work with videos that require signing-in-to-view +-]]-- + +--- These are my formats. ++-- Copyright (C) 2010 Toni Gundogdu. ++-- ++-- This file is part of quvi <http://quvi.googlecode.com/>. ++-- ++-- This program is free software: you can redistribute it and/or modify ++-- it under the terms of the GNU General Public License as published by ++-- the Free Software Foundation, either version 3 of the License, or ++-- (at your option) any later version. ++-- ++-- This program is distributed in the hope that it will be useful, ++-- but WITHOUT ANY WARRANTY; without even the implied warranty of ++-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++-- GNU General Public License for more details. ++-- ++-- You should have received a copy of the GNU General Public License ++-- along with this program. If not, see <http://www.gnu.org/licenses/>. ++ ++-- Formats. + local lookup = { + mobile = "17", -- 3gp + sd_270p = "18", -- 480x270 +@@ -46,60 +26,39 @@ local lookup = { + hd_1080p = "37" -- 1920x1080 + } + +--- Returns script details. ++-- Identify the script. + function ident (page_url) +- +- -- This is what I return. +- local t = {} +- +- -- This is my domain. +- t.domain = "youtube.com" +- +- -- This is my formats-string. ++ local t = {} ++ t.domain = "youtube.com" + t.formats = "" + for k,_ in pairs (lookup) do + t.formats = t.formats .."|".. k + end + t.formats = "default|best" .. t.formats +- +- -- This is my response to "Will you handle this URL?" +- -- Note that page_url may be nil. + if (page_url ~= nil) then + page_url = youtubify(page_url) + end + t.will_handle = (page_url ~= nil and page_url:find(t.domain) ~= nil) +- +- -- Here are my details. + return t +- + end + +--- Fetches video page and parses the video URL. + function parse (video) +- +- -- This is my "host ID". +- video.host_id = "youtube" +- +- -- Page URL. ++ video.host_id = "youtube" + local page_url = youtubify(video.page_url) + +- -- This is my video ID. + local _,_,s = page_url:find("v=([%w-_]+)") + video.id = s or error ("no match: video id") + +- -- Fetch and pray. +- video,t,best = get_video_info(video) +- if (video.title == nil) then +- video,t,best = old_faithful(page_url, video) ++ local t,best = get_video_info (video) ++ if (t == nil) then ++ t,best = old_faithful (page_url, video) + end + +- -- Construct the video URL. + local video_url = + string.format( +- "http://youtube.com/get_video?video_id=%s&t=%s", ++ "http://youtube.com/get_video?video_id=%s&t=%s&asv=2", + video.id, quvi.unescape(t)) + +- -- Choose correct format ID. + if (best == nil and video.requested_format == "best") then + print (" > Warning: Unable to find `best' format. Use `default'.") + end +@@ -121,79 +80,66 @@ function parse (video) + video_url = video_url .."&fmt=".. fmt_id + end + +- -- Set my video URL. + video.url = {video_url} + +- -- Return the updated video properties. + return video +- + end + +--- Youtube video page URL unwrangler. ++-- Youtubify the URL. + function youtubify (url) + url = url:gsub("-nocookie", "") -- youtube-nocookie.com + url = url:gsub("/v/", "/watch?v=") -- embedded + return url + end + +--- The preferred method, uses less bandwidth, fails for some videos. +--- See also the NOTES above. +-function get_video_info (video) ++-- Should work around at least some of the videos that require ++-- signing in first. Requires less bandwidth than the "old faithful". ++-- This may, however, fail with some (older?) videos. ++function get_video_info (video, result) + +- -- Fetch video info. + local config_url = string.format( + "http://www.youtube.com/get_video_info?&video_id=%s" + .. "&el=detailpage&ps=default&eurl=&gl=US&hl=en", video.id) + + local config = quvi.unescape( quvi.fetch(config_url, "config") ) + +- -- Check response. For still unknown reasons, the above +- -- does not work for all videos that I've tried so far. + local _,_,s = config:find("&reason=(.-)[?:&]?$") + if (s ~= nil) then +- print (" > Warning: get_video_info: " .. s:gsub("+"," ")) +- print (" > Warning: Revert to fetch video page instead.") +- return video -- This one's for the Old Faithful. ++ local reason = s:gsub("+"," ") ++ local _,_,code = config:find("&errorcode=(.-)[?:&?$]") ++ if (code == "150") then error (reason) end ++ print (" > Warning: get_video_info: " .. reason) ++ print (" > Warning: Fetch video page instead.") ++ return nil -- This one's for the Old Faithful. + end + +- -- This is my video title. + local _,_,s = config:find("&title=(.-)&") + video.title = s or error ("no match: video title") + video.title = video.title:gsub("+"," ") + +- -- This is my t(oken) param used to construct the video URL. + local _,_,s = config:find("&token=(.-)&") + local t = s or error ("no match: token parameter") + +- -- Best format. + local _,_,best = config:find("&fmt_map=(%d+)") + +- -- Return parsed details. +- return video, t, best +- ++ return t, best + end + +--- Fetch video page from the user specified URL and parse. +--- See also the NOTES above. ++-- As long as video is not otherwise retricted (e.g. age check), this function ++-- should work with most videos. Page fetches, however, typically require ++-- a lot more bandwidth compared to the config fetch (above). + function old_faithful (page_url, video) +- +- -- Fetch video page. + local page = quvi.fetch(page_url) + +- -- This is my video title. + local _,_,s = page:find('<meta name="title" content="(.-)"') + video.title = s or error ("no match: video title") + +- -- This is my t param used to construct the video URL. + local _,_,s = page:find('&t=(.-)&') + local t = s or error ("no match: t param") + +- -- Best format + local _,_,best = page:find("&fmt_map=(%d+)") + +- -- Return parsed details. +- return video, t, best +- ++ return t, best + end + + diff -Nru libquvi-0.2.0/debian/patches/series libquvi-0.2.0/debian/patches/series --- libquvi-0.2.0/debian/patches/series 1969-12-31 19:00:00.000000000 -0500 +++ libquvi-0.2.0/debian/patches/series 2010-08-05 11:51:32.000000000 -0400 @@ -0,0 +1 @@ +debian-changes-0.2.0-1.1