0
我最近開始使用libspotify並正在寫一個簡單的hello世界,基於jukebox.h的示例代碼。Libspotify簡單的問候世界
我的代碼目前看起來是這樣的:
#include <stdio.h>
#include "libspotify/api.h"
#include "Key.h"
#include "Password.h"
#include <stdlib.h>
#include <pthread.h>
#include <time.h>
#define true 1
#define false 0
sp_session *g_session;
bool g_notify_do;
static pthread_mutex_t g_notify_mutex;
static pthread_cond_t g_notify_cond;
#define DEBUG 1
__stdcall static void debug(const char *format, ...) {
if (!DEBUG)
return;
va_list argptr;
va_start(argptr, format);
vprintf(format, argptr);
printf("\n");
}
void assertSpotify(sp_error error, char *details) {
if (error != SP_ERROR_OK) {
debug("Fatal error: %s", details);
exit(1);
}
}
__stdcall static void notify_main_thread(sp_session *sess) {
pthread_mutex_lock(&g_notify_mutex);
g_notify_do = 1;
pthread_cond_signal(&g_notify_cond);
pthread_mutex_unlock(&g_notify_mutex);
}
__stdcall static void logged_in(sp_session *sess, sp_error error) {
assertSpotify(error, "Could not log in.");
sp_playlistcontainer *pc = sp_session_playlistcontainer(sess);
printf("Looking at %d playlists\n", sp_playlistcontainer_num_playlists(pc));
}
int main(void) {
sp_error err;
static sp_session_callbacks session_callbacks = {};
static sp_session_config spconfig = {};
int next_timeout = 0;
printf("Starting up...\n");
session_callbacks.notify_main_thread = ¬ify_main_thread;
session_callbacks.logged_in = &logged_in;
spconfig.api_version = SPOTIFY_API_VERSION;
spconfig.cache_location = "tmp";
spconfig.settings_location = "tmp";
spconfig.application_key = g_appkey;
spconfig.application_key_size = g_appkey_size;
spconfig.user_agent = "Hello-World";
spconfig.callbacks = &session_callbacks;
pthread_mutex_init(&g_notify_mutex, NULL);
pthread_cond_init(&g_notify_cond, NULL);
err = sp_session_create(&spconfig, &g_session);
assertSpotify(err, "Could not create Spotify Session.");
debug("Session created.");
err = sp_session_login(g_session, spotify_user, spotify_pw, 0, NULL); //Defined in Password.h
assertSpotify(err, "Could not log in.");
debug("Username: %s", sp_session_user_name(g_session));
err = sp_session_set_connection_type(g_session, SP_CONNECTION_TYPE_WIRED);
assertSpotify(err, "Could not set connection type.");
pthread_mutex_lock(&g_notify_mutex);
while (true) {
if (next_timeout == 0) {
while(!g_notify_do)
pthread_cond_wait(&g_notify_cond, &g_notify_mutex);
} else {
time_t now = time(NULL);
struct timespec ts;
ts.tv_sec = now;
ts.tv_sec = now/1000000;
ts.tv_sec += next_timeout/1000;
ts.tv_nsec += (next_timeout % 1000) * 1000000;
pthread_cond_timedwait(&g_notify_cond, &g_notify_mutex, &ts);
}
g_notify_do = false;
pthread_mutex_unlock(&g_notify_mutex);
do {
sp_session_process_events(g_session, &next_timeout);
} while (next_timeout == 0);
pthread_mutex_lock(&g_notify_mutex);
}
return 0;
}
的問題是,sp_playlistcontainer_num_playlists
回報0
,即使我的帳戶有大約10播放列表。
我的系統:Windows 7 x64 MinGW。
我在做什麼錯?
謝謝您的回答,它並沒有幫助,但我看到了一些日誌:ChannelError(1,1,鏈接軌道),同樣與播放列表,鏈接曲目和播放列表 –
對不起,我爲會話回調log_message寫了一個回調。完整的信息在這裏:http://pastebin.com/r7cwGhFY –
@das_j - 我更新了我的答案,我認爲你應該爲'logged_in'添加一個回調,然後當完全登錄時你應該嘗試獲取播放列表容器。 – Cyclonecode