Author: colossus
Date: 2007-08-15 10:20:42 +0000 (Wed, 15 Aug 2007)
New Revision: 25985
Modified:
xarchiver/trunk/src/arj.c
xarchiver/trunk/src/arj.h
xarchiver/trunk/src/lha.c
xarchiver/trunk/src/rar.c
xarchiver/trunk/src/rar.h
xarchiver/trunk/src/window.c
Log:
Archive navigation works for arj too.
Modified: xarchiver/trunk/src/arj.c
===================================================================
--- xarchiver/trunk/src/arj.c 2007-08-15 09:53:27 UTC (rev 25984)
+++ xarchiver/trunk/src/arj.c 2007-08-15 10:20:42 UTC (rev 25985)
@@ -18,139 +18,134 @@
#include "config.h"
#include "arj.h"
-#include "string_utils.h"
-GtkTreeIter iter;
-gboolean jump_header = FALSE;
-unsigned short int arj_line = 0;
+extern gboolean unrar;
+extern void xa_create_liststore (XArchive *archive, gchar *columns_names[]);
+void xa_get_arj_line_content (gchar *line, gpointer data);
-static gboolean ArjOpen (GIOChannel *ioc, GIOCondition cond, gpointer data);
-
-void OpenArj (XArchive *archive)
+void xa_open_arj (XArchive *archive)
{
- jump_header = FALSE;
+ unsigned short int i;
+ jump_header = encrypted = last_line = FALSE;
+ arj_line = 0;
gchar *command = g_strconcat ("arj v ",archive->escaped_path, NULL);
archive->has_sfx = archive->has_properties = archive->can_add =
archive->can_extract = archive->has_test = TRUE;
archive->dummy_size = 0;
- archive->nr_of_files = 0;
- archive->nr_of_dirs = 0;
- archive->parse_output = ArjOpen;
+ archive->nr_of_files = 0;
+ archive->nr_of_dirs = 0;
+ archive->nc = 8;
archive->format ="ARJ";
+ archive->parse_output = xa_get_arj_line_content;
xa_spawn_async_process (archive,command,0);
g_free (command);
if (archive->child_pid == 0)
return;
- char *names[]=
{(_("Filename")),(_("Original")),(_("Compressed")),(_("Ratio")),(_("Date")),(_("Time")),(_("Attributes"))};
- GType types[]=
{G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING};
- xa_create_liststore ( 7, names , (GType *)types, archive );
+ GType types[]=
{G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING};
+ archive->column_types = g_malloc0(sizeof(types));
+ for (i = 0; i < 10; i++)
+ archive->column_types[i] = types[i];
+
+ char *names[]=
{(_("Original")),(_("Compressed")),(_("Ratio")),(_("Date")),(_("Time")),(_("Attributes")),("GUA"),("BPMGS")};
+ xa_create_liststore (archive,names);
}
-static gboolean ArjOpen (GIOChannel *ioc, GIOCondition cond, gpointer data)
+void xa_get_arj_line_content (gchar *line, gpointer data)
{
XArchive *archive = data;
- gchar **fields = NULL;
- gchar *line = NULL;
- gchar *filename = NULL;
- GtkTreeIter iter;
- GIOStatus status = G_IO_STATUS_NORMAL;
- unsigned short int x;
+ XEntry *entry;
+ gpointer item[8];
+ unsigned int linesize,n,a;
+ gboolean dir = FALSE;
- if (cond & (G_IO_IN | G_IO_PRI) )
+ if (last_line)
+ return;
+
+ if (arj_line == 3)
{
- do
- {
- /* This to avoid inserting in the liststore arj
copyright message */
- if (jump_header == FALSE )
- {
- status = g_io_channel_read_line ( ioc, &line,
NULL, NULL, NULL );
- if (line == NULL)
- break;
- archive->cmd_line_output = g_list_append
(archive->cmd_line_output,g_strdup(line));
- if (strncmp (line , "----------" , 10) == 0)
- {
- jump_header = TRUE;
- arj_line = 1;
- }
- g_free (line);
- break;
- }
- if (arj_line == 1)
- {
- /* This to avoid reading the last line of arj
output */
- status = g_io_channel_read_line ( ioc, &line,
NULL, NULL, NULL );
- if (line == NULL)
- break;
- archive->cmd_line_output = g_list_append
(archive->cmd_line_output,g_strdup(line));
- if (strncmp (line, "----------", 10) == 0)
- {
- g_free (line);
- status = g_io_channel_read_line ( ioc,
&line, NULL, NULL, NULL );
- if (line != NULL)
- {
- archive->cmd_line_output =
g_list_append (archive->cmd_line_output,g_strdup(line));
- g_free (line);
- }
- break;
- }
- filename = get_last_field (line,2);
- gtk_list_store_append (archive->liststore,
&iter);
- gtk_list_store_set (archive->liststore,
&iter,0,filename,-1);
- g_free (line);
- }
- else if (arj_line == 2)
- {
- status = g_io_channel_read_line ( ioc, &line,
NULL, NULL, NULL );
- if ( line == NULL)
- break;
- archive->cmd_line_output = g_list_append
(archive->cmd_line_output,g_strdup(line));
- fields = split_line (line,8);
- if (g_str_has_prefix(fields[7] , "d") == FALSE)
- archive->nr_of_files++;
- for ( x = 2; x < 8; x++)
- {
- if ( x == 2 || x == 3)
- gtk_list_store_set (archive->liststore,
&iter,x-1,strtoll(fields[x],NULL,0),-1);
- else
- gtk_list_store_set (archive->liststore,
&iter,x-1,fields[x],-1);
- }
- archive->dummy_size +=
strtoll(fields[2],NULL,0);
- g_strfreev (fields);
- g_free (line);
- }
- else if (arj_line == 3)
- {
- status = g_io_channel_read_line ( ioc, &line, NULL, NULL, NULL
);
- if ( line == NULL)
- break;
- archive->cmd_line_output = g_list_append
(archive->cmd_line_output,g_strdup(line));
- g_free (line);
- }
- else if (arj_line == 4)
- {
- status = g_io_channel_read_line ( ioc, &line, NULL, NULL, NULL
);
- if ( line == NULL)
- break;
+ arj_line++;
+ return;
+ }
+ if (arj_line == 4)
+ {
+ arj_line = 1;
+ return;
+ }
- archive->cmd_line_output = g_list_append
(archive->cmd_line_output,g_strdup(line));
- g_free (line);
- arj_line = 1;
- break;
- }
- arj_line++;
+ if (jump_header == FALSE)
+ {
+ if (line[0] == '-')
+ {
+ jump_header = TRUE;
+ arj_line = 1;
+ return;
}
- while (status == G_IO_STATUS_NORMAL);
-
- if (status == G_IO_STATUS_ERROR || status == G_IO_STATUS_EOF)
- goto done;
+ return;
}
- 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;
+ if (arj_line == 1)
+ {
+ linesize = strlen(line);
+ if(line[0] == '*')
+ encrypted = TRUE;
+ else if (line[0] == '-')
+ {
+ last_line = TRUE;
+ return;
+ }
+ line[linesize - 1] = '\0';
+ filename = g_strdup(line+5);
+ arj_line++;
+ return;
}
- return TRUE;
+ else if (arj_line == 2)
+ {
+ linesize = strlen(line);
+ /* Size */
+ for(n=12; n < linesize && line[n] == ' '; n++);
+ a = n;
+ for(; n < linesize && line[n] != ' '; n++);
+ line[n]='\0';
+ item[0] = line + a;
+ archive->dummy_size += strtoll(item[0],NULL,0);
+ n++;
+
+ /* Compressed */
+ for(; n < linesize && line[n] == ' '; n++);
+ a = n;
+ for(; n < linesize && line[n] != ' '; n++);
+ line[n]='\0';
+ item[1] = line + a;
+ n++;
+
+ /* Ratio */
+ line[40] = '\0';
+ item[2] = line + 35;
+
+ /* Date */
+ line[49] = '\0';
+ item[3] = line + 41;
+
+ /* Time */
+ line[58] = '\0';
+ item[4] = line + 50;
+
+ /* Permissions */
+ line[69] = '\0';
+ item[5] = line + 59;
+ if ((line+59)[0] != 'd')
+ archive->nr_of_files++;
+
+ /* GUA */
+ line[73] = '\0';
+ item[6] = line + 70;
+
+ /* BPMGS */
+ line[77] = '\0';
+ item[7] = line + 74;
+
+ entry = xa_set_archive_entries_for_each_row
(archive,filename,encrypted,item);
+ g_free(filename);
+ arj_line++;
+ encrypted = FALSE;
+ }
}
Modified: xarchiver/trunk/src/arj.h
===================================================================
--- xarchiver/trunk/src/arj.h 2007-08-15 09:53:27 UTC (rev 25984)
+++ xarchiver/trunk/src/arj.h 2007-08-15 10:20:42 UTC (rev 25985)
@@ -25,6 +25,8 @@
#include "string_utils.h"
#include "support.h"
#include "archive.h"
-
-void OpenArj ( XArchive *archive );
+gboolean jump_header, encrypted, last_line;
+unsigned short int arj_line;
+gchar *filename;
+void xa_open_arj (XArchive *archive);
#endif
Modified: xarchiver/trunk/src/lha.c
===================================================================
--- xarchiver/trunk/src/lha.c 2007-08-15 09:53:27 UTC (rev 25984)
+++ xarchiver/trunk/src/lha.c 2007-08-15 10:20:42 UTC (rev 25985)
@@ -92,6 +92,7 @@
line[22] = '\0';
item[1] = line + 11;
+ //TODO verify the len of the size column with a big archive
/* Size */
for(n = 23;n < linesize;n++)
if(line[n] != ' ')
Modified: xarchiver/trunk/src/rar.c
===================================================================
--- xarchiver/trunk/src/rar.c 2007-08-15 09:53:27 UTC (rev 25984)
+++ xarchiver/trunk/src/rar.c 2007-08-15 10:20:42 UTC (rev 25985)
@@ -17,7 +17,6 @@
*/
#include "config.h"
-#include <string.h>
#include "rar.h"
extern gboolean unrar;
@@ -69,7 +68,6 @@
{
XArchive *archive = data;
XEntry *entry;
-
gpointer item[9];
unsigned short int i = 0;
unsigned int linesize,n,a;
Modified: xarchiver/trunk/src/rar.h
===================================================================
--- xarchiver/trunk/src/rar.h 2007-08-15 09:53:27 UTC (rev 25984)
+++ xarchiver/trunk/src/rar.h 2007-08-15 10:20:42 UTC (rev 25985)
@@ -20,6 +20,7 @@
#define RAR_H
#include <gtk/gtk.h>
+#include <string.h>
#include <stdlib.h>
#include "string_utils.h"
#include "support.h"
Modified: xarchiver/trunk/src/window.c
===================================================================
--- xarchiver/trunk/src/window.c 2007-08-15 09:53:27 UTC (rev 25984)
+++ xarchiver/trunk/src/window.c 2007-08-15 10:20:42 UTC (rev 25985)
@@ -145,7 +145,7 @@
break;
case XARCHIVETYPE_ARJ:
- OpenArj (archive);
+ xa_open_arj (archive);
break;
case XARCHIVETYPE_LHA:
@@ -334,7 +334,7 @@
switch ( archive[current_page]->type )
{
case XARCHIVETYPE_ARJ:
- OpenArj (archive[current_page]);
+ xa_open_arj (archive[current_page]);
break;
case XARCHIVETYPE_DEB:
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits