r3896 - in trunk/src/target/OM-2007.2/applications/openmoko-dialer2: . src/phone-kit
chris at sita.openmoko.org
chris at sita.openmoko.org
Mon Jan 21 13:31:53 CET 2008
Author: chris
Date: 2008-01-21 13:31:52 +0100 (Mon, 21 Jan 2008)
New Revision: 3896
Modified:
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-sms.c
Log:
* src/phone-kit/moko-sms.c: (moko_sms_set_property),
(moko_sms_dispose), (on_error), (sms_store_opened_cb),
(stop_handling_sms), (open_sms_store), (memory_check_idle),
(moko_sms_init):
Add monitoring of free memory on the root filesystem (hopefully)
Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog 2008-01-21 12:26:09 UTC (rev 3895)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog 2008-01-21 12:31:52 UTC (rev 3896)
@@ -1,3 +1,11 @@
+2008-01-21 Chris Lord <chris at openedhand.com>
+
+ * src/phone-kit/moko-sms.c: (moko_sms_set_property),
+ (moko_sms_dispose), (on_error), (sms_store_opened_cb),
+ (stop_handling_sms), (open_sms_store), (memory_check_idle),
+ (moko_sms_init):
+ Add monitoring of free memory on the root filesystem (hopefully)
+
2008-01-18 Chris Lord <chris at openedhand.com>
* src/phone-kit/moko-listener.c: (moko_listener_on_network_number):
Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-sms.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-sms.c 2008-01-21 12:26:09 UTC (rev 3895)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-sms.c 2008-01-21 12:31:52 UTC (rev 3896)
@@ -19,6 +19,7 @@
*/
#include <string.h>
+#include <sys/vfs.h>
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-bindings.h>
@@ -76,9 +77,14 @@
MokoNotify *notify;
gboolean sim_full;
+ gboolean memory_full;
+
+ guint memory_idle;
};
static void start_handling_sms (MokoSms *sms);
+static void stop_handling_sms (MokoSms *sms);
+static void open_sms_store (MokoSms *sms);
static void
moko_sms_get_property (GObject *object, guint property_id,
@@ -128,7 +134,7 @@
switch (property_id) {
case PROP_NETWORK :
if (priv->network) {
- moko_network_remove_listener (priv->network, MOKO_LISTENER (object));
+ stop_handling_sms (sms);
g_object_unref (priv->network);
}
priv->network = g_value_dup_object (value);
@@ -140,7 +146,7 @@
g_signal_connect (priv->network, "subscriber_number_changed",
G_CALLBACK (subscriber_number_changed_cb), object);*/
/* moko_network_add_listener happens in start_handling_sms */
- if (!priv->handling_sms) start_handling_sms (sms);
+ if ((!priv->sim_full) && (!priv->memory_full)) start_handling_sms (sms);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -156,8 +162,13 @@
sms = MOKO_SMS (object);
priv = sms->priv;
+ if (priv->memory_idle) {
+ g_source_remove (priv->memory_idle);
+ priv->memory_idle = 0;
+ }
+
while (g_source_remove_by_user_data (object)) moko_notify_stop (priv->notify);
-
+
if (priv->sms_store) {
g_object_unref (priv->sms_store);
priv->sms_store = NULL;
@@ -427,7 +438,7 @@
if (cms == 322) {
priv->sim_full = TRUE;
- g_signal_emit (listener, signals[MEMORY_FULL], 0, TRUE, FALSE);
+ g_signal_emit (listener, signals[MEMORY_FULL], 0, TRUE, priv->memory_full);
}
}
@@ -578,6 +589,8 @@
MokoSmsPrivate *priv = self->priv;
priv->sms_store_open = TRUE;
+ g_debug ("Sms store opened");
+
/* Hook onto added/modified/removed signals for SMS notification */
view = jana_store_get_view (store);
g_signal_connect (view, "added", G_CALLBACK (note_added_cb), self);
@@ -591,6 +604,70 @@
}
static void
+stop_handling_sms (MokoSms *sms)
+{
+ MokoSmsPrivate *priv = sms->priv;
+
+ if (!priv->handling_sms) return;
+
+ g_debug ("Closing sms store");
+
+ moko_network_remove_listener (priv->network, MOKO_LISTENER (sms));
+
+ g_object_unref (priv->sms_store);
+ priv->sms_store = NULL;
+
+ priv->sms_store_open = FALSE;
+ priv->handling_sms = FALSE;
+
+ g_signal_emit (sms, signals[STATUS_CHANGED], 0, PK_SMS_NOTREADY);
+}
+
+static void
+open_sms_store (MokoSms *sms)
+{
+ MokoSmsPrivate *priv = sms->priv;
+
+ if (priv->sms_store) return;
+
+ g_debug ("Opening sms store");
+
+ /* Get the SMS note store */
+ priv->sms_store = jana_ecal_store_new (JANA_COMPONENT_NOTE);
+ g_signal_connect (priv->sms_store, "opened",
+ G_CALLBACK (sms_store_opened_cb), sms);
+ jana_store_open (priv->sms_store);
+}
+
+static gboolean
+memory_check_idle (MokoSms *sms)
+{
+ struct statfs buf;
+
+ MokoSmsPrivate *priv = sms->priv;
+
+ statfs ("/", &buf);
+
+ /* TODO: Is it reasonable to expect 4 megs/100 files free? */
+ if (((buf.f_bfree * buf.f_bsize) < (1024*1024*4)) ||
+ (buf.f_ffree < 100)) {
+ if (!priv->memory_full) {
+ priv->memory_full = TRUE;
+ g_signal_emit (sms, signals[MEMORY_FULL], 0, priv->sim_full, TRUE);
+ if (priv->sms_store) {
+ stop_handling_sms (sms);
+ }
+ }
+ } else if (priv->memory_full) {
+ priv->memory_full = FALSE;
+ g_signal_emit (sms, signals[MEMORY_FULL], 0, priv->sim_full, FALSE);
+ open_sms_store (sms);
+ }
+
+ return TRUE;
+}
+
+static void
moko_sms_init (MokoSms *sms)
{
MokoSmsPrivate *priv;
@@ -602,11 +679,11 @@
NULL);
priv->notify = moko_notify_get_default ();
- /* Get the SMS note store */
- priv->sms_store = jana_ecal_store_new (JANA_COMPONENT_NOTE);
- g_signal_connect (priv->sms_store, "opened",
- G_CALLBACK (sms_store_opened_cb), sms);
- jana_store_open (priv->sms_store);
+ memory_check_idle (sms);
+ if (!priv->memory_full) open_sms_store (sms);
+
+ priv->memory_idle = g_timeout_add_seconds (5, (GSourceFunc)
+ memory_check_idle, sms);
}
MokoSms*
More information about the commitlog
mailing list