static bool_t write_key (VFSFile * file, const char * key, const char * val) { if (! strcmp (key, "uri")) return write_key_raw (file, key, val); char buf[3 * strlen (val) + 1]; str_encode_percent (val, -1, buf); return write_key_raw (file, key, buf); }
static void get_lyrics_step_1(void) { if(!state.artist || !state.title) { update_lyrics_window(_("Error"), NULL, _("Missing song metadata")); return; } char title_buf[strlen(state.title) * 3 + 1]; char artist_buf[strlen(state.artist) * 3 + 1]; str_encode_percent(state.title, -1, title_buf); str_encode_percent(state.artist, -1, artist_buf); str_unref(state.uri); state.uri = str_printf("http://lyrics.wikia.com/api.php?action=lyrics&" "artist=%s&song=%s&fmt=xml", artist_buf, title_buf); update_lyrics_window(state.title, state.artist, _("Connecting to lyrics.wikia.com ...")); vfs_async_file_get_contents(state.uri, get_lyrics_step_2, str_ref(state.uri)); }
char * construct_uri (const char * path, const char * reference) { /* URI */ if (strstr (path, "://")) return str_get (path); /* absolute filename */ #ifdef _WIN32 if (path[0] && path[1] == ':' && path[2] == '\\') #else if (path[0] == '/') #endif return filename_to_uri (path); /* relative path */ const char * slash = strrchr (reference, '/'); if (! slash) return NULL; char * utf8 = str_to_utf8 (path, -1); if (! utf8) return NULL; int pathlen = slash + 1 - reference; char buf[pathlen + 3 * strlen (utf8) + 1]; memcpy (buf, reference, pathlen); if (get_bool (NULL, "convert_backslash")) { SCOPY (tmp, utf8); str_replace_char (tmp, '\\', '/'); str_encode_percent (tmp, -1, buf + pathlen); } else str_encode_percent (utf8, -1, buf + pathlen); str_unref (utf8); return str_get (buf); }
char * construct_uri (const char * string, const char * playlist_name) { /* URI */ if (strstr (string, "://")) return strdup (string); /* absolute filename (assumed UTF-8) */ #ifdef _WIN32 if (string[0] && string[1] == ':' && string[2] == '\\') #else if (string[0] == '/') #endif return filename_to_uri (string); /* relative filename (assumed UTF-8) */ const char * slash = strrchr (playlist_name, '/'); if (! slash) return NULL; int pathlen = slash + 1 - playlist_name; int rellen = strlen (string); char buf[pathlen + 3 * rellen + 1]; memcpy (buf, playlist_name, pathlen); if (get_bool (NULL, "convert_backslash")) { char tmp[rellen + 1]; strcpy (tmp, string); string_replace_char (tmp, '\\', '/'); str_encode_percent (tmp, -1, buf + pathlen); } else str_encode_percent (string, -1, buf + pathlen); return strdup (buf); }
EXPORT char * filename_to_uri (const char * name) { char * utf8 = g_locale_to_utf8 (name, -1, NULL, NULL, NULL); if (! utf8) { const char * locale = setlocale (LC_ALL, NULL); fprintf (stderr, "Cannot convert filename from system locale (%s): %s\n", locale, name); return NULL; } #ifdef _WIN32 string_replace_char (utf8, '\\', '/'); #endif char enc[3 * strlen (utf8) + 1]; str_encode_percent (utf8, -1, enc); g_free (utf8); #ifdef _WIN32 return g_strdup_printf ("file:///%s", enc); #else return g_strdup_printf ("file://%s", enc); #endif }
static gint file_open(gint fmt, gint rate, gint nch) { gchar *filename = NULL, *temp = NULL; gchar * directory; gint pos; gint rv; gint playlist; input.format = fmt; input.frequency = rate; input.channels = nch; playlist = aud_playlist_get_playing (); if (playlist < 0) return 0; pos = aud_playlist_get_position(playlist); tuple = aud_playlist_entry_get_tuple (playlist, pos, FALSE); if (tuple == NULL) return 0; if (filenamefromtags) { gchar * utf8 = aud_playlist_entry_get_title (playlist, pos, FALSE); string_replace_char (utf8, '/', ' '); gchar buf[3 * strlen (utf8) + 1]; str_encode_percent (utf8, -1, buf); str_unref (utf8); filename = g_strdup (buf); } else { temp = aud_playlist_entry_get_filename (playlist, pos); gchar * original = strrchr (temp, '/'); g_return_val_if_fail (original != NULL, 0); filename = g_strdup (original + 1); str_unref (temp); if (!use_suffix) if ((temp = strrchr(filename, '.')) != NULL) *temp = '\0'; } if (prependnumber) { gint number = tuple_get_int(tuple, FIELD_TRACK_NUMBER, NULL); if (!tuple || !number) number = pos + 1; temp = g_strdup_printf ("%d%%20%s", number, filename); g_free(filename); filename = temp; } if (save_original) { temp = aud_playlist_entry_get_filename (playlist, pos); directory = g_strdup (temp); str_unref (temp); temp = strrchr (directory, '/'); g_return_val_if_fail (temp != NULL, 0); temp[1] = 0; } else { g_return_val_if_fail (file_path[0], 0); if (file_path[strlen (file_path) - 1] == '/') directory = g_strdup (file_path); else directory = g_strdup_printf ("%s/", file_path); } temp = g_strdup_printf ("%s%s.%s", directory, filename, fileext_str[fileext]); g_free (directory); g_free (filename); filename = temp; output_file = safe_create (filename); g_free (filename); if (output_file == NULL) return 0; convert_init (fmt, plugin->format_required (fmt), nch); rv = (plugin->open)(); samples_written = 0; return rv; }