From 9367f2b40c0c7a74a8dbad83915df23526427a96 Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Sun, 20 Jun 2010 16:46:24 +0300 Subject: [PATCH] main: add support for web-service api Signed-off-by: Felipe Contreras --- main.c | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/main.c b/main.c index adf66a1..af59fbe 100644 --- a/main.c +++ b/main.c @@ -24,11 +24,22 @@ struct service { const char *url; sr_session_t *session; char *cache; + + /* web-service */ + char *api_url; + char *api_key; + char *api_secret; }; static struct service services[] = { - { .id = "lastfm", .url = SR_LASTFM_URL }, - { .id = "librefm", .url = SR_LIBREFM_URL }, + { .id = "lastfm", .url = SR_LASTFM_URL, + .api_url = SR_LASTFM_API_URL, + .api_key = "a550e8cdf80179f749786109ae94a644", + .api_secret = "92cb9a26e36b18031e5dad8db4edfddb", }, + { .id = "librefm", .url = SR_LIBREFM_URL, + .api_url = SR_LIBREFM_API_URL, + .api_key = "a550e8cdf80179f749786109ae94a644", + .api_secret = "92cb9a26e36b18031e5dad8db4edfddb", }, }; static void @@ -155,20 +166,33 @@ static void scrobble_cb(sr_session_t *s) sr_session_store_list(s, service->cache); } +static void session_key_cb(sr_session_t *s, const char *session_key) +{ + struct service *service = s->user_data; + g_key_file_set_string(keyfile, service->id, "session-key", session_key); + g_file_set_contents(conf_file, + g_key_file_to_data(keyfile, NULL, NULL), + -1, NULL); +} + static gboolean authenticate_session(struct service *s) { gchar *username, *password; + gchar *session_key; gboolean ok; username = g_key_file_get_string(keyfile, s->id, "username", NULL); password = g_key_file_get_string(keyfile, s->id, "password", NULL); + session_key = g_key_file_get_string(keyfile, s->id, "session-key", NULL); ok = username && password; if (!ok) goto leave; sr_session_set_cred(s->session, username, password); + if (session_key) + sr_session_set_session_key(s->session, session_key); if (connected) sr_session_handshake(s->session); @@ -187,8 +211,12 @@ get_session(struct service *service) s->user_data = service; s->error_cb = error_cb; s->scrobble_cb = scrobble_cb; + s->session_key_cb = session_key_cb; service->cache = g_build_filename(cache_dir, service->id, NULL); sr_session_load_list(s, service->cache); + if (service->api_key) + sr_session_set_api(s, service->api_url, + service->api_key, service->api_secret); service->session = s; } @@ -202,13 +230,10 @@ authenticate(void) ok = g_key_file_load_from_file(keyfile, conf_file, G_KEY_FILE_NONE, NULL); if (!ok) - goto leave; + return; for (i = 0; i < G_N_ELEMENTS(services); i++) authenticate_session(&services[i]); - -leave: - g_key_file_free(keyfile); } static void @@ -345,6 +370,8 @@ int main(void) g_main_loop_unref(main_loop); + g_key_file_free(keyfile); + for (i = 0; i < G_N_ELEMENTS(services); i++) { struct service *s = &services[i]; sr_session_pause(s->session);