Author: peter
Date: 2008-07-07 23:01:09 +0000 (Mon, 07 Jul 2008)
New Revision: 27234

Modified:
   squeeze/trunk/data/zip.squeeze
   squeeze/trunk/libsqueeze/archive-iter.c
   squeeze/trunk/libsqueeze/archive.c
   squeeze/trunk/libsqueeze/archive.h
   squeeze/trunk/libsqueeze/command-queue.c
   squeeze/trunk/libsqueeze/parser-context.c
   squeeze/trunk/libsqueeze/parser-context.h
   squeeze/trunk/libsqueeze/scanf-parser.c
Log:
Open archive works now.
partialy fixed zip.squeeze

Modified: squeeze/trunk/data/zip.squeeze
===================================================================
--- squeeze/trunk/data/zip.squeeze      2008-07-07 20:21:25 UTC (rev 27233)
+++ squeeze/trunk/data/zip.squeeze      2008-07-07 23:01:09 UTC (rev 27234)
@@ -2,14 +2,24 @@
 Name=Zip
 Version=1.0
 Type=X-Squeeze-Archiver
-MimeType=application/x-zip
+MimeType=application/zip;application/x-zip
 X-Squeeze-Version=0.3
 
+[application/zip]
+X-Squeeze-Requires=zip;unzip
+X-Squeeze-New=zip
+X-Squeeze-Add=zip
+X-Squeeze-Remove=zip
+X-Squeeze-Extract=zip
+X-Squeeze-Refresh=unzip -lv -qq %a
+
 [application/x-zip]
-X-Squeeze-Requires=zip
+X-Squeeze-Requires=zip;unzip
 X-Squeeze-New=zip
 X-Squeeze-Add=zip
 X-Squeeze-Remove=zip
+X-Squeeze-Extract=zip
+X-Squeeze-Refresh=unzip -lv -qq %a
 
 [Squeeze-Add]
 [Squeeze-Remove]
@@ -18,12 +28,12 @@
 X-Squeeze-Options=Password;Overwrite;w00t
 
 [Squeeze-Refresh]
-X-Squeeze-Headers=Rights;Owner/Group;Size;Date;Time;Name
+X-Squeeze-Headers=Size;Method;Compressed;Ratio;Date;Time;CRC-32
 # Tar does not support passwords, this is just for illustrative purposes
 X-Squeeze-Options=Password
 
 # I wonder if this will be enough...
-X-Squeeze-Parse=%s %s %u %s %s %F
+X-Squeeze-Parse=%u %s %u %s %s %s %s  %F
 X-Squeeze-Separator=space
 
 [Squeeze-Option-Password]

Modified: squeeze/trunk/libsqueeze/archive-iter.c
===================================================================
--- squeeze/trunk/libsqueeze/archive-iter.c     2008-07-07 20:21:25 UTC (rev 
27233)
+++ squeeze/trunk/libsqueeze/archive-iter.c     2008-07-07 23:01:09 UTC (rev 
27234)
@@ -1448,11 +1448,11 @@
                                props_iter += sizeof(gchar *);
                                break;
                        case G_TYPE_UINT:
-                               (*((guint *)props_iter)) = ((const 
guint)props[i]);
+                               (*((guint *)props_iter)) = *((const guint 
*)props[i]);
                                props_iter += sizeof(guint);
                                break;
                        case G_TYPE_UINT64:
-                               (*((guint64 *)props_iter)) = (*(const guint64 
*)props[i]);
+                               (*((guint64 *)props_iter)) = *((const guint64 
*)props[i]);
                                props_iter += sizeof(guint64);
                                break;
                }

Modified: squeeze/trunk/libsqueeze/archive.c
===================================================================
--- squeeze/trunk/libsqueeze/archive.c  2008-07-07 20:21:25 UTC (rev 27233)
+++ squeeze/trunk/libsqueeze/archive.c  2008-07-07 23:01:09 UTC (rev 27234)
@@ -31,8 +31,8 @@
 
 #include "slist.h"
 #include "archive-tempfs.h"
+#include "command-queue.h"
 
-
 #include "internals.h"
 
 #ifndef LSQ_ENTRY_CHILD_BUFFER_SIZE

Modified: squeeze/trunk/libsqueeze/archive.h
===================================================================
--- squeeze/trunk/libsqueeze/archive.h  2008-07-07 20:21:25 UTC (rev 27233)
+++ squeeze/trunk/libsqueeze/archive.h  2008-07-07 23:01:09 UTC (rev 27234)
@@ -116,7 +116,10 @@
 LSQArchiveState
 lsq_archive_get_state(const LSQArchive *archive);
 
+void
+lsq_archive_refreshed(const LSQArchive *archive);
 
+
 G_END_DECLS
 
 #endif /* __ARCHIVE_H__ */

Modified: squeeze/trunk/libsqueeze/command-queue.c
===================================================================
--- squeeze/trunk/libsqueeze/command-queue.c    2008-07-07 20:21:25 UTC (rev 
27233)
+++ squeeze/trunk/libsqueeze/command-queue.c    2008-07-07 23:01:09 UTC (rev 
27234)
@@ -18,6 +18,7 @@
 #include <glib.h>
 #include <glib-object.h> 
 #include <signal.h>
+#include <string.h>
 
 #include <thunar-vfs/thunar-vfs.h>
 #include "libsqueeze.h"
@@ -64,6 +65,8 @@
   } state;
 };
 
+static void lsq_command_entry_start(LSQCommandEntry *entry, LSQExecuteContext 
*ctx);
+
 static void build_queue(LSQCommandQueue *queue, const gchar *command_string);
 
 G_DEFINE_TYPE(LSQCommandQueue, lsq_command_queue, G_TYPE_OBJECT);
@@ -174,8 +177,6 @@
   return argv;
 }
 
-static void lsq_command_entry_start(LSQCommandEntry *entry, LSQExecuteContext 
*ctx);
-
 static void child_exit(GPid pid, gint status, LSQExecuteContext *ctx)
 {
   g_spawn_close_pid(pid);
@@ -251,7 +252,9 @@
 parse_channel(GIOChannel *source, GIOCondition condition, LSQExecuteContext 
*ctx)
 {
   if(condition & G_IO_IN)
-    lsq_parser_parse(ctx->parser, ctx->ctx);
+    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);
@@ -271,11 +274,12 @@
 
 static void lsq_command_entry_start(LSQCommandEntry *entry, LSQExecuteContext 
*ctx)
 {
+  GError *error = NULL;
   gint fd_in = FALSE;
   gint fd_out = TRUE;
-  GIOChannel *redir_in;
+  GIOChannel *redir_in = NULL;
   GIOChannel *chan_in;
-  GIOChannel *redir_out;
+  //GIOChannel *redir_out;
   GIOChannel *chan_out;
   gchar **argv;
   GPid pid;
@@ -294,15 +298,31 @@
   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;
   }
 
   argv = lsq_command_entry_to_argv(entry, ctx);
 
-  g_spawn_async_with_pipes(NULL, argv, NULL, flags, NULL, NULL, &pid, 
fd_in?&fd_in:NULL, fd_out?&fd_out:NULL, NULL, NULL);
+  g_debug("command: %s", argv[0]);
 
+  gchar **argvi = argv;
+  while (argvi[1])
+  {
+    g_debug("arg: '%s'", argvi[1]);
+    argvi++;
+  }
+
+  if(!g_spawn_async_with_pipes(NULL, argv, NULL, flags, NULL, NULL, &pid, 
fd_in?&fd_in:NULL, fd_out?&fd_out:NULL, NULL, &error))
+  {
+    g_debug("spawn failed: %s", error->message);
+    g_error_free(error);
+    return;
+  }
+
+  g_strfreev(argv);
+
   g_child_watch_add(pid, (GChildWatchFunc)child_exit, ctx);
   ctx->state |= LSQ_EXEC_CTX_STATE_RUNNING;
 

Modified: squeeze/trunk/libsqueeze/parser-context.c
===================================================================
--- squeeze/trunk/libsqueeze/parser-context.c   2008-07-07 20:21:25 UTC (rev 
27233)
+++ squeeze/trunk/libsqueeze/parser-context.c   2008-07-07 23:01:09 UTC (rev 
27234)
@@ -116,3 +116,9 @@
   return ctx->last_stat == G_IO_STATUS_NORMAL || ctx->last_stat == 
G_IO_STATUS_AGAIN;
 }
 
+gboolean
+lsq_parser_context_read_again(LSQParserContext *ctx)
+{
+  return ctx->last_stat == G_IO_STATUS_NORMAL;
+}
+

Modified: squeeze/trunk/libsqueeze/parser-context.h
===================================================================
--- squeeze/trunk/libsqueeze/parser-context.h   2008-07-07 20:21:25 UTC (rev 
27233)
+++ squeeze/trunk/libsqueeze/parser-context.h   2008-07-07 23:01:09 UTC (rev 
27234)
@@ -63,6 +63,12 @@
 
 gboolean                 lsq_parser_context_get_line (LSQParserContext *, 
gchar **, gsize *);
 
+gboolean      lsq_parser_context_is_good  (LSQParserContext *);
+
+gboolean      lsq_parser_context_read_again(LSQParserContext *);
+
+void          lsq_parser_context_set_channel(LSQParserContext *, GIOChannel *);
+
 G_END_DECLS
 
 #endif /* __LIBSQUEEZE_PARSER_CONTEXT_H__ */

Modified: squeeze/trunk/libsqueeze/scanf-parser.c
===================================================================
--- squeeze/trunk/libsqueeze/scanf-parser.c     2008-07-07 20:21:25 UTC (rev 
27233)
+++ squeeze/trunk/libsqueeze/scanf-parser.c     2008-07-07 23:01:09 UTC (rev 
27234)
@@ -99,7 +99,7 @@
        ctx = g_object_new(lsq_scanf_parser_context_get_type(), "archive", 
archive, NULL);
   guint n_props = lsq_parser_n_properties(LSQ_PARSER(parser));
   ctx->data_store = g_new0(union _data_store, n_props);
-  ctx->props_store = g_new0(gpointer, n_props);
+  ctx->props_store = g_new0(gpointer, n_props+1);
 
   return LSQ_PARSER_CONTEXT(ctx);
 }
@@ -170,16 +170,24 @@
 guint skip_char(gchar *str, guint lng, parse_part *part, LSQScanfParserContext 
*ctx)
 {
   const gchar *ptr;
+  const gchar *delim;
 
   if(!lng)
     return 0;
 
-  if(!part->delimiter)
+  delim = part->delimiter;
+  if(!delim && !part->next)
+    delim = "\n";
+
+  if(!delim)
     return 1;
 
   //for(ptr = str; g_ascii_isspace(*ptr); ptr++);
 
-  ptr = g_strstr_len(str, lng, part->delimiter);
+  ptr = g_strstr_len(str, lng, delim);
+
+  if(!ptr)
+    return 0;
   
   return ptr - str;
 }
@@ -190,11 +198,16 @@
 #ifdef DO_EXSTENSIVE_CHECKING
   gchar *ptr2;
 #endif
+  const gchar *delim;
 
   if(!lng)
     return 0;
 
-  if(!part->delimiter[0])
+  delim = part->delimiter;
+  if(!delim && !part->next)
+    delim = "\n";
+
+  if(!delim[0])
   {
     g_ascii_strtoll(str, &ptr, 10);
     return ptr - str;
@@ -202,7 +215,10 @@
 
   for(ptr = str; g_ascii_isspace(*ptr); ptr++);
 
-  ptr = g_strstr_len(ptr, lng, part->delimiter);
+  ptr = g_strstr_len(ptr, lng, delim);
+
+  if(!ptr)
+    return 0;
 #ifdef DO_EXSTENSIVE_CHECKING
   g_ascii_strtoll(str, &ptr2, 10);
   if(ptr > ptr2)
@@ -218,11 +234,16 @@
 #ifdef DO_EXSTENSIVE_CHECKING
   gchar *ptr2;
 #endif
+  const gchar *delim;
 
   if(!lng)
     return 0;
 
-  if(!part->delimiter[0])
+  delim = part->delimiter;
+  if(!delim && !part->next)
+    delim = "\n";
+
+  if(!delim[0])
   {
     g_ascii_strtod(str, &ptr);
     return ptr - str;
@@ -230,7 +251,10 @@
 
   for(ptr = str; g_ascii_isspace(*ptr); ptr++);
 
-  ptr = g_strstr_len(ptr, lng, part->delimiter);
+  ptr = g_strstr_len(ptr, lng, delim);
+
+  if(!ptr)
+    return 0;
 #ifdef DO_EXSTENSIVE_CHECKING
   g_ascii_strtod(str, &ptr2);
   if(ptr > ptr2)
@@ -246,11 +270,16 @@
 #ifdef DO_EXSTENSIVE_CHECKING
   gchar *ptr2;
 #endif
+  const gchar *delim;
 
   if(!lng)
     return 0;
 
-  if(!part->delimiter[0])
+  delim = part->delimiter;
+  if(!delim && !part->next)
+    delim = "\n";
+
+  if(!delim[0])
   {
     g_ascii_strtoll(str, &ptr, 010);
     return ptr - str;
@@ -258,7 +287,10 @@
 
   for(ptr = str; g_ascii_isspace(*ptr); ptr++);
 
-  ptr = g_strstr_len(ptr, lng, part->delimiter);
+  ptr = g_strstr_len(ptr, lng, delim);
+
+  if(!ptr)
+    return 0;
 #ifdef DO_EXSTENSIVE_CHECKING
   g_ascii_strtoll(str, &ptr2, 010);
   if(ptr > ptr2)
@@ -271,16 +303,24 @@
 guint skip_string(gchar *str, guint lng, parse_part *part, 
LSQScanfParserContext *ctx)
 {
   gchar *ptr;
+  const gchar *delim;
 
   if(!lng)
     return 0;
 
-  if(!part->delimiter[0])
+  delim = part->delimiter;
+  if(!delim && !part->next)
+    delim = "\n";
+
+  if(!delim[0])
     return 0;
 
   for(ptr = str; g_ascii_isspace(*ptr); ptr++);
 
-  ptr = g_strstr_len(ptr, lng, part->delimiter);
+  ptr = g_strstr_len(ptr, lng, delim);
+
+  if(!ptr)
+    return 0;
   
   return ptr - str;
 }
@@ -291,17 +331,25 @@
 #ifdef DO_EXSTENSIVE_CHECKING
   gchar *ptr2;
 #endif
+  const gchar *delim;
 
   if(!lng)
     return 0;
 
-  if(!part->delimiter[0])
+  delim = part->delimiter;
+  if(!delim && !part->next)
+    delim = "\n";
+
+  if(!delim[0])
   {
     g_ascii_strtoull(str, &ptr, 10);
     return ptr - str;
   }
 
-  ptr = g_strstr_len(str, lng, part->delimiter);
+  ptr = g_strstr_len(str, lng, delim);
+
+  if(!ptr)
+    return 0;
 #ifdef DO_EXSTENSIVE_CHECKING
   g_ascii_strtoull(str, &ptr2, 10);
   if(ptr > ptr2)
@@ -317,17 +365,25 @@
 #ifdef DO_EXSTENSIVE_CHECKING
   gchar *ptr2;
 #endif
+  const gchar *delim;
 
   if(!lng)
     return 0;
 
-  if(!part->delimiter[0])
+  delim = part->delimiter;
+  if(!delim && !part->next)
+    delim = "\n";
+
+  if(!delim[0])
   {
     g_ascii_strtoll(str, &ptr, 0x10);
     return ptr - str;
   }
 
-  ptr = g_strstr_len(str, lng, part->delimiter);
+  ptr = g_strstr_len(str, lng, delim);
+
+  if(!ptr)
+    return 0;
 #ifdef DO_EXSTENSIVE_CHECKING
   g_ascii_strtoll(str, &ptr2, 0x10);
   if(ptr > ptr2)
@@ -357,16 +413,20 @@
   gchar *ptr2;  \
   type  val;  \
   ptype *pval;  \
+  const gchar *delim; \
   if(!lng) return 0;  \
+  delim = part->delimiter; \
+  if(!delim && !part->next) delim = "\n"; \
   pval = &ctx->data_store[part->index].pname; \
   ctx->props_store[part->index] = pval; \
-  if(!part->delimiter[0]) { \
+  if(!delim[0]) { \
     val = g_ascii_strtoll(str, &ptr, base); \
-  *pval = val;  \
+    *pval = val;  \
     return ptr - str; \
   } \
   for(ptr = str; g_ascii_isspace(*ptr); ptr++);   \
-  ptr = g_strstr_len(ptr, lng, part->delimiter);  \
+  ptr = g_strstr_len(ptr, lng, delim);  \
+  if(!ptr) return 0; \
   val = g_ascii_strtoll(str, &ptr2, base);  \
   *pval = val;  \
   if(ptr > ptr2) return 0;  \
@@ -379,16 +439,20 @@
   gchar *ptr2;  \
   type  val;  \
   type  *pval;  \
+  const gchar *delim; \
   if(!lng) return 0;  \
+  delim = part->delimiter; \
+  if(!delim && !part->next) delim = "\n"; \
   pval = &ctx->data_store[part->index].pname; \
   ctx->props_store[part->index] = pval; \
-  if(!part->delimiter[0]) { \
+  if(!delim[0]) { \
     val = g_ascii_strtod(str, &ptr);  \
-  *pval = val;  \
+    *pval = val;  \
     return ptr - str; \
   } \
   for(ptr = str; g_ascii_isspace(*ptr); ptr++);   \
-  ptr = g_strstr_len(ptr, lng, part->delimiter);  \
+  ptr = g_strstr_len(ptr, lng, delim);  \
+  if(!ptr) return 0; \
   val = g_ascii_strtod(str, &ptr2); \
   *pval = val;  \
   if(ptr > ptr2) return 0;  \
@@ -401,16 +465,20 @@
   gchar *ptr2;  \
   type  val;  \
   ptype *pval;  \
+  const gchar *delim; \
   if(!lng) return 0;  \
+  delim = part->delimiter; \
+  if(!delim && !part->next) delim = "\n"; \
   pval = &ctx->data_store[part->index].pname; \
   ctx->props_store[part->index] = pval; \
-  if(!part->delimiter[0]) { \
+  if(!delim[0]) { \
     val = g_ascii_strtoull(str, &ptr, base); \
-  *pval = val;  \
+    *pval = val;  \
     return ptr - str; \
   } \
   for(ptr = str; g_ascii_isspace(*ptr); ptr++);   \
-  ptr = g_strstr_len(ptr, lng, part->delimiter);  \
+  ptr = g_strstr_len(ptr, lng, delim);  \
+  if(!ptr) return 0; \
   val = g_ascii_strtoull(str, &ptr2, base);  \
   *pval = val;  \
   if(ptr > ptr2) return 0;  \
@@ -427,24 +495,32 @@
   const gchar *ptr;
   gchar val;
   gchar *pval;
+  const gchar *delim;
 
   if(!lng)
     return 0;
 
+  delim = part->delimiter;
+  if(!delim && !part->next)
+    delim = "\n";
+
   pval = &ctx->data_store[part->index].c;
   ctx->props_store[part->index] = pval;
 
-  if(!part->delimiter[0])
+  if(!delim[0])
   {
-  val = *str;
-  *pval = val;
+    val = *str;
+    *pval = val;
     return 1;
   }
 
   //for(ptr = str; g_ascii_isspace(*ptr); ptr++);
 
-  ptr = g_strstr_len(str, lng, part->delimiter);
+  ptr = g_strstr_len(str, lng, delim);
 
+  if(!ptr)
+    return 0;
+
   //FIXME?
   val = *(ptr-1);
   *pval = val;
@@ -469,19 +545,27 @@
 {
   gchar *ptr;
   gchar *cur;
+  const gchar *delim;
 
   if(!lng)
     return 0;
 
-  if(!part->delimiter[0])
+  delim = part->delimiter;
+  if(!delim && !part->next)
+    delim = "\n";
+
+  if(!delim[0])
     return 0;
 
   for(cur = str; g_ascii_isspace(*cur); cur++);
 
-  ptr = g_strstr_len(cur, lng, part->delimiter);
+  ptr = g_strstr_len(cur, lng, delim);
 
-  ctx->props_store[part->index] = g_strndup(cur, ptr-cur);
+  if(!ptr)
+    return 0;
 
+  g_debug("string: %s", (gchar*)(ctx->props_store[part->index] = 
g_strndup(cur, ptr-cur)));
+
   return ptr - str;
 }
 
@@ -498,15 +582,24 @@
 guint parse_filename(gchar *str, guint lng, parse_part *part, 
LSQScanfParserContext *ctx)
 {
   gchar *ptr;
+  const gchar *delim;
 
   if(!lng)
     return 0;
 
-  if(!part->delimiter)
-    return 1;
+  delim = part->delimiter;
 
-  ptr = g_strstr_len(str, lng, part->delimiter);
+  if(!delim && !part->next)
+    delim = "\n";
 
+  if(!delim[0])
+    return 0;
+
+  ptr = g_strstr_len(str, lng, delim);
+
+  if(!ptr)
+    return 0;
+
   ctx->filename = g_strndup(str, ptr-str);
 
   return ptr - str;
@@ -1030,14 +1123,22 @@
   gchar *line, *ptr;
   gsize line_length, lng;
   guint size, line_nr;
+  parse_part *part;
   if(!lsq_parser_context_get_line(LSQ_PARSER_CONTEXT(ctx), &line, 
&line_length))
     return;
 
+
   ptr = line;
   lng = line_length;
   line_nr = ctx->parse_line;
+  part = ctx->parse_loc;
 
-  parse_part *part = ctx->parse_loc;
+  if(!part)
+  {
+    ctx->parse_loc = part = parser->parser;
+    ctx->parse_line = line_nr = 0;
+  }
+
   while(part)
   {
     //parse
@@ -1066,37 +1167,43 @@
 
     if(part->delimiter)
     {
-        if(!g_str_has_prefix(ptr, part->delimiter))
+      if(!g_str_has_prefix(ptr, part->delimiter))
+      {
+        //no match
+        if(line_nr)
         {
-          //no match
-          if(line_nr)
-          {
-            ptr = line;
-            lng = line_length;
-            part = parser->parser;
-            line_nr = 0;
-            continue;
-          }
-          ctx->parse_loc = parser->parser;
-          ctx->parse_line = 0;
-          g_free(line);
-          return;
+          ptr = line;
+          lng = line_length;
+          part = parser->parser;
+          line_nr = 0;
+          continue;
         }
+        ctx->parse_loc = parser->parser;
+        ctx->parse_line = 0;
+        g_free(line);
+        return;
+      }
+
+      size = strlen(part->delimiter);
+      if(size > lng)
+        size = lng;
+      ptr += size;
+      lng -= size;
     }
 
     if(part->delimiter)
     {
-        if(g_str_has_suffix(part->delimiter, "\n"))
+      if(g_str_has_suffix(part->delimiter, "\n"))
+      {
+        //next line
+        if(part->next)
         {
-          //next line
-          if(part->next)
-          {
-            ctx->parse_loc = part->next;
-            ctx->parse_line = line_nr+1;
-            g_free(line);
-            return;
-          }
+          ctx->parse_loc = part->next;
+          ctx->parse_line = line_nr+1;
+          g_free(line);
+          return;
         }
+      }
     }
     
     part = part->next;
@@ -1106,6 +1213,7 @@
 
   if(!part)
   {
+    g_debug("file: %s", ctx->filename);
     LSQArchiveIter *iter = 
lsq_archive_add_file(LSQ_PARSER_CONTEXT(ctx)->archive, ctx->filename);
     lsq_archive_iter_set_propsv(iter, ctx->props_store);
     lsq_archive_iter_unref(iter);

_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to