TotemPlParserResult totem_pl_parser_add_gvp (TotemPlParser *parser, GFile *file, GFile *base_file, TotemPlParseData *parse_data, gpointer data) { TotemPlParserResult retval = TOTEM_PL_PARSER_RESULT_UNHANDLED; char *contents, **lines, *title, *link, *version; gsize size; if (g_file_load_contents (file, NULL, &contents, &size, NULL, NULL) == FALSE) return TOTEM_PL_PARSER_RESULT_ERROR; if (g_str_has_prefix (contents, "#.download.the.free.Google.Video.Player") == FALSE && g_str_has_prefix (contents, "# download the free Google Video Player") == FALSE) { g_free (contents); return retval; } lines = g_strsplit (contents, "\n", 0); g_free (contents); /* We only handle GVP version 1.1 for now */ version = totem_pl_parser_read_ini_line_string_with_sep (lines, "gvp_version", ":"); if (version == NULL || strcmp (version, "1.1") != 0) { g_free (version); g_strfreev (lines); return retval; } g_free (version); link = totem_pl_parser_read_ini_line_string_with_sep (lines, "url", ":"); if (link == NULL) { g_strfreev (lines); return retval; } retval = TOTEM_PL_PARSER_RESULT_SUCCESS; title = totem_pl_parser_read_ini_line_string_with_sep (lines, "title", ":"); totem_pl_parser_add_one_uri (parser, link, title); g_free (link); g_free (title); g_strfreev (lines); return retval; }
static void totem_pl_parser_parse_ram_uri (TotemPlParser *parser, const char *uri) { char *mark, **params; GString *str; guint i, num_params; char *title, *author, *copyright, *abstract, *screensize, *mode, *start, *end; if (g_str_has_prefix (uri, "rtsp://") == FALSE && g_str_has_prefix (uri, "pnm://") == FALSE) { totem_pl_parser_add_one_uri (parser, uri, NULL); return; } /* Look for "?" */ mark = strstr (uri, "?"); if (mark == NULL) { totem_pl_parser_add_one_uri (parser, uri, NULL); return; } if (mark[1] == '\0') { char *new_uri; new_uri = g_strndup (uri, mark + 1 - uri); totem_pl_parser_add_one_uri (parser, new_uri, NULL); g_free (new_uri); return; } title = author = copyright = abstract = screensize = mode = end = start = NULL; num_params = 0; str = g_string_new_len (uri, mark - uri); params = g_strsplit (mark + 1, "&", -1); for (i = 0; params[i] != NULL; i++) { if (g_str_has_prefix (params[i], "title=") != FALSE) { title = params[i] + strlen ("title="); } else if (g_str_has_prefix (params[i], "author=") != FALSE) { author = params[i] + strlen ("author="); } else if (g_str_has_prefix (params[i], "copyright=") != FALSE) { copyright = params[i] + strlen ("copyright="); } else if (g_str_has_prefix (params[i], "abstract=") != FALSE) { abstract = params[i] + strlen ("abstract="); } else if (g_str_has_prefix (params[i], "screensize=") != FALSE) { screensize = params[i] + strlen ("screensize="); } else if (g_str_has_prefix (params[i], "mode=") != FALSE) { mode = params[i] + strlen ("mode="); } else if (g_str_has_prefix (params[i], "end=") != FALSE) { end = params[i] + strlen ("end="); } else if (g_str_has_prefix (params[i], "start=") != FALSE) { start = params[i] + strlen ("start="); } else { if (num_params == 0) g_string_append_c (str, '?'); else g_string_append_c (str, '&'); g_string_append (str, params[i]); num_params++; } } totem_pl_parser_add_uri (parser, TOTEM_PL_PARSER_FIELD_URI, str->str, TOTEM_PL_PARSER_FIELD_TITLE, title, TOTEM_PL_PARSER_FIELD_AUTHOR, author, TOTEM_PL_PARSER_FIELD_COPYRIGHT, copyright, TOTEM_PL_PARSER_FIELD_ABSTRACT, abstract, TOTEM_PL_PARSER_FIELD_SCREENSIZE, screensize, TOTEM_PL_PARSER_FIELD_UI_MODE, mode, TOTEM_PL_PARSER_FIELD_STARTTIME, start, TOTEM_PL_PARSER_FIELD_ENDTIME, end, NULL); g_string_free (str, TRUE); g_strfreev (params); }