Author: stephan
Date: 2006-07-17 12:22:35 +0000 (Mon, 17 Jul 2006)
New Revision: 22468

Modified:
   xarchiver/branches/xarchiver-psybsd/AUTHORS
   xarchiver/branches/xarchiver-psybsd/TODO
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h
   xarchiver/branches/xarchiver-psybsd/libxarchiver/compression-support-bzip2.c
   xarchiver/branches/xarchiver-psybsd/libxarchiver/compression-support-gzip.c
   xarchiver/branches/xarchiver-psybsd/libxarchiver/compression-support.c
   xarchiver/branches/xarchiver-psybsd/libxarchiver/internals.h
   xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.c
   xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.h
   xarchiver/branches/xarchiver-psybsd/src/main.c
Log:
Fixed 'add-to' and 'extract-to' for tar(.bz2/.gz)



Modified: xarchiver/branches/xarchiver-psybsd/AUTHORS
===================================================================
--- xarchiver/branches/xarchiver-psybsd/AUTHORS 2006-07-17 05:52:29 UTC (rev 
22467)
+++ xarchiver/branches/xarchiver-psybsd/AUTHORS 2006-07-17 12:22:35 UTC (rev 
22468)
@@ -1,2 +1 @@
 Stephan Arts     - psyBSD   - [EMAIL PROTECTED]
-Giuseppe Torelli - Colossus - [EMAIL PROTECTED]

Modified: xarchiver/branches/xarchiver-psybsd/TODO
===================================================================
--- xarchiver/branches/xarchiver-psybsd/TODO    2006-07-17 05:52:29 UTC (rev 
22467)
+++ xarchiver/branches/xarchiver-psybsd/TODO    2006-07-17 12:22:35 UTC (rev 
22468)
@@ -3,12 +3,13 @@
   ... a lot
 
 Long Version:
+
   Implement archive-type verification and 'open' support 
   for existing archives
 
   Write view support for gnu-tar support object.
 
-       Let support objects check if the program in question exists upon object 
creation.
+  Let support objects check if the program in question exists upon object 
creation.
 
   Implement transaction-options for archive-support objects
   Implement transaction-options for compression-support objects

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c  
2006-07-17 05:52:29 UTC (rev 22467)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c  
2006-07-17 12:22:35 UTC (rev 22468)
@@ -141,6 +141,13 @@
                /*
                 * Extract and check the tmp-file
                 */
+               if(g_file_test(archive->tmp_file, G_FILE_TEST_EXISTS))
+               {
+                       fp = fopen(archive->tmp_file, "r");
+                       if(!fp)
+                               return FALSE;
+               } else
+                       return FALSE;
        }
        else
        { 
@@ -162,8 +169,11 @@
                        /* check extension */
                        else
                        {
-                               
                        }
                }
        }
+       if(archive->type == LXA_ARCHIVETYPE_UNKNOWN)
+               archive->type == LXA_ARCHIVETYPE_NONE;
+       lxa_archive_set_status(archive, LXA_ARCHIVESTATUS_IDLE);
+       return TRUE;
 }

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c  2006-07-17 
05:52:29 UTC (rev 22467)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c  2006-07-17 
12:22:35 UTC (rev 22468)
@@ -37,7 +37,7 @@
 lxa_archive_finalize(GObject *object);
 
 
-static guint lxa_archive_signals[1];
+static guint lxa_archive_signals[3];
 
 GType
 lxa_archive_get_type ()
@@ -83,6 +83,28 @@
                        1,
                        G_TYPE_POINTER,
                        NULL);
+
+       lxa_archive_signals[1] = g_signal_new("lxa_init_complete",
+                       G_TYPE_FROM_CLASS(archive_class),
+                       G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+                       0,
+                       NULL,
+                       NULL,
+                       g_cclosure_marshal_VOID__VOID,
+                       G_TYPE_NONE,
+                       0,
+                       NULL);
+       lxa_archive_signals[2] = g_signal_new("lxa_operation_failure",
+                       G_TYPE_FROM_CLASS(archive_class),
+                       G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+                       0,
+                       NULL,
+                       NULL,
+                       g_cclosure_marshal_VOID__POINTER,
+                       G_TYPE_NONE,
+                       1,
+                       G_TYPE_POINTER,
+                       NULL);
 }
 
 static void
@@ -99,7 +121,7 @@
 }
 
 LXAArchive *
-lxa_archive_new(gchar *path, LXAArchiveType type, LXACompressionType 
compression)
+lxa_archive_new(gchar *path, LXAArchiveType type, LXACompressionType 
compression, GCallback initialized_func)
 {
        LXAArchive *archive;
 
@@ -109,6 +131,9 @@
        else
                archive->path = NULL;
 
+       g_signal_connect(G_OBJECT(archive), "lxa_init_complete", 
initialized_func, NULL);
+       lxa_archive_set_status(archive, LXA_ARCHIVESTATUS_INIT);
+
        if(compression == LXA_COMPRESSIONTYPE_UNKNOWN)
        {
                        /*Discover compression-type*/
@@ -118,9 +143,8 @@
                                g_debug("COMPRESSION TYPE NOT FOUND");
                        compression = archive->compression;
        }
-       if(compression != LXA_COMPRESSIONTYPE_UNKNOWN)
+       if(archive->compression == LXA_COMPRESSIONTYPE_NONE)
        {
-               archive->compression = compression;
                if(type == LXA_ARCHIVETYPE_UNKNOWN)
                {
                        /*Discover archive-type*/
@@ -128,10 +152,8 @@
                                g_debug("ARCHIVE TYPE FOUND");
                        else
                                g_debug("ARCHIVE TYPE NOT FOUND");
-
+                       archive->type = type;
                }
-               else
-                       archive->type = type;
        }
        return archive;
 }
@@ -141,6 +163,8 @@
 {
        archive->oldstatus = archive->status;
        archive->status = status;
+       if(archive->oldstatus == LXA_ARCHIVESTATUS_INIT && archive->status == 
LXA_ARCHIVESTATUS_IDLE)
+               g_signal_emit(G_OBJECT(archive), lxa_archive_signals[1], 0, 
archive);
        g_signal_emit(G_OBJECT(archive), lxa_archive_signals[0], 0, archive);
 }
 
@@ -155,20 +179,21 @@
                if(find_result)
                {
                        compression_support = find_result->data;
-                       if(archive->tmp_file)
+                       if(!archive->tmp_file)
                        {
-                               g_free(archive->tmp_file);
-                               archive->tmp_file = NULL;
+                               archive->tmp_file = g_strconcat(lxa_tmp_dir, 
"/xarchiver-XXXXXX" , NULL);
+                               g_mkstemp(archive->tmp_file);
                        }
-                       archive->tmp_file = g_strconcat(lxa_tmp_dir, 
"/xarchiver-XXXXXX" , NULL);
-                       g_mkstemp(archive->tmp_file);
                        /* since we only need the filename: we unlink it */
-                       g_unlink(archive->tmp_file);
                        lxa_tmp_files_list = 
g_slist_prepend(lxa_tmp_files_list, archive->tmp_file);
 
                        /* Check if the archive already exists */
                        if(g_file_test(archive->path, G_FILE_TEST_EXISTS))
+                       {
+                               if(g_file_test(archive->tmp_file, 
G_FILE_TEST_EXISTS))
+                                       g_unlink(archive->tmp_file);
                                compression_support->decompress(archive);
+                       }
                        else
                                return 1;
                }
@@ -179,12 +204,6 @@
 }
 
 gint
-lxa_archive_compress(LXAArchive *archive)
-{
-       return 0;
-}
-
-gint
 lxa_archive_add(LXAArchive *archive, GSList *files)
 {
        GSList *find_result;

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h  2006-07-17 
05:52:29 UTC (rev 22467)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h  2006-07-17 
12:22:35 UTC (rev 22468)
@@ -33,9 +33,7 @@
 } LXAArchiveType;
 
 typedef enum
-{
-       LXA_COMPRESSIONTYPE_NONE,
-       LXA_COMPRESSIONTYPE_UNKNOWN,
+{ LXA_COMPRESSIONTYPE_NONE, LXA_COMPRESSIONTYPE_UNKNOWN,
        LXA_COMPRESSIONTYPE_BZIP2,
        LXA_COMPRESSIONTYPE_GZIP
 } LXACompressionType;
@@ -43,6 +41,7 @@
 typedef enum
 {
        LXA_ARCHIVESTATUS_IDLE,
+       LXA_ARCHIVESTATUS_INIT,
        LXA_ARCHIVESTATUS_ADD,
        LXA_ARCHIVESTATUS_EXTRACT,
        LXA_ARCHIVESTATUS_REMOVE,
@@ -97,11 +96,10 @@
 }; 
 
 GType lxa_archive_get_type(void);
-LXAArchive *lxa_archive_new(gchar *, LXAArchiveType, LXACompressionType);
+LXAArchive *lxa_archive_new(gchar *, LXAArchiveType, LXACompressionType, 
GCallback);
 
 void lxa_archive_set_status(LXAArchive *archive, LXAArchiveStatus status);
 
-gint lxa_archive_compress(LXAArchive *archive);
 gint lxa_archive_decompress(LXAArchive *archive);
 
 gint lxa_archive_add(LXAArchive *archive, GSList *files);

Modified: 
xarchiver/branches/xarchiver-psybsd/libxarchiver/compression-support-bzip2.c
===================================================================
--- 
xarchiver/branches/xarchiver-psybsd/libxarchiver/compression-support-bzip2.c    
    2006-07-17 05:52:29 UTC (rev 22467)
+++ 
xarchiver/branches/xarchiver-psybsd/libxarchiver/compression-support-bzip2.c    
    2006-07-17 12:22:35 UTC (rev 22468)
@@ -142,7 +142,7 @@
 lxa_compression_support_bzip2_parse_output_decompress(GIOChannel *ioc, 
GIOCondition cond, gpointer data)
 {
        GSList *find_result;
-       LXAArchiveSupport *archive_support;
+       LXAArchiveSupport *archive_support = NULL;
        FILE *out_file = NULL;
        LXAArchive *archive = data;
        gchar *buf = g_new0(gchar, 1024);
@@ -179,31 +179,39 @@
                        if(find_result)
                        {
                                archive_support = find_result->data;
-                               switch(archive->status)
-                               {
-                                       case LXA_ARCHIVESTATUS_ADD:
+                       }
+                       switch(archive->status)
+                       {
+                               case LXA_ARCHIVESTATUS_ADD:
+                                       if(archive_support)
                                                archive_support->add(archive);
-                                               break;
-                                       case LXA_ARCHIVESTATUS_EXTRACT:
+                                       break;
+                               case LXA_ARCHIVESTATUS_EXTRACT:
+                                       if(archive_support)
                                                
archive_support->extract(archive);
-                                               break;
-                                       case LXA_ARCHIVESTATUS_REMOVE:
+                                       break;
+                               case LXA_ARCHIVESTATUS_REMOVE:
+                                       if(archive_support)
                                                
archive_support->remove(archive);
-                                               break;
-                                       case LXA_ARCHIVESTATUS_VIEW:
+                                       break;
+                               case LXA_ARCHIVESTATUS_VIEW:
+                                       if(archive_support)
                                                archive_support->view(archive);
-                                               break;
-                                       case LXA_ARCHIVESTATUS_USERBREAK: /* 
abort */
-                                               g_unlink(archive->tmp_file);
-                                               lxa_archive_set_status(archive, 
LXA_ARCHIVESTATUS_IDLE);
-                                               break;
-                                       case LXA_ARCHIVESTATUS_IDLE:
-                                       case LXA_ARCHIVESTATUS_ERROR:
-                                               break;
-                               }
+                                       break;
+                               case LXA_ARCHIVESTATUS_INIT:
+                                       lxa_archive_discover_type(archive);
+                                       break;
+                               case LXA_ARCHIVESTATUS_USERBREAK: /* abort */
+                                       g_unlink(archive->tmp_file);
+                                       lxa_archive_set_status(archive, 
LXA_ARCHIVESTATUS_IDLE);
+                                       break;
+                               case LXA_ARCHIVESTATUS_IDLE:
+                               case LXA_ARCHIVESTATUS_ERROR:
+                                       break;
                        }
                }
-               return FALSE; }
+               return FALSE; 
+       }
        return TRUE;
 }
 

Modified: 
xarchiver/branches/xarchiver-psybsd/libxarchiver/compression-support-gzip.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/compression-support-gzip.c 
2006-07-17 05:52:29 UTC (rev 22467)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/compression-support-gzip.c 
2006-07-17 12:22:35 UTC (rev 22468)
@@ -175,28 +175,35 @@
                        if(find_result)
                        {
                                archive_support = find_result->data;
-                               switch(archive->status)
-                               {
-                                       case LXA_ARCHIVESTATUS_ADD:
+                       }
+                       switch(archive->status)
+                       {
+                               case LXA_ARCHIVESTATUS_ADD:
+                                       if(archive_support)
                                                archive_support->add(archive);
-                                               break;
-                                       case LXA_ARCHIVESTATUS_EXTRACT:
+                                       break;
+                               case LXA_ARCHIVESTATUS_EXTRACT:
+                                       if(archive_support)
                                                
archive_support->extract(archive);
-                                               break;
-                                       case LXA_ARCHIVESTATUS_REMOVE:
+                                       break;
+                               case LXA_ARCHIVESTATUS_REMOVE:
+                                       if(archive_support)
                                                
archive_support->remove(archive);
-                                               break;
-                                       case LXA_ARCHIVESTATUS_VIEW:
+                                       break;
+                               case LXA_ARCHIVESTATUS_VIEW:
+                                       if(archive_support)
                                                archive_support->view(archive);
-                                               break;
-                                       case LXA_ARCHIVESTATUS_USERBREAK: /* 
abort */
-                                               g_unlink(archive->tmp_file);
-                                               lxa_archive_set_status(archive, 
LXA_ARCHIVESTATUS_IDLE);
-                                               break;
-                                       case LXA_ARCHIVESTATUS_IDLE:
-                                       case LXA_ARCHIVESTATUS_ERROR:
-                                               break;
-                               }
+                                       break;
+                               case LXA_ARCHIVESTATUS_INIT:
+                                       lxa_archive_discover_type(archive);
+                                       break;
+                               case LXA_ARCHIVESTATUS_USERBREAK: /* abort */
+                                       g_unlink(archive->tmp_file);
+                                       lxa_archive_set_status(archive, 
LXA_ARCHIVESTATUS_IDLE);
+                                       break;
+                               case LXA_ARCHIVESTATUS_IDLE:
+                               case LXA_ARCHIVESTATUS_ERROR:
+                                       break;
                        }
                }
                return FALSE;

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/compression-support.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/compression-support.c      
2006-07-17 05:52:29 UTC (rev 22467)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/compression-support.c      
2006-07-17 12:22:35 UTC (rev 22468)
@@ -148,6 +148,7 @@
        {
                archive->compression = LXA_COMPRESSIONTYPE_GZIP;
                fclose(fp);
+               lxa_archive_decompress(archive);
                return TRUE;
        }
 
@@ -156,6 +157,7 @@
        {
                archive->compression = LXA_COMPRESSIONTYPE_BZIP2;
                fclose(fp);
+               lxa_archive_decompress(archive);
                return TRUE;
        }
        archive->compression = LXA_COMPRESSIONTYPE_NONE;

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/internals.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/internals.h        
2006-07-17 05:52:29 UTC (rev 22467)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/internals.h        
2006-07-17 12:22:35 UTC (rev 22468)
@@ -27,6 +27,12 @@
 gint
 lookup_compression_support( gconstpointer support , gconstpointer type);
 
+/*
+ * gint
+ * lxa_execute(gchar *command)
+ *
+ * general function for executing child-apps
+ */
 gint lxa_execute(
                gchar *command, 
                LXAArchive *archive, 
@@ -34,3 +40,4 @@
                GIOFunc f_in, 
                GIOFunc f_out, 
                GIOFunc f_err);
+

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.c     
2006-07-17 05:52:29 UTC (rev 22467)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.c     
2006-07-17 12:22:35 UTC (rev 22468)
@@ -46,13 +46,12 @@
 #endif
 }
 
-int
+void
 lxa_destroy()
 {
        g_slist_foreach(lxa_tmp_files_list,(void *)g_unlink, NULL);
        g_slist_foreach(lxa_tmp_files_list,(void *)g_free, NULL);
        g_slist_free(lxa_tmp_files_list);
-       return 0;
 }
 
 /*
@@ -71,7 +70,7 @@
                return 1;
        }
 
-       LXAArchive *archive = lxa_archive_new(path, type, compression);
+       LXAArchive *archive = lxa_archive_new(path, type, compression, NULL);
        (*lp_archive) = archive;
        return 0;
 }
@@ -82,7 +81,7 @@
  *
  */
 gint
-lxa_open_archive(gchar *path, LXAArchive **lp_archive)
+lxa_open_archive(gchar *path, LXAArchive **lp_archive, GCallback 
initialized_func)
 {
        if(!g_file_test(path, G_FILE_TEST_EXISTS))
        {
@@ -90,7 +89,7 @@
                return 1;
        }
 
-       LXAArchive *archive = lxa_archive_new(path, LXA_ARCHIVETYPE_UNKNOWN, 
LXA_COMPRESSIONTYPE_UNKNOWN);
+       LXAArchive *archive = lxa_archive_new(path, LXA_ARCHIVETYPE_UNKNOWN, 
LXA_COMPRESSIONTYPE_UNKNOWN, initialized_func);
        (*lp_archive) = archive;
        return 0;
 }

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.h     
2006-07-17 05:52:29 UTC (rev 22467)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.h     
2006-07-17 12:22:35 UTC (rev 22468)
@@ -22,34 +22,57 @@
 
 G_BEGIN_DECLS
 
+/*
+ * void
+ * lxa_init()
+ */
 void lxa_init();
 
-int  lxa_destroy();
+/*
+ * void
+ * lxa_destroy()
+ */
+void lxa_destroy();
 
 /*
- * XAArchive*
- * lxa_new_archive(gchar *path, LXAArchiveType type, gboolean overwrite)
+ * gint
+ * lxa_new_archive(gchar *path,
+ *                 LXAArchiveType type,
+ *                 gboolean overwrite,
+ *                 LXAArchive &&lp_archive)
  *
+ * returns:
+ * 0 -- success
  */
 gint
-lxa_new_archive(gchar *path, LXAArchiveType, LXACompressionType, gboolean 
overwrite, LXAArchive **lp_archive);
+lxa_new_archive( gchar *path,
+                 LXAArchiveType,
+                 LXACompressionType,
+                 gboolean overwrite,
+                 LXAArchive **lp_archive );
 
 /*
+ * gint 
+ * lxa_open_archive(gchar *path,
+ *                  LXAArchive **lp_archive)
  *
- * XAArchive*
- * lxa_open_archive(gchar *path)
- *   path: path to archive to open
- *
  * returns:
- * archive object when archive exists.
- * NULL when archive does not exist.
- *
+ * 0 -- success
  */
 gint
-lxa_open_archive(gchar *path, LXAArchive **lp_archive);
+lxa_open_archive( gchar *path, 
+                  LXAArchive **lp_archive,
+                                                                       
GCallback initialized_func);
 
-void lxa_close_archive(LXAArchive *archive);
+/*
+ * void 
+ * lxa_close_archive( LXAArchive **lp_archive )
+ *
+ */
+void 
+lxa_close_archive( LXAArchive *archive );
 
+
 G_END_DECLS
 
 #endif /* __LIBXARCHIVER_H__ */

Modified: xarchiver/branches/xarchiver-psybsd/src/main.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main.c      2006-07-17 05:52:29 UTC 
(rev 22467)
+++ xarchiver/branches/xarchiver-psybsd/src/main.c      2006-07-17 12:22:35 UTC 
(rev 22468)
@@ -36,6 +36,11 @@
 gboolean add_archive  = FALSE;
 gchar *add_archive_path = NULL;
 
+gchar **_argv;
+gint _argc;
+
+gpointer command;
+
 gint opened_archives = 0;
 
 /*
@@ -58,12 +63,15 @@
        switch(archive->status)
        {
                case(LXA_ARCHIVESTATUS_IDLE):
-                       msg_string = _("Operation complete");
-                       dialog = gtk_message_dialog_new 
(NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,msg_string, 
archive->path);
-                       gtk_dialog_set_default_response (GTK_DIALOG (dialog), 
GTK_RESPONSE_YES);
-                       gtk_dialog_run (GTK_DIALOG (dialog) );
-                       gtk_widget_destroy (GTK_WIDGET (dialog) );
-                       opened_archives--;
+                       if(archive->oldstatus != LXA_ARCHIVESTATUS_INIT)
+                       {
+                               msg_string = _("Operation complete");
+                               dialog = gtk_message_dialog_new 
(NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,msg_string, 
archive->path);
+                               gtk_dialog_set_default_response (GTK_DIALOG 
(dialog), GTK_RESPONSE_YES);
+                               gtk_dialog_run (GTK_DIALOG (dialog) );
+                               gtk_widget_destroy (GTK_WIDGET (dialog) );
+                               opened_archives--;
+                       }
                        break;
                case(LXA_ARCHIVESTATUS_ERROR):
                        switch(archive->oldstatus)
@@ -84,8 +92,9 @@
                        gtk_widget_destroy (GTK_WIDGET (dialog) );
                        opened_archives--;
                        break;
+               case(LXA_ARCHIVESTATUS_ADD):
+                       break;
                case(LXA_ARCHIVESTATUS_USERBREAK):
-               case(LXA_ARCHIVESTATUS_ADD):
                case(LXA_ARCHIVESTATUS_REMOVE):
                case(LXA_ARCHIVESTATUS_EXTRACT):
                case(LXA_ARCHIVESTATUS_VIEW):
@@ -97,6 +106,42 @@
        }
 }
 
+void
+archive_operation_failed(LXAArchive *archive, gpointer data)
+{
+
+
+}
+
+void
+archive_initialized(LXAArchive *archive, gpointer data)
+{
+       GtkWidget *dialog;
+       GSList *files = NULL;
+       gint i = 0;
+       if(add_archive_path)
+       {
+               for(i = 1; i < _argc; i++)
+               {
+                       if(g_file_test(_argv[i], G_FILE_TEST_EXISTS))
+                               files = g_slist_prepend(files, _argv[i]);
+                       else
+                       {
+                               dialog = gtk_message_dialog_new 
(NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("File '%s' does not 
exist: ABORTING"), _argv[i]);
+                               gtk_dialog_set_default_response (GTK_DIALOG 
(dialog), GTK_RESPONSE_YES);
+                               gtk_dialog_run (GTK_DIALOG (dialog) );
+                               gtk_widget_destroy (GTK_WIDGET (dialog) );
+                               g_slist_free(files);
+                               lxa_close_archive(archive);
+                               gtk_main_quit();
+                       }
+               }
+               lxa_archive_add(archive, files);
+       }
+       if(extract_archive_path)
+               lxa_archive_extract(archive, files, extract_archive_path);
+}
+
 int main(int argc, char **argv)
 {
        GError *cli_error = NULL;
@@ -116,6 +161,8 @@
 
        lxa_init();
 
+       _argc = argc;
+       _argv = argv;
        if(extract_archive_path || extract_archive)
        {
                if(argc == 1)
@@ -130,10 +177,12 @@
                }
                for(i = 1; i < argc; i++)
                {
-                       if(!lxa_open_archive(argv[i], &xa_archive))
+                       if(!lxa_open_archive(argv[i], &xa_archive, 
G_CALLBACK(archive_initialized)))
                        {
                                opened_archives++;
                                g_signal_connect(G_OBJECT(xa_archive), 
"lxa_status_changed", G_CALLBACK(archive_status_changed), NULL);
+                               g_signal_connect(G_OBJECT(xa_archive), 
"lxa_init_complete", G_CALLBACK(archive_initialized), NULL);
+                               g_signal_connect(G_OBJECT(xa_archive), 
"lxa_operation_failure",  G_CALLBACK(archive_operation_failed), NULL);
                                lxa_archive_extract(xa_archive, files, 
extract_archive_path);
                        }
                        else
@@ -157,26 +206,12 @@
                }
                if(add_archive_path)
                {
-                       if(!lxa_open_archive(add_archive_path, &xa_archive))
+                       if(!lxa_open_archive(add_archive_path, &xa_archive, 
G_CALLBACK(archive_initialized)))
                        {
+                               g_signal_connect(G_OBJECT(xa_archive), 
"lxa_status_changed", G_CALLBACK(archive_status_changed), NULL);
+                               g_signal_connect(G_OBJECT(xa_archive), 
"lxa_init_complete", G_CALLBACK(archive_initialized), NULL);
+                               g_signal_connect(G_OBJECT(xa_archive), 
"lxa_operation_failure",  G_CALLBACK(archive_operation_failed), NULL);
                                opened_archives++;
-                               for(i = 1; i < argc; i++)
-                               {
-                                       if(g_file_test(argv[i], 
G_FILE_TEST_EXISTS))
-                                               files = g_slist_prepend(files, 
argv[i]);
-                                       else
-                                       {
-                                               dialog = gtk_message_dialog_new 
(NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("File '%s' does not 
exist: ABORTING"), argv[i]);
-                                               gtk_dialog_set_default_response 
(GTK_DIALOG (dialog), GTK_RESPONSE_YES);
-                                               gtk_dialog_run (GTK_DIALOG 
(dialog) );
-                                               gtk_widget_destroy (GTK_WIDGET 
(dialog) );
-                                               g_slist_free(files);
-                                               lxa_close_archive(xa_archive);
-                                               return 1;
-                                       }
-                               }
-                               g_signal_connect(G_OBJECT(xa_archive), 
"lxa_status_changed", G_CALLBACK(archive_status_changed), NULL);
-                               lxa_archive_add(xa_archive, files);
                        }
                        else
                        {

_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to