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