Am 13.01.2016 um 10:25 schrieb Tim Lunn: > Package: libtotem-plparser18 > Version: 3.10.6-1ubuntu1~xenial1
Please use the Debian versions, so the version tracking works properly. > mbiebl missed this revert when reverting the libquvi-0.9 port. It causes > grilo-plugins to fail to build > since libtotem-pl-parser-mini is no longer linked against libquvi. "this revert" being upstream commit deec38404a9a77b70ca426682179f5170e17a481 That one should be folded into debian/patches/totem-pl-parser-use-old-quvi.patch and mentioned there. The attached patch should do the trick. Please test and report back. -- Why is it that all of the instruments seeking intelligent life in the universe are pointed away from Earth?
From d98e8ab4f859251a3fdbc4b5bd1f984de98d5e49 Mon Sep 17 00:00:00 2001 From: Michael Biebl <bi...@debian.org> Date: Wed, 16 Dec 2015 00:01:11 +0100 Subject: [PATCH] Revert "plparse: Port to libquvi 0.9" This reverts the following commits 24970018abfcedcaa4965e1f0f987aaf63323f31 5c2190133328ee39764813ddee88a038dbf1d363 e0a27de154259c8e11dd8eff1b606c9e6d162502 b524675634af60ae4b9f08b54ea47f308ae4c563 1147853ac9012c085ebb1d6306451c6d197542cf 1be3144e9a6bf183a61c9596165d52bbe405b5cc deec38404a9a77b70ca426682179f5170e17a481 --- Makefile.am | 2 +- configure.ac | 24 +--- plparse/Makefile.am | 10 -- plparse/totem-pl-parser-videosite.c | 224 +++++++++++++--------------------- plparse/videosite-parser.c | 191 ----------------------------- totem-plparser-mini-uninstalled.pc.in | 2 +- totem-plparser-mini.pc.in | 2 +- totem-plparser-uninstalled.pc.in | 2 +- totem-plparser.pc.in | 2 +- 9 files changed, 98 insertions(+), 361 deletions(-) delete mode 100644 plparse/videosite-parser.c diff --git a/Makefile.am b/Makefile.am index a9cda79..18bd1f5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -44,7 +44,7 @@ MAINTAINERCLEANFILES = \ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = totem-plparser.pc totem-plparser-mini.pc -DISTCHECK_CONFIGURE_FLAGS = --disable-scrollkeeper --enable-gtk-doc --enable-introspection --enable-uninstalled-tests +DISTCHECK_CONFIGURE_FLAGS = --disable-scrollkeeper --enable-gtk-doc --enable-introspection # Build ChangeLog from GIT history ChangeLog: diff --git a/configure.ac b/configure.ac index 3efa66c..7de8df2 100644 --- a/configure.ac +++ b/configure.ac @@ -45,7 +45,7 @@ AC_PATH_PROG([GLIB_MKENUMS],[glib-mkenums]) # Requirements GLIB_REQS=2.31.0 GIO_REQS=2.24.0 -QUVI_REQS=0.9.1 +QUVI_REQS=0.2.15 LIBARCHIVE_REQS=3.0 LIBSOUP_REQS=2.43.0 @@ -114,18 +114,18 @@ AC_ARG_ENABLE(quvi, [enable_quvi=auto]) if test "x$enable_quvi" != "xno" ; then PKG_CHECK_MODULES(QUVI, - libquvi-0.9 >= $QUVI_REQS glib-2.0, + libquvi >= $QUVI_REQS, [have_quvi=yes], [have_quvi=no]) if test "x$enable_quvi" = "xyes" -a "x$have_quvi" = "xno" ; then AC_MSG_ERROR([Quvi support requested but not available.]) fi if test "x$have_quvi" = "xyes" ; then - QUVI="libquvi-0.9" + pkg_modules="$pkg_modules libquvi" + QUVI="libquvi" AC_DEFINE(HAVE_QUVI, 1, [libquvi available in the system]) fi fi AC_SUBST(QUVI, $QUVI) -AM_CONDITIONAL([HAVE_QUVI], [test "$have_quvi" = "yes"]) ################################## # Checking libarchive dependency @@ -174,26 +174,12 @@ if test "x$enable_libgcrypt" != "xno" ; then fi fi -############################ -# Checking uninstalled tests -############################ - -AC_ARG_ENABLE(uninstalled-tests, - AS_HELP_STRING([--enable-uninstalled-tests], - [Uninstalled tests (default is no).]), - [], - [enable_uninstalled_tests=no]) -if test "x$enable_uninstalled_tests" != "xno" ; then - AC_DEFINE(UNINSTALLED_TESTS, 1, [Uninstalled tests]) -fi - - dnl Check for packages for building libtotem-plparser.la PKG_CHECK_MODULES(TOTEM_PLPARSER, [$pkg_modules]) AC_SUBST(TOTEM_PLPARSER_CFLAGS) AC_SUBST(TOTEM_PLPARSER_LIBS) -PKG_CHECK_MODULES([TOTEM_PLPARSER_MINI], [gio-2.0]) +PKG_CHECK_MODULES([TOTEM_PLPARSER_MINI], [gio-2.0 $QUVI]) GNOME_DEBUG_CHECK GNOME_COMPILE_WARNINGS([maximum]) diff --git a/plparse/Makefile.am b/plparse/Makefile.am index 688040e..aee6393 100644 --- a/plparse/Makefile.am +++ b/plparse/Makefile.am @@ -72,7 +72,6 @@ libtotem_plparser_la_CPPFLAGS = \ -I$(top_srcdir)/lib \ -I$(top_builddir)/plparse \ -DGNOMELOCALEDIR=\""$(datadir)/locale"\"\ - -DLIBEXECDIR=\""$(libexecdir)"\" \ $(DISABLE_DEPRECATED) \ $(AM_CPPFLAGS) @@ -134,7 +133,6 @@ libtotem_plparser_mini_la_CPPFLAGS = \ -I$(top_srcdir)/lib \ -I$(top_builddir)/plparse \ -DTOTEM_PL_PARSER_MINI \ - -DLIBEXECDIR=\""$(libexecdir)"\"\ $(DISABLE_DEPRECATED) \ $(AM_CPPFLAGS) @@ -182,14 +180,6 @@ EXTRA_DIST = \ plparser.symbols \ plparser-mini.symbols -if HAVE_QUVI -libexecsubdir = $(libexecdir)/totem-pl-parser/ -libexecsub_PROGRAMS = 99-totem-pl-parser-videosite -99_totem_pl_parser_videosite_SOURCES = videosite-parser.c -99_totem_pl_parser_videosite_CFLAGS = $(QUVI_CFLAGS) -DLIBEXECDIR=\""$(libexecdir)"\" -99_totem_pl_parser_videosite_LDADD = $(QUVI_LIBS) -endif - # Introspection -include $(INTROSPECTION_MAKEFILE) INTROSPECTION_GIRS = diff --git a/plparse/totem-pl-parser-videosite.c b/plparse/totem-pl-parser-videosite.c index f830a54..631f4ca 100644 --- a/plparse/totem-pl-parser-videosite.c +++ b/plparse/totem-pl-parser-videosite.c @@ -24,85 +24,36 @@ #include <string.h> #include <glib.h> +#ifndef TOTEM_PL_PARSER_MINI +#include "totem-disc.h" +#endif /* !TOTEM_PL_PARSER_MINI */ + +#ifdef HAVE_QUVI +#include <quvi/quvi.h> +#endif /* HAVE_QUVI */ + #include "totem-pl-parser-mini.h" #include "totem-pl-parser-videosite.h" #include "totem-pl-parser-private.h" -/* The helper script will be either the one shipped in totem-pl-parser, - * when running tests, or the first non-hidden file in the totem-pl-parser - * libexec directory, when sorted by lexicographic ordering (through strcmp) */ -static char * -find_helper_script (void) -{ -#ifdef UNINSTALLED_TESTS - return g_strdup ("../99-totem-pl-parser-videosite"); -#else - GDir *dir; - const char *name; - char *script_name = NULL; - - dir = g_dir_open (LIBEXECDIR "/totem-pl-parser", 0, NULL); - if (!dir) - goto bail; - - while ((name = g_dir_read_name (dir)) != NULL) { - /* Skip hidden files */ - if (name[0] == '.') - continue; - if (script_name == NULL || g_strcmp0 (name, script_name) < 0) { - g_free (script_name); - script_name = g_strdup (name); - } - } - g_clear_pointer (&dir, g_dir_close); - - if (script_name != NULL) { - char *ret; - ret = g_build_filename (LIBEXECDIR "/totem-pl-parser", script_name, NULL); - g_free (script_name); - return ret; - } - -bail: - return g_strdup (LIBEXECDIR "/totem-pl-parser/99-totem-pl-parser-videosite"); -#endif -} - gboolean totem_pl_parser_is_videosite (const char *uri, gboolean debug) { #ifdef HAVE_QUVI - const char *args[] = { - NULL, - "--check", - "--url", - NULL, - NULL - }; - char *out; - char *script; - - script = find_helper_script (); - - args[0] = script; - args[3] = uri; - g_spawn_sync (NULL, - (char **) args, - NULL, - 0, - NULL, - NULL, - &out, - NULL, - NULL, - NULL); - if (debug) - g_print ("Checking videosite with script '%s' for URI '%s' returned '%s' (%s)\n", - script, uri, out, g_strcmp0 (out, "TRUE") == 0 ? "true" : "false"); + quvi_t handle; + QUVIcode rc; - g_free (script); + if (quvi_init (&handle) != QUVI_OK) + return FALSE; + + rc = quvi_supported(handle, (char *) uri); + quvi_close (&handle); + + if (debug) + g_print ("Checking videosite for URI '%s' returned %d (%s)\n", + uri, rc, (rc == QUVI_OK) ? "true" : "false"); - return (g_strcmp0 (out, "TRUE") == 0); + return (rc == QUVI_OK); #else return FALSE; #endif /* HAVE_QUVI */ @@ -110,6 +61,10 @@ totem_pl_parser_is_videosite (const char *uri, gboolean debug) #ifndef TOTEM_PL_PARSER_MINI +#define getprop(prop, p) \ + if (quvi_getprop (v, prop, &p) != QUVI_OK) \ + p = NULL; + TotemPlParserResult totem_pl_parser_add_videosite (TotemPlParser *parser, GFile *file, @@ -118,80 +73,77 @@ totem_pl_parser_add_videosite (TotemPlParser *parser, gpointer data) { #ifdef HAVE_QUVI - const char *args[] = { - NULL, - "--url", - NULL, - NULL - }; + QUVIcode rc; + quvi_t handle; + quvi_media_t v; char *uri; - char *out = NULL; - char **lines; - guint i; - GHashTable *ht; - char *new_uri = NULL; - char *script; - TotemPlParserResult ret; + /* properties */ + const char *video_uri; + double length; + char *length_str; + const char *title; + const char *id; + const char *page_uri; + const char *starttime; + const char *content_type; + const char *thumb_url; + double duration; + char *duration_str; + + if (quvi_init (&handle) != QUVI_OK) + return TOTEM_PL_PARSER_RESULT_ERROR; + + quvi_setopt(handle, QUVIOPT_NOVERIFY, TRUE); + quvi_setopt(handle, QUVIOPT_FORMAT, "best"); uri = g_file_get_uri (file); - script = find_helper_script (); - - args[0] = script; - args[2] = uri; - g_spawn_sync (NULL, - (char **) args, - NULL, - 0, - NULL, - NULL, - &out, - NULL, - NULL, - NULL); - if (totem_pl_parser_is_debugging_enabled (parser)) - g_print ("Parsing videosite for URI '%s' returned '%s'\n", uri, out); - - if (out != NULL) { - if (g_str_equal (out, "TOTEM_PL_PARSER_RESULT_ERROR")) { - ret = TOTEM_PL_PARSER_RESULT_ERROR; - goto out; - } - if (g_str_equal (out, "TOTEM_PL_PARSER_RESULT_UNHANDLED")) { - ret = TOTEM_PL_PARSER_RESULT_UNHANDLED; - goto out; - } - } else { - /* totem-pl-parser-videosite failed to launch */ - ret = TOTEM_PL_PARSER_RESULT_ERROR; - goto out; - } - - ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); - lines = g_strsplit (out, "\n", -1); - g_free (out); - for (i = 0; lines[i] != NULL && *lines[i] != '\0'; i++) { - char **line; - - line = g_strsplit (lines[i], "=", 2); - if (g_strcmp0 (line[0], TOTEM_PL_PARSER_FIELD_URI) == 0) { - if (new_uri == NULL) - new_uri = g_strdup (line[1]); - } else { - g_hash_table_insert (ht, g_strdup (line[0]), g_strdup (line[1])); - } - g_strfreev (line); + rc = quvi_parse(handle, uri, &v); + if (rc != QUVI_OK) { + if (totem_pl_parser_is_debugging_enabled (parser)) + g_print ("quvi_parse for '%s' returned %d\n", uri, rc); + g_free (uri); + quvi_close (&handle); + if (rc == QUVI_NOSUPPORT) + return TOTEM_PL_PARSER_RESULT_UNHANDLED; + return TOTEM_PL_PARSER_RESULT_ERROR; } - g_strfreev (lines); - totem_pl_parser_add_hash_table (parser, ht, new_uri, FALSE); - g_free (new_uri); + getprop (QUVIPROP_MEDIAURL, video_uri); + if (quvi_getprop (v, QUVIPROP_MEDIACONTENTLENGTH, &length) == QUVI_OK && length) + length_str = g_strdup_printf ("%f", length); + else + length_str = NULL; + getprop (QUVIPROP_PAGETITLE, title); + getprop (QUVIPROP_MEDIAID, id); + getprop (QUVIPROP_PAGEURL, page_uri); + getprop (QUVIPROP_STARTTIME, starttime); + getprop (QUVIPROP_MEDIACONTENTTYPE, content_type); + getprop (QUVIPROP_MEDIATHUMBNAILURL, thumb_url); + if (quvi_getprop (v, QUVIPROP_MEDIADURATION, &duration) == QUVI_OK && duration) + duration_str = g_strdup_printf ("%f", duration); + else + duration_str = NULL; + + if (video_uri != NULL) + totem_pl_parser_add_uri (parser, + TOTEM_PL_PARSER_FIELD_TITLE, title, + TOTEM_PL_PARSER_FIELD_ID, id, + TOTEM_PL_PARSER_FIELD_MOREINFO, page_uri, + TOTEM_PL_PARSER_FIELD_URI, video_uri, + TOTEM_PL_PARSER_FIELD_FILESIZE, length_str, + TOTEM_PL_PARSER_FIELD_STARTTIME, starttime, + TOTEM_PL_PARSER_FIELD_CONTENT_TYPE, content_type, + TOTEM_PL_PARSER_FIELD_IMAGE_URI, thumb_url, + TOTEM_PL_PARSER_FIELD_DURATION, duration_str, + NULL); + g_free (uri); + g_free (length_str); + g_free (duration_str); - ret = TOTEM_PL_PARSER_RESULT_SUCCESS; + quvi_parse_close (&v); + quvi_close (&handle); -out: - g_free (script); - g_free (uri); - return ret; + return TOTEM_PL_PARSER_RESULT_SUCCESS; #else return TOTEM_PL_PARSER_RESULT_UNHANDLED; #endif /* !HAVE_QUVI */ diff --git a/plparse/videosite-parser.c b/plparse/videosite-parser.c deleted file mode 100644 index be374aa..0000000 --- a/plparse/videosite-parser.c +++ /dev/null @@ -1,191 +0,0 @@ -/* - Copyright (C) 2013 Bastien Nocera <had...@hadess.net> - - The Gnome Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The Gnome 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the Gnome Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301 USA. - - Author: Bastien Nocera <had...@hadess.net> - */ - -#include "config.h" - -#include <locale.h> - -#include <glib.h> -#include <quvi.h> -#include "totem-pl-parser.h" - -#define BASE 20 - -static char *url = NULL; -static gboolean check = FALSE; -static gboolean debug = FALSE; - -const GOptionEntry options[] = { - { "url", 'u', 0, G_OPTION_ARG_FILENAME, &url, "URL of the video site page", NULL }, - { "check", 'c', 0, G_OPTION_ARG_NONE, &check, "Check whether this URL is supported", NULL }, - { "debug", 'd', 0, G_OPTION_ARG_NONE, &debug, "Turn on debug mode", NULL }, - { NULL } -}; - -static gboolean -supports_uri (const char *uri) -{ - quvi_t q; - QuviBoolean r; - - q = quvi_new (); - r = quvi_supports (q, uri, QUVI_SUPPORTS_MODE_OFFLINE, QUVI_SUPPORTS_TYPE_ANY); - quvi_free (q); - - return r; -} - -static struct { - const char *container; - const char *content_type; -} containers [] = { - { "webm", "video/webm" }, -}; - -static const char * -container_to_content_type (const char *container) -{ - guint i; - - if (container == NULL) - return NULL; - for (i = 0; i < G_N_ELEMENTS (containers); i++) { - if (g_str_equal (container, containers[i].container)) - return containers[i].content_type; - } - return NULL; -} - -static void -print (const char *name, - const char *value) -{ - g_return_if_fail (name != NULL); - - if (value == NULL) - return; - - g_print ("%s=%s\n", name, value); -} - -static void -parse_videosite (const char *uri) -{ - quvi_t q; - quvi_media_t qm; - /* properties */ - const char *video_uri; - const char *title; - const char *id; - const char *content_type; - const char *thumb_url; - const char *container; - double duration; - double starttime; - char *duration_str = NULL; - char *starttime_str = NULL; - - if (!supports_uri (uri)) { - g_print ("TOTEM_PL_PARSER_RESULT_UNHANDLED"); - return; - } - - q = quvi_new (); - qm = quvi_media_new (q, uri); - - /* Empty results list? */ - if (quvi_media_stream_next(qm) != QUVI_TRUE) { - if (debug) - g_print ("Parsing '%s' failed with error: %s\n", - uri, quvi_errmsg (q)); - g_print ("TOTEM_PL_PARSER_RESULT_ERROR"); - goto out; - } - - /* Choose the best stream */ - quvi_media_stream_choose_best (qm); - - quvi_media_get (qm, QUVI_MEDIA_PROPERTY_TITLE, &title); - quvi_media_get (qm, QUVI_MEDIA_PROPERTY_ID, &id); - quvi_media_get (qm, QUVI_MEDIA_PROPERTY_THUMBNAIL_URL, &thumb_url); - quvi_media_get (qm, QUVI_MEDIA_PROPERTY_DURATION_MS, &duration); - if (duration) - duration_str = g_strdup_printf ("%f", duration); - quvi_media_get (qm, QUVI_MEDIA_STREAM_PROPERTY_URL, &video_uri); - quvi_media_get (qm, QUVI_MEDIA_PROPERTY_START_TIME_MS, &starttime); - if (starttime) - starttime_str = g_strdup_printf ("%f", starttime); - - quvi_media_get (qm, QUVI_MEDIA_STREAM_PROPERTY_CONTAINER, &container); - content_type = container_to_content_type (container); - - if (video_uri != NULL) { - print (TOTEM_PL_PARSER_FIELD_TITLE, title); - print (TOTEM_PL_PARSER_FIELD_ID, id); - print (TOTEM_PL_PARSER_FIELD_MOREINFO, uri); - print (TOTEM_PL_PARSER_FIELD_URI, video_uri); - print (TOTEM_PL_PARSER_FIELD_STARTTIME, starttime_str); - print (TOTEM_PL_PARSER_FIELD_CONTENT_TYPE, content_type); - print (TOTEM_PL_PARSER_FIELD_IMAGE_URI, thumb_url); - print (TOTEM_PL_PARSER_FIELD_DURATION, duration_str); - } - - g_free (starttime_str); - g_free (duration_str); - -out: - quvi_media_free (qm); - quvi_free (q); -} - -int main (int argc, char **argv) -{ - GOptionContext *context; - - setlocale (LC_ALL, ""); - - context = g_option_context_new (NULL); - g_option_context_set_summary (context, "totem-pl-parser libquvi Helper"); - g_option_context_add_main_entries (context, options, NULL); - g_option_context_parse (context, &argc, &argv, NULL); - - if (url == NULL) { - char *txt; - - txt = g_option_context_get_help (context, FALSE, NULL); - g_print ("%s", txt); - g_free (txt); - - g_option_context_free (context); - - return 1; - } - g_option_context_free (context); - - if (check) { - g_print ("%s", supports_uri (url) ? "TRUE" : "FALSE"); - return 0; - } - - parse_videosite (url); - - return 0; -} diff --git a/totem-plparser-mini-uninstalled.pc.in b/totem-plparser-mini-uninstalled.pc.in index fb22f66..cb6c437 100644 --- a/totem-plparser-mini-uninstalled.pc.in +++ b/totem-plparser-mini-uninstalled.pc.in @@ -7,6 +7,6 @@ Name: totem-plparser Description: Totem Playlist Parser library Version: @VERSION@ Requires: glib-2.0 gobject-2.0 gio-2.0 -Requires.private: gthread-2.0 +Requires.private: gthread-2.0 @QUVI@ Libs: ${pc_top_builddir}/${pcfiledir}/plparse/libtotem-plparser-mini.la Cflags: -I${pc_top_builddir}/${pcfiledir}/plparse diff --git a/totem-plparser-mini.pc.in b/totem-plparser-mini.pc.in index 29ae520..777b93b 100644 --- a/totem-plparser-mini.pc.in +++ b/totem-plparser-mini.pc.in @@ -7,6 +7,6 @@ Name: totem-plparser-mini Description: Totem Playlist Parser library, mini version Version: @VERSION@ Requires: glib-2.0 gobject-2.0 gio-2.0 -Requires.private: gthread-2.0 +Requires.private: gthread-2.0 @QUVI@ Libs: -L${libdir} -ltotem-plparser-mini Cflags: -I${includedir}/totem-pl-parser/1/plparser diff --git a/totem-plparser-uninstalled.pc.in b/totem-plparser-uninstalled.pc.in index 7264037..6a3d0be 100644 --- a/totem-plparser-uninstalled.pc.in +++ b/totem-plparser-uninstalled.pc.in @@ -7,7 +7,7 @@ Name: totem-plparser Description: Totem Playlist Parser library Version: @VERSION@ Requires: glib-2.0 gobject-2.0 gio-2.0 -Requires.private: gthread-2.0 libxml-2.0 @GMIME@ +Requires.private: gthread-2.0 libxml-2.0 @GMIME@ @QUVI@ Libs: ${pc_top_builddir}/${pcfiledir}/plparse/libtotem-plparser.la Libs.private: @LIBGCRYPT_LIBS@ Cflags: -I${pc_top_builddir}/${pcfiledir}/plparse @LIBGCRYPT_CFLAGS@ diff --git a/totem-plparser.pc.in b/totem-plparser.pc.in index 16f9240..abf3cdd 100644 --- a/totem-plparser.pc.in +++ b/totem-plparser.pc.in @@ -7,7 +7,7 @@ Name: totem-plparser Description: Totem Playlist Parser library Version: @VERSION@ Requires: glib-2.0 gobject-2.0 gio-2.0 -Requires.private: gthread-2.0 libxml-2.0 @GMIME@ @ARCHIVE@ +Requires.private: gthread-2.0 libxml-2.0 @GMIME@ @QUVI@ @ARCHIVE@ Libs: -L${libdir} -ltotem-plparser Libs.private: @LIBGCRYPT_LIBS@ Cflags: -I${includedir}/totem-pl-parser/1/plparser @LIBGCRYPT_CFLAGS@ -- 2.7.0.rc3
signature.asc
Description: OpenPGP digital signature