コード例 #1
0
static void
ws_love_cb(SoupSession *session,
		SoupMessage *message,
		void *user_data)
{
	sr_session_t *s = user_data;
	struct sr_session_priv *priv = s->priv;
	sr_track_t *t;

	if (!SOUP_STATUS_IS_SUCCESSFUL(message->status_code)) {
		priv->api_problems = true;
		return;
	}

	g_mutex_lock(priv->love_queue_mutex);
	t = g_queue_pop_head(priv->love_queue);
	g_mutex_unlock(priv->love_queue_mutex);
	sr_track_free(t);

	priv->api_problems = false;

	if (!g_queue_is_empty(priv->love_queue))
		/* still need to submit more */
		ws_love(s);
}
コード例 #2
0
static inline void
check_last(sr_session_t *s,
		int timestamp)
{
	struct sr_session_priv *priv = s->priv;
	sr_track_t *c;
	int playtime;

	c = priv->last_track;
	if (!c)
		return;

	if (c->rating == 'L' && priv->session_key) {
		g_mutex_lock(priv->love_queue_mutex);
		g_queue_push_tail(priv->love_queue, sr_track_dup(c));
		g_mutex_unlock(priv->love_queue_mutex);
		if (!priv->api_problems)
			ws_love(s);
	}

	playtime = timestamp - c->timestamp;
	/* did the last track played long enough? */
	if ((playtime >= 240 || playtime >= c->length / 2) && c->length > 30)
		g_queue_push_tail(priv->queue, c);
	else
		sr_track_free(c);
	priv->last_track = NULL;
}
コード例 #3
0
ファイル: scrobble.c プロジェクト: delfinof/maemo-scrobbler
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);
}
コード例 #4
0
void
sr_session_handshake(sr_session_t *s)
{
	struct sr_session_priv *priv = s->priv;
	gchar *auth, *tmp;
	glong timestamp;
	gchar *handshake_url;
	SoupMessage *message;
	GTimeVal time_val;

	g_get_current_time(&time_val);
	timestamp = time_val.tv_sec;

	tmp = g_strdup_printf("%s%li", priv->hash_pwd, timestamp);
	auth = g_compute_checksum_for_string(G_CHECKSUM_MD5, tmp, -1);
	g_free(tmp);

	handshake_url = g_strdup_printf("%s&p=1.2.1&c=%s&v=%s&u=%s&t=%li&a=%s",
			priv->url,
			priv->client_id,
			priv->client_ver,
			priv->user,
			timestamp,
			auth);

	message = soup_message_new("GET", handshake_url);
	soup_session_queue_message(priv->soup,
			message,
			handshake_cb,
			s);

	g_free(handshake_url);
	g_free(auth);

	if (priv->api_key) {
		if (!priv->session_key)
			ws_auth(s);
		else
			ws_love(s);
	}
}