From 681103026e308772b67867c6a4fbac1f0692faa2 Mon Sep 17 00:00:00 2001 Message-Id: <681103026e308772b67867c6a4fbac1f0692faa2.1714810130.git.mdw@distorted.org.uk> From: Mark Wooding Date: Sat, 14 Jun 2008 18:27:14 +0100 Subject: [PATCH] queue() now uses the resolved name if available. This is looked up in the usual lookup.c way, so it raises a lookup-completed event on completion and therefore causes the choose screen to be updated using the correct name for the track. Organization: Straylight/Edgeware From: Richard Kettlewell --- disobedience/disobedience.h | 1 + disobedience/lookup.c | 20 +++++++++++++++++++- disobedience/queue.c | 2 ++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/disobedience/disobedience.h b/disobedience/disobedience.h index 33cd9ad..f709a27 100644 --- a/disobedience/disobedience.h +++ b/disobedience/disobedience.h @@ -216,6 +216,7 @@ const char *namepart(const char *track, 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, diff --git a/disobedience/lookup.c b/disobedience/lookup.c index 2052b30..51c06bf 100644 --- a/disobedience/lookup.c +++ b/disobedience/lookup.c @@ -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: diff --git a/disobedience/queue.c b/disobedience/queue.c index fe9e707..f298b1f 100644 --- a/disobedience/queue.c +++ b/disobedience/queue.c @@ -345,6 +345,8 @@ int queued(const char *track) { 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; -- [mdw]