Author: peter
Date: 2008-07-10 21:52:53 +0000 (Thu, 10 Jul 2008)
New Revision: 27253
Modified:
squeeze/trunk/libsqueeze/archive.c
squeeze/trunk/libsqueeze/archive.h
squeeze/trunk/libsqueeze/command-queue.c
squeeze/trunk/libsqueeze/command-queue.h
squeeze/trunk/src/application.c
squeeze/trunk/src/main_window.c
squeeze/trunk/src/notebook.c
Log:
made extract working
Modified: squeeze/trunk/libsqueeze/archive.c
===================================================================
--- squeeze/trunk/libsqueeze/archive.c 2008-07-10 15:55:22 UTC (rev 27252)
+++ squeeze/trunk/libsqueeze/archive.c 2008-07-10 21:52:53 UTC (rev 27253)
@@ -410,7 +410,7 @@
* Return value: TRUE on success
*/
gboolean
-lsq_archive_operate(LSQArchive *archive, LSQCommandType type, const gchar
**files)
+lsq_archive_operate(LSQArchive *archive, LSQCommandType type, const gchar
**files, const gchar *directory)
{
g_return_val_if_fail(archive, FALSE);
@@ -419,16 +419,16 @@
switch (type)
{
case LSQ_COMMAND_TYPE_ADD:
- lsq_command_queue_execute(s_template->add_cmd_queue, archive,
files, s_template->parser);
+ lsq_command_queue_execute(s_template->add_cmd_queue, archive,
files, NULL, NULL);
break;
case LSQ_COMMAND_TYPE_REMOVE:
- lsq_command_queue_execute(s_template->remove_cmd_queue, archive,
files, s_template->parser);
+ lsq_command_queue_execute(s_template->remove_cmd_queue, archive,
files, NULL, NULL);
break;
case LSQ_COMMAND_TYPE_EXTRACT:
- lsq_command_queue_execute(s_template->extract_cmd_queue, archive,
files, s_template->parser);
+ lsq_command_queue_execute(s_template->extract_cmd_queue, archive,
files, directory, NULL);
break;
case LSQ_COMMAND_TYPE_REFRESH:
- lsq_command_queue_execute(s_template->refresh_cmd_queue, archive,
files, s_template->parser);
+ lsq_command_queue_execute(s_template->refresh_cmd_queue, archive,
files, NULL, s_template->parser);
break;
default:
return FALSE;
Modified: squeeze/trunk/libsqueeze/archive.h
===================================================================
--- squeeze/trunk/libsqueeze/archive.h 2008-07-10 15:55:22 UTC (rev 27252)
+++ squeeze/trunk/libsqueeze/archive.h 2008-07-10 21:52:53 UTC (rev 27253)
@@ -108,7 +108,7 @@
ThunarVfsPath *lsq_archive_get_path_info(LSQArchive *);
-gboolean lsq_archive_operate(LSQArchive *archive, LSQCommandType
type, const gchar **);
+gboolean lsq_archive_operate(LSQArchive *archive, LSQCommandType
type, const gchar **, const gchar *);
const gchar *
lsq_archive_get_state_msg(const LSQArchive *archive);
Modified: squeeze/trunk/libsqueeze/command-queue.c
===================================================================
--- squeeze/trunk/libsqueeze/command-queue.c 2008-07-10 15:55:22 UTC (rev
27252)
+++ squeeze/trunk/libsqueeze/command-queue.c 2008-07-10 21:52:53 UTC (rev
27253)
@@ -57,8 +57,10 @@
LSQParser *parser;
LSQArchive *archive;
gchar **files;
+ gchar *directory;
gchar *tempfile;
LSQParserContext *ctx;
+ GIOChannel *redir_out;
enum {
LSQ_EXEC_CTX_STATE_RUNNING = 1<<0,
LSQ_EXEC_CTX_STATE_PARSING = 1<<1
@@ -132,7 +134,8 @@
{
if(0==strcmp((const gchar*)iter->data, "%F"))
{
- size += g_strv_length(ctx->files);
+ if(ctx->files)
+ size += g_strv_length(ctx->files);
}
else
size++;
@@ -152,9 +155,12 @@
switch(arg[1])
{
case 'F':
- for(filei = ctx->files; *filei; filei++)
+ if(ctx->files)
{
- *argi++ = g_strdup(*filei);
+ for(filei = ctx->files; *filei; filei++)
+ {
+ *argi++ = g_strdup(*filei);
+ }
}
break;
case 'a':
@@ -163,6 +169,9 @@
case 't':
*argi++ = g_strdup(lsq_execute_context_get_temp_file(ctx));
break;
+ case 'd':
+ *argi++ = g_strdup(ctx->directory);
+ break;
default:
//...
break;
@@ -220,21 +229,23 @@
static void out_channel(GIOChannel *source, GIOCondition condition,
LSQExecuteContext *ctx)
{
GIOStatus stat = G_IO_STATUS_NORMAL;
+ GIOChannel *dest = ctx->redir_out;
static gchar buffer[1024];
if(condition & G_IO_IN)
{
gsize n;
stat = g_io_channel_read_chars(source, buffer, 1024, &n, NULL);
- //if(stat == G_IO_STATUS_NORMAL)
- //g_io_channel_write_chars(dest, buffer, n, NULL, NULL);
+ if(stat == G_IO_STATUS_NORMAL)
+ g_io_channel_write_chars(dest, buffer, n, NULL, NULL);
}
if(condition & G_IO_HUP || (stat != G_IO_STATUS_NORMAL && stat !=
G_IO_STATUS_AGAIN))
{
g_io_channel_unref(source);
- //g_io_channel_flush(dest);
- //g_io_channel_unref(dest);
+ g_io_channel_flush(dest, NULL);
+ g_io_channel_unref(dest);
+ ctx->redir_out = NULL;
ctx->state &= ~LSQ_EXEC_CTX_STATE_PARSING;
if(!ctx->state)
{
@@ -243,7 +254,6 @@
//else
//...//done
}
- lsq_archive_refreshed(ctx->archive);
}
}
@@ -251,9 +261,12 @@
parse_channel(GIOChannel *source, GIOCondition condition, LSQExecuteContext
*ctx)
{
if(condition & G_IO_IN)
+ {
do {
lsq_parser_parse(ctx->parser, ctx->ctx);
} while(lsq_parser_context_read_again(ctx->ctx));
+ }
+
if(condition & G_IO_HUP || !lsq_parser_context_is_good(ctx->ctx))
{
lsq_parser_context_set_channel(ctx->ctx, NULL);
@@ -266,6 +279,7 @@
//else
//...//done
}
+ //FIXME: this is not entirely the correct place, or is it?
lsq_archive_refreshed(ctx->archive);
return FALSE;
}
@@ -279,7 +293,6 @@
gint fd_out = TRUE;
GIOChannel *redir_in = NULL;
GIOChannel *chan_in;
- //GIOChannel *redir_out;
GIOChannel *chan_out;
gchar **argv;
GPid pid;
@@ -287,7 +300,7 @@
if(entry->redirect_out)
{
gchar *file = format_get_filename(entry->redirect_out, ctx);
- redir_in = g_io_channel_new_file(file, "w", NULL);
+ ctx->redir_out = g_io_channel_new_file(file, "w", NULL);
g_free(file);
}
else if(!ctx->ctx)
@@ -298,7 +311,7 @@
if(entry->redirect_in)
{
gchar *file = format_get_filename(entry->redirect_in, ctx);
- //redir_in = g_io_channel_new_file(file, "r", NULL);
+ redir_in = g_io_channel_new_file(file, "r", NULL);
g_free(file);
fd_in = TRUE;
}
@@ -346,7 +359,7 @@
}
}
-LSQExecuteContext *lsq_command_queue_execute(LSQCommandQueue *queue,
LSQArchive *archive, const gchar **files, LSQParser *parser)
+LSQExecuteContext *lsq_command_queue_execute(LSQCommandQueue *queue,
LSQArchive *archive, const gchar **files, const gchar *directory, LSQParser
*parser)
{
LSQExecuteContext *ctx;
@@ -355,6 +368,7 @@
ctx->queue = queue->queue;
ctx->archive = archive;
ctx->files = g_strdupv((gchar**)files);
+ ctx->directory = g_strdup(directory);
ctx->parser = parser;
ctx->ctx = parser?lsq_parser_get_context(parser, archive):NULL;
Modified: squeeze/trunk/libsqueeze/command-queue.h
===================================================================
--- squeeze/trunk/libsqueeze/command-queue.h 2008-07-10 15:55:22 UTC (rev
27252)
+++ squeeze/trunk/libsqueeze/command-queue.h 2008-07-10 21:52:53 UTC (rev
27253)
@@ -56,7 +56,7 @@
LSQCommandQueue *lsq_command_queue_new(const gchar *command_string);
-LSQExecuteContext *lsq_command_queue_execute(LSQCommandQueue *queue,
LSQArchive *archive, const gchar **files, LSQParser *parser);
+LSQExecuteContext *lsq_command_queue_execute(LSQCommandQueue *queue,
LSQArchive *archive, const gchar **files, const gchar *direcotry, LSQParser
*parser);
G_END_DECLS
Modified: squeeze/trunk/src/application.c
===================================================================
--- squeeze/trunk/src/application.c 2008-07-10 15:55:22 UTC (rev 27252)
+++ squeeze/trunk/src/application.c 2008-07-10 21:52:53 UTC (rev 27253)
@@ -178,7 +178,7 @@
}
GtkWidget *message_dialog = sq_message_dialog_new(GTK_WINDOW_TOPLEVEL,
lp_archive);
gtk_widget_show(message_dialog);
- if(!lsq_archive_operate(lp_archive, LSQ_COMMAND_TYPE_EXTRACT, NULL))
+ if(!lsq_archive_operate(lp_archive, LSQ_COMMAND_TYPE_EXTRACT, NULL,
dest_path))
{
GtkWidget *warning_dialog = gtk_message_dialog_new(NULL,
GTK_DIALOG_DESTROY_WITH_PARENT,
@@ -253,7 +253,7 @@
GtkWidget *message_dialog = sq_message_dialog_new(GTK_WINDOW_TOPLEVEL,
lp_archive);
gtk_widget_show(message_dialog);
- if(!lsq_archive_operate(lp_archive, LSQ_COMMAND_TYPE_ADD, NULL))
+ if(!lsq_archive_operate(lp_archive, LSQ_COMMAND_TYPE_ADD, NULL, NULL))
{
/* FIXME: show warning dialog */
GtkWidget *warning_dialog = gtk_message_dialog_new(NULL,
Modified: squeeze/trunk/src/main_window.c
===================================================================
--- squeeze/trunk/src/main_window.c 2008-07-10 15:55:22 UTC (rev 27252)
+++ squeeze/trunk/src/main_window.c 2008-07-10 21:52:53 UTC (rev 27253)
@@ -821,7 +821,7 @@
lsq_iter_slist_free(filenames);
filenames = NULL;
}
- if(!lsq_archive_operate(lp_archive, LSQ_COMMAND_TYPE_EXTRACT,
NULL))
+ if(!lsq_archive_operate(lp_archive, LSQ_COMMAND_TYPE_EXTRACT,
NULL, extract_archive_path))
{
GtkWidget *warning_dialog =
gtk_message_dialog_new(GTK_WINDOW(window),
GTK_DIALOG_DESTROY_WITH_PARENT,
@@ -869,7 +869,7 @@
filenames =
gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog));
if(filenames)
{
- if(!lsq_archive_operate(lp_archive,
LSQ_COMMAND_TYPE_ADD, NULL))
+ if(!lsq_archive_operate(lp_archive,
LSQ_COMMAND_TYPE_ADD, NULL, NULL))
{
GtkWidget *warning_dialog =
gtk_message_dialog_new(GTK_WINDOW(window),
GTK_DIALOG_DESTROY_WITH_PARENT,
@@ -911,7 +911,7 @@
filenames =
gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog));
if(filenames)
{
- if(!lsq_archive_operate(lp_archive,
LSQ_COMMAND_TYPE_ADD, NULL))
+ if(!lsq_archive_operate(lp_archive,
LSQ_COMMAND_TYPE_ADD, NULL, NULL))
{
GtkWidget *warning_dialog =
gtk_message_dialog_new(GTK_WINDOW(window),
GTK_DIALOG_DESTROY_WITH_PARENT,
@@ -945,7 +945,7 @@
gtk_widget_hide(dialog);
sq_notebook_get_active_archive(SQ_NOTEBOOK(window->notebook), &lp_archive);
/*
gtk_tree_view_set_model(sq_notebook_get_active_tree_view(SQ_NOTEBOOK(window->notebook)),
NULL); */
- if(!lsq_archive_operate(lp_archive,
LSQ_COMMAND_TYPE_REMOVE, NULL))
+ if(!lsq_archive_operate(lp_archive,
LSQ_COMMAND_TYPE_REMOVE, NULL, NULL))
{
GtkWidget *warning_dialog =
gtk_message_dialog_new(GTK_WINDOW(window),
GTK_DIALOG_DESTROY_WITH_PARENT,
@@ -982,7 +982,7 @@
SQMainWindow *window = SQ_MAIN_WINDOW(userdata);
SQArchiveStore *store =
sq_notebook_get_active_store(SQ_NOTEBOOK(window->notebook));
LSQArchive *archive = sq_archive_store_get_archive(store);
- lsq_archive_operate(archive, LSQ_COMMAND_TYPE_REFRESH, NULL);
+ lsq_archive_operate(archive, LSQ_COMMAND_TYPE_REFRESH, NULL, NULL);
}
static void
@@ -1232,7 +1232,7 @@
{
case GTK_RESPONSE_OK: /* VIEW */
sq_notebook_get_active_archive(SQ_NOTEBOOK(notebook),
&lp_archive);
- if(lsq_archive_operate(lp_archive,
LSQ_COMMAND_TYPE_OPEN, NULL))
+ if(lsq_archive_operate(lp_archive,
LSQ_COMMAND_TYPE_OPEN, NULL, NULL))
{
GtkWidget *warning_dialog =
gtk_message_dialog_new(window, GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, _("Squeeze cannot view this file.\nthe
application to support this is missing."));
if(warning_dialog)
@@ -1255,7 +1255,7 @@
g_slist_free(files);
files = NULL;
}
- if(lsq_archive_operate(lp_archive,
LSQ_COMMAND_TYPE_EXTRACT, NULL))
+ if(lsq_archive_operate(lp_archive,
LSQ_COMMAND_TYPE_EXTRACT, NULL, extract_archive_path))
{
GtkWidget *warning_dialog =
gtk_message_dialog_new(GTK_WINDOW(window),
GTK_DIALOG_DESTROY_WITH_PARENT,
Modified: squeeze/trunk/src/notebook.c
===================================================================
--- squeeze/trunk/src/notebook.c 2008-07-10 15:55:22 UTC (rev 27252)
+++ squeeze/trunk/src/notebook.c 2008-07-10 21:52:53 UTC (rev 27253)
@@ -574,7 +574,7 @@
if(new_archive == FALSE)
{
- lsq_archive_operate(archive, LSQ_COMMAND_TYPE_REFRESH, NULL);
+ lsq_archive_operate(archive, LSQ_COMMAND_TYPE_REFRESH, NULL,
NULL);
}
}
@@ -819,7 +819,7 @@
g_signal_connect(G_OBJECT(archive), "refreshed",
G_CALLBACK(cb_notebook_archive_refreshed), treeview);
- lsq_archive_operate(archive, LSQ_COMMAND_TYPE_REFRESH, NULL);
+ lsq_archive_operate(archive, LSQ_COMMAND_TYPE_REFRESH, NULL,
NULL);
gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), store);
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits