gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r5737 - GNUnet/src/applications/fs/fsui


From: gnunet
Subject: [GNUnet-SVN] r5737 - GNUnet/src/applications/fs/fsui
Date: Thu, 22 Nov 2007 19:18:12 -0700 (MST)

Author: grothoff
Date: 2007-11-22 19:18:12 -0700 (Thu, 22 Nov 2007)
New Revision: 5737

Modified:
   GNUnet/src/applications/fs/fsui/upload.c
Log:
fixing Mantis 1290

Modified: GNUnet/src/applications/fs/fsui/upload.c
===================================================================
--- GNUnet/src/applications/fs/fsui/upload.c    2007-11-20 12:52:03 UTC (rev 
5736)
+++ GNUnet/src/applications/fs/fsui/upload.c    2007-11-23 02:18:12 UTC (rev 
5737)
@@ -39,10 +39,15 @@
 
 /**
  * Transform an ECRS progress callback into an FSUI event.
+ * 
+ * @param direct is this a direct ECRS trigger, or a recursive
+ *        call from a child signaling progress to the parent?
  */
 static void
-progressCallback (unsigned long long totalBytes,
-                  unsigned long long completedBytes, cron_t eta, void *ptr)
+progressCallbackR (unsigned long long totalBytes,
+                  unsigned long long completedBytes, cron_t eta, void *ptr,
+                  int direct,
+                  int add)
 {
   FSUI_UploadList *utc = ptr;
   FSUI_Event event;
@@ -56,11 +61,29 @@
   event.data.UploadProgress.uc.cctx = utc->cctx;
   event.data.UploadProgress.uc.ppos = utc->parent;
   event.data.UploadProgress.uc.pcctx = utc->parent->cctx;
-  event.data.UploadProgress.completed = completedBytes;
-  event.data.UploadProgress.total = totalBytes;
+  if (YES == ECRS_isDirectory(utc->meta)) {
+    if ( (direct == YES) && (totalBytes == completedBytes) ) 
+      add = YES;
+    if (add == NO) {
+      event.data.UploadProgress.completed = completedBytes + utc->completed;
+      event.data.UploadProgress.total = utc->total;
+      if (totalBytes == completedBytes) 
+       utc->completed += completedBytes;
+    } else {
+      GE_ASSERT(NULL, totalBytes == completedBytes);
+      event.data.UploadProgress.completed = completedBytes + utc->completed;
+      event.data.UploadProgress.total = totalBytes + utc->total;
+      utc->total += completedBytes;
+      utc->completed += completedBytes;
+    }
+  } else {
+    /* simple file upload */
+    event.data.UploadProgress.completed = completedBytes;
+    event.data.UploadProgress.total = totalBytes;
+    utc->completed = completedBytes;
+  }
   event.data.UploadProgress.eta = eta;
   event.data.UploadProgress.filename = utc->filename;
-  utc->completed = completedBytes;
   utc->shared->ctx->ecb (utc->shared->ctx->ecbClosure, &event);
   if (utc->parent != &utc->shared->ctx->activeUploads)
     {
@@ -80,10 +103,21 @@
                              (double) subtotal)) *
                            (double) utc->parent->total);
         }
-      progressCallback (utc->parent->total, subtotal, xeta, utc->parent);
+      progressCallbackR (totalBytes, completedBytes, xeta, utc->parent,
+                        NO, add);
     }
 }
 
+/**
+ * Transform an ECRS progress callback into an FSUI event.
+ */
+static void
+progressCallback (unsigned long long totalBytes,
+                  unsigned long long completedBytes, cron_t eta, void *ptr) 
+{
+  progressCallbackR(totalBytes, completedBytes, eta, ptr, YES, NO);
+}
+
 static int
 testTerminate (void *cls)
 {





reply via email to

[Prev in Thread] Current Thread [Next in Thread]