Hello community,

here is the log from the commit of package libquvi for openSUSE:Factory checked 
in at 2014-02-12 11:09:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libquvi (Old)
 and      /work/SRC/openSUSE:Factory/.libquvi.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libquvi"

Changes:
--------
--- /work/SRC/openSUSE:Factory/libquvi/libquvi.changes  2013-10-22 
10:18:54.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.libquvi.new/libquvi.changes     2014-02-12 
11:09:03.000000000 +0100
@@ -1,0 +2,7 @@
+Mon Feb 10 19:32:50 UTC 2014 - [email protected]
+
+- Update to version 0.9.4:
+  + API: Return URLs in escaped (percent-encoded) form.
+  + m_url_unescaped_form: Check if g_uri_unescape_string fails.
+
+-------------------------------------------------------------------

Old:
----
  libquvi-0.9.3.tar.xz

New:
----
  libquvi-0.9.4.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libquvi.spec ++++++
--- /var/tmp/diff_new_pack.coSvO8/_old  2014-02-12 11:09:04.000000000 +0100
+++ /var/tmp/diff_new_pack.coSvO8/_new  2014-02-12 11:09:04.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package libquvi
 #
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -16,16 +16,16 @@
 #
 
 
-%define         soname -0_9-0_9_3
+%define         soname -0_9-0_9_4
 
 Name:           libquvi
-Version:        0.9.3
+Version:        0.9.4
 Release:        0
 Summary:        Library to parse flash media stream URLs
 License:        LGPL-2.1+
 Group:          System/Libraries
 Url:            http://quvi.sourceforge.net/
-Source:         
http://downloads.sourceforge.net/project/quvi/0.9/libquvi/libquvi-%{version}.tar.xz
+Source:         
http://sourceforge.net/projects/quvi/files/0.9/libquvi/libquvi-0.9.4.tar.xz
 BuildRequires:  lua-devel
 # For pkgconfig() Provides
 BuildRequires:  libgcrypt-devel

++++++ libquvi-0.9.3.tar.xz -> libquvi-0.9.4.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/ChangeLog new/libquvi-0.9.4/ChangeLog
--- old/libquvi-0.9.3/ChangeLog 2013-09-03 16:31:59.000000000 +0200
+++ new/libquvi-0.9.4/ChangeLog 2013-11-10 08:46:58.000000000 +0100
@@ -1,3 +1,221 @@
+commit 47c744f
+Author: Toni Gundogdu <[email protected]>
+Date:   2013-11-10
+
+    Update NEWS for v0.9.4
+    
+    Signed-off-by: Toni Gundogdu <[email protected]>
+
+NEWS
+
+commit 1522663
+Author: Toni Gundogdu <[email protected]>
+Date:   2013-10-24
+
+    DOC: Make doxygen ignore `scripts_version_s'
+    
+    This fixes the "warning: Compound scripts_version_s is not documented."
+    while running doxygen.
+    
+    Signed-off-by: Toni Gundogdu <[email protected]>
+
+src/api/version.c
+
+commit b79b467
+Author: Toni Gundogdu <[email protected]>
+Date:   2013-10-24
+
+    API: Return URLs in escaped (percent-encoded) form
+    
+    - Extend `l_chk_s' and `l_chk_assign_s' functions to allow the caller
+      set the `escape_url' arg to TRUE to tell the library to store the
+      string value in URI escaped form
+    
+    - All URLs returned by the library (e.g. media stream or thumbnail) are
+      now stored in their escaped form, and passed as such to the
+      applications querying them
+    
+    - "Reserved chars" remain unescaped
+      - https://tools.ietf.org/html/rfc3986#section-2.2
+    
+    Affected API functions
+    
+    - quvi_subtitle_lang_get (QUVI_SUBTITLE_LANG_PROPERTY_URL)
+    - quvi_playlist_get (QUVI_PLAYLIST_*_URL)
+    - quvi_media_get (QUVI_MEDIA_*_URL)
+    
+    Rationale
+    
+    - Address the potential problem of chars getting mangled when the URLs
+      containing UTF8 chars are passed to the application trying to access
+      the URL
+    
+    Signed-off-by: Toni Gundogdu <[email protected]>
+
+src/api/media_get.c
+src/api/playlist_get.c
+src/api/subtitle_lang_get.c
+src/lua/chk.c
+src/lua/chk.h
+src/lua/exec_media_script_parse.c
+src/lua/exec_playlist_script_parse.c
+src/lua/exec_subtitle_export_script_export.c
+src/lua/exec_subtitle_export_script_ident.c
+src/lua/exec_subtitle_script_parse.c
+
+commit 8e23664
+Author: Toni Gundogdu <[email protected]>
+Date:   2013-10-24
+
+    m_url_unescaped_form: Check if g_uri_unescape_string fails
+    
+    Signed-off-by: Toni Gundogdu <[email protected]>
+
+src/misc/url.c
+
+commit 8f43c14
+Merge: 0c68568 6a9ee69
+Author: Toni Gundogdu <[email protected]>
+Date:   2013-10-15
+
+    Merge branch 'tg/next__redo_url_{un}escaping' into next
+
+commit 6a9ee69
+Author: Toni Gundogdu <[email protected]>
+Date:   2013-10-14
+
+    tests/media.c: Add test_media_escaped_utf8_url
+    
+    Signed-off-by: Toni Gundogdu <[email protected]>
+
+tests/media.c
+
+commit 0246e60
+Author: Toni Gundogdu <[email protected]>
+Date:   2013-10-14
+
+    test_media_escaped_url: Replace URL
+    
+    Signed-off-by: Toni Gundogdu <[email protected]>
+
+tests/media.c
+
+commit 95d221b
+Author: Toni Gundogdu <[email protected]>
+Date:   2013-10-14
+
+    test_media_select: Replace URL, update patterns
+    
+    Signed-off-by: Toni Gundogdu <[email protected]>
+
+tests/media.c
+
+commit d7e5c54
+Author: Toni Gundogdu <[email protected]>
+Date:   2013-10-14
+
+    test_media_multi: Replace test URL
+    
+    Other:
+    * Check {video,audio} encoding properties conditionally
+    
+    Signed-off-by: Toni Gundogdu <[email protected]>
+
+tests/media.c
+
+commit fa705e3
+Author: Toni Gundogdu <[email protected]>
+Date:   2013-10-14
+
+    test_scan_core: Replace test URL
+    
+    Signed-off-by: Toni Gundogdu <[email protected]>
+
+tests/scan.c
+
+commit 5b02675
+Author: Toni Gundogdu <[email protected]>
+Date:   2013-10-14
+
+    n_new, n_resolve_new: Escape URL for libcurl
+    
+    Escape the URLs at these chokepoints before they are passed to libcurl
+    (via CURLOPT_URL). libcurl works with UTF8 chars as long as they have
+    been escaped.
+    
+    Signed-off-by: Toni Gundogdu <[email protected]>
+
+src/net/handle.c
+
+commit 3b2a19d
+Author: Toni Gundogdu <[email protected]>
+Date:   2013-10-14
+
+    m_subtitle_new: Store input URL in unescaped form
+    
+    Signed-off-by: Toni Gundogdu <[email protected]>
+
+src/misc/subtitle.c
+
+commit c312f9a
+Author: Toni Gundogdu <[email protected]>
+Date:   2013-10-14
+
+    m_playlist_new: Store input URL in unescaped form
+    
+    Signed-off-by: Toni Gundogdu <[email protected]>
+
+src/misc/playlist.c
+
+commit 3e5cb7d
+Author: Toni Gundogdu <[email protected]>
+Date:   2013-10-14
+
+    m_media_new: Store input URL in unescaped form
+    
+    Signed-off-by: Toni Gundogdu <[email protected]>
+
+src/misc/media.c
+
+commit 4a626ab
+Author: Toni Gundogdu <[email protected]>
+Date:   2013-10-14
+
+    Add misc/url.* with m_url_(un)escaped_form
+    
+    Signed-off-by: Toni Gundogdu <[email protected]>
+
+src/misc/Makefile.am
+src/misc/url.c
+src/misc/url.h
+
+commit 741d967
+Author: Toni Gundogdu <[email protected]>
+Date:   2013-10-14
+
+    m_unescape_url: Remove completely
+    
+    This function will be replaced by m_url_(un)escaped_form.
+    
+    Signed-off-by: Toni Gundogdu <[email protected]>
+
+src/misc/Makefile.am
+src/misc/media.c
+src/misc/playlist.c
+src/misc/subtitle.c
+src/misc/unescape.c
+src/misc/unescape.h
+
+commit 0c68568
+Author: Toni Gundogdu <[email protected]>
+Date:   2013-10-13
+
+    DOC: Update C API reference URL
+    
+    Signed-off-by: Toni Gundogdu <[email protected]>
+
+doc/footer.txt
+
 commit c0a4fec
 Author: Toni Gundogdu <[email protected]>
 Date:   2013-09-03
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/NEWS new/libquvi-0.9.4/NEWS
--- old/libquvi-0.9.3/NEWS      2013-09-03 16:30:29.000000000 +0200
+++ new/libquvi-0.9.4/NEWS      2013-11-10 08:44:57.000000000 +0100
@@ -1,3 +1,12 @@
+v0.9.4  [2013-11-10]
+
+Toni Gundogdu:
+  - API: Return URLs in escaped (percent-encoded) form [b79b467]
+  - FIX: m_url_unescaped_form: Check if g_uri_unescape_string fails [8e23664]
+
+ 23 files changed, 255 insertions(+), 145 deletions(-)
+
+
 v0.9.3  [2013-09-03]
 
 Toni Gundogdu:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/VERSION new/libquvi-0.9.4/VERSION
--- old/libquvi-0.9.3/VERSION   2013-09-03 16:31:59.000000000 +0200
+++ new/libquvi-0.9.4/VERSION   2013-11-10 08:46:53.000000000 +0100
@@ -1 +1 @@
-v0.9.3
+v0.9.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/configure new/libquvi-0.9.4/configure
--- old/libquvi-0.9.3/configure 2013-09-03 16:31:21.000000000 +0200
+++ new/libquvi-0.9.4/configure 2013-11-10 08:45:43.000000000 +0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for libquvi 0.9.3.
+# Generated by GNU Autoconf 2.69 for libquvi 0.9.4.
 #
 # Report bugs to <http://quvi.sf.net/bugs/>.
 #
@@ -590,8 +590,8 @@
 # Identity of this package.
 PACKAGE_NAME='libquvi'
 PACKAGE_TARNAME='libquvi'
-PACKAGE_VERSION='0.9.3'
-PACKAGE_STRING='libquvi 0.9.3'
+PACKAGE_VERSION='0.9.4'
+PACKAGE_STRING='libquvi 0.9.4'
 PACKAGE_BUGREPORT='http://quvi.sf.net/bugs/'
 PACKAGE_URL='http://quvi.sf.net/'
 
@@ -1386,7 +1386,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures libquvi 0.9.3 to adapt to many kinds of systems.
+\`configure' configures libquvi 0.9.4 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1457,7 +1457,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libquvi 0.9.3:";;
+     short | recursive ) echo "Configuration of libquvi 0.9.4:";;
    esac
   cat <<\_ACEOF
 
@@ -1597,7 +1597,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libquvi configure 0.9.3
+libquvi configure 0.9.4
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2020,7 +2020,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libquvi $as_me 0.9.3, which was
+It was created by libquvi $as_me 0.9.4, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -4297,7 +4297,7 @@
 
 # Define the identity of the package.
  PACKAGE='libquvi'
- VERSION='0.9.3'
+ VERSION='0.9.4'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -17417,7 +17417,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libquvi $as_me 0.9.3, which was
+This file was extended by libquvi $as_me 0.9.4, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -17484,7 +17484,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-libquvi config.status 0.9.3
+libquvi config.status 0.9.4
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/doc/footer.txt 
new/libquvi-0.9.4/doc/footer.txt
--- old/libquvi-0.9.3/doc/footer.txt    2013-09-03 16:28:40.000000000 +0200
+++ new/libquvi-0.9.4/doc/footer.txt    2013-11-10 08:33:09.000000000 +0100
@@ -11,7 +11,7 @@
 
 C API reference::
   The latest C API reference documentation may be viewed online at
-  `http://quvi.sf.net/doc/`.
+  `http://quvi.sourceforge.net/r/api/0.9/`.
 
 GLib::
   http://developer.gnome.org/glib/stable/glib-Base64-Encoding.html
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/doc/man3/libquvi.3 
new/libquvi-0.9.4/doc/man3/libquvi.3
--- old/libquvi-0.9.3/doc/man3/libquvi.3        2013-09-03 16:32:02.000000000 
+0200
+++ new/libquvi-0.9.4/doc/man3/libquvi.3        2013-11-10 08:47:01.000000000 
+0100
@@ -2,12 +2,12 @@
 .\"     Title: libquvi
 .\"    Author: [see the "Authors" section]
 .\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
-.\"      Date: 09/03/2013
+.\"      Date: 11/10/2013
 .\"    Manual: libquvi Manual
-.\"    Source: libquvi 0.9.3
+.\"    Source: libquvi 0.9.4
 .\"  Language: English
 .\"
-.TH "LIBQUVI" "3" "09/03/2013" "libquvi 0\&.9\&.3" "libquvi Manual"
+.TH "LIBQUVI" "3" "11/10/2013" "libquvi 0\&.9\&.4" "libquvi Manual"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -109,7 +109,7 @@
 C API reference
 .RS 4
 The latest C API reference documentation may be viewed online at
-http://quvi\&.sf\&.net/doc/\&;.
+http://quvi\&.sourceforge\&.net/r/api/0\&.9/\&;.
 .RE
 .PP
 GLib
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/doc/man7/quvi-object.7 
new/libquvi-0.9.4/doc/man7/quvi-object.7
--- old/libquvi-0.9.3/doc/man7/quvi-object.7    2013-09-03 16:32:04.000000000 
+0200
+++ new/libquvi-0.9.4/doc/man7/quvi-object.7    2013-11-10 08:47:02.000000000 
+0100
@@ -2,12 +2,12 @@
 .\"     Title: quvi-object
 .\"    Author: [see the "Authors" section]
 .\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
-.\"      Date: 09/03/2013
+.\"      Date: 11/10/2013
 .\"    Manual: libquvi Manual
-.\"    Source: libquvi 0.9.3
+.\"    Source: libquvi 0.9.4
 .\"  Language: English
 .\"
-.TH "QUVI\-OBJECT" "7" "09/03/2013" "libquvi 0\&.9\&.3" "libquvi Manual"
+.TH "QUVI\-OBJECT" "7" "11/10/2013" "libquvi 0\&.9\&.4" "libquvi Manual"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -832,7 +832,7 @@
 C API reference
 .RS 4
 The latest C API reference documentation may be viewed online at
-http://quvi\&.sf\&.net/doc/\&;.
+http://quvi\&.sourceforge\&.net/r/api/0\&.9/\&;.
 .RE
 .PP
 GLib
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/po/libquvi.pot 
new/libquvi-0.9.4/po/libquvi.pot
--- old/libquvi-0.9.3/po/libquvi.pot    2013-09-03 16:32:00.000000000 +0200
+++ new/libquvi-0.9.4/po/libquvi.pot    2013-11-10 08:46:44.000000000 +0100
@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: libquvi 0.9.3\n"
+"Project-Id-Version: libquvi 0.9.4\n"
 "Report-Msgid-Bugs-To: http://quvi.sf.net/bugs/\n";
-"POT-Creation-Date: 2013-09-03 17:32+0300\n"
+"POT-Creation-Date: 2013-11-10 09:46+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <[email protected]>\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/api/media_get.c 
new/libquvi-0.9.4/src/api/media_get.c
--- old/libquvi-0.9.3/src/api/media_get.c       2013-09-03 16:23:14.000000000 
+0200
+++ new/libquvi-0.9.4/src/api/media_get.c       2013-11-10 08:33:09.000000000 
+0100
@@ -160,11 +160,13 @@
 /** @brief Return a media property
 @sa @ref parse_media
 @ingroup mediaprop
-@note Accessing any of the QUVI_MEDIA_STREAM_PROPERTY_* values using
-this function will cause the library to advance to the first stream
-in the list, this will conflict with @ref quvi_media_stream_next,
-causing @ref quvi_media_stream_next to advance from the second stream,
-not the first stream
+@note
+  - Accessing any of the QUVI_MEDIA_STREAM_PROPERTY_* values using this
+    function will cause the library to advance to the first stream in
+    the list, this will conflict with @ref quvi_media_stream_next,
+    causing @ref quvi_media_stream_next to advance from the second
+    stream, not the first stream
+  - URLs will be returned in the escaped form
 */
 void quvi_media_get(quvi_media_t handle, QuviMediaProperty property, ...)
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/api/playlist_get.c 
new/libquvi-0.9.4/src/api/playlist_get.c
--- old/libquvi-0.9.3/src/api/playlist_get.c    2013-09-03 16:23:14.000000000 
+0200
+++ new/libquvi-0.9.4/src/api/playlist_get.c    2013-11-10 08:33:09.000000000 
+0100
@@ -146,6 +146,7 @@
 /** @brief Return a playlist property
 @sa @ref parse_playlist
 @ingroup playlistprop
+@note URLs will be returned in the escaped form
 */
 void quvi_playlist_get(quvi_playlist_t handle,
                        QuviPlaylistProperty property, ...)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/api/subtitle_lang_get.c 
new/libquvi-0.9.4/src/api/subtitle_lang_get.c
--- old/libquvi-0.9.3/src/api/subtitle_lang_get.c       2013-09-03 
16:23:14.000000000 +0200
+++ new/libquvi-0.9.4/src/api/subtitle_lang_get.c       2013-11-10 
08:33:09.000000000 +0100
@@ -113,6 +113,7 @@
 /** @brief Return a subtitle property
 @sa @ref parse_subtitle
 @ingroup subprop
+@note URLs will be returned in the escaped form
 */
 void quvi_subtitle_lang_get(quvi_subtitle_lang_t handle,
                             QuviSubtitleLangProperty n, ...)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/api/version.c 
new/libquvi-0.9.4/src/api/version.c
--- old/libquvi-0.9.3/src/api/version.c 2013-09-03 16:28:40.000000000 +0200
+++ new/libquvi-0.9.4/src/api/version.c 2013-11-10 08:33:09.000000000 +0100
@@ -42,6 +42,7 @@
     }
 }
 
+/** @cond NODOC */
 struct scripts_version_s
 {
   gchar configuration[128];
@@ -49,6 +50,7 @@
 };
 
 typedef struct scripts_version_s *scripts_version_t;
+/** @endcond */
 
 static void scripts_version_read(scripts_version_t v)
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/lua/chk.c 
new/libquvi-0.9.4/src/lua/chk.c
--- old/libquvi-0.9.3/src/lua/chk.c     2013-05-19 17:44:39.000000000 +0200
+++ new/libquvi-0.9.4/src/lua/chk.c     2013-11-10 08:33:09.000000000 +0100
@@ -1,5 +1,5 @@
 /* libquvi
- * Copyright (C) 2012  Toni Gundogdu <[email protected]>
+ * Copyright (C) 2012,2013  Toni Gundogdu <[email protected]>
  *
  * This file is part of libquvi <http://quvi.sourceforge.net/>.
  *
@@ -30,6 +30,7 @@
 /* -- */
 #include "lua/chk.h"
 #include "lua/def.h"
+#include "misc/url.h"
 #include "misc/re.h"
 
 /*
@@ -51,7 +52,7 @@
   lua_pushnil(l);
   while (lua_next(l, LI_KEY))
     {
-      l_chk_assign_s(l, k_domains, qs->domains, TRUE);
+      l_chk_assign_s(l, k_domains, qs->domains, TRUE, FALSE);
       l_chk_assign_b(l, k_can_parse_url, &r);
       lua_pop(l, 1);
     }
@@ -70,7 +71,8 @@
  *
  * NOTE: g_free the returned value when done using it.
  */
-gboolean l_chk_s(lua_State *l, const gchar *w, gchar **v, gboolean trim_flag)
+gboolean l_chk_s(lua_State *l, const gchar *w, gchar **v,
+                 gboolean trim_flag, gboolean escape_url)
 {
   if (lua_isstring(l, LI_KEY) && lua_isstring(l, LI_VALUE))
     {
@@ -80,6 +82,12 @@
           *v = (trim_flag == TRUE)
                ? m_trim_ws(s)
                : g_strdup(s);
+          if (escape_url == TRUE)
+            {
+              gchar *e = m_url_escaped_form(*v);
+              g_free(*v);
+              *v = e;
+            }
           return (TRUE);
         }
     }
@@ -87,10 +95,10 @@
 }
 
 gboolean l_chk_assign_s(lua_State *l, const gchar *k, GString *v,
-                        gboolean trim_flag)
+                        gboolean trim_flag, gboolean escape_url)
 {
   gchar *s = NULL;
-  if (l_chk_s(l, k, &s, trim_flag) == TRUE)
+  if (l_chk_s(l, k, &s, trim_flag, escape_url) == TRUE)
     {
       g_string_assign(v, s);
       g_free(s);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/lua/chk.h 
new/libquvi-0.9.4/src/lua/chk.h
--- old/libquvi-0.9.3/src/lua/chk.h     2013-05-19 17:44:39.000000000 +0200
+++ new/libquvi-0.9.4/src/lua/chk.h     2013-11-10 08:33:09.000000000 +0100
@@ -1,5 +1,5 @@
 /* libquvi
- * Copyright (C) 2012  Toni Gundogdu <[email protected]>
+ * Copyright (C) 2012,2013  Toni Gundogdu <[email protected]>
  *
  * This file is part of libquvi <http://quvi.sourceforge.net/>.
  *
@@ -24,8 +24,9 @@
 gboolean l_chk_can_parse_url(lua_State*, _quvi_script_t, const gchar*,
                              const gchar*, const gchar*);
 
-gboolean l_chk_assign_s(lua_State*, const gchar*, GString*, gboolean);
-gboolean l_chk_s(lua_State*, const gchar*, gchar**, gboolean);
+gboolean l_chk_assign_s(lua_State*, const gchar*, GString*, gboolean,
+                        gboolean);
+gboolean l_chk_s(lua_State*, const gchar*, gchar**, gboolean, gboolean);
 
 gboolean l_chk_assign_n(lua_State*, const gchar*, gdouble*);
 gboolean l_chk_n(lua_State*, const gchar*, gdouble*);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/lua/exec_media_script_parse.c 
new/libquvi-0.9.4/src/lua/exec_media_script_parse.c
--- old/libquvi-0.9.3/src/lua/exec_media_script_parse.c 2013-05-19 
17:44:39.000000000 +0200
+++ new/libquvi-0.9.4/src/lua/exec_media_script_parse.c 2013-11-10 
08:33:09.000000000 +0100
@@ -52,7 +52,7 @@
   while (lua_next(l, LI_KEY))
     {
       l_chk_assign_n(l, MSS_VIDEO_BITRATE_KBIT_S, &qms->video.bitrate_kbit_s);
-      l_chk_assign_s(l, MSS_VIDEO_ENCODING, qms->video.encoding, TRUE);
+      l_chk_assign_s(l, MSS_VIDEO_ENCODING, qms->video.encoding, TRUE, FALSE);
       l_chk_assign_n(l, MSS_VIDEO_HEIGHT, &qms->video.height);
       l_chk_assign_n(l, MSS_VIDEO_WIDTH, &qms->video.width);
       lua_pop(l, 1);
@@ -66,7 +66,7 @@
   while (lua_next(l, LI_KEY))
     {
       l_chk_assign_n(l, MSS_AUDIO_BITRATE_KBIT_S, &qms->audio.bitrate_kbit_s);
-      l_chk_assign_s(l, MSS_AUDIO_ENCODING, qms->audio.encoding, TRUE);
+      l_chk_assign_s(l, MSS_AUDIO_ENCODING, qms->audio.encoding, TRUE, FALSE);
       lua_pop(l, 1);
     }
 }
@@ -130,9 +130,9 @@
       _chk_stream_sublevel(MSS_VIDEO, l, qm, qms, _foreach_video_property);
       _chk_stream_sublevel(MSS_AUDIO, l, qm, qms, _foreach_audio_property);
       _chk_stream_sublevel(MSS_FLAGS, l, qm, qms, _foreach_flag_property);
-      l_chk_assign_s(l, MSS_CONTAINER, qms->container, TRUE);
-      l_chk_assign_s(l, MSS_URL, qms->url, TRUE);
-      l_chk_assign_s(l, MSS_ID, qms->id, TRUE);
+      l_chk_assign_s(l, MSS_CONTAINER, qms->container, TRUE, FALSE);
+      l_chk_assign_s(l, MSS_URL, qms->url, TRUE, TRUE);
+      l_chk_assign_s(l, MSS_ID, qms->id, TRUE, FALSE);
       lua_pop(l, 1);
     }
   _has_stream_url(l, qms, script_path, i);
@@ -219,9 +219,9 @@
     {
       l_chk_assign_n(l, MS_START_TIME_MS, &qm->start_time_ms);
       l_chk_assign_n(l, MS_DURATION_MS, &qm->duration_ms);
-      l_chk_assign_s(l, MS_THUMB_URL, qm->url.thumbnail, TRUE);
-      l_chk_assign_s(l, MS_TITLE, qm->title, TRUE);
-      l_chk_assign_s(l, MS_ID, qm->id, TRUE);
+      l_chk_assign_s(l, MS_THUMB_URL, qm->url.thumbnail, TRUE, TRUE);
+      l_chk_assign_s(l, MS_TITLE, qm->title, TRUE, FALSE);
+      l_chk_assign_s(l, MS_ID, qm->id, TRUE, FALSE);
       lua_pop(l, 1);
     }
 }
@@ -232,7 +232,7 @@
   lua_pushnil(l);
   while (lua_next(l, LI_KEY))
     {
-      l_chk_assign_s(l, MS_GOTO_URL, qm->url.redirect_to, TRUE);
+      l_chk_assign_s(l, MS_GOTO_URL, qm->url.redirect_to, TRUE, TRUE);
       lua_pop(l, 1);
     }
   return ((qm->url.redirect_to->len >0) ? TRUE:FALSE);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/lua/exec_playlist_script_parse.c 
new/libquvi-0.9.4/src/lua/exec_playlist_script_parse.c
--- old/libquvi-0.9.3/src/lua/exec_playlist_script_parse.c      2013-05-19 
17:44:39.000000000 +0200
+++ new/libquvi-0.9.4/src/lua/exec_playlist_script_parse.c      2013-11-10 
08:33:09.000000000 +0100
@@ -63,8 +63,8 @@
   while (lua_next(l, LI_KEY)) /* For each qargs.media */
     {
       l_chk_assign_n(l, PSM_DURATION_MS, &(*qpm)->duration_ms);
-      l_chk_assign_s(l, PSM_TITLE, (*qpm)->title, TRUE);
-      l_chk_assign_s(l, PSM_URL, (*qpm)->url, TRUE);
+      l_chk_assign_s(l, PSM_TITLE, (*qpm)->title, TRUE, FALSE);
+      l_chk_assign_s(l, PSM_URL, (*qpm)->url, TRUE, TRUE);
       lua_pop(l, 1);
     }
 
@@ -122,9 +122,9 @@
   lua_pushnil(l);
   while (lua_next(l, LI_KEY))
     {
-      l_chk_assign_s(l, PS_THUMB_URL, qp->url.thumbnail, TRUE);
-      l_chk_assign_s(l, PS_ID, qp->id.playlist, TRUE);
-      l_chk_assign_s(l, PS_TITLE, qp->title, TRUE);
+      l_chk_assign_s(l, PS_THUMB_URL, qp->url.thumbnail, TRUE, TRUE);
+      l_chk_assign_s(l, PS_ID, qp->id.playlist, TRUE, FALSE);
+      l_chk_assign_s(l, PS_TITLE, qp->title, TRUE, FALSE);
       lua_pop(l, 1);
     }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libquvi-0.9.3/src/lua/exec_subtitle_export_script_export.c 
new/libquvi-0.9.4/src/lua/exec_subtitle_export_script_export.c
--- old/libquvi-0.9.3/src/lua/exec_subtitle_export_script_export.c      
2013-05-19 17:44:39.000000000 +0200
+++ new/libquvi-0.9.4/src/lua/exec_subtitle_export_script_export.c      
2013-11-10 08:33:09.000000000 +0100
@@ -52,7 +52,7 @@
   lua_pushnil(l);
   while (lua_next(l, LI_KEY))
     {
-      l_chk_assign_s(l, SUES_DATA, qse->data, FALSE);
+      l_chk_assign_s(l, SUES_DATA, qse->data, FALSE, FALSE);
       lua_pop(l, 1);
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libquvi-0.9.3/src/lua/exec_subtitle_export_script_ident.c 
new/libquvi-0.9.4/src/lua/exec_subtitle_export_script_ident.c
--- old/libquvi-0.9.3/src/lua/exec_subtitle_export_script_ident.c       
2013-05-19 17:44:39.000000000 +0200
+++ new/libquvi-0.9.4/src/lua/exec_subtitle_export_script_ident.c       
2013-11-10 08:33:09.000000000 +0100
@@ -51,7 +51,7 @@
   lua_pushnil(l);
   while (lua_next(l, LI_KEY))
     {
-      l_chk_assign_s(l, SUES_EXPORT_FORMAT, qs->export.format, TRUE);
+      l_chk_assign_s(l, SUES_EXPORT_FORMAT, qs->export.format, TRUE, FALSE);
       l_chk_assign_b(l, SUES_CAN_EXPORT_DATA, &r);
       lua_pop(l, 1);
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/lua/exec_subtitle_script_parse.c 
new/libquvi-0.9.4/src/lua/exec_subtitle_script_parse.c
--- old/libquvi-0.9.3/src/lua/exec_subtitle_script_parse.c      2013-05-19 
17:44:39.000000000 +0200
+++ new/libquvi-0.9.4/src/lua/exec_subtitle_script_parse.c      2013-11-10 
08:33:09.000000000 +0100
@@ -130,11 +130,11 @@
   lua_pushnil(l);
   while (lua_next(l, LI_KEY))
     {
-      l_chk_assign_s(l, SUSSL_TRANSLATED, qsl->translated, TRUE);
-      l_chk_assign_s(l, SUSSL_ORIGINAL, qsl->original, TRUE);
-      l_chk_assign_s(l, SUSSL_CODE, qsl->code, TRUE);
-      l_chk_assign_s(l, SUSSL_URL, qsl->url, TRUE);
-      l_chk_assign_s(l, SUSSL_ID, qsl->id, TRUE);
+      l_chk_assign_s(l, SUSSL_TRANSLATED, qsl->translated, TRUE, FALSE);
+      l_chk_assign_s(l, SUSSL_ORIGINAL, qsl->original, TRUE, FALSE);
+      l_chk_assign_s(l, SUSSL_CODE, qsl->code, TRUE, FALSE);
+      l_chk_assign_s(l, SUSSL_URL, qsl->url, TRUE, TRUE);
+      l_chk_assign_s(l, SUSSL_ID, qsl->id, TRUE, FALSE);
       lua_pop(l, 1);
     }
   return (_chk_url(l, script_path, qsl, i));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/misc/Makefile.am 
new/libquvi-0.9.4/src/misc/Makefile.am
--- old/libquvi-0.9.3/src/misc/Makefile.am      2013-05-19 17:44:39.000000000 
+0200
+++ new/libquvi-0.9.4/src/misc/Makefile.am      2013-11-10 08:33:09.000000000 
+0100
@@ -16,7 +16,7 @@
   subtitle_export.c\
   to_utf8.c\
   trim.c\
-  unescape.c
+  url.c
 
 hdr=\
   match_media_script.h\
@@ -32,7 +32,7 @@
   slst.h\
   subtitle_export.h\
   subtitle.h\
-  unescape.h
+  url.h
 
 noinst_LTLIBRARIES=libconvenience_misc.la
 libconvenience_misc_la_SOURCES=$(src) $(hdr)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/misc/Makefile.in 
new/libquvi-0.9.4/src/misc/Makefile.in
--- old/libquvi-0.9.3/src/misc/Makefile.in      2013-09-03 16:31:24.000000000 
+0200
+++ new/libquvi-0.9.4/src/misc/Makefile.in      2013-11-10 08:45:46.000000000 
+0100
@@ -89,8 +89,7 @@
        libconvenience_misc_la-subtitle.lo \
        libconvenience_misc_la-subtitle_export.lo \
        libconvenience_misc_la-to_utf8.lo \
-       libconvenience_misc_la-trim.lo \
-       libconvenience_misc_la-unescape.lo
+       libconvenience_misc_la-trim.lo libconvenience_misc_la-url.lo
 am__objects_2 =
 am_libconvenience_misc_la_OBJECTS = $(am__objects_1) $(am__objects_2)
 libconvenience_misc_la_OBJECTS = $(am_libconvenience_misc_la_OBJECTS)
@@ -316,7 +315,7 @@
   subtitle_export.c\
   to_utf8.c\
   trim.c\
-  unescape.c
+  url.c
 
 hdr = \
   match_media_script.h\
@@ -332,7 +331,7 @@
   slst.h\
   subtitle_export.h\
   subtitle.h\
-  unescape.h
+  url.h
 
 noinst_LTLIBRARIES = libconvenience_misc.la
 libconvenience_misc_la_SOURCES = $(src) $(hdr)
@@ -419,7 +418,7 @@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/libconvenience_misc_la-subtitle_export.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/libconvenience_misc_la-to_utf8.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/libconvenience_misc_la-trim.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/libconvenience_misc_la-unescape.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/libconvenience_misc_la-url.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF 
$(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -561,12 +560,12 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC 
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(libconvenience_misc_la_CPPFLAGS) $(CPPFLAGS) 
$(libconvenience_misc_la_CFLAGS) $(CFLAGS) -c -o libconvenience_misc_la-trim.lo 
`test -f 'trim.c' || echo '$(srcdir)/'`trim.c
 
-libconvenience_misc_la-unescape.lo: unescape.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC 
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(libconvenience_misc_la_CPPFLAGS) $(CPPFLAGS) 
$(libconvenience_misc_la_CFLAGS) $(CFLAGS) -MT 
libconvenience_misc_la-unescape.lo -MD -MP -MF 
$(DEPDIR)/libconvenience_misc_la-unescape.Tpo -c -o 
libconvenience_misc_la-unescape.lo `test -f 'unescape.c' || echo 
'$(srcdir)/'`unescape.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) 
$(DEPDIR)/libconvenience_misc_la-unescape.Tpo 
$(DEPDIR)/libconvenience_misc_la-unescape.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unescape.c' 
object='libconvenience_misc_la-unescape.lo' libtool=yes @AMDEPBACKSLASH@
+libconvenience_misc_la-url.lo: url.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC 
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(libconvenience_misc_la_CPPFLAGS) $(CPPFLAGS) 
$(libconvenience_misc_la_CFLAGS) $(CFLAGS) -MT libconvenience_misc_la-url.lo 
-MD -MP -MF $(DEPDIR)/libconvenience_misc_la-url.Tpo -c -o 
libconvenience_misc_la-url.lo `test -f 'url.c' || echo '$(srcdir)/'`url.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) 
$(DEPDIR)/libconvenience_misc_la-url.Tpo 
$(DEPDIR)/libconvenience_misc_la-url.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='url.c' 
object='libconvenience_misc_la-url.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC 
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(libconvenience_misc_la_CPPFLAGS) $(CPPFLAGS) 
$(libconvenience_misc_la_CFLAGS) $(CFLAGS) -c -o 
libconvenience_misc_la-unescape.lo `test -f 'unescape.c' || echo 
'$(srcdir)/'`unescape.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC 
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(libconvenience_misc_la_CPPFLAGS) $(CPPFLAGS) 
$(libconvenience_misc_la_CFLAGS) $(CFLAGS) -c -o libconvenience_misc_la-url.lo 
`test -f 'url.c' || echo '$(srcdir)/'`url.c
 
 mostlyclean-libtool:
        -rm -f *.lo
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/misc/media.c 
new/libquvi-0.9.4/src/misc/media.c
--- old/libquvi-0.9.3/src/misc/media.c  2013-09-03 16:28:40.000000000 +0200
+++ new/libquvi-0.9.4/src/misc/media.c  2013-11-10 08:33:09.000000000 +0100
@@ -27,23 +27,33 @@
 #include "_quvi_s.h"
 #include "_quvi_media_s.h"
 /* -- */
-#include "misc/unescape.h"
 #include "misc/media.h"
 #include "misc/slst.h"
+#include "misc/url.h"
 
 gpointer m_media_new(_quvi_t q, const gchar *url)
 {
-  _quvi_media_t qm = g_new0(struct _quvi_media_s, 1);
-  /* URL */
+  _quvi_media_t qm;
+  gchar *u;
+
+  qm = g_new0(struct _quvi_media_s, 1);
+
   qm->url.redirect_to = g_string_new(NULL);
   qm->url.thumbnail = g_string_new(NULL);
-  qm->url.input = g_string_new(url);
-  m_unescape_url(qm->url.input);
-  /* Handle */
-  qm->handle.quvi = q;
-  /* Other */
+
+  /*
+   * Store the input URL in the unescaped form which is what the `ident'
+   * functions of the scripts expect when the support check is run
+   * offline.
+   */
+  u = m_url_unescaped_form(url);
+  qm->url.input = g_string_new(u);
+  g_free(u);
+
   qm->title = g_string_new(NULL);
   qm->id = g_string_new(NULL);
+  qm->handle.quvi = q;
+
   return (qm);
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/misc/playlist.c 
new/libquvi-0.9.4/src/misc/playlist.c
--- old/libquvi-0.9.3/src/misc/playlist.c       2013-09-03 16:28:40.000000000 
+0200
+++ new/libquvi-0.9.4/src/misc/playlist.c       2013-11-10 08:33:09.000000000 
+0100
@@ -27,23 +27,32 @@
 #include "_quvi_s.h"
 #include "_quvi_playlist_s.h"
 /* -- */
-#include "misc/unescape.h"
 #include "misc/playlist.h"
 #include "misc/slst.h"
+#include "misc/url.h"
 
 gpointer m_playlist_new(_quvi_t q, const gchar *url)
 {
-  _quvi_playlist_t qp = g_new0(struct _quvi_playlist_s, 1);
-  /* URL */
+  _quvi_playlist_t qp;
+  gchar *u;
+
+  qp = g_new0(struct _quvi_playlist_s, 1);
+
   qp->url.thumbnail = g_string_new(NULL);
-  qp->url.input = g_string_new(url);
-  m_unescape_url(qp->url.input);
-  /* ID */
   qp->id.playlist = g_string_new(NULL);
-  /* Handle */
-  qp->handle.quvi = q;
-  /* Other */
+
+  /*
+   * Store the input URL in the unescaped form which is what the `ident'
+   * functions of the scripts expect when the support check is run
+   * offline.
+   */
+  u = m_url_unescaped_form(url);
+  qp->url.input = g_string_new(u);
+  g_free(u);
+
   qp->title = g_string_new(NULL);
+  qp->handle.quvi = q;
+
   return (qp);
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/misc/subtitle.c 
new/libquvi-0.9.4/src/misc/subtitle.c
--- old/libquvi-0.9.3/src/misc/subtitle.c       2013-09-03 16:28:40.000000000 
+0200
+++ new/libquvi-0.9.4/src/misc/subtitle.c       2013-11-10 08:33:09.000000000 
+0100
@@ -27,18 +27,27 @@
 #include "_quvi_s.h"
 #include "_quvi_subtitle_s.h"
 /* -- */
-#include "misc/unescape.h"
 #include "misc/subtitle.h"
 #include "misc/slst.h"
+#include "misc/url.h"
 
 gpointer m_subtitle_new(_quvi_t q, const gchar *url)
 {
-  _quvi_subtitle_t qsub = g_new0(struct _quvi_subtitle_s, 1);
-  /* URL */
-  qsub->url.input = g_string_new(url);
-  m_unescape_url(qsub->url.input);
-  /* Handle */
+  _quvi_subtitle_t qsub;
+  gchar *u;
+
+  qsub = g_new0(struct _quvi_subtitle_s, 1);
   qsub->handle.quvi = q;
+
+  /*
+   * Store the input URL in the unescaped form which is what the `ident'
+   * functions of the scripts expect when the support check is run
+   * offline.
+   */
+  u = m_url_unescaped_form(url);
+  qsub->url.input = g_string_new(u);
+  g_free(u);
+
   return (qsub);
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/misc/unescape.c 
new/libquvi-0.9.4/src/misc/unescape.c
--- old/libquvi-0.9.3/src/misc/unescape.c       2013-09-03 16:23:47.000000000 
+0200
+++ new/libquvi-0.9.4/src/misc/unescape.c       1970-01-01 01:00:00.000000000 
+0100
@@ -1,38 +0,0 @@
-/* libquvi
- * Copyright (C) 2012  Toni Gundogdu <[email protected]>
- *
- * This file is part of libquvi <http://quvi.sourceforge.net/>.
- *
- * This library is free software: you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public
- * License as published by the Free Software Foundation, either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library 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 Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General
- * Public License along with this library.  If not, see
- * <http://www.gnu.org/licenses/>.
- */
-
-#include "config.h"
-
-#include <glib.h>
-/* -- */
-#include "misc/unescape.h"
-
-void m_unescape_url(GString *dst)
-{
-  gchar *r = g_uri_unescape_string(dst->str, NULL);
-  if (r != NULL)
-    {
-      g_string_assign(dst, r);
-      g_free(r);
-      r = NULL;
-    }
-}
-
-/* vim: set ts=2 sw=2 tw=72 expandtab: */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/misc/unescape.h 
new/libquvi-0.9.4/src/misc/unescape.h
--- old/libquvi-0.9.3/src/misc/unescape.h       2013-09-03 16:23:47.000000000 
+0200
+++ new/libquvi-0.9.4/src/misc/unescape.h       1970-01-01 01:00:00.000000000 
+0100
@@ -1,26 +0,0 @@
-/* libquvi
- * Copyright (C) 2012  Toni Gundogdu <[email protected]>
- *
- * This file is part of libquvi <http://quvi.sourceforge.net/>.
- *
- * This library is free software: you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public
- * License as published by the Free Software Foundation, either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library 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 Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General
- * Public License along with this library.  If not, see
- * <http://www.gnu.org/licenses/>.
- */
-
-#ifndef m_unescape_h
-#define m_unescape_h
-
-void m_unescape_url(GString*);
-
-#endif /* m_unescape_h */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/misc/url.c 
new/libquvi-0.9.4/src/misc/url.c
--- old/libquvi-0.9.3/src/misc/url.c    1970-01-01 01:00:00.000000000 +0100
+++ new/libquvi-0.9.4/src/misc/url.c    2013-11-10 08:33:09.000000000 +0100
@@ -0,0 +1,62 @@
+/* libquvi
+ * Copyright (C) 2013  Toni Gundogdu <[email protected]>
+ *
+ * This file is part of libquvi <http://quvi.sourceforge.net/>.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+/* -- */
+#include "misc/url.h"
+
+static gboolean _is_unescaped(const gchar *s)
+{
+  gboolean r;
+  gchar *u;
+  u = g_uri_unescape_string(s, NULL);
+  r = g_strcmp0(u,s) == 0 ? TRUE:FALSE;
+  g_free(u);
+  return (r);
+}
+
+gchar *m_url_unescaped_form(const gchar *s)
+{
+  gchar *r = g_strdup(s);
+  do
+    {
+      gchar *u = g_uri_unescape_string(r, NULL);
+      if (u == NULL)
+        break;
+      g_free(r);
+      r = u;
+    }
+  while (_is_unescaped(r) == FALSE);
+  return (r);
+}
+
+gchar *m_url_escaped_form(const gchar *s)
+{
+  static const gchar *reserved_chars = "!*'();:@&=+$,/?#[]";
+  gchar *u, *r;
+  u = m_url_unescaped_form(s);
+  r = g_uri_escape_string(u, reserved_chars, FALSE);
+  g_free(u);
+  return (r);
+}
+
+/* vim: set ts=2 sw=2 tw=72 expandtab: */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/misc/url.h 
new/libquvi-0.9.4/src/misc/url.h
--- old/libquvi-0.9.3/src/misc/url.h    1970-01-01 01:00:00.000000000 +0100
+++ new/libquvi-0.9.4/src/misc/url.h    2013-11-10 08:33:09.000000000 +0100
@@ -0,0 +1,29 @@
+/* libquvi
+ * Copyright (C) 2013  Toni Gundogdu <[email protected]>
+ *
+ * This file is part of libquvi <http://quvi.sourceforge.net/>.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef m_url_h
+#define m_url_h
+
+gchar *m_url_unescaped_form(const gchar*);
+gchar *m_url_escaped_form(const gchar*);
+
+#endif /* m_url_h */
+
+/* vim: set ts=2 sw=2 tw=72 expandtab: */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/src/net/handle.c 
new/libquvi-0.9.4/src/net/handle.c
--- old/libquvi-0.9.3/src/net/handle.c  2013-05-19 17:44:39.000000000 +0200
+++ new/libquvi-0.9.4/src/net/handle.c  2013-11-10 08:33:09.000000000 +0100
@@ -1,5 +1,5 @@
 /* libquvi
- * Copyright (C) 2012  Toni Gundogdu <[email protected]>
+ * Copyright (C) 2012,2013  Toni Gundogdu <[email protected]>
  *
  * This file is part of libquvi <http://quvi.sourceforge.net/>.
  *
@@ -30,6 +30,20 @@
 #include "_quvi_net_resolve_s.h"
 /* -- */
 #include "net/handle.h"
+#include "misc/url.h"
+
+static GString *_escaped(const gchar *url)
+{
+  GString *r;
+  gchar *e;
+
+  /* Pass the URL in escaped form to libcurl. */
+  e = m_url_escaped_form(url);
+  r = g_string_new(e);
+  g_free(e);
+
+  return (r);
+}
 
 gpointer n_new(_quvi_t q, const gchar *url)
 {
@@ -37,7 +51,7 @@
   n->http_metainfo.content_type = g_string_new(NULL);
   n->status.errmsg = g_string_new(NULL);
   n->fetch.content = g_string_new(NULL);
-  n->url.addr = g_string_new(url);
+  n->url.addr = _escaped(url);
   n->handle.quvi = q;
   return (n);
 }
@@ -69,8 +83,8 @@
 {
   _quvi_net_resolve_t r = g_new0(struct _quvi_net_resolve_s, 1);
   r->status.errmsg = g_string_new(NULL);
-  r->url.addr = g_string_new(url);
   r->url.dst  = g_string_new(NULL);
+  r->url.addr = _escaped(url);
   r->handle.quvi = q;
   return (r);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/tests/media.c 
new/libquvi-0.9.4/tests/media.c
--- old/libquvi-0.9.3/tests/media.c     2013-09-03 16:28:40.000000000 +0200
+++ new/libquvi-0.9.4/tests/media.c     2013-11-10 08:33:09.000000000 +0100
@@ -107,8 +107,7 @@
 
 static void test_media_multi()
 {
-  static const gchar URL[] =
-    
"http://www.spiegel.de/video/64-jaehrige-schwimmt-von-kuba-richtung-florida-video-1293301.html";;
+  static const gchar URL[] = "http://www.youtube.com/watch?v=G4evlxq34og";;
 
   quvi_media_t qm;
   GString *b;
@@ -151,15 +150,17 @@
 
       if (b->len >0) /* Make sure each media stream URL is unique */
         g_assert_cmpstr(b->str, !=, s);
-
       g_string_assign(b, s);
 
-      chk_len(QUVI_MEDIA_STREAM_PROPERTY_VIDEO_ENCODING);
       chk_len(QUVI_MEDIA_STREAM_PROPERTY_CONTAINER);
+      quvi_media_get(qm, QUVI_MEDIA_STREAM_PROPERTY_CONTAINER, &s);
+      g_assert_cmpint(quvi_errcode(q), ==, QUVI_OK);
 
-      chk_val(QUVI_MEDIA_STREAM_PROPERTY_VIDEO_HEIGHT);
-      chk_val(QUVI_MEDIA_STREAM_PROPERTY_VIDEO_WIDTH);
-
+      if (strstr(s, "flv") ==NULL) /* FLVs do not come with these */
+        {
+          chk_len(QUVI_MEDIA_STREAM_PROPERTY_VIDEO_ENCODING);
+          chk_len(QUVI_MEDIA_STREAM_PROPERTY_AUDIO_ENCODING);
+        }
       ++i;
     }
   g_assert_cmpint(i, >, 1);
@@ -173,8 +174,7 @@
 
 static void test_media_select()
 {
-  static const gchar URL[] =
-    
"http://www.spiegel.de/video/64-jaehrige-schwimmt-von-kuba-richtung-florida-video-1293301.html";;
+  static const gchar URL[] = "http://www.youtube.com/watch?v=G4evlxq34og";;
 
   quvi_media_t qm;
   gchar *s, *best;
@@ -225,12 +225,12 @@
   curr = g_slist_nth(ids, 0);
   g_assert_cmpstr(curr->data, ==, s);
 
-  /* The best stream -- anything but the default (first) stream. */
+  /* The best stream, same as the first stream. */
 
   quvi_media_stream_choose_best(qm);
   quvi_media_get(qm, QUVI_MEDIA_STREAM_PROPERTY_ID, &s);
   curr = g_slist_nth(ids, 0);
-  g_assert_cmpstr(curr->data, !=, s);
+  g_assert_cmpstr(curr->data, ==, s);
   best = g_strdup(s);
 
   /* Select. */
@@ -253,15 +253,15 @@
   curr = g_slist_nth(ids, 0); /* Should be the default stream (first) */
   g_assert_cmpstr(curr->data, ==, s);
 
-  quvi_media_stream_select(qm, "^\\w\\w\\d_\\w+_40\\dk_\\d20p$,bar,baz,croak");
+  quvi_media_stream_select(qm, "^\\w+_\\w+_i\\d+_\\d40p$,bar,baz,croak");
   g_assert_cmpint(quvi_errcode(q), ==, QUVI_OK);
   quvi_media_get(qm, QUVI_MEDIA_STREAM_PROPERTY_ID, &s);
-  g_assert_cmpstr(s, ==, "mp4_mpeg4_404k_320p");
+  g_assert_cmpstr(s, ==, "medium_webm_i43_240p");
 
-  quvi_media_stream_select(qm, 
"foo,^\\w\\w\\d_\\w+_14\\d+k_\\d+6p$,baz,croak");
+  quvi_media_stream_select(qm, "foo,144p$,baz,croak");
   g_assert_cmpint(quvi_errcode(q), ==, QUVI_OK);
   quvi_media_get(qm, QUVI_MEDIA_STREAM_PROPERTY_ID, &s);
-  g_assert_cmpstr(s, ==, "mp4_h264_1400k_576p");
+  g_assert_cmpstr(s, ==, "small_3gpp_i17_144p");
 
   quvi_media_free(qm);
   quvi_free(q);
@@ -332,7 +332,32 @@
 static void test_media_escaped_url()
 {
   static gchar URL[] =
-    "http%3A//www.liveleak.com/view%3Fi%3D77f_1378178228";
+    "http%3A//www.youtube.com/watch%3Fv%3DLWxTGJ3TK1U%23t%3D2m22s";
+
+  quvi_media_t qm;
+  quvi_t q;
+
+  if (chk_internet() == FALSE || chk_skip(__func__) == TRUE)
+    return;
+
+  q = quvi_new();
+  g_assert(q != NULL);
+  g_assert_cmpint(quvi_errcode(q), ==, QUVI_OK);
+
+  chk_verbose(q);
+
+  qm = quvi_media_new(q, URL);
+  g_assert_cmpint(qerr_m(q, URL), ==, QUVI_OK);
+  g_assert(qm != NULL);
+
+  quvi_media_free(qm);
+  quvi_free(q);
+}
+
+static void test_media_escaped_utf8_url()
+{
+  static gchar URL[] =
+    
"http://flix.tapuz.co.il/v/watch-4323227-%D7%9C%D7%A2%D7%A7%D7%95%D7%A8%20%D7%A9%D7%9F%20%D7%9C%D7%98%D7%99%D7%92%D7%A8%D7%99%D7%A1.html";;
 
   quvi_media_t qm;
   quvi_t q;
@@ -423,6 +448,8 @@
   g_test_add_func("/quvi/media (select)", test_media_select);
   g_test_add_func("/quvi/media (short)", test_media_short);
   g_test_add_func("/quvi/media (escaped URL)", test_media_escaped_url);
+  g_test_add_func("/quvi/media (escaped UTF8 URL)",
+                  test_media_escaped_utf8_url);
   g_test_add_func("/quvi/media (nosupport)", test_media_nosupport);
   g_test_add_func("/quvi/media (start_time)", test_media_starttime);
   g_test_add_func("/quvi/media (same handle)", test_media_same_q);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libquvi-0.9.3/tests/scan.c 
new/libquvi-0.9.4/tests/scan.c
--- old/libquvi-0.9.3/tests/scan.c      2013-07-16 16:52:47.000000000 +0200
+++ new/libquvi-0.9.4/tests/scan.c      2013-11-10 08:33:09.000000000 +0100
@@ -50,8 +50,7 @@
 static void test_scan_core()
 {
   static const gchar URL[] =
-    "http://www.fangoria.com/index.php/home/all-news/1-latest-news/";
-    "6981-new-qprometheusq-trailer-has-landed";
+    "http://screenrant.com/superman-man-steel-trailer/";;
 
   quvi_scan_t qs;
   quvi_t q;

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to