gnome-utils r8233 - trunk/logview



Author: cosimoc
Date: Tue Dec 23 13:25:39 2008
New Revision: 8233
URL: http://svn.gnome.org/viewvc/gnome-utils?rev=8233&view=rev

Log:
Move the lines cache to the log itself. More fixage in LogviewWindow.

Modified:
   trunk/logview/logview-log.c
   trunk/logview/logview-log.h
   trunk/logview/logview-manager.c
   trunk/logview/logview-manager.h
   trunk/logview/logview.c

Modified: trunk/logview/logview-log.c
==============================================================================
--- trunk/logview/logview-log.c	(original)
+++ trunk/logview/logview-log.c	Tue Dec 23 13:25:39 2008
@@ -48,6 +48,11 @@
   goffset file_size;
   char *display_name;
 
+  /* lines and relative days */
+  GSList *days;
+  GPtrArray *lines;
+  guint lines_no;
+
   /* stream poiting to the log */
   GDataInputStream *stream;
 };
@@ -62,7 +67,7 @@
 typedef struct {
   LogviewLog *log;
   GError *err;
-  char **lines;
+  const char **lines;
   LogviewNewLinesCallback callback;
   gpointer user_data;
 } NewLinesJob;
@@ -71,13 +76,24 @@
 do_finalize (GObject *obj)
 {
   LogviewLog *log = LOGVIEW_LOG (obj);
+  char ** lines;
 
-  if (log->priv->stream)
+  if (log->priv->stream) {
     g_object_unref (log->priv->stream);
-  if (log->priv->file)
+  }
+
+  if (log->priv->file) {
     g_object_unref (log->priv->file);
-  if (log->priv->mon)
+  }
+
+  if (log->priv->mon) {
     g_object_unref (log->priv->mon);
+  }
+
+  if (log->priv->lines) {
+    lines = (char **) g_ptr_array_free (log->priv->lines, FALSE);
+    g_strfreev (lines);
+  }
 
   G_OBJECT_CLASS (logview_log_parent_class)->finalize (obj);
 }
@@ -104,6 +120,13 @@
 logview_log_init (LogviewLog *self)
 {
   self->priv = GET_PRIVATE (self);
+
+  self->priv->lines = g_ptr_array_new ();
+  g_ptr_array_add (self->priv->lines, NULL);
+  self->priv->lines_no = 0;
+  self->priv->days = NULL;
+  self->priv->file = NULL;
+  self->priv->mon = NULL;
 }
 
 static void
@@ -171,30 +194,37 @@
   /* this runs in a separate thread */
   NewLinesJob *job = user_data;
   LogviewLog *log = job->log;
-  GPtrArray *lines;
   char *line;
+  guint old_size;
   GError *err = NULL;
+  GPtrArray *lines = log->priv->lines;
 
   g_assert (LOGVIEW_IS_LOG (log));
   g_assert (log->priv->stream != NULL);
 
-  lines = g_ptr_array_new ();
+  /* remove the NULL-terminator */
+  g_ptr_array_remove_index (lines, lines->len);
+
   while ((line = g_data_input_stream_read_line (log->priv->stream, NULL,
-                                               NULL, &err)) != NULL)
+                                                NULL, &err)) != NULL)
   {
     g_ptr_array_add (lines, (gpointer) line);
   }
 
   if (err) {
-    g_ptr_array_free (lines, TRUE);
     job->err = err;
     goto out;
   }
 
-  /* NULL-terminate the array */
+  /* NULL-terminate the array again */
   g_ptr_array_add (lines, NULL);
 
-  job->lines = (char **) g_ptr_array_free (lines, FALSE);
+  /* we'll return only the new lines in the callback */
+  line = g_ptr_array_index (lines, log->priv->lines_no + 1);
+  job->lines = (const char **) &line;
+
+  /* save the new number of lines */
+  log->priv->lines_no = (lines->len - 1);
 
 out:
   g_io_scheduler_job_send_to_mainloop_async (io_job,
@@ -365,4 +395,24 @@
   g_assert (LOGVIEW_IS_LOG (log));
 
   return log->priv->file_size;
+}
+
+guint
+logview_log_get_cached_lines_number (LogviewLog *log)
+{
+  g_assert (LOGVIEW_IS_LOG (log));
+
+  return log->priv->lines_no;
+}
+
+const char **
+logview_log_get_cached_lines (LogviewLog *log)
+{
+  const char ** lines;
+
+  g_assert (LOGVIEW_IS_LOG (log));
+
+  lines = (const char **) log->priv->lines->pdata;
+
+  return lines;
 }
\ No newline at end of file

Modified: trunk/logview/logview-log.h
==============================================================================
--- trunk/logview/logview-log.h	(original)
+++ trunk/logview/logview-log.h	Tue Dec 23 13:25:39 2008
@@ -50,7 +50,7 @@
                                         GError *error,
                                         gpointer user_data);
 typedef void (* LogviewNewLinesCallback) (LogviewLog *log,
-                                          char **lines,
+                                          const char **lines,
                                           GError *error,
                                           gpointer user_data);
 
@@ -77,15 +77,20 @@
 
 /* public methods */
 
-void logview_log_create         (const char *filename,
-                                 LogviewCreateCallback callback,
-                                 gpointer user_data);
-void logview_log_read_new_lines (LogviewLog *log,
-                                 LogviewNewLinesCallback callback,
-                                 gpointer user_data);
-const char * logview_log_get_display_name (LogviewLog *log);
-gulong logview_log_get_timestamp (LogviewLog *log);
-goffset logview_log_get_file_size (LogviewLog *log);
+/* these two do I/O, so they are wrapped async */
+void          logview_log_create                   (const char *filename,
+                                                    LogviewCreateCallback callback,
+                                                    gpointer user_data);
+void          logview_log_read_new_lines           (LogviewLog *log,
+                                                    LogviewNewLinesCallback callback,
+                                                    gpointer user_data);
+
+const char *  logview_log_get_display_name          (LogviewLog *log);
+gulong        logview_log_get_timestamp             (LogviewLog *log);
+goffset       logview_log_get_file_size             (LogviewLog *log);
+const char ** logview_log_get_cached_lines          (LogviewLog *log);
+guint         logview_log_get_cached_lines_number   (LogviewLog *log);
+GSList *      logview_log_get_days_for_cached_lines (LogviewLog *log);
 
 G_END_DECLS
 

Modified: trunk/logview/logview-manager.c
==============================================================================
--- trunk/logview/logview-manager.c	(original)
+++ trunk/logview/logview-manager.c	Tue Dec 23 13:25:39 2008
@@ -25,7 +25,6 @@
 enum {
   LOG_ADDED,
   LOG_CLOSED,
-  LOG_CHANGED,
   LOG_ADD_ERROR,
   ACTIVE_CHANGED,
   LAST_SIGNAL
@@ -47,18 +46,10 @@
 
 struct _LogviewManagerPrivate {
   GHashTable *logs;
-  GHashTable *lines_cache;
   LogviewLog *active_log;
 };
 
 static void
-lines_destroy_notify (GPtrArray *array)
-{
-  char **lines = (char **) g_ptr_array_free (array, FALSE);
-  g_strfreev (lines);
-}
-
-static void
 logview_manager_finalize (GObject *object)
 {
   LogviewManager *manager;
@@ -70,7 +61,6 @@
   }
 
   g_hash_table_destroy (manager->priv->logs);
-  g_hash_table_destroy (manager->priv->lines_cache);
   
   G_OBJECT_CLASS (logview_manager_parent_class)->finalize (object);
 }
@@ -100,15 +90,6 @@
                                       G_TYPE_NONE, 1,
                                       LOGVIEW_TYPE_LOG);
 
-  signals[LOG_CHANGED] = g_signal_new ("log-changed",
-                                       G_OBJECT_CLASS_TYPE (object_class),
-                                       G_SIGNAL_RUN_LAST,
-                                       G_STRUCT_OFFSET (LogviewManagerClass, log_changed),
-                                       NULL, NULL,
-                                       g_cclosure_marshal_VOID__VOID,
-                                       G_TYPE_NONE, 1,
-                                       LOGVIEW_TYPE_LOG);
-
   signals[LOG_ADD_ERROR] = g_signal_new ("log-add-error",
                                          G_OBJECT_CLASS_TYPE (object_class),
                                          G_SIGNAL_RUN_LAST,
@@ -138,17 +119,6 @@
   priv->active_log = NULL;
   priv->logs = g_hash_table_new_full (g_str_hash, g_str_equal, 
                                       NULL, (GDestroyNotify) g_object_unref);
-  priv->lines_cache = g_hash_table_new_full (g_direct_hash, g_direct_equal,
-                                             NULL, (GDestroyNotify) lines_destroy_notify);
-}
-
-static void
-log_changed_cb (LogviewLog *log,
-                gpointer user_data)
-{
-  LogviewManager *manager = user_data;
-
-  g_signal_emit (manager, signals[LOG_CHANGED], 0, log, NULL);
 }
 
 static void
@@ -162,9 +132,6 @@
     /* creation went well, store the log and notify */
     g_hash_table_insert (data->manager->priv->logs, data->filename, log);
 
-    g_signal_connect (log, "log-changed",
-                      G_CALLBACK (log_changed_cb), data->manager);
-
     g_signal_emit (data->manager, signals[LOG_ADDED], 0, log, NULL);
 
     if (data->set_active) {
@@ -194,44 +161,6 @@
   return FALSE;
 }
 
-static void
-log_new_lines_cb (LogviewLog *log,
-                  char **lines,
-                  GError *error,
-                  gpointer user_data)
-{
-  LogviewManager *manager = user_data;
-  LogviewManagerPrivate *priv = manager->priv;
-  GPtrArray *arr;
-  int i;
-
-  if (error) {
-    /* TODO: handle this */
-    return;
-  }
-
-  arr = g_hash_table_lookup (priv->lines_cache, log);
-  if (!arr) {
-    arr = g_ptr_array_new ();
-    g_hash_table_insert (priv->lines_cache, log, arr);
-  }
-  for (i = 0; i; i++) {
-    g_ptr_array_add (arr, lines[i]);
-  }
-
-  g_signal_emit (singleton, signals[LOG_CHANGED], 0, log, NULL);
-}
-
-static void
-active_log_changed_cb (LogviewLog *log,
-                       gpointer user_data)
-{
-  LogviewManager *manager = user_data;
-  gboolean first_read = FALSE;
-
-  logview_log_read_new_lines (log, log_new_lines_cb, &first_read);
-}
-
 /* public methods */
 
 LogviewManager*
@@ -259,10 +188,6 @@
   manager->priv->active_log = g_object_ref (log);
 
   g_signal_emit (manager, signals[ACTIVE_CHANGED], 0, log, NULL);
-
-  logview_log_read_new_lines (log, log_new_lines_cb, manager);
-
-  /* we will emit the "active-changed" signal when we have the new lines */  
 }
 
 LogviewLog *
@@ -346,8 +271,6 @@
 
   /* we own two refs to the active log; one is inside the hash table */
   g_object_unref (active_log);
-  g_hash_table_remove (manager->priv->lines_cache, active_log);
-  g_signal_handlers_disconnect_by_func (active_log, active_log_changed_cb, manager);
 
   g_hash_table_find (manager->priv->logs,
                      (GHRFunc) look_for_log,
@@ -356,25 +279,6 @@
   /* someone else will take care of setting the next active log to us */
 }
 
-const char **
-logview_manager_get_lines_for_active_log (LogviewManager *manager)
-{
-  const char **retval;
-  GPtrArray *arr;
-
-  g_assert (LOGVIEW_IS_MANAGER (manager));
-
-  arr = g_hash_table_lookup (manager->priv->lines_cache, manager->priv->active_log);
-  if (!arr) {
-    /* why? */
-    return NULL;
-  }
-
-  retval = (const char **) arr->pdata;
-
-  return retval;
-}
-
 gboolean
 logview_manager_log_is_active (LogviewManager *manager,
                                LogviewLog *log)

Modified: trunk/logview/logview-manager.h
==============================================================================
--- trunk/logview/logview-manager.h	(original)
+++ trunk/logview/logview-manager.h	Tue Dec 23 13:25:39 2008
@@ -57,8 +57,6 @@
                       LogviewLog *log);
   void (* log_closed) (LogviewManager *manager,
                        LogviewLog *log);
-  void (* log_changed) (LogviewManager *manager,
-                        LogviewLog *log);
   void (* log_add_error) (LogviewManager *manager,
                           char *filename);
   void (* active_changed) (LogviewManager *manager,
@@ -82,7 +80,6 @@
 LogviewLog *    logview_manager_get_if_loaded       (LogviewManager *manager,
                                                      char *filename);
 void            logview_manager_close_active_log    (LogviewManager *manager);
-const char **   logview_manager_get_lines_for_active_log (LogviewManager *manager);
 
 G_END_DECLS
 

Modified: trunk/logview/logview.c
==============================================================================
--- trunk/logview/logview.c	(original)
+++ trunk/logview/logview.c	Tue Dec 23 13:25:39 2008
@@ -823,12 +823,6 @@
   gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
 
   /* Add signal handlers */
-  g_signal_connect (selection, "changed",
-                    G_CALLBACK (selection_changed_cb), logview);
-  g_signal_connect (priv->view, "row-expanded",
-                    G_CALLBACK (row_toggled_cb), logview);
-  g_signal_connect (priv->view, "row-collapsed",
-                    G_CALLBACK (row_toggled_cb), logview);
   g_signal_connect (logview, "configure_event",
                     G_CALLBACK (window_size_changed_cb), logview);
   g_signal_connect (priv->prefs, "system-font-changed",



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]