Author: colossus
Date: 2007-08-15 08:56:08 +0000 (Wed, 15 Aug 2007)
New Revision: 25983

Modified:
   xarchiver/trunk/src/7zip.c
   xarchiver/trunk/src/archive.c
   xarchiver/trunk/src/lha.c
   xarchiver/trunk/src/lha.h
   xarchiver/trunk/src/main.c
   xarchiver/trunk/src/rar.c
   xarchiver/trunk/src/window.c
   xarchiver/trunk/src/zip.c
Log:
Archive navigation works for lha too.



Modified: xarchiver/trunk/src/7zip.c
===================================================================
--- xarchiver/trunk/src/7zip.c  2007-08-15 07:16:37 UTC (rev 25982)
+++ xarchiver/trunk/src/7zip.c  2007-08-15 08:56:08 UTC (rev 25983)
@@ -153,47 +153,5 @@
        
        entry = xa_set_archive_entries_for_each_row 
(archive,filename,FALSE,item);
        g_free(filename);
-
-       /*              archive->cmd_line_output = g_list_append 
(archive->cmd_line_output,g_strdup(line));
-                       fields = split_line ( line , 5 );
-                       filename = get_last_field ( line , 6);
-                       gtk_list_store_append (archive->liststore, &iter);
-                       if ( g_str_has_prefix(fields[2] , "D") == FALSE)
-                               archive->nr_of_files++;
-                       else
-                               archive->nr_of_dirs++;
-                       for ( x = 0; x < 5; x++)
-                       {
-                               if (x == 3)
-                                       gtk_list_store_set (archive->liststore, 
&iter,1,strtoll(fields[3],NULL,0),-1);
-                               else if (x == 4)
-                                       gtk_list_store_set (archive->liststore, 
&iter,2,strtoll(fields[4],NULL,0),-1);
-                               else
-                                       gtk_list_store_set (archive->liststore, 
&iter,(5-x),fields[x],-1);
-                       }
-                       archive->dummy_size += strtoll(fields[3],NULL,0);
-                       if ( filename == NULL )
-                               gtk_list_store_set (archive->liststore, 
&iter,0,fields[4],-1);
-                       else
-                               gtk_list_store_set (archive->liststore, 
&iter,0,filename,-1);
-                       g_strfreev ( fields );
-
-                       while (gtk_events_pending() )
-                               gtk_main_iteration();
-                       g_free (line);
-               }
-               while (status == G_IO_STATUS_NORMAL);
-               if (status == G_IO_STATUS_ERROR || status == G_IO_STATUS_EOF)
-                       goto done;
-       }
-       else if (cond & (G_IO_ERR | G_IO_HUP) )
-       {
-done:  g_io_channel_shutdown ( ioc,TRUE,NULL );
-               g_io_channel_unref (ioc);
-               gtk_tree_view_set_model (GTK_TREE_VIEW(archive->treeview), 
archive->model);
-               g_object_unref (archive->model);
-               return FALSE;
-       }
-       return TRUE;*/
 }
 

Modified: xarchiver/trunk/src/archive.c
===================================================================
--- xarchiver/trunk/src/archive.c       2007-08-15 07:16:37 UTC (rev 25982)
+++ xarchiver/trunk/src/archive.c       2007-08-15 08:56:08 UTC (rev 25983)
@@ -482,7 +482,7 @@
                        if (entry->is_dir)
                                icon_name = "folder";
                        else if (entry->is_encrypted)
-                               icon_name = "password";
+                               icon_name = "gtk-dialog-authentication";
                        else
                                icon_name = 
xa_get_stock_mime_icon(entry->filename);
 
@@ -562,7 +562,7 @@
                if (entry->is_dir)
                        icon_name = "folder";
                else if (entry->is_encrypted)
-                       icon_name = "password";
+                       icon_name = "gtk-dialog-authentication";
                
                else
                        icon_name = xa_get_stock_mime_icon(entry->filename);

Modified: xarchiver/trunk/src/lha.c
===================================================================
--- xarchiver/trunk/src/lha.c   2007-08-15 07:16:37 UTC (rev 25982)
+++ xarchiver/trunk/src/lha.c   2007-08-15 08:56:08 UTC (rev 25983)
@@ -20,10 +20,13 @@
 #include "config.h"
 #include "lha.h"
 
-static gboolean LhaOpen (GIOChannel *ioc, GIOCondition cond, gpointer data);
-void OpenLha ( XArchive *archive )
+void xa_get_lha_line_content (gchar *line, gpointer data);
+extern void xa_create_liststore ( XArchive *archive, gchar *columns_names[]);
+void xa_open_lha (XArchive *archive)
 {
        gchar *command;
+       unsigned short int i;
+       jump_header = last_line = FALSE;
 
        command = g_strconcat ("lha l " , archive->escaped_path, NULL);
        archive->has_properties = archive->can_extract = archive->can_add = 
archive->has_test = TRUE;
@@ -32,106 +35,89 @@
        archive->nr_of_files = 0;
        archive->nr_of_dirs = 0;
        archive->format ="LHA";
-       archive->parse_output = LhaOpen;
+       archive->nc = 5;
+       archive->parse_output = xa_get_lha_line_content;
        xa_spawn_async_process (archive,command,0);
-       g_free (command);
+       g_free ( command );
 
-       if (archive->child_pid == 0)
+       if ( archive->child_pid == 0 )
                return;
 
-       char *names[]= 
{(_("Filename")),(_("Permissions")),(_("UID/GID")),(_("Size")),(_("Ratio")),(_("Timestamp"))};
-       GType types[]= 
{G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING};
-       xa_create_liststore(6, names, (GType *)types, archive);
+       GType types[]= 
{G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING};
+       archive->column_types = g_malloc0(sizeof(types));
+       for (i = 0; i < 7; i++)
+               archive->column_types[i] = types[i];
+               
+       char *names[]= 
{(_("Permissions")),(_("UID/GID")),(_("Size")),(_("Ratio")),(_("Timestamp"))};
+       xa_create_liststore (archive,names);
 }
 
-static gboolean LhaOpen (GIOChannel *ioc, GIOCondition cond, gpointer data)
+void xa_get_lha_line_content (gchar *line, gpointer data)
 {
        XArchive *archive = data;
-       GtkTreeIter iter;
-       gchar *permissions = NULL;
-       gchar *owner = NULL;
-       gchar *ratio = NULL;
-       gchar *timestamp = NULL;
-       gchar *size = NULL;
-       gchar *line = NULL;
-       gchar *filename = NULL;
-       GIOStatus status = G_IO_STATUS_NORMAL;
-       unsigned short int a = 0, n = 0, num;
+       XEntry *entry;
+       gpointer item[5];
+       unsigned short int i = 0;
+       unsigned int linesize,n,a;
+       gboolean dir = FALSE;
+       gchar *filename;
 
-       if (cond & (G_IO_IN | G_IO_PRI) )
+       if (last_line)
+               return;
+       if (jump_header == FALSE)
        {
-               // We don't need the first two lines. No actual data there.
-               g_io_channel_read_line(ioc, &line, NULL, NULL, NULL);
-               if (line != NULL)
-                       g_free (line);
-
-               g_io_channel_read_line(ioc, &line, NULL, NULL, NULL);
-               if (line != NULL)
-                       g_free (line);
-               do
+               if (line[0] == '-')
                {
-                       status = g_io_channel_read_line(ioc, &line, NULL, NULL, 
NULL);
-                       if (line == NULL || (strncmp(line, "---------- -", 12) 
== 0))
-                               break;
-                       gtk_list_store_append (archive->liststore, &iter);
+                       jump_header = TRUE;
+                       return;
+               }
+               return;
+       }
+       if (strncmp(line,"----",4) == 0)
+       {
+               last_line = TRUE;
+               return;
+       }
+       linesize = strlen(line);
 
-                       archive->cmd_line_output = g_list_append 
(archive->cmd_line_output,g_strdup(line));
-                       permissions = g_strndup(line, 10);
-                       gtk_list_store_set (archive->liststore, 
&iter,1,permissions,-1);
-                       if (strstr(permissions, "d") == NULL)
-                               archive->nr_of_files++;
-                       else
-                               archive->nr_of_dirs++;
-                       g_free (permissions);
+       /* Permission */
+       line[10] = '\0';
+       item[0] = line;
+       if(line[0] == 'd')
+               dir = TRUE;
+       else
+               archive->nr_of_files++;
 
-                       owner = g_strndup(&line[11], 11);
-                       gtk_list_store_set (archive->liststore, 
&iter,2,owner,-1);
-                       g_free (owner);
+       /* UID/GID */
+       line[22] = '\0';
+       item[1] = line + 11;
 
-                       num = strlen(line);
-                       for(n = 23;n < num;n++)
-                       if(line[n] != ' ')
-                               break;
+       /* Size */
+       for(n = 23;n < linesize;n++)
+       if(line[n] != ' ')
+               break;
 
-                       a = n;
-                       for(;n < num;n++)
-                       if(line[n] == ' ')
-                               break;
+       a = n;
+       for(;n < linesize;n++)
+       if(line[n] == ' ')
+               break;
 
-                       size = g_strndup(&line[a], n - a);
-                       gtk_list_store_set (archive->liststore, 
&iter,3,strtoll(size,NULL,0),-1);
-                       archive->dummy_size += strtoll(size,NULL,0);
-                       g_free(size);
+       line[a+(n-a)] = '\0';
+       item[2] = line + a;
+       archive->dummy_size += strtoll(item[2],NULL,0);
 
-                       ratio = g_strndup(&line[31], 7);
-                       gtk_list_store_set (archive->liststore, 
&iter,4,ratio,-1);
-                       g_free (ratio);
+    /* Ratio */
+    line[37] = '\0';
+    item[3] = line + 31;
 
-                       timestamp = g_strndup(&line[38], 13);
-                       gtk_list_store_set (archive->liststore, 
&iter,5,timestamp,-1);
-                       g_free (timestamp);
+    /* Timestamp */
+    line[50] = '\0';
+    item[4] = line + 38;
 
-                       filename = g_strndup(&line[51], num - 51 - 1);
-                       gtk_list_store_set (archive->liststore, 
&iter,0,filename,-1);
-                       g_free (filename);
+       line[(linesize- 1)] = '\0';
+       filename = line + 51;
 
-                       g_free(line);
-               }
-               while (status == G_IO_STATUS_NORMAL);
-
-               if (status == G_IO_STATUS_ERROR || status == G_IO_STATUS_EOF)
-               goto done;
-       }
-       else if (cond & (G_IO_ERR | G_IO_HUP | G_IO_NVAL) )
-       {
-done:
-               g_io_channel_shutdown(ioc, TRUE, NULL);
-               g_io_channel_unref(ioc);
-               gtk_tree_view_set_model (GTK_TREE_VIEW(archive->treeview), 
archive->model);
-               g_object_unref (archive->model);
-               return FALSE;
-       }
-       return TRUE;
+       entry = xa_set_archive_entries_for_each_row 
(archive,filename,FALSE,item);
 }
 
 gboolean isLha ( FILE *ptr )

Modified: xarchiver/trunk/src/lha.h
===================================================================
--- xarchiver/trunk/src/lha.h   2007-08-15 07:16:37 UTC (rev 25982)
+++ xarchiver/trunk/src/lha.h   2007-08-15 08:56:08 UTC (rev 25983)
@@ -27,6 +27,7 @@
 #include "support.h"
 #include "archive.h"
 
-void OpenLha ( XArchive *archive );
+void xa_open_lha (XArchive *archive);
+gboolean jump_header, last_line;
 gboolean isLha ( FILE *ptr );
 #endif

Modified: xarchiver/trunk/src/main.c
===================================================================
--- xarchiver/trunk/src/main.c  2007-08-15 07:16:37 UTC (rev 25982)
+++ xarchiver/trunk/src/main.c  2007-08-15 08:56:08 UTC (rev 25983)
@@ -96,7 +96,7 @@
                xa_get_available_archivers();
                ArchiveSuffix = g_list_reverse (ArchiveSuffix);
                ArchiveType = g_list_reverse (ArchiveType);
-       //      MainWindow = create_MainWindow (FALSE);
+               MainWindow = NULL;
                gtk_main_iteration_do (FALSE);
                g_print ("Xarchiver " VERSION " (\xC2\xA9)2005-2007 Giuseppe 
Torelli (colossus73)\n\n");
 

Modified: xarchiver/trunk/src/rar.c
===================================================================
--- xarchiver/trunk/src/rar.c   2007-08-15 07:16:37 UTC (rev 25982)
+++ xarchiver/trunk/src/rar.c   2007-08-15 08:56:08 UTC (rev 25983)
@@ -22,7 +22,7 @@
 
 extern gboolean unrar;
 extern void xa_create_liststore ( XArchive *archive, gchar *columns_names[]);
-static void xa_get_rar_line_content (gchar *line, gpointer data);
+void xa_get_rar_line_content (gchar *line, gpointer data);
 
 void xa_open_rar (XArchive *archive)
 {

Modified: xarchiver/trunk/src/window.c
===================================================================
--- xarchiver/trunk/src/window.c        2007-08-15 07:16:37 UTC (rev 25982)
+++ xarchiver/trunk/src/window.c        2007-08-15 08:56:08 UTC (rev 25983)
@@ -149,7 +149,7 @@
                                break;
 
                                case XARCHIVETYPE_LHA:
-                               OpenLha (archive);
+                               xa_open_lha (archive);
                                break;
 
                                default:
@@ -378,7 +378,7 @@
                break;
 
                case XARCHIVETYPE_LHA:
-               OpenLha (archive[current_page]);
+               xa_open_lha (archive[current_page]);
                break;
 
                default:

Modified: xarchiver/trunk/src/zip.c
===================================================================
--- xarchiver/trunk/src/zip.c   2007-08-15 07:16:37 UTC (rev 25982)
+++ xarchiver/trunk/src/zip.c   2007-08-15 08:56:08 UTC (rev 25983)
@@ -23,7 +23,7 @@
 
 
 extern void xa_create_liststore ( XArchive *archive, gchar *columns_names[]);
-static void xa_get_zip_line_content (gchar *line, gpointer data);
+void xa_get_zip_line_content (gchar *line, gpointer data);
 
 void xa_open_zip (XArchive *archive)
 {

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

Reply via email to