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;
}
Example #3
0
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);
}