int sr_session_load_list(sr_session_t *s, const char *file) { struct sr_session_priv *priv = s->priv; FILE *f; int c; char k, *p, v[255]; int stage = 1; sr_track_t *t; f = fopen(file, "r"); if (!f) return 1; /* just to avoid warnings */ k = 0; p = NULL; g_mutex_lock(priv->queue_mutex); t = sr_track_new(); while (true) { c = getc(f); if (stage == 1) { if (c == '\n') { g_queue_push_tail(priv->queue, t); t = sr_track_new(); continue; } if (c == EOF) { if (track_is_valid(t)) g_queue_push_tail(priv->queue, t); break; } k = c; p = v; fseek(f, 2, SEEK_CUR); stage++; } else if (stage == 2) { if (c == EOF) break; *p = c; if (c == '\n') { *p = '\0'; got_field(t, k, v); stage = 1; } p++; } } g_mutex_unlock(priv->queue_mutex); fclose(f); return 0; }
sr_track_t * sr_track_dup(sr_track_t *in) { sr_track_t *t; t = sr_track_new(); t->artist = g_strdup(in->artist); t->title = g_strdup(in->title); t->timestamp = in->timestamp; t->source = in->source; t->rating = in->rating; t->length = in->length; t->album = g_strdup(in->album); t->position = in->position; t->mbid = g_strdup(in->mbid); return t; }
void sr_session_love(sr_session_t *s, const char *artist, const char *title, int on) { struct sr_session_priv *priv = s->priv; sr_track_t *t; t = sr_track_new(); t->artist = g_strdup(artist); t->title = g_strdup(title); g_mutex_lock(priv->love_queue_mutex); g_queue_push_tail(priv->love_queue, t); g_mutex_unlock(priv->love_queue_mutex); if (!priv->api_problems) ws_love(s, on); }