r2695 - in trunk/src/target/OM-2007.2/libraries/libmokojournal2: . mokojournal mokojournal-tool
njp at sita.openmoko.org
njp at sita.openmoko.org
Mon Aug 13 18:03:54 CEST 2007
Author: njp
Date: 2007-08-13 18:03:52 +0200 (Mon, 13 Aug 2007)
New Revision: 2695
Added:
trunk/src/target/OM-2007.2/libraries/libmokojournal2/mokojournal-tool/
trunk/src/target/OM-2007.2/libraries/libmokojournal2/mokojournal-tool/Makefile.am
trunk/src/target/OM-2007.2/libraries/libmokojournal2/mokojournal-tool/mokojournal-tool.c
Modified:
trunk/src/target/OM-2007.2/libraries/libmokojournal2/ChangeLog
trunk/src/target/OM-2007.2/libraries/libmokojournal2/Makefile.am
trunk/src/target/OM-2007.2/libraries/libmokojournal2/configure.ac
trunk/src/target/OM-2007.2/libraries/libmokojournal2/mokojournal/moko-journal.c
Log:
2007-08-13 Neil J. Patel <njp at o-hand.com>
* Makefile.am:
* configure.ac:
* mokojournal-tool/Makefile.am:
* mokojournal-tool/mokojournal-tool.c: (main), (_add), (_list):
Add a simple tool to query and manipulate the journal from the shell. It
will help with debugging. List method implemented so far.
* mokojournal/moko-journal.c: (moko_journal_load_from_storage),
If an error is detected, return FALSE.
(moko_journal_entry_has_voice_info):
Keep the type check inline, to avoid unnecessary throwing of warnings.
Modified: trunk/src/target/OM-2007.2/libraries/libmokojournal2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/libraries/libmokojournal2/ChangeLog 2007-08-13 15:54:20 UTC (rev 2694)
+++ trunk/src/target/OM-2007.2/libraries/libmokojournal2/ChangeLog 2007-08-13 16:03:52 UTC (rev 2695)
@@ -1,3 +1,17 @@
+2007-08-13 Neil J. Patel <njp at o-hand.com>
+
+ * Makefile.am:
+ * configure.ac:
+ * mokojournal-tool/Makefile.am:
+ * mokojournal-tool/mokojournal-tool.c: (main), (_add), (_list):
+ Add a simple tool to query and manipulate the journal from the shell. It
+ will help with debugging. List method implemented so far.
+
+ * mokojournal/moko-journal.c: (moko_journal_load_from_storage),
+ If an error is detected, return FALSE.
+ (moko_journal_entry_has_voice_info):
+ Keep the type check inline, to avoid unnecessary throwing of warnings.
+
2007-08-03 Neil J. Patel <njp at o-hand.com>
* mokojournal/moko-journal.c:
Modified: trunk/src/target/OM-2007.2/libraries/libmokojournal2/Makefile.am
===================================================================
--- trunk/src/target/OM-2007.2/libraries/libmokojournal2/Makefile.am 2007-08-13 15:54:20 UTC (rev 2694)
+++ trunk/src/target/OM-2007.2/libraries/libmokojournal2/Makefile.am 2007-08-13 16:03:52 UTC (rev 2695)
@@ -1,4 +1,4 @@
-SUBDIRS = mokojournal tests
+SUBDIRS = mokojournal mokojournal-tool tests
pcdata_DATA= libmokojournal2.pc
pcdatadir= $(libdir)/pkgconfig
Modified: trunk/src/target/OM-2007.2/libraries/libmokojournal2/configure.ac
===================================================================
--- trunk/src/target/OM-2007.2/libraries/libmokojournal2/configure.ac 2007-08-13 15:54:20 UTC (rev 2694)
+++ trunk/src/target/OM-2007.2/libraries/libmokojournal2/configure.ac 2007-08-13 16:03:52 UTC (rev 2695)
@@ -40,6 +40,7 @@
Makefile
libmokojournal2.pc
mokojournal/Makefile
+mokojournal-tool/Makefile
tests/Makefile
])
Modified: trunk/src/target/OM-2007.2/libraries/libmokojournal2/mokojournal/moko-journal.c
===================================================================
--- trunk/src/target/OM-2007.2/libraries/libmokojournal2/mokojournal/moko-journal.c 2007-08-13 15:54:20 UTC (rev 2694)
+++ trunk/src/target/OM-2007.2/libraries/libmokojournal2/mokojournal/moko-journal.c 2007-08-13 16:03:52 UTC (rev 2695)
@@ -1536,6 +1536,7 @@
g_warning ("got error %s\n", error->message) ;
g_error_free (error) ;
error = NULL ;
+ return FALSE;
}
if (objs)
{
@@ -2043,9 +2044,11 @@
moko_journal_entry_has_voice_info (MokoJournalEntry *entry)
{
g_return_val_if_fail (entry, FALSE);
-
- MokoJournalVoiceInfo *info = NULL;
- return moko_journal_entry_get_voice_info (entry, &info) && info;
+
+ if (entry->type == VOICE_JOURNAL_ENTRY)
+ return TRUE;
+ else
+ return FALSE;
}
gboolean
Added: trunk/src/target/OM-2007.2/libraries/libmokojournal2/mokojournal-tool/Makefile.am
===================================================================
--- trunk/src/target/OM-2007.2/libraries/libmokojournal2/mokojournal-tool/Makefile.am 2007-08-13 15:54:20 UTC (rev 2694)
+++ trunk/src/target/OM-2007.2/libraries/libmokojournal2/mokojournal-tool/Makefile.am 2007-08-13 16:03:52 UTC (rev 2695)
@@ -0,0 +1,7 @@
+bin_PROGRAMS=mokojournal-tool
+
+mokojournal_tool_SOURCES=mokojournal-tool.c
+mokojournal_tool_LDADD=@LIBS@ $(top_srcdir)/mokojournal/libmokojournal2.la
+
+INCLUDES= -I $(top_srcdir)/mokojournal
+
Added: trunk/src/target/OM-2007.2/libraries/libmokojournal2/mokojournal-tool/mokojournal-tool.c
===================================================================
--- trunk/src/target/OM-2007.2/libraries/libmokojournal2/mokojournal-tool/mokojournal-tool.c 2007-08-13 15:54:20 UTC (rev 2694)
+++ trunk/src/target/OM-2007.2/libraries/libmokojournal2/mokojournal-tool/mokojournal-tool.c 2007-08-13 16:03:52 UTC (rev 2695)
@@ -0,0 +1,369 @@
+/* vi: set sw=2: */
+/*
+ * Copyright (C) 2007 by OpenMoko, Inc.
+ * Written by OpenedHand Ltd <info at openedhand.com>
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include "moko-journal.h"
+
+static GMainLoop *mainloop = NULL;
+
+/* Forwards */
+static gboolean _list (MokoJournal *journal);
+static void _add (MokoJournal *journal);
+
+/* Command line params */
+static gchar *action = NULL;
+static gchar *type = NULL;
+static gchar *number = NULL;
+static gboolean missed = FALSE;
+static gchar *direction = NULL;
+
+static GOptionEntry entries[] =
+{
+ {
+ "action",
+ 'a', 0,
+ G_OPTION_ARG_STRING,
+ &action,
+ "The action to take [list|size]",
+ NULL
+ },
+ {
+ "type",
+ 't', 0,
+ G_OPTION_ARG_STRING,
+ &type,
+ "The type of entry [all|voice]",
+ NULL
+ },
+ {
+ "number",
+ 'n', 0,
+ G_OPTION_ARG_STRING,
+ &number,
+ "The number to add or search for",
+ NULL
+ },
+ {
+ "missed",
+ 'm', 0,
+ G_OPTION_ARG_NONE,
+ &missed,
+ "Whether the call was missed",
+ NULL
+ },
+ {
+ "direction",
+ 'd', 0,
+ G_OPTION_ARG_STRING,
+ &direction,
+ "The direction of the call",
+ NULL
+ }
+
+
+};
+
+
+int
+main (int argc, gchar *argv[])
+{
+ MokoJournal *journal = NULL;
+ GOptionContext *context;
+
+ g_type_init ();
+
+ /* Load options */
+ context = g_option_context_new (" - mokojournal-tool Options");
+ g_option_context_add_main_entries (context, entries, NULL);
+ g_option_context_parse (context, &argc, &argv, NULL);
+
+ /* Do the right thing */
+ if (!action)
+ {
+ g_print ("You must specify an action\n");
+ return EXIT_FAILURE;
+ }
+
+ /* Load the journal */
+ journal = moko_journal_open_default ();
+ g_return_val_if_fail (MOKO_IS_JOURNAL (journal), EXIT_FAILURE);
+
+ /* Load all journal entries from the journal on storage */
+ if (!moko_journal_load_from_storage (journal))
+ {
+ g_message ("Failed to load journal from storage\n") ;
+ return EXIT_FAILURE;
+ }
+
+ if (strcmp (action, "list") == 0)
+ {
+ g_timeout_add (5000, (GSourceFunc)_list, (gpointer)journal);
+ }
+ else if (strcmp (action, "size") == 0)
+ {
+ g_timeout_add (5000, (GSourceFunc)_list, (gpointer)journal);
+ }
+ else
+ {
+ g_print ("%s is not a valid action\n", action);
+ return EXIT_FAILURE;
+ }
+
+ mainloop = g_main_loop_new (g_main_context_default (), FALSE);
+ g_main_loop_run (mainloop);
+
+ moko_journal_close (journal) ;
+
+ return 0;
+}
+
+static void
+_add (MokoJournal *journal)
+{
+ if (strcmp (type, "voice") == 0)
+ {
+ MokoJournalEntry *entry = moko_journal_entry_new (VOICE_JOURNAL_ENTRY);
+
+ if (strcmp (direction, "in") == 0)
+ moko_journal_entry_set_direction (entry, DIRECTION_IN);
+ else
+ moko_journal_entry_set_direction (entry, DIRECTION_OUT);
+
+ if (missed)
+ moko_journal_entry_set_was_missed (entry, TRUE);
+
+ moko_journal_voice_info_set_distant_number (entry, number);
+
+ moko_journal_add_entry (journal, entry);
+
+ moko_journal_write_to_storage (journal);
+ }
+
+ g_main_loop_quit (mainloop);
+}
+
+static gboolean
+_list (MokoJournal *journal)
+{
+ gint len, i, t;
+
+ if (!type || strcmp (type, "all") == 0)
+ t = 0;
+ else if (strcmp (type, "voice") == 0)
+ t = VOICE_JOURNAL_ENTRY;
+ else
+ t = VOICE_JOURNAL_ENTRY;
+
+ len = moko_journal_get_nb_entries (journal);
+ g_print ("Journal size = %d\n", len);
+
+ if (strcmp (action, "size"))
+ g_main_loop_quit (mainloop);
+
+ for (i = 0; i < len; i++)
+ {
+ MokoJournalEntry *entry = NULL;
+
+ moko_journal_get_entry_at (journal, i, &entry);
+
+ if (!entry)
+ continue;
+
+ if (t == VOICE_JOURNAL_ENTRY)
+ {
+ if (moko_journal_entry_has_voice_info (entry))
+ {
+ g_print ("Voice Entry\t%20s\t%s\n",
+ moko_journal_voice_info_get_distant_number (entry),
+ moko_journal_voice_info_get_was_missed (entry) ? "missed":"");
+ }
+ }
+
+ }
+ g_main_loop_quit (mainloop);
+ return FALSE;
+}
+
+#if 0
+int
+main (int argc, gchar **argv)
+{
+ MokoJournal *journal=NULL ;
+ MokoJournalEntry *entry=NULL ;
+ MokoLocation loc ;
+ MokoGSMLocation gsm_loc ;
+ int result = 1 ;
+ gchar *contact_uid;
+
+ if (argc == 2)
+ contact_uid = argv[1];
+ else
+ contact_uid = "foobarbazuid";
+
+ g_type_init () ;
+
+ /*open the journal*/
+ journal = moko_journal_open_default () ;
+ g_return_val_if_fail (MOKO_IS_JOURNAL (journal),1) ;
+
+ /*load all journal entries from the journal on storage*/
+ if (!moko_journal_load_from_storage (journal))
+ {
+ g_message ("failed to load journal from storage\n") ;
+ goto out ;
+ }
+ g_message ("loaded journal from storage okay\n") ;
+ g_message ("number journal entries: %d\n",
+ moko_journal_get_nb_entries (journal)) ;
+
+ /*create a journal entry of type 'email journal entry'*/
+ entry = moko_journal_entry_new (EMAIL_JOURNAL_ENTRY) ;
+ if (!entry)
+ {
+ g_warning ("failed to create journal entry\n") ;
+ goto out ;
+ }
+
+ /*****************************
+ * <fill the entry with data>
+ *****************************/
+ moko_journal_entry_set_contact_uid (entry, contact_uid) ;
+ moko_journal_entry_set_summary (entry, "back from fostel") ;
+ moko_journal_entry_set_dtstart (entry, moko_time_new_today ()) ;
+ moko_journal_entry_set_direction (entry, DIRECTION_OUT) ;
+ loc.latitude = 37.386013;
+ loc.longitude = 10.082932;
+ moko_journal_entry_set_start_location (entry, &loc) ;
+ gsm_loc.lac = 68 ;
+ gsm_loc.cid = 100 ;
+ moko_journal_entry_set_gsm_location (entry, &gsm_loc) ;
+ if (!moko_journal_entry_has_email_info (entry))
+ {
+ g_warning ("failed to get email extra info from journal entry\n") ;
+ goto out ;
+ }
+ /*****************************
+ * </fill the entry with data>
+ *****************************/
+
+ /*add the entry we created to the journal*/
+ if (!moko_journal_add_entry (journal, entry))
+ {
+ g_warning ("could not add entry to journal\n") ;
+ goto out ;
+ }
+ /*
+ * the entry is now owned by the journal, make sure we won't ever
+ * free it ourselves (by accident)
+ */
+ entry = NULL ;
+
+ /*create a journal entry of type 'voice call journal entry'*/
+ entry = moko_journal_entry_new (VOICE_JOURNAL_ENTRY) ;
+ if (!entry)
+ {
+ g_warning ("failed to create journal entry\n") ;
+ goto out ;
+ }
+
+ /*****************************
+ * <fill the entry with data>
+ *****************************/
+ moko_journal_entry_set_contact_uid (entry, contact_uid) ;
+ moko_journal_entry_set_summary (entry, "this was a call") ;
+ moko_journal_entry_set_dtstart (entry, moko_time_new_today ()) ;
+ moko_journal_entry_set_direction (entry, DIRECTION_OUT) ;
+ loc.latitude = 43.386013;
+ loc.longitude = 15.082932;
+ moko_journal_entry_set_start_location (entry, &loc) ;
+ gsm_loc.lac = 67 ;
+ gsm_loc.cid = 200 ;
+ moko_journal_entry_set_gsm_location (entry, &gsm_loc) ;
+ if (!moko_journal_entry_has_voice_info (entry))
+ {
+ g_warning ("failed to get voice extra info from journal entry\n") ;
+ goto out ;
+ }
+ /*****************************
+ * </fill the entry with data>
+ *****************************/
+
+ /*add the entry we created to the journal*/
+ if (!moko_journal_add_entry (journal, entry))
+ {
+ g_warning ("could not add entry to journal\n") ;
+ goto out ;
+ }
+ /*
+ * the entry is now owned by the journal, make sure we won't ever
+ * free it ourselves (by accident)
+ */
+ entry = NULL ;
+
+ /*sync the journal to persistent storage*/
+ if (!moko_journal_write_to_storage (journal))
+ {
+ g_warning ("Could not write journal to storage") ;
+ goto out ;
+ }
+
+ /*
+ * sleep a bit to wait for possible notifications, in case
+ * another process has added new journal entries as well
+ * this is not mandatory, but is there for the sake of testing.
+ */
+ sleep (2) ;
+
+ /*
+ * notifications of new journal entries being added to the journal
+ * is done via dbus, using the glib event loop to dispatch the
+ * notifications. So let's give the event loop a chance to
+ * let us notified of new entries that could have been added.
+ * Note that when using gtk+, you usually don't have to do this,
+ * as gtk+ does it for you magically.
+ */
+ while (g_main_context_pending (g_main_context_default ()))
+ {
+ g_main_context_iteration (g_main_context_default (), FALSE) ;
+ }
+ g_message ("number journal entries after two got added: %d\n",
+ moko_journal_get_nb_entries (journal)) ;
+
+ /*if we reached this point, the test has probably succeeded*/
+ result = 0;
+ g_print ("test succeeded\n") ;
+
+out:
+ if (journal)
+ moko_journal_close (journal) ;
+ if (entry)
+ moko_journal_entry_unref (entry) ;
+
+ return result ;
+}
+
+#endif
More information about the commitlog
mailing list