chiark / gitweb /
Disobedience checks server version and expects rights-changed
[disorder] / disobedience / lookup.c
index 2052b30743483db5eca694a6f122533538ac080f..9b6a5b55fcad5c5c58738d48b83d2b63af853c84 100644 (file)
@@ -36,10 +36,10 @@ static void namepart_completed_or_failed(void) {
 }
 
 /** @brief Called when a namepart lookup has completed */
-static void namepart_completed(void *v, const char *error, const char *value) {
+static void namepart_completed(void *v, const char *err, const char *value) {
   D(("namepart_completed"));
-  if(error) {
-    gtk_label_set_text(GTK_LABEL(report_label), error);
+  if(err) {
+    gtk_label_set_text(GTK_LABEL(report_label), err);
     value = "?";
   }
   const char *key = v;
@@ -49,10 +49,10 @@ static void namepart_completed(void *v, const char *error, const char *value) {
 }
 
 /** @brief Called when a length lookup has completed */
-static void length_completed(void *v, const char *error, long l) {
+static void length_completed(void *v, const char *err, long l) {
   D(("length_completed"));
-  if(error) {
-    gtk_label_set_text(GTK_LABEL(report_label), error);
+  if(err) {
+    gtk_label_set_text(GTK_LABEL(report_label), err);
     l = -1;
   }
   const char *key = v;
@@ -71,7 +71,6 @@ static void namepart_fill(const char *track,
                           const char *part,
                           const char *key) {
   D(("namepart_fill %s %s %s %s", track, context, part, key));
-  /* We limit the total number of lookups in flight */
   ++namepart_lookups_outstanding;
   D(("namepart_lookups_outstanding -> %d\n", namepart_lookups_outstanding));
   disorder_eclient_namepart(client, namepart_completed,
@@ -137,6 +136,25 @@ long namepart_length(const char *track) {
   return -1;
 }
 
+/** @brief Resolve a track name
+ *
+ * Returns the supplied track name if it doesn't have the answer yet.
+ */
+char *namepart_resolve(const char *track) {
+  char *key;
+
+  byte_xasprintf(&key, "resolve track=%s", track);
+  const char *value = cache_get(&cachetype_string, key);
+  if(!value) {
+    D(("deferring..."));
+    ++namepart_lookups_outstanding;
+    D(("namepart_lookups_outstanding -> %d\n", namepart_lookups_outstanding));
+    disorder_eclient_resolve(client, namepart_completed,
+                             track, (void *)key);
+    value = track;
+  }
+  return xstrdup(value);
+}
 
 /*
 Local Variables: