const char *context,
const char *part);
long namepart_length(const char *track);
+char *namepart_resolve(const char *track);
void namepart_update(const char *track,
const char *context,
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,
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:
struct queue_entry *q;
D(("queued %s", track));
+ /* Queue will contain resolved name */
+ track = namepart_resolve(track);
for(q = ql_queue.q; q; q = q->next)
if(!strcmp(q->track, track))
return 1;