Exemplo n.º 1
0
Arquivo: xhtml.c Projeto: nono/upskirt
/********************
 * GENERIC RENDERER *
 ********************/
static int
rndr_autolink(struct buf *ob, struct buf *link, enum mkd_autolink type, void *opaque)
{
	struct xhtml_renderopt *options = opaque;

	if (!link || !link->size)
		return 0;

	if ((options->flags & XHTML_SAFELINK) != 0 &&
		!is_safe_link(link->data, link->size) &&
		type != MKDA_EMAIL)
		return 0;

	BUFPUTSL(ob, "<a href=\"");
	if (type == MKDA_EMAIL)
		BUFPUTSL(ob, "mailto:");
	uri_escape(ob, link->data, link->size);
	BUFPUTSL(ob, "\">");

	/*
	 * Pretty printing: if we get an email address as
	 * an actual URI, e.g. `mailto:[email protected]`, we don't
	 * want to print the `mailto:` prefix
	 */
	if (bufprefix(link, "mailto:") == 0) {
		attr_escape(ob, link->data + 7, link->size - 7);
	} else {
		attr_escape(ob, link->data, link->size);
	}

	BUFPUTSL(ob, "</a>");

	return 1;
}
Exemplo n.º 2
0
Arquivo: xhtml.c Projeto: nono/upskirt
static int
rndr_link(struct buf *ob, struct buf *link, struct buf *title, struct buf *content, void *opaque)
{
	struct xhtml_renderopt *options = opaque;
	
	if ((options->flags & XHTML_SAFELINK) != 0 && !is_safe_link(link->data, link->size))
		return 0;

	BUFPUTSL(ob, "<a href=\"");
	if (link && link->size) uri_escape(ob, link->data, link->size);
	if (title && title->size) {
		BUFPUTSL(ob, "\" title=\"");
		attr_escape(ob, title->data, title->size); }
	BUFPUTSL(ob, "\">");
	if (content && content->size) bufput(ob, content->data, content->size);
	BUFPUTSL(ob, "</a>");
	return 1;
}
Exemplo n.º 3
0
static int geonames_search_get_coord(VikWindow *vw, VikViewport *vvp, gchar *srch_str, VikCoord *coord)
{
  gchar *uri;
  gchar *escaped_srch_str;
  int ret = 1;  /* OK */
  struct LatLon ll;
  gchar *tmpname;

  g_debug("%s: raw search: %s", __FUNCTION__, srch_str);
  escaped_srch_str = uri_escape(srch_str);
  g_debug("%s: escaped search: %s", __FUNCTION__, escaped_srch_str);

  //uri = g_strdup_printf(GEONAMES_SEARCH_URL_FMT, srch_str);
  uri = g_strdup_printf(GEONAMES_SEARCH_URL_FMT, escaped_srch_str);

  tmpname = download_url(uri);
  if (!tmpname) {
    ret = -1;
    goto done;
  }
  ret = parse_file_for_latlon(vw, tmpname, &ll);
  if (ret == 3) {
    goto done;
  }

  vik_coord_load_from_latlon ( coord, vik_viewport_get_coord_mode(vvp), &ll );

  if (last_coord)
    g_free(last_coord);
  last_coord = g_malloc(sizeof(VikCoord));
  *last_coord = *coord;
  if (last_successful_search_str)
    g_free(last_successful_search_str);
  last_successful_search_str = g_strdup(last_search_str);

done:
  g_free(escaped_srch_str);
  g_free(uri);
  if (tmpname) {
    g_remove(tmpname);
    g_free(tmpname);
  }
  return ret;
}
Exemplo n.º 4
0
int
fetch_from_albumart_org (const char *artist, const char *album, const char *dest)
{
    char url [1024];
    char *artist_url = uri_escape (artist, 0);
    char *album_url = uri_escape (album, 0);
    snprintf (url, sizeof (url), "http://www.albumart.org/index.php?srchkey=%s+%s&itempage=1&newsearch=1&searchindex=Music", artist_url, album_url);
    free (artist_url);
    free (album_url);

    DB_FILE *fp = deadbeef->fopen (url);
    if (!fp) {
        trace ("fetch_from_albumart_org: failed to open %s\n", url);
        return -1;
    }
    current_file = fp;
    const char searchstr[] = "http://ecx.images-amazon.com/images/I/";
    char buffer[10000];
    memset (buffer, 0, sizeof (buffer));
    char *img = NULL;
    int size = deadbeef->fread (buffer, 1, sizeof (buffer), fp);
    if (size > 0) {
        img = strstr (buffer, searchstr);
    }
    current_file = NULL;
    deadbeef->fclose (fp);

    if (!img) {
        trace ("fetch_from_albumart_org: image url not found in response from %s (%d bytes)\n", url, size);
        return -1;
    }

    char *end = strstr (img, "._SL160_");
    if (!end || end == img)
    {
        trace ("fetch_from_albumart_org: bad xml from %s\n", url);
        return -1;
    }
    strcpy (end, ".jpg");

    fp = deadbeef->fopen (img);
    if (!fp) {
        trace ("fetch_from_albumart_org: failed to open %s\n", img);
        return -1;
    }
    current_file = fp;

    char temp[PATH_MAX];
    snprintf (temp, sizeof (temp), "%s.part", dest);
    FILE *out = fopen (temp, "w+b");
    if (!out) {
        trace ("fetch_from_albumart_org: failed to open %s for writing\n", temp);
        current_file = NULL;
        deadbeef->fclose (fp);
        return -1;
    }

    char *writebuffer[4096];
    int len;
    int error = 0;
    while ((len = deadbeef->fread (writebuffer, 1, sizeof (writebuffer), fp)) > 0) {
        if (fwrite (writebuffer, 1, len, out) != len) {
            trace ("fetch_from_albumart_org: failed to write to %s\n", dest);
            error = 1;
            break;
        }
    }

    fclose (out);
    current_file = NULL;
    deadbeef->fclose (fp);

    if (error) {
        unlink (temp);
        return -1;
    }

    if (rename (temp, dest) != 0) {
        unlink (temp);
        unlink (dest);
        return -1;
    }

    return 0;
}