2013-01-15 48 views
1

我想熟悉libspotify,我必須說libspotify上的文檔嚴重缺乏。我已經從示例中入侵了一個小應用程序,但我無法實現它的工作。libspotify不連接

我在Visual Studio 2012中構建了一個C控制檯應用程序。該appkey是正確的。

sp_session_config config; 
sp_error error; 
sp_session *session; 
char *blob = NULL; 

memset(&config, 0, sizeof(config)); 

config.api_version = SPOTIFY_API_VERSION; 
config.cache_location = "tmp"; 
config.settings_location = "tmp"; 
config.application_key = g_appkey; 
config.application_key_size = g_appkey_size; 

config.user_agent = "SpotiTest"; 

error = sp_session_create(&config, &session); 
if (SP_ERROR_OK != error) { 
    fprintf(stderr, "failed to create session: %s\n", 
        sp_error_message(error)); 
    return; 
} 

error = sp_session_login(session, "USERNAME", "PASSWORD", 1, blob); 
if (SP_ERROR_OK != error) { 
    fprintf(stderr, "failed to log in to Spotify: %s\n", 
        sp_error_message(error)); 
    sp_session_release(session); 
    exit(4); 
} 

sp_connectionstate cs = sp_session_connectionstate (session); 

不管用戶名和密碼是什麼(錯誤或正確),sp_session_login總是返回SP_ERROR_OK。當我使用sp_session_connectionstate檢查連接狀態時,它始終返回SP_CONNECTION_STATE_LOGGED_OUT。

我沒有看到我在這裏做錯了,也似乎無法通過正規渠道找到任何相關答案。

回答

1

API是異步的。 sp_session_login立即返回,並且登錄過程在後臺繼續。看看API附帶的例子。您需要某種事件循環才能調用sp_session_process_events,否則libspotify將無法完成任何工作,並且您可能要等到收到logged_in回調。

+0

所以可以肯定。我應該在空閒循環中始終調用sp_session_process_events,如: while(1) { sp_session_process_events(); } 或者我應該只在[code] notify_main_thread [/ code]回調被調用時調用它? – Demigod

+0

它比這稍微複雜一些。看看libspotify附帶的例子,比如spshell。無論何時調用'sp_session_process_events',它都會返回一個毫秒的時間來等待再次調用。您應該等到這個時間過去或調用notify_main_thread函數,以先到者爲準。如果你只是反覆調用'sp_session_process_events',它會浪費大量的CPU時間,並可能阻止其他事情的發揮。 – Weeble