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 <[email protected]> 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 <[email protected]>
+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