adding Ludo's gnunet-download-manager.scm back to SVN HEAD
[oweals/gnunet.git] / src / fs / gnunet-unindex.c
index 9b335eec0102a38f56829dfa61adbb8093ebf722..3e8308df249c95f81877890e20f026f8cd1b7196 100644 (file)
@@ -4,7 +4,7 @@
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 2, or (at your
+     by the Free Software Foundation; either version 3, or (at your
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
@@ -39,8 +39,29 @@ static struct GNUNET_FS_Handle *ctx;
 static struct GNUNET_FS_UnindexContext *uc;
 
 
 static struct GNUNET_FS_UnindexContext *uc;
 
 
+static void
+cleanup_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  GNUNET_FS_stop (ctx);
+  ctx = NULL;
+}
+
+
+static void
+shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  struct GNUNET_FS_UnindexContext *u;
+
+  if (uc != NULL)
+  {
+    u = uc;
+    uc = NULL;
+    GNUNET_FS_unindex_stop (u);
+  }
+}
+
 /**
 /**
- * Called by FS client to give information about the progress of an 
+ * Called by FS client to give information about the progress of an
  * operation.
  *
  * @param cls closure
  * operation.
  *
  * @param cls closure
@@ -53,41 +74,41 @@ static struct GNUNET_FS_UnindexContext *uc;
  *         field in the GNUNET_FS_ProgressInfo struct.
  */
 static void *
  *         field in the GNUNET_FS_ProgressInfo struct.
  */
 static void *
-progress_cb (void *cls,
-            const struct GNUNET_FS_ProgressInfo *info)
+progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *info)
 {
 {
+  char *s;
+
   switch (info->status)
   switch (info->status)
+  {
+  case GNUNET_FS_STATUS_UNINDEX_START:
+    break;
+  case GNUNET_FS_STATUS_UNINDEX_PROGRESS:
+    if (verbose)
     {
     {
-    case GNUNET_FS_STATUS_UNINDEX_START:
-      break;
-    case GNUNET_FS_STATUS_UNINDEX_PROGRESS:
-      if (verbose)
-       fprintf (stdout,
-                _("Unindexing at %llu/%llu (%s remaining)\n"),
-                (unsigned long long) info->value.unindex.completed,
-                (unsigned long long) info->value.unindex.size,
-                GNUNET_STRINGS_relative_time_to_string(info->value.unindex.eta));
-      break;
-    case GNUNET_FS_STATUS_UNINDEX_ERROR:
-      fprintf (stderr,
-              _("Error unindexing: %s.\n"),
-              info->value.unindex.specifics.error.message);
-      GNUNET_FS_unindex_stop (uc);      
-      break;
-    case GNUNET_FS_STATUS_UNINDEX_COMPLETED:
-      fprintf (stdout,
-              _("Unindexing done.\n"));
-      GNUNET_FS_unindex_stop (uc);
-      break;
-    case GNUNET_FS_STATUS_UNINDEX_STOPPED:
-      GNUNET_FS_stop (ctx);
-      break;      
-    default:
-      fprintf (stderr,
-              _("Unexpected status: %d\n"),
-              info->status);
-      break;
+      s = GNUNET_STRINGS_relative_time_to_string (info->value.unindex.eta);
+      FPRINTF (stdout, _("Unindexing at %llu/%llu (%s remaining)\n"),
+               (unsigned long long) info->value.unindex.completed,
+               (unsigned long long) info->value.unindex.size, s);
+      GNUNET_free (s);
     }
     }
+    break;
+  case GNUNET_FS_STATUS_UNINDEX_ERROR:
+    FPRINTF (stderr, _("Error unindexing: %s.\n"),
+             info->value.unindex.specifics.error.message);
+    GNUNET_SCHEDULER_shutdown ();
+    break;
+  case GNUNET_FS_STATUS_UNINDEX_COMPLETED:
+    FPRINTF (stdout, "%s",  _("Unindexing done.\n"));
+    GNUNET_SCHEDULER_shutdown ();
+    break;
+  case GNUNET_FS_STATUS_UNINDEX_STOPPED:
+    GNUNET_SCHEDULER_add_continuation (&cleanup_task, NULL,
+                                       GNUNET_SCHEDULER_REASON_PREREQ_DONE);
+    break;
+  default:
+    FPRINTF (stderr, _("Unexpected status: %d\n"), info->status);
+    break;
+  }
   return NULL;
 }
 
   return NULL;
 }
 
@@ -96,64 +117,43 @@ progress_cb (void *cls,
  * Main function that will be run by the scheduler.
  *
  * @param cls closure
  * Main function that will be run by the scheduler.
  *
  * @param cls closure
- * @param sched the scheduler to use
  * @param args remaining command-line arguments
  * @param cfgfile name of the configuration file used (for saving, can be NULL!)
  * @param args remaining command-line arguments
  * @param cfgfile name of the configuration file used (for saving, can be NULL!)
- * @param cfg configuration
+ * @param c configuration
  */
 static void
  */
 static void
-run (void *cls,
-     struct GNUNET_SCHEDULER_Handle *sched,
-     char *const *args,
-     const char *cfgfile,
+run (void *cls, char *const *args, const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *c)
 {
   /* check arguments */
      const struct GNUNET_CONFIGURATION_Handle *c)
 {
   /* check arguments */
-  if ( (args[0] == NULL) || (args[1] != NULL) ) 
-    {
-      printf (_
-              ("You must specify one and only one filename for unindexing.\n"));
-      ret = -1;
-      return;
-    }
+  if ((args[0] == NULL) || (args[1] != NULL))
+  {
+    printf (_("You must specify one and only one filename for unindexing.\n"));
+    ret = -1;
+    return;
+  }
   cfg = c;
   cfg = c;
-  ctx = GNUNET_FS_start (sched,
-                        cfg,
-                        "gnunet-unindex",
-                        &progress_cb,
-                        NULL,
-                        GNUNET_FS_FLAGS_NONE,
-                        GNUNET_FS_OPTIONS_END);
+  ctx =
+      GNUNET_FS_start (cfg, "gnunet-unindex", &progress_cb, NULL,
+                       GNUNET_FS_FLAGS_NONE, GNUNET_FS_OPTIONS_END);
   if (NULL == ctx)
   if (NULL == ctx)
-    {
-      fprintf (stderr,
-              _("Could not initialize `%s' subsystem.\n"),
-              "FS");
-      ret = 1;
-      return;
-    }
-  uc = GNUNET_FS_unindex (ctx,
-                         args[0]);
+  {
+    FPRINTF (stderr, _("Could not initialize `%s' subsystem.\n"), "FS");
+    ret = 1;
+    return;
+  }
+  uc = GNUNET_FS_unindex_start (ctx, args[0], NULL);
   if (NULL == uc)
   if (NULL == uc)
-    {
-      fprintf (stderr,
-              _("Could not start unindex operation.\n"));
-      GNUNET_FS_stop (ctx);
-    }
+  {
+    FPRINTF (stderr, "%s",  _("Could not start unindex operation.\n"));
+    GNUNET_FS_stop (ctx);
+    return;
+  }
+  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
+                                NULL);
 }
 
 
 }
 
 
-/**
- * gnunet-unindex command line options
- */
-static struct GNUNET_GETOPT_CommandLineOption options[] = {
-  {'V', "verbose", NULL,
-   gettext_noop ("be verbose (print progress information)"),
-   0, &GNUNET_GETOPT_set_one, &verbose},
-  GNUNET_GETOPT_OPTION_END
-};
-
-
 /**
  * The main function to unindex content.
  *
 /**
  * The main function to unindex content.
  *
@@ -164,12 +164,16 @@ static struct GNUNET_GETOPT_CommandLineOption options[] = {
 int
 main (int argc, char *const *argv)
 {
 int
 main (int argc, char *const *argv)
 {
+  static const struct GNUNET_GETOPT_CommandLineOption options[] = {
+    {'V', "verbose", NULL,
+     gettext_noop ("be verbose (print progress information)"),
+     0, &GNUNET_GETOPT_set_one, &verbose},
+    GNUNET_GETOPT_OPTION_END
+  };
   return (GNUNET_OK ==
   return (GNUNET_OK ==
-          GNUNET_PROGRAM_run (argc,
-                              argv,
-                              "gnunet-unindex",
+          GNUNET_PROGRAM_run (argc, argv, "gnunet-unindex [OPTIONS] FILENAME",
                               gettext_noop
                               gettext_noop
-                              ("Unindex files."),
+                              ("Unindex a file that was previously indexed with gnunet-publish."),
                               options, &run, NULL)) ? ret : 1;
 }
 
                               options, &run, NULL)) ? ret : 1;
 }