static void sess_callback_offline_status_updated(sp_session *session) { syslog(LOG_INFO, "Session: offline status updated, %d playlists marked for offline usage, %d tracks left to sync, need to go online in %dd%02dh", sp_offline_num_playlists(session), sp_offline_tracks_to_sync(session), sp_offline_time_left(session) / 86400, (sp_offline_time_left(session) % 86400) / 3600); }
void session_get_offline_sync_status(sp_offline_sync_status* status, gboolean* sync_in_progress, int* tracks_to_sync, int* num_playlists, int* time_left) { if (status || sync_in_progress) { sp_offline_sync_status oss; gboolean sip = sp_offline_sync_get_status(g_session, &oss); if (status) *status = oss; if (sync_in_progress) *sync_in_progress = sip; } if (tracks_to_sync) *tracks_to_sync = sp_offline_tracks_to_sync(g_session); if (num_playlists) *num_playlists = sp_offline_num_playlists(g_session); if (time_left) *time_left = sp_offline_time_left(g_session); }
int cmd_playlist_offline(int argc, char **argv) { sp_link *plink; sp_playlist *pl; int on; if (argc == 2 && !strcmp(argv[1], "status")) { printf("Offline status\n"); printf(" %d tracks to sync\n", sp_offline_tracks_to_sync(g_session)); printf(" %d offline playlists in total\n", sp_offline_num_playlists(g_session)); return 1; } if (argc != 3) { printf("offline status | <playlist uri> <on|off>\n"); return 1; } plink = sp_link_create_from_string(argv[1]); if (!plink) { fprintf(stderr, "%s is not a spotify link\n", argv[1]); return -1; } if (sp_link_type(plink) != SP_LINKTYPE_PLAYLIST) { fprintf(stderr, "%s is not a playlist link\n", argv[1]); sp_link_release(plink); return -1; } pl = sp_playlist_create(g_session, plink); if (argc == 3) { if (!strcasecmp(argv[2], "on")) on = 1; else if (!strcasecmp(argv[2], "off")) on = 0; else { fprintf(stderr, "Invalid mode: %s\n", argv[2]); return -1; } sp_playlist_set_offline_mode(g_session, pl, on); } else { sp_playlist_offline_status s; s = sp_playlist_get_offline_status(g_session, pl); printf("Offline status for %s (%s)\n", argv[1], sp_playlist_name(pl)); printf(" Status: %s\n", offlinestatus[s]); if (s == SP_PLAYLIST_OFFLINE_STATUS_DOWNLOADING) printf(" %d%% Complete\n", sp_playlist_get_offline_download_completed(g_session, pl)); } sp_playlist_release(pl); sp_link_release(plink); return 1; }