chiark / gitweb /
pattern based dispatch for tracklength plugins
[disorder] / server / rescan.c
index 53c566c1b977509959c1427597b257b65a9c2021..aaa5f93604bedb26fc35f5f0358d6833c9c4f45b 100644 (file)
@@ -198,8 +198,8 @@ static int recheck_callback(const char *track,
   const struct collection *c = cs->c;
   const char *path = kvp_get(data, "_path");
   char buffer[20];
-  int err;
-  long n;
+  int err, n;
+  long length;
 
   if(aborted()) return EINTR;
   D(("rechecking %s", track));
@@ -222,13 +222,20 @@ static int recheck_callback(const char *track,
   /* make sure we know the length */
   if(!kvp_get(data, "_length")) {
     D(("recalculating length of %s", track));
-    n = tracklength(track, path);
-    if(n > 0) {
-      byte_snprintf(buffer, sizeof buffer, "%ld", n);
-      kvp_set(&data, "_length", buffer);
-      if((err = trackdb_putdata(trackdb_tracksdb, track, data, tid, 0)))
-        return err;
-      ++cs->nlength;
+    for(n = 0; n < config->tracklength.n; ++n)
+      if(fnmatch(config->tracklength.s[n].s[0], track, 0) == 0)
+        break;
+    if(n >= config->tracklength.n)
+      error(0, "no tracklength plugin found for %s", track);
+    else {
+      length = tracklength(config->tracklength.s[n].s[1], track, path);
+      if(length > 0) {
+        byte_snprintf(buffer, sizeof buffer, "%ld", length);
+        kvp_set(&data, "_length", buffer);
+        if((err = trackdb_putdata(trackdb_tracksdb, track, data, tid, 0)))
+          return err;
+        ++cs->nlength;
+      }
     }
   }
   return 0;