[sound-juicer] Rate limit musicbrainz queries



commit 33db56548cef2d5e2672d12d0e1f135b8b196116
Author: Phillip Wood <phillip wood dunelm org uk>
Date:   Fri Jul 29 10:58:14 2016 +0100

    Rate limit musicbrainz queries
    
    Queries to MusicBraniz should be limited to one per second
    
    https://musicbrainz.org/doc/XML_Web_Service/Rate_Limiting
    
    https://bugzilla.gnome.org/show_bug.cgi?id=764941

 libjuicer/sj-metadata-musicbrainz5.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)
---
diff --git a/libjuicer/sj-metadata-musicbrainz5.c b/libjuicer/sj-metadata-musicbrainz5.c
index 1468e34..7245e8d 100644
--- a/libjuicer/sj-metadata-musicbrainz5.c
+++ b/libjuicer/sj-metadata-musicbrainz5.c
@@ -186,6 +186,7 @@ print_musicbrainz_query_error (SjMetadataMusicbrainz5 *self,
   g_free (message);
 }
 
+static gint64 last_query_time;
 
 static Mb5Metadata
 query_musicbrainz (SjMetadataMusicbrainz5  *self,
@@ -198,10 +199,17 @@ query_musicbrainz (SjMetadataMusicbrainz5  *self,
   Mb5Metadata metadata;
   char *inc[] = { "inc" };
   SjMetadataMusicbrainz5Private *priv = GET_PRIVATE (self);
+  gint64 t;
 
   if (g_cancellable_set_error_if_cancelled (cancellable, error))
     return NULL;
 
+  t = g_get_monotonic_time ();
+  while (t - last_query_time < G_USEC_PER_SEC) {
+    g_usleep (t - last_query_time + G_USEC_PER_SEC);
+    t = g_get_monotonic_time ();
+  }
+
   if (includes == NULL)
     metadata = mb5_query_query (priv->mb, entity, id, "",
                                 0, NULL, NULL);
@@ -211,6 +219,7 @@ query_musicbrainz (SjMetadataMusicbrainz5  *self,
   if (metadata == NULL)
     print_musicbrainz_query_error (self, entity, id);
 
+  last_query_time = g_get_monotonic_time ();
   return metadata;
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]