Git-Url:
http://git.frugalware.org/gitweb/gitweb.cgi?p=gfpm.git;a=commitdiff;h=f583761a904c9350980075709bd381249f29e080
commit f583761a904c9350980075709bd381249f29e080
Author: Priyank <[EMAIL PROTECTED]>
Date: Sun Jan 27 16:28:36 2008 +0530
gfpm-logviewer: good! we have a partially working pacman-g2 log viewer
diff --git a/src/gfpm-interface.c b/src/gfpm-interface.c
index a697ffe..7748e55 100644
--- a/src/gfpm-interface.c
+++ b/src/gfpm-interface.c
@@ -42,6 +42,7 @@
#include "gfpm-quickpane.h"
#include "gfpm-icmonitor.h"
#include "gfpm-repomanager.h"
+#include "gfpm-logviewer.h"
#include "gfpm-util.h"
#include "gfpm-about.h"
#include "gfpm-db.h"
@@ -268,6 +269,9 @@ gfpm_interface_init (void)
/* about */
g_signal_connect (G_OBJECT(glade_xml_get_widget(xml, "about_gfpm1")),
"activate", G_CALLBACK(gfpm_about), NULL);
+ /* syslog */
+ g_signal_connect (G_OBJECT(glade_xml_get_widget(xml, "syslog1")),
"activate", G_CALLBACK(gfpm_logviewer_show), NULL);
+
/* repository manager */
g_signal_connect (G_OBJECT(glade_xml_get_widget(xml, "repos")), "activate",
G_CALLBACK(gfpm_repomanager_show), NULL);
@@ -300,7 +304,8 @@ gfpm_interface_init (void)
gfpm_quickpane_init ();
gfpm_icmonitor_init ();
gfpm_repomanager_init ();
-
+ gfpm_logviewer_init ();
+
gtk_widget_hide (gfpm_splash);
title = g_strdup_printf ("%s (%s)", PACKAGE_STRING, GFPM_RELEASE_NAME);
gtk_window_set_title (GTK_WINDOW(gfpm_mw), title);
diff --git a/src/gfpm-logviewer.c b/src/gfpm-logviewer.c
index 6d25925..ee5e170 100644
--- a/src/gfpm-logviewer.c
+++ b/src/gfpm-logviewer.c
@@ -22,22 +22,162 @@
#include "gfpm-messages.h"
#include <glib.h>
+typedef struct _LogViewItem
+{
+ gchar *label;
+ GList *children;
+} LogViewItem;
+
#define LOG_FILE "/var/log/pacman-g2.log"
extern GladeXML *xml;
+int getdate_err;
/* Log viewer widgets */
+static GtkWidget *gfpm_logviewer_dlg;
+static GtkWidget *gfpm_logviewer_tvw;
+static GtkWidget *gfpm_logviewer_txtvw;
+
+static void _gfpm_logviewer_populate (void);
void
gfpm_logviewer_init (void)
{
+ gint col_offset;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+
+ gfpm_logviewer_dlg = glade_xml_get_widget (xml, "syslog_window");
+ gfpm_logviewer_tvw = glade_xml_get_widget (xml, "log_tvw");
+ gfpm_logviewer_txtvw = glade_xml_get_widget (xml, "log_txtvw");
+
+ renderer = gtk_cell_renderer_text_new ();
+ g_object_set (renderer, "xalign", 0.0, NULL);
+ col_offset = gtk_tree_view_insert_column_with_attributes
(GTK_TREE_VIEW (gfpm_logviewer_tvw),
+ -1, "Month / Year",
+ renderer, "text",
+ 0,
+ NULL);
+ column = gtk_tree_view_get_column (GTK_TREE_VIEW (gfpm_logviewer_tvw),
col_offset - 1);
+ gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column),
TRUE);
+
return;
}
void
gfpm_logviewer_show ()
{
+ gtk_widget_show (gfpm_logviewer_dlg);
+ _gfpm_logviewer_populate ();
+
+ return;
+}
+
+static void
+_gfpm_logviewer_populate (void)
+{
+ FILE *fp = NULL;
+ char line[PATH_MAX+1] = "";
+ int prev_day = -1;
+ int prev_month = -1;
+ int prev_year = -1;
+ GtkTreeStore *store;
+ GtkTreeIter iter;
+ GList *master = NULL;
+ GList *child = NULL;
+ LogViewItem *li = NULL;
+
+ if ((fp=fopen(LOG_FILE,"r"))==NULL)
+ {
+ gfpm_error (_("Error"), _("Error opening log file."));
+ return;
+ }
+ while (fgets(line,PATH_MAX,fp))
+ {
+ char *ptr = NULL;
+
+ fwutil_trim (line);
+ if (!strlen(line))
+ continue;
+ if (line[0] == '[' && line[15] == ']')
+ {
+ int i;
+ struct tm *t;
+
+ ptr = line;
+ ptr++;
+ ptr[14] = 0;
+ t = getdate (ptr);
+ if (t!=NULL)
+ {
+ if (prev_year != (t->tm_year+1900))
+ {
+ prev_year = (t->tm_year+1900);
+ if (prev_month != (t->tm_mon+1))
+ {
+ char day[64] = "";
+ strftime (day, 64, "%B %Y", t);
+ prev_month = t->tm_mon+1;
+ li = (LogViewItem*)
malloc(sizeof(LogViewItem));
+
+ prev_month = t->tm_mon+1;
+ li->label = g_strdup (day);
+ li->children = NULL;
+ master = g_list_append (master,
(gpointer)li);
+ }
+ }
+ if (prev_month != (t->tm_mon+1))
+ {
+ char day[64] = "";
+ strftime (day, 64, "%B %Y", t);
+ li = (LogViewItem*)
malloc(sizeof(LogViewItem));
+ prev_month = t->tm_mon+1;
+ li->label = g_strdup (day);
+ li->children = NULL;
+ master = g_list_append (master,
(gpointer)li);
+ }
+ if (prev_day != t->tm_mday)
+ {
+ char day[64] = "";
+ strftime (day, 64, "%a %d %b %Y", t);
+ li->children = g_list_append
(li->children, (gpointer)(g_strdup(day)));
+ prev_day = t->tm_mday;
+ }
+ while (gtk_events_pending())
+ gtk_main_iteration ();
+ }
+ else
+ {
+ printf ("ERROR: getdate() failed with error
code: %d\n", getdate_err);
+ }
+ }
+ }
+ fclose (fp);
+
+ /* add the master list */
+ store = gtk_tree_store_new (1, G_TYPE_STRING);
+
+ while (master != NULL)
+ {
+ LogViewItem *m = master->data;
+ //printf ("SECTION : %s\n", m->label);
+ gtk_tree_store_append (store, &iter, NULL);
+ gtk_tree_store_set (store, &iter, 0, m->label, -1);
+ /* add children */
+ GList *child = m->children;
+ while (child != NULL)
+ {
+ GtkTreeIter child_iter;
+ //printf ("\tSUB: %s\n", child->data);
+ gtk_tree_store_append (store, &child_iter, &iter);
+ gtk_tree_store_set (store, &child_iter, 0, child->data,
-1);
+ child = g_list_next (child);
+ }
+ master = g_list_next (master);
+ }
+ gtk_tree_view_set_model (GTK_TREE_VIEW(gfpm_logviewer_tvw),
GTK_TREE_MODEL(store));
+
return;
}
diff --git a/src/gfpm-logviewer.h b/src/gfpm-logviewer.h
index 0f16751..50c45a1 100644
--- a/src/gfpm-logviewer.h
+++ b/src/gfpm-logviewer.h
@@ -8,8 +8,6 @@
#include <locale.h>
#include <libintl.h>
#include <gtk/gtk.h>
-#include <libfwutil.h>
-#include "gfpm.h"
void gfpm_logviewer_init (void);
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git