/******************** * 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; }
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; }
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; }
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; }