chiark / gitweb /
Merge from disorder.4.0
[disorder] / server / rescan.c
index 47dcf99b1f367f91186e877e380c1eeb8d1413bb..1c2c973ac0e4ecb929f720b67380e3304af32b7e 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * This file is part of DisOrder 
- * Copyright (C) 2005, 2006, 2007 Richard Kettlewell
+ * Copyright (C) 2005-2008 Richard Kettlewell
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * USA
  */
 
-#include <config.h>
-#include "types.h"
-
-#include <getopt.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <db.h>
-#include <locale.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <pcre.h>
-#include <fnmatch.h>
-#include <sys/wait.h>
-#include <string.h>
-#include <syslog.h>
-#include <time.h>
-
-#include "configuration.h"
-#include "syscalls.h"
-#include "log.h"
-#include "defs.h"
-#include "mem.h"
-#include "plugin.h"
-#include "inputline.h"
-#include "charset.h"
-#include "wstat.h"
-#include "kvp.h"
-#include "printf.h"
-#include "rights.h"
-#include "trackdb.h"
-#include "trackdb-int.h"
-#include "trackname.h"
-#include "unicode.h"
+#include "disorder-server.h"
 
+static time_t last_report;
 static DB_TXN *global_tid;
 
 static const struct option options[] = {
@@ -86,13 +54,6 @@ static void help(void) {
   exit(0);
 }
 
-/* display version number and terminate */
-static void version(void) {
-  xprintf("%s", disorder_version_string);
-  xfclose(stdout);
-  exit(0);
-}
-
 static volatile sig_atomic_t signalled;
 
 static void signal_handler(int sig) {
@@ -171,8 +132,10 @@ static void rescan_collection(const struct collection *c) {
     if(n < config->player.n) {
       nnew += !!trackdb_notice(track, path);
       ++ntracks;
-      if(ntracks % 1000 == 0)
+      if(ntracks % 100 == 0 && time(0) > last_report + 10) {
         info("rescanning %s, %ld tracks so far", c->root, ntracks);
+        time(&last_report);
+      }
     }
   }
   /* tidy up */
@@ -213,6 +176,7 @@ struct recheck_track {
 /* called for each non-alias track */
 static int recheck_list_callback(const char *track,
                                  struct kvp attribute((unused)) *data,
+                                 struct kvp attribute((unused)) *prefs,
                                  void *u,
                                  DB_TXN attribute((unused)) *tid) {
   struct recheck_state *cs = u;
@@ -334,11 +298,12 @@ static void recheck_collection(const struct collection *c) {
       return;
     recheck_track(&cs, t);
     ++nrc;
-    if(nrc % 100 == 0) {
+    if(nrc % 100 == 0 && time(0) > last_report + 10) {
       if(c)
         info("rechecking %s, %ld tracks so far", c->root, nrc);
       else
         info("rechecking all tracks, %ld tracks so far", nrc);
+      time(&last_report);
     }
   }
   if(c)
@@ -398,7 +363,7 @@ int main(int argc, char **argv) {
   while((n = getopt_long(argc, argv, "hVc:dDSsKC", options, 0)) >= 0) {
     switch(n) {
     case 'h': help();
-    case 'V': version();
+    case 'V': version("disorder-rescan");
     case 'c': configfile = optarg; break;
     case 'd': debugging = 1; break;
     case 'D': debugging = 0; break;