[totem-pl-parser/gnome-2-28] Remove gmime dependency
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [totem-pl-parser/gnome-2-28] Remove gmime dependency
- Date: Tue, 1 Jun 2010 18:12:07 +0000 (UTC)
commit c3ba24b0eedd8f05a0a689d226f2c069bb8b518a
Author: Alex Larsson <alexl redhat com>
Date: Tue Jun 1 16:59:22 2010 +0100
Remove gmime dependency
configure.in | 77 +++--
plparse/Makefile.am | 2 +
plparse/totem-pl-parser-builtins.c | 4 +-
plparse/totem-pl-parser-builtins.h | 4 +-
plparse/totem-pl-parser-decode-date.c | 608 +++++++++++++++++++++++++++++++++
plparse/totem-pl-parser-decode-date.h | 25 ++
plparse/totem-pl-parser-podcast.c | 28 --
plparse/totem-pl-parser.c | 9 +-
totem-plparser.pc.in | 2 +-
9 files changed, 684 insertions(+), 75 deletions(-)
---
diff --git a/configure.in b/configure.in
index baa0b60..c672004 100644
--- a/configure.in
+++ b/configure.in
@@ -62,41 +62,50 @@ pkg_modules="glib-2.0 >= $GLIB_REQS gtk+-2.0 libxml-2.0 gthread-2.0 gio-2.0 >= $
##################################
# Checking libgmime dependency
##################################
-gmime_message=""
-
-AC_ARG_ENABLE(gmime-i-know-what-im-doing,
- AS_HELP_STRING([--disable-gmime-i-know-what-im-doing],
- [Disable libgmime (Unsupported, breaks Podcast support).]),
- [enable_gmime=no],
- [enable_gmime=yes])
-
-if test "x$enable_gmime" = "xyes" ; then
- PKG_CHECK_MODULES(GMIME,
- gmime-2.4,
- [have_gmime=yes GMIME=gmime-2.4],
- [have_gmime=no])
- if test "x$have_gmime" != "xyes" ; then
- PKG_CHECK_MODULES(GMIME,
- gmime-2.6,
- [have_gmime=yes GMIME=gmime-2.6],
- [have_gmime=no])
- fi
-
- if test "x$have_gmime" = "xyes" ; then
- AC_SUBST(GMIME, $GMIME)
- AC_SUBST(USEGMIME, yes)
- AC_DEFINE(HAVE_GMIME, 1, [GMime available in the system])
- pkg_modules="$pkg_modules $GMIME"
- else
- AC_MSG_ERROR([libgmime is required to compile totem-pl-parser.])
- fi
+AC_SUBST(USEGMIME, yes)
+
+dnl Timezone checks
+AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
+ AC_TRY_COMPILE([
+ #include <time.h>
+ ], [
+ struct tm tm;
+ tm.tm_gmtoff = 1;
+ return tm.tm_gmtoff;
+ ], ac_cv_struct_tm_gmtoff="yes", ac_cv_struct_tm_gmtoff="no"))
+if test "$ac_cv_struct_tm_gmtoff" = "yes"; then
+ AC_DEFINE(HAVE_TM_GMTOFF, 1, [Define if struct tm has a tm_gmtoff member])
else
- AC_SUBST(USEGMIME, no)
- gmime_message="
- **************************************************************
- Compiling totem-pl-parser without libgmime.
- This will break podcast support and is completely unsupported.
- **************************************************************"
+ AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
+ AC_TRY_COMPILE([
+ #include <time.h>
+ ], [
+ timezone = 1;
+ ], ac_cv_var_timezone="yes", ac_cv_var_timezone="no"))
+ if test "$ac_cv_var_timezone" = "yes"; then
+ AC_DEFINE(HAVE_TIMEZONE, 1, [Define if libc defines a timezone variable])
+ AC_CACHE_CHECK(for altzone variable, ac_cv_var_altzone,
+ AC_TRY_COMPILE([
+ #include <time.h>
+ ], [
+ altzone = 1;
+ ], ac_cv_var_altzone="yes", ac_cv_var_altzone="no"))
+ if test "$ac_cv_var_altzone" = "yes"; then
+ AC_DEFINE(HAVE_ALTZONE, 1, [Define if libc defines an altzone variable])
+ fi
+ else
+ AC_CACHE_CHECK(for _timezone variable, ac_cv_var__timezone,
+ AC_TRY_COMPILE([
+ #include <time.h>
+ ], [
+ _timezone = 1;
+ ], ac_cv_var__timezone="yes", ac_cv_var__timezone="no"))
+ if test "$ac_cv_var__timezone" = "yes"; then
+ AC_DEFINE(HAVE__TIMEZONE, 1, [Define if libc defines a _timezone variable])
+ else
+ AC_ERROR(unable to find a way to determine timezone)
+ fi
+ fi
fi
dnl Check for packages for building libtotem-plparser.la
diff --git a/plparse/Makefile.am b/plparse/Makefile.am
index 4d6a7f8..1578396 100644
--- a/plparse/Makefile.am
+++ b/plparse/Makefile.am
@@ -40,6 +40,8 @@ libtotem_plparser_la_SOURCES = \
totem-pl-parser-builtins.h \
totem-disc.h \
totem-pl-parser-features.h \
+ totem-pl-parser-decode-date.h \
+ totem-pl-parser-decode-date.c \
totem-pl-parser.h \
totem-pl-parser-lines.h \
totemplparser-marshal.h \
diff --git a/plparse/totem-pl-parser-builtins.c b/plparse/totem-pl-parser-builtins.c
index f672201..0c3f6b5 100644
--- a/plparse/totem-pl-parser-builtins.c
+++ b/plparse/totem-pl-parser-builtins.c
@@ -1,5 +1,5 @@
-/* Generated data (by glib-mkenums) */
+
#include "totem-pl-parser.h"
#include "totem-pl-parser-builtins.h"
@@ -54,5 +54,5 @@ totem_pl_parser_error_get_type (void)
return etype;
}
-/* Generated data ends here */
+
diff --git a/plparse/totem-pl-parser-builtins.h b/plparse/totem-pl-parser-builtins.h
index dd3872b..475b6e7 100644
--- a/plparse/totem-pl-parser-builtins.h
+++ b/plparse/totem-pl-parser-builtins.h
@@ -1,5 +1,5 @@
-/* Generated data (by glib-mkenums) */
+
#ifndef __TOTEM_PL_PARSER_BUILTINS_H__
#define __TOTEM_PL_PARSER_BUILTINS_H__
@@ -18,5 +18,5 @@ G_END_DECLS
#endif /* __TOTEM_PL_PARSER_BUILTINS_H__ */
-/* Generated data ends here */
+
diff --git a/plparse/totem-pl-parser-decode-date.c b/plparse/totem-pl-parser-decode-date.c
new file mode 100644
index 0000000..cf7b568
--- /dev/null
+++ b/plparse/totem-pl-parser-decode-date.c
@@ -0,0 +1,608 @@
+/* GMime
+ * Copyright (C) 2000-2009 Jeffrey Stedfast
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "totem-pl-parser-decode-date.h"
+
+#define d(x)
+
+#define DATE_TOKEN_NON_NUMERIC (1 << 0)
+#define DATE_TOKEN_NON_WEEKDAY (1 << 1)
+#define DATE_TOKEN_NON_MONTH (1 << 2)
+#define DATE_TOKEN_NON_TIME (1 << 3)
+#define DATE_TOKEN_HAS_COLON (1 << 4)
+#define DATE_TOKEN_NON_TIMEZONE_ALPHA (1 << 5)
+#define DATE_TOKEN_NON_TIMEZONE_NUMERIC (1 << 6)
+#define DATE_TOKEN_HAS_SIGN (1 << 7)
+
+static unsigned char gmime_datetok_table[256] = {
+ 128,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+ 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+ 111,111,111,111,111,111,111,111, 79, 79,111,175,111,175,111,111,
+ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,119,111,111,111,111,111,
+ 111, 75,111, 79, 75, 79,105, 79,111,111,107,111,111, 73, 75,107,
+ 79,111,111, 73, 77, 79,111,109,111, 79, 79,111,111,111,111,111,
+ 111,105,107,107,109,105,111,107,105,105,111,111,107,107,105,105,
+ 107,111,105,105,105,105,107,111,111,105,111,111,111,111,111,111,
+ 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+ 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+ 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+ 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+ 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+ 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+ 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+ 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+};
+
+/* hrm, is there a library for this shit? */
+static struct {
+ char *name;
+ int offset;
+} tz_offsets [] = {
+ { "UT", 0 },
+ { "GMT", 0 },
+ { "EST", -500 }, /* these are all US timezones. bloody yanks */
+ { "EDT", -400 },
+ { "CST", -600 },
+ { "CDT", -500 },
+ { "MST", -700 },
+ { "MDT", -600 },
+ { "PST", -800 },
+ { "PDT", -700 },
+ { "Z", 0 },
+ { "A", -100 },
+ { "M", -1200 },
+ { "N", 100 },
+ { "Y", 1200 },
+};
+
+static char *tm_months[] = {
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+};
+
+static char *tm_days[] = {
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+};
+
+/* This is where it gets ugly... */
+
+typedef struct _date_token {
+ struct _date_token *next;
+ unsigned char mask;
+ const char *start;
+ size_t len;
+} date_token;
+
+#define date_token_free(tok) g_slice_free (date_token, tok)
+#define date_token_new() g_slice_new (date_token)
+
+static date_token *
+datetok (const char *date)
+{
+ date_token *tokens = NULL, *token, *tail = (date_token *) &tokens;
+ const char *start, *end;
+ unsigned char mask;
+
+ start = date;
+ while (*start) {
+ /* kill leading whitespace */
+ while (*start == ' ' || *start == '\t')
+ start++;
+
+ if (*start == '\0')
+ break;
+
+ mask = gmime_datetok_table[(unsigned char) *start];
+
+ /* find the end of this token */
+ end = start + 1;
+ while (*end && !strchr ("-/,\t\r\n ", *end))
+ mask |= gmime_datetok_table[(unsigned char) *end++];
+
+ if (end != start) {
+ token = date_token_new ();
+ token->next = NULL;
+ token->start = start;
+ token->len = end - start;
+ token->mask = mask;
+
+ tail->next = token;
+ tail = token;
+ }
+
+ if (*end)
+ start = end + 1;
+ else
+ break;
+ }
+
+ return tokens;
+}
+
+static int
+decode_int (const char *in, size_t inlen)
+{
+ register const char *inptr;
+ int sign = 1, val = 0;
+ const char *inend;
+
+ inptr = in;
+ inend = in + inlen;
+
+ if (*inptr == '-') {
+ sign = -1;
+ inptr++;
+ } else if (*inptr == '+')
+ inptr++;
+
+ for ( ; inptr < inend; inptr++) {
+ if (!(*inptr >= '0' && *inptr <= '9'))
+ return -1;
+ else
+ val = (val * 10) + (*inptr - '0');
+ }
+
+ val *= sign;
+
+ return val;
+}
+
+#if 0
+static int
+get_days_in_month (int month, int year)
+{
+ switch (month) {
+ case 1:
+ case 3:
+ case 5:
+ case 7:
+ case 8:
+ case 10:
+ case 12:
+ return 31;
+ case 4:
+ case 6:
+ case 9:
+ case 11:
+ return 30;
+ case 2:
+ if (g_date_is_leap_year (year))
+ return 29;
+ else
+ return 28;
+ default:
+ return 0;
+ }
+}
+#endif
+
+static int
+get_wday (const char *in, size_t inlen)
+{
+ int wday;
+
+ g_return_val_if_fail (in != NULL, -1);
+
+ if (inlen < 3)
+ return -1;
+
+ for (wday = 0; wday < 7; wday++) {
+ if (!g_ascii_strncasecmp (in, tm_days[wday], 3))
+ return wday;
+ }
+
+ return -1; /* unknown week day */
+}
+
+static int
+get_mday (const char *in, size_t inlen)
+{
+ int mday;
+
+ g_return_val_if_fail (in != NULL, -1);
+
+ mday = decode_int (in, inlen);
+
+ if (mday < 0 || mday > 31)
+ mday = -1;
+
+ return mday;
+}
+
+static int
+get_month (const char *in, size_t inlen)
+{
+ int i;
+
+ g_return_val_if_fail (in != NULL, -1);
+
+ if (inlen < 3)
+ return -1;
+
+ for (i = 0; i < 12; i++) {
+ if (!g_ascii_strncasecmp (in, tm_months[i], 3))
+ return i;
+ }
+
+ return -1; /* unknown month */
+}
+
+static int
+get_year (const char *in, size_t inlen)
+{
+ int year;
+
+ g_return_val_if_fail (in != NULL, -1);
+
+ if ((year = decode_int (in, inlen)) == -1)
+ return -1;
+
+ if (year < 100)
+ year += (year < 70) ? 2000 : 1900;
+
+ if (year < 1969)
+ return -1;
+
+ return year;
+}
+
+static gboolean
+get_time (const char *in, size_t inlen, int *hour, int *min, int *sec)
+{
+ register const char *inptr;
+ int *val, colons = 0;
+ const char *inend;
+
+ *hour = *min = *sec = 0;
+
+ inend = in + inlen;
+ val = hour;
+ for (inptr = in; inptr < inend; inptr++) {
+ if (*inptr == ':') {
+ colons++;
+ switch (colons) {
+ case 1:
+ val = min;
+ break;
+ case 2:
+ val = sec;
+ break;
+ default:
+ return FALSE;
+ }
+ } else if (!(*inptr >= '0' && *inptr <= '9'))
+ return FALSE;
+ else
+ *val = (*val * 10) + (*inptr - '0');
+ }
+
+ return TRUE;
+}
+
+static int
+get_tzone (date_token **token)
+{
+ const char *inptr, *inend;
+ size_t inlen;
+ int i, t;
+
+ for (i = 0; *token && i < 2; *token = (*token)->next, i++) {
+ inptr = (*token)->start;
+ inlen = (*token)->len;
+ inend = inptr + inlen;
+
+ if (*inptr == '+' || *inptr == '-') {
+ return decode_int (inptr, inlen);
+ } else {
+ if (*inptr == '(') {
+ inptr++;
+ if (*(inend - 1) == ')')
+ inlen -= 2;
+ else
+ inlen--;
+ }
+
+ for (t = 0; t < 15; t++) {
+ size_t len = strlen (tz_offsets[t].name);
+
+ if (len != inlen)
+ continue;
+
+ if (!strncmp (inptr, tz_offsets[t].name, len))
+ return tz_offsets[t].offset;
+ }
+ }
+ }
+
+ return -1;
+}
+
+static time_t
+mktime_utc (struct tm *tm)
+{
+ time_t tt;
+ long tz;
+
+ tm->tm_isdst = -1;
+ tt = mktime (tm);
+
+#if defined (G_OS_WIN32)
+ _get_timezone (&tz);
+ if (tm->tm_isdst > 0) {
+ int dst;
+
+ _get_dstbias (&dst);
+ tz += dst;
+ }
+#elif defined (HAVE_TM_GMTOFF)
+ tz = -tm->tm_gmtoff;
+#elif defined (HAVE_TIMEZONE)
+ if (tm->tm_isdst > 0) {
+#if defined (HAVE_ALTZONE)
+ tz = altzone;
+#else /* !defined (HAVE_ALTZONE) */
+ tz = (timezone - 3600);
+#endif
+ } else {
+ tz = timezone;
+ }
+#elif defined (HAVE__TIMEZONE)
+ tz = _timezone;
+#else
+#error Neither HAVE_TIMEZONE nor HAVE_TM_GMTOFF defined. Rerun autoheader, autoconf, etc.
+#endif
+
+ return tt - tz;
+}
+
+static time_t
+parse_rfc822_date (date_token *tokens, int *tzone)
+{
+ int hour, min, sec, offset, n;
+ date_token *token;
+ struct tm tm;
+ time_t t;
+
+ g_return_val_if_fail (tokens != NULL, (time_t) 0);
+
+ token = tokens;
+
+ memset ((void *) &tm, 0, sizeof (struct tm));
+
+ if ((n = get_wday (token->start, token->len)) != -1) {
+ /* not all dates may have this... */
+ tm.tm_wday = n;
+ token = token->next;
+ }
+
+ /* get the mday */
+ if (!token || (n = get_mday (token->start, token->len)) == -1)
+ return (time_t) 0;
+
+ tm.tm_mday = n;
+ token = token->next;
+
+ /* get the month */
+ if (!token || (n = get_month (token->start, token->len)) == -1)
+ return (time_t) 0;
+
+ tm.tm_mon = n;
+ token = token->next;
+
+ /* get the year */
+ if (!token || (n = get_year (token->start, token->len)) == -1)
+ return (time_t) 0;
+
+ tm.tm_year = n - 1900;
+ token = token->next;
+
+ /* get the hour/min/sec */
+ if (!token || !get_time (token->start, token->len, &hour, &min, &sec))
+ return (time_t) 0;
+
+ tm.tm_hour = hour;
+ tm.tm_min = min;
+ tm.tm_sec = sec;
+ token = token->next;
+
+ /* get the timezone */
+ if (!token || (n = get_tzone (&token)) == -1) {
+ /* I guess we assume tz is GMT? */
+ offset = 0;
+ } else {
+ offset = n;
+ }
+
+ t = mktime_utc (&tm);
+
+ /* t is now GMT of the time we want, but not offset by the timezone ... */
+
+ /* this should convert the time to the GMT equiv time */
+ t -= ((offset / 100) * 60 * 60) + (offset % 100) * 60;
+
+ if (tzone)
+ *tzone = offset;
+
+ return t;
+}
+
+
+#define date_token_mask(t) (((date_token *) t)->mask)
+#define is_numeric(t) ((date_token_mask (t) & DATE_TOKEN_NON_NUMERIC) == 0)
+#define is_weekday(t) ((date_token_mask (t) & DATE_TOKEN_NON_WEEKDAY) == 0)
+#define is_month(t) ((date_token_mask (t) & DATE_TOKEN_NON_MONTH) == 0)
+#define is_time(t) (((date_token_mask (t) & DATE_TOKEN_NON_TIME) == 0) && (date_token_mask (t) & DATE_TOKEN_HAS_COLON))
+#define is_tzone_alpha(t) ((date_token_mask (t) & DATE_TOKEN_NON_TIMEZONE_ALPHA) == 0)
+#define is_tzone_numeric(t) (((date_token_mask (t) & DATE_TOKEN_NON_TIMEZONE_NUMERIC) == 0) && (date_token_mask (t) & DATE_TOKEN_HAS_SIGN))
+#define is_tzone(t) (is_tzone_alpha (t) || is_tzone_numeric (t))
+
+static time_t
+parse_broken_date (date_token *tokens, int *tzone)
+{
+ gboolean got_wday, got_month, got_tzone;
+ int hour, min, sec, offset, n;
+ date_token *token;
+ struct tm tm;
+ time_t t;
+
+ memset ((void *) &tm, 0, sizeof (struct tm));
+ got_wday = got_month = got_tzone = FALSE;
+ offset = 0;
+
+ token = tokens;
+ while (token) {
+ if (is_weekday (token) && !got_wday) {
+ if ((n = get_wday (token->start, token->len)) != -1) {
+ d(printf ("weekday; "));
+ got_wday = TRUE;
+ tm.tm_wday = n;
+ goto next;
+ }
+ }
+
+ if (is_month (token) && !got_month) {
+ if ((n = get_month (token->start, token->len)) != -1) {
+ d(printf ("month; "));
+ got_month = TRUE;
+ tm.tm_mon = n;
+ goto next;
+ }
+ }
+
+ if (is_time (token) && !tm.tm_hour && !tm.tm_min && !tm.tm_sec) {
+ if (get_time (token->start, token->len, &hour, &min, &sec)) {
+ d(printf ("time; "));
+ tm.tm_hour = hour;
+ tm.tm_min = min;
+ tm.tm_sec = sec;
+ goto next;
+ }
+ }
+
+ if (is_tzone (token) && !got_tzone) {
+ date_token *t = token;
+
+ if ((n = get_tzone (&t)) != -1) {
+ d(printf ("tzone; "));
+ got_tzone = TRUE;
+ offset = n;
+ goto next;
+ }
+ }
+
+ if (is_numeric (token)) {
+ if (token->len == 4 && !tm.tm_year) {
+ if ((n = get_year (token->start, token->len)) != -1) {
+ d(printf ("year; "));
+ tm.tm_year = n - 1900;
+ goto next;
+ }
+ } else {
+ /* Note: assumes MM-DD-YY ordering if '0 < MM < 12' holds true */
+ if (!got_month && token->next && is_numeric (token->next)) {
+ if ((n = decode_int (token->start, token->len)) > 12) {
+ goto mday;
+ } else if (n > 0) {
+ d(printf ("mon; "));
+ got_month = TRUE;
+ tm.tm_mon = n - 1;
+ }
+ goto next;
+ } else if (!tm.tm_mday && (n = get_mday (token->start, token->len)) != -1) {
+ mday:
+ d(printf ("mday; "));
+ tm.tm_mday = n;
+ goto next;
+ } else if (!tm.tm_year) {
+ if ((n = get_year (token->start, token->len)) != -1) {
+ d(printf ("2-digit year; "));
+ tm.tm_year = n - 1900;
+ }
+ goto next;
+ }
+ }
+ }
+
+ d(printf ("???; "));
+
+ next:
+
+ token = token->next;
+ }
+
+ d(printf ("\n"));
+
+ t = mktime_utc (&tm);
+
+ /* t is now GMT of the time we want, but not offset by the timezone ... */
+
+ /* this should convert the time to the GMT equiv time */
+ t -= ((offset / 100) * 60 * 60) + (offset % 100) * 60;
+
+ if (tzone)
+ *tzone = offset;
+
+ return t;
+}
+
+/**
+ * g_mime_utils_header_decode_date:
+ * @str: input date string
+ * @tz_offset: timezone offset
+ *
+ * Decodes the rfc822 date string and saves the GMT offset into
+ * @tz_offset if non-NULL.
+ *
+ * Returns: the time_t representation of the date string specified by
+ * @str or (time_t) %0 on error. If @tz_offset is non-NULL, the value
+ * of the timezone offset will be stored.
+ **/
+time_t
+g_mime_utils_header_decode_date (const char *str, int *tz_offset)
+{
+ date_token *token, *tokens;
+ time_t date;
+
+ if (!(tokens = datetok (str))) {
+ if (tz_offset)
+ *tz_offset = 0;
+
+ return (time_t) 0;
+ }
+
+ if (!(date = parse_rfc822_date (tokens, tz_offset)))
+ date = parse_broken_date (tokens, tz_offset);
+
+ /* cleanup */
+ while (tokens) {
+ token = tokens;
+ tokens = tokens->next;
+ date_token_free (token);
+ }
+
+ return date;
+}
diff --git a/plparse/totem-pl-parser-decode-date.h b/plparse/totem-pl-parser-decode-date.h
new file mode 100644
index 0000000..f1a7725
--- /dev/null
+++ b/plparse/totem-pl-parser-decode-date.h
@@ -0,0 +1,25 @@
+/* GMime
+ * Copyright (C) 2000-2009 Jeffrey Stedfast
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+#include <glib.h>
+
+#include <stdio.h>
+
+time_t g_mime_utils_header_decode_date (const char *str, int *tz_offset);
+
diff --git a/plparse/totem-pl-parser-podcast.c b/plparse/totem-pl-parser-podcast.c
index e3777ab..283cfef 100644
--- a/plparse/totem-pl-parser-podcast.c
+++ b/plparse/totem-pl-parser-podcast.c
@@ -258,9 +258,6 @@ totem_pl_parser_add_rss (TotemPlParser *parser,
TotemPlParseData *parse_data,
gpointer data)
{
-#ifndef HAVE_GMIME
- WARN_NO_GMIME;
-#else
xml_node_t* doc, *channel;
char *contents;
gsize size;
@@ -300,7 +297,6 @@ totem_pl_parser_add_rss (TotemPlParser *parser,
xml_parser_free_tree (doc);
return TOTEM_PL_PARSER_RESULT_SUCCESS;
-#endif /* !HAVE_GMIME */
}
/* http://www.apple.com/itunes/store/podcaststechspecs.html */
@@ -311,9 +307,6 @@ totem_pl_parser_add_itpc (TotemPlParser *parser,
TotemPlParseData *parse_data,
gpointer data)
{
-#ifndef HAVE_GMIME
- WARN_NO_GMIME;
-#else
TotemPlParserResult ret;
char *uri, *new_uri, *uri_scheme;
GFile *new_file;
@@ -332,7 +325,6 @@ totem_pl_parser_add_itpc (TotemPlParser *parser,
g_object_unref (new_file);
return ret;
-#endif /* !HAVE_GMIME */
}
TotemPlParserResult
@@ -342,9 +334,6 @@ totem_pl_parser_add_zune (TotemPlParser *parser,
TotemPlParseData *parse_data,
gpointer data)
{
-#ifndef HAVE_GMIME
- WARN_NO_GMIME;
-#else
TotemPlParserResult ret;
char *uri, *new_uri;
GFile *new_file;
@@ -371,7 +360,6 @@ totem_pl_parser_add_zune (TotemPlParser *parser,
g_object_unref (new_file);
return ret;
-#endif /* !HAVE_GMIME */
}
/* Atom docs:
@@ -509,9 +497,6 @@ totem_pl_parser_add_atom (TotemPlParser *parser,
TotemPlParseData *parse_data,
gpointer data)
{
-#ifndef HAVE_GMIME
- WARN_NO_GMIME;
-#else
xml_node_t* doc;
char *contents, *uri;
gsize size;
@@ -541,7 +526,6 @@ totem_pl_parser_add_atom (TotemPlParser *parser,
xml_parser_free_tree (doc);
return TOTEM_PL_PARSER_RESULT_SUCCESS;
-#endif /* !HAVE_GMIME */
}
TotemPlParserResult
@@ -551,9 +535,6 @@ totem_pl_parser_add_xml_feed (TotemPlParser *parser,
TotemPlParseData *parse_data,
gpointer data)
{
-#ifndef HAVE_GMIME
- WARN_NO_GMIME;
-#else
guint len;
if (data == NULL)
@@ -569,7 +550,6 @@ totem_pl_parser_add_xml_feed (TotemPlParser *parser,
return totem_pl_parser_add_opml (parser, file, base_file, parse_data, data);
return TOTEM_PL_PARSER_RESULT_UNHANDLED;
-#endif /* !HAVE_GMIME */
}
/* From libgsf's gsf-utils.h */
@@ -742,9 +722,6 @@ totem_pl_parser_add_itms (TotemPlParser *parser,
TotemPlParseData *parse_data,
gpointer data)
{
-#ifndef HAVE_GMIME
- WARN_NO_GMIME;
-#else
char *contents, *uncompressed, *itms_uri;
GFile *itms_file, *feed_file;
TotemPlParserResult ret;
@@ -803,7 +780,6 @@ totem_pl_parser_add_itms (TotemPlParser *parser,
g_object_unref (feed_file);
return ret;
-#endif /* !HAVE_GMIME */
}
gboolean
@@ -903,9 +879,6 @@ totem_pl_parser_add_opml (TotemPlParser *parser,
TotemPlParseData *parse_data,
gpointer data)
{
-#ifndef HAVE_GMIME
- WARN_NO_GMIME;
-#else
xml_node_t* doc;
char *contents, *uri;
gsize size;
@@ -935,7 +908,6 @@ totem_pl_parser_add_opml (TotemPlParser *parser,
xml_parser_free_tree (doc);
return TOTEM_PL_PARSER_RESULT_SUCCESS;
-#endif /* !HAVE_GMIME */
}
#endif /* !TOTEM_PL_PARSER_MINI */
diff --git a/plparse/totem-pl-parser.c b/plparse/totem-pl-parser.c
index 673b277..06edbd8 100644
--- a/plparse/totem-pl-parser.c
+++ b/plparse/totem-pl-parser.c
@@ -134,16 +134,13 @@
#include <gobject/gvaluecollector.h>
#include <gtk/gtk.h>
-#ifdef HAVE_GMIME
-#include <gmime/gmime-utils.h>
-#endif
-
#include "totem-pl-parser.h"
#include "totemplparser-marshal.h"
#include "totem-disc.h"
#endif /* !TOTEM_PL_PARSER_MINI */
#include "totem-pl-parser-mini.h"
+#include "totem-pl-parser-decode-date.h"
#include "totem-pl-parser-wm.h"
#include "totem-pl-parser-qt.h"
#include "totem-pl-parser-pls.h"
@@ -2305,7 +2302,6 @@ totem_pl_parser_parse_duration (const char *duration, gboolean debug)
guint64
totem_pl_parser_parse_date (const char *date_str, gboolean debug)
{
-#ifdef HAVE_GMIME
GTimeVal val;
g_return_val_if_fail (date_str != NULL, -1);
@@ -2319,9 +2315,6 @@ totem_pl_parser_parse_date (const char *date_str, gboolean debug)
D(g_message ("Failed to parse duration '%s' using the ISO8601 parser", date_str));
/* Fall back to RFC 2822 date parsing */
return g_mime_utils_header_decode_date (date_str, NULL);
-#else
- WARN_NO_GMIME;
-#endif /* HAVE_GMIME */
}
#endif /* !TOTEM_PL_PARSER_MINI */
diff --git a/totem-plparser.pc.in b/totem-plparser.pc.in
index 685a8db..ecf7024 100644
--- a/totem-plparser.pc.in
+++ b/totem-plparser.pc.in
@@ -9,7 +9,7 @@ Name: totem-plparser
Description: Totem Playlist Parser library
Version: @VERSION@
Requires: gtk+-2.0
-Requires.private: libxml-2.0 @GMIME@
+Requires.private: libxml-2.0
Libs: -L${libdir} -ltotem-plparser
Cflags: -I${includedir}/totem-pl-parser/1/plparser
uselibcamel= USEGMIME@
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]