hi.

this patch adds two new commandline switches usefull for using multisync
in a script:

-p syncpair (--syncpair)
to load only the given syncpair. if the syncpair does not exist,
multisync will report an error and exit.
-f (--force)
to force synchronization (same as clicking "Sync") and exit after the
synchronization finishes.

Best regards, Armin Bauer
--- multisync/src/syncengine.c  2003-09-26 18:30:48.000000000 +0200
+++ /multisync/multisync/src/syncengine.c       2003-10-03 20:11:48.000000000 +0200
@@ -73,6 +73,8 @@
 GList *pluginlist = NULL;
 GList *syncpairlist = NULL;
 char *datadir;
+char *plugin = NULL;
+gboolean synconce = FALSE;
 
 gboolean multisync_debug = FALSE;
 #define dd(x) (multisync_debug?(x):0)
@@ -473,7 +475,7 @@
     async_set_pairlist_status(thissync, 
                              "Plugin missing.", 0);
     cmd = SYNC_MSG_QUIT;
-  }    
+  }
 
   sync_init(thissync);
   
@@ -520,7 +522,8 @@
     lastsyncmissed = thissync->syncmissed;
     thissync->syncmissed = 0;
 
-    if (((cmd == SYNC_MSG_OBJECTCHANGE && !thissync->manualonly) || 
+    if (((cmd == SYNC_MSG_OBJECTCHANGE && !thissync->manualonly) ||
+        synconce == TRUE ||
         cmd == SYNC_MSG_FORCESYNC ||
         cmd == SYNC_MSG_FORCERESYNC) &&
        (localfeedthrough || remotefeedthrough)) {
@@ -540,8 +543,9 @@
 
     // Don't sync if syncinterval is set to manual
     // unless we do it manually :)
-    if ((cmd == SYNC_MSG_OBJECTCHANGE && !thissync->manualonly) 
-       || cmd == SYNC_MSG_FORCESYNC ||
+    if ((cmd == SYNC_MSG_OBJECTCHANGE && !thissync->manualonly)
+       || synconce == TRUE ||
+       cmd == SYNC_MSG_FORCESYNC ||
        cmd == SYNC_MSG_FORCERESYNC) {
       if (!remotealwaysconn) {
        async_set_pairlist_status(thissync, "Connecting to remote client...", 1);
@@ -769,6 +773,7 @@
       }
     }
 
+   if (synconce == FALSE) {
     if (!thissync->manualonly) {
       if (thissync->syncmissed) {
        async_set_pairlist_status(thissync, "Searching for client...",0);
@@ -810,8 +815,11 @@
     }
     if (!cmd)
       cmd = SYNC_MSG_OBJECTCHANGE;
+  } else {
+      exit(0);
   }
-  
+ }
+
   dd(printf("Syncthread: Exiting.\n"));
   if (localconn) {
     CALL_PLUGIN_ASYNC(thissync->localclient, "sync_disconnect", (localconn));
@@ -1948,7 +1956,8 @@
            }
          }
          dd(printf("Found pair: %s - %s\n", pair->localname, pair->remotename));
-         syncpairlist = g_list_append(syncpairlist, pair);
+         if (!plugin || !strcmp(pair->displayname, plugin))
+           syncpairlist = g_list_append(syncpairlist, pair);
          fclose(f);
        }
        g_free(filename);
@@ -1957,6 +1966,10 @@
     }
     closedir(dir);
   }
+  if (plugin && g_list_length(syncpairlist) != 1) {
+       printf("Requested sync pair not found.\n");
+       exit(1);
+  }
 }
 
 char* sync_objtype_as_string(sync_object_type objtype) {
@@ -1980,9 +1993,17 @@
   struct poptOption popts[] = { { "nogui", 'q', POPT_ARG_NONE, &nogui, 1,
                                  "Do not show the GUI. Useful for starting "
                                  "MultiSync in a script.", NULL },
-                               { "resync", 'r', POPT_ARG_NONE, &resyncbutton, 
+                               { "resync", 'r', POPT_ARG_NONE, &resyncbutton,
+                                 1,
+                                 "Do show an experimental 'Resync' button.",
+                                 NULL },
+                               { "force", 'f', POPT_ARG_NONE, &synconce,
+                                 1,
+                                 "Force synchronization and quit after it finishes. " 
"Use it only with -p syncpairname!",
+                                 NULL },
+                               { "syncpair", 'p', POPT_ARG_STRING, &plugin,
                                  1,
-                                 "Do show an experimental 'Resync' button.", 
+                                 "Only load this sync pair.",
                                  NULL },
                                { "datadir", 'd', POPT_ARG_STRING, &optdatadir,
                                  1,

Reply via email to