gnome-utils r8233 - trunk/logview
- From: cosimoc svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-utils r8233 - trunk/logview
- Date: Tue, 23 Dec 2008 13:25:39 +0000 (UTC)
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]