Ejemplo n.º 1
0
QuviMediaInfo::QuviMediaInfo(std::wstring&& url)
	: m_ourl(std::move(url))
	, m_qp(m_q, m_ourl)
{
	QUVIcode qc;

	char* infoUrl = nullptr;
	qc = quvi_getprop(m_qp, QUVIPROP_MEDIAURL, &infoUrl);
	if (qc != QUVI_OK || !infoUrl)
		throw qc;
	m_url = WideFromMultibyte(infoUrl);
	m_murl = infoUrl;

	char* infoTitle = nullptr;
	qc = quvi_getprop(m_qp, QUVIPROP_PAGETITLE, &infoTitle);
	if (qc == QUVI_OK && infoTitle) {
		// not nice to expect the page to be encoded in utf-8, but quvi doesn't leave much choice
		std::wstring_convert<std::codecvt_utf8<wchar_t>> convert;
		m_title = convert.from_bytes(infoTitle);
	}

	char* infoContentType = nullptr;
	qc = quvi_getprop(m_qp, QUVIPROP_MEDIACONTENTTYPE, &infoContentType);
	if (qc == QUVI_OK && infoContentType)
		m_contentType = infoContentType;

	double len = 0;
	qc = quvi_getprop(m_qp, QUVIPROP_MEDIACONTENTLENGTH, &len);
	if (qc == QUVI_OK && len > 0)
		m_contentLength = (uint64_t)len;

	qc = quvi_getinfo(m_q, QUVIINFO_CURL, &m_curl);
	if (qc != QUVI_OK || !m_curl)
		throw qc;
}
IdolPlParserResult
idol_pl_parser_add_videosite (IdolPlParser *parser,
			       GFile *file,
			       GFile *base_file,
			       IdolPlParseData *parse_data,
			       gpointer data)
{
#ifdef HAVE_QUVI
	QUVIcode rc;
	quvi_t handle;
	quvi_video_t v;
	char *uri;
	/* 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;

	if (quvi_init (&handle) != QUVI_OK)
		return IDOL_PL_PARSER_RESULT_ERROR;

	uri = g_file_get_uri (file);
	rc = quvi_parse(handle, uri, &v);
	if (rc != QUVI_OK) {
		if (idol_pl_parser_is_debugging_enabled (parser)) {
			g_print ("quvi_parse for '%s' returned %d", uri, rc);
		}
		g_free (uri);
		quvi_close (&handle);
		return IDOL_PL_PARSER_RESULT_ERROR;
	}

	getprop (QUVIPROP_VIDEOURL, video_uri);
	if (quvi_getprop (v, QUVIPROP_VIDEOFILELENGTH, &length) == QUVI_OK)
		length_str = g_strdup_printf ("%f", length);
	else
		length_str = NULL;
	getprop (QUVIPROP_PAGETITLE, title);
	getprop (QUVIPROP_VIDEOID, id);
	getprop (QUVIPROP_PAGEURL, page_uri);
	getprop (QUVIPROP_STARTTIME, starttime);
	getprop (QUVIPROP_VIDEOFILECONTENTTYPE, content_type);

	length_str = g_strdup_printf ("%d", (int) length);
	if (video_uri != NULL)
		idol_pl_parser_add_uri (parser,
					 IDOL_PL_PARSER_FIELD_TITLE, title,
					 IDOL_PL_PARSER_FIELD_ID, id,
					 IDOL_PL_PARSER_FIELD_MOREINFO, page_uri,
					 IDOL_PL_PARSER_FIELD_URI, video_uri,
					 IDOL_PL_PARSER_FIELD_FILESIZE, length_str,
					 IDOL_PL_PARSER_FIELD_STARTTIME, starttime,
					 IDOL_PL_PARSER_FIELD_CONTENT_TYPE, content_type,
					 NULL);
	g_free (uri);
	g_free (length_str);

	quvi_parse_close (&v);
	quvi_close (&handle);

	return IDOL_PL_PARSER_RESULT_SUCCESS;
#else
	return IDOL_PL_PARSER_RESULT_UNHANDLED;
#endif /* !HAVE_QUVI */
}