[Xfce4-commits] r25983 - xarchiver/trunk/src

Giuseppe Torelli colossus at xfce.org
Wed Aug 15 10:56:08 CEST 2007


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)
 {



More information about the Xfce4-commits mailing list