diff options
Diffstat (limited to 'apps/plugins/lastfm_scrobbler.c')
-rw-r--r-- | apps/plugins/lastfm_scrobbler.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/apps/plugins/lastfm_scrobbler.c b/apps/plugins/lastfm_scrobbler.c index 7f424d8aca..4d4940945d 100644 --- a/apps/plugins/lastfm_scrobbler.c +++ b/apps/plugins/lastfm_scrobbler.c | |||
@@ -27,6 +27,10 @@ http://www.audioscrobbler.net/wiki/Portable_Player_Logging | |||
27 | 27 | ||
28 | #include "plugin.h" | 28 | #include "plugin.h" |
29 | 29 | ||
30 | #ifndef UNTAGGED | ||
31 | #define UNTAGGED "<UNTAGGED>" | ||
32 | #endif | ||
33 | |||
30 | #ifdef ROCKBOX_HAS_LOGF | 34 | #ifdef ROCKBOX_HAS_LOGF |
31 | #define logf rb->logf | 35 | #define logf rb->logf |
32 | #else | 36 | #else |
@@ -324,6 +328,9 @@ static inline char* str_chk_valid(char *s, char *alt) | |||
324 | 328 | ||
325 | static void scrobbler_add_to_cache(const struct mp3entry *id) | 329 | static void scrobbler_add_to_cache(const struct mp3entry *id) |
326 | { | 330 | { |
331 | static uint32_t last_crc = 0; | ||
332 | int trk_info_len = 0; | ||
333 | |||
327 | if ( gCache.pos >= SCROBBLER_MAX_CACHE ) | 334 | if ( gCache.pos >= SCROBBLER_MAX_CACHE ) |
328 | scrobbler_write_cache(); | 335 | scrobbler_write_cache(); |
329 | 336 | ||
@@ -344,13 +351,14 @@ static void scrobbler_add_to_cache(const struct mp3entry *id) | |||
344 | 351 | ||
345 | int ret = rb->snprintf(&scrobbler_buf[(SCROBBLER_CACHE_LEN*gCache.pos)], | 352 | int ret = rb->snprintf(&scrobbler_buf[(SCROBBLER_CACHE_LEN*gCache.pos)], |
346 | SCROBBLER_CACHE_LEN, | 353 | SCROBBLER_CACHE_LEN, |
347 | "%s\t%s\t%s\t%s\t%d\t%c\t%ld\t%s\n", | 354 | "%s\t%s\t%s\t%s\t%d\t%c%n\t%ld\t%s\n", |
348 | str_chk_valid(artist, UNTAGGED), | 355 | str_chk_valid(artist, UNTAGGED), |
349 | str_chk_valid(id->album, ""), | 356 | str_chk_valid(id->album, ""), |
350 | str_chk_valid(id->title, ""), | 357 | str_chk_valid(id->title, ""), |
351 | tracknum, | 358 | tracknum, |
352 | (int)(id->length / 1000), | 359 | (int)(id->length / 1000), |
353 | rating, | 360 | rating, |
361 | &trk_info_len, | ||
354 | get_timestamp(), | 362 | get_timestamp(), |
355 | str_chk_valid(id->mb_track_id, "")); | 363 | str_chk_valid(id->mb_track_id, "")); |
356 | 364 | ||
@@ -361,11 +369,19 @@ static void scrobbler_add_to_cache(const struct mp3entry *id) | |||
361 | } | 369 | } |
362 | else | 370 | else |
363 | { | 371 | { |
364 | logf("Added %s", scrobbler_buf); | 372 | uint32_t crc = rb->crc_32(&scrobbler_buf[(SCROBBLER_CACHE_LEN*gCache.pos)], |
365 | gCache.pos++; | 373 | trk_info_len, 0xFFFFFFFF); |
374 | if (crc != last_crc) | ||
375 | { | ||
376 | last_crc = crc; | ||
377 | logf("Added %s", scrobbler_buf); | ||
378 | gCache.pos++; | ||
366 | #if USING_STORAGE_CALLBACK | 379 | #if USING_STORAGE_CALLBACK |
367 | rb->register_storage_idle_func(scrobbler_flush_callback); | 380 | rb->register_storage_idle_func(scrobbler_flush_callback); |
368 | #endif | 381 | #endif |
382 | } | ||
383 | else | ||
384 | logf("SCROBBLER: skipping repeat entry: %s", id->path); | ||
369 | } | 385 | } |
370 | 386 | ||
371 | } | 387 | } |