/* Respond to volume mounts and unmounts, such
* as the insertion/removal of the memory card: */
+ /* This is a singleton, so it does not need to be unrefed. */
monitor = gnome_vfs_get_volume_monitor();
priv->volume_mounted_handler = g_signal_connect (G_OBJECT(monitor),
/********************************************************************/
/* Control the state of the MMC local account */
/********************************************************************/
+
+/** Only call this if the memory card is really mounted.
+ */
+static void
+add_mmc_account(ModestTnyAccountStore *self, gboolean emit_insert_signal)
+{
+ ModestTnyAccountStorePrivate *priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self);
+ g_return_if_fail (priv->session);
+
+ TnyAccount *mmc_account = modest_tny_account_new_for_local_folders (priv->account_mgr,
+ priv->session,
+ MODEST_MCC1_VOLUMEPATH);
+
+ /* Add to the list of store accounts */
+ tny_list_append (priv->store_accounts, G_OBJECT (mmc_account));
+
+ if (emit_insert_signal) {
+ g_signal_emit (G_OBJECT (self),
+ signals [ACCOUNT_INSERTED_SIGNAL],
+ 0, mmc_account);
+ }
+
+ /* Free */
+ g_object_unref (mmc_account);
+}
+
static void
on_vfs_volume_mounted(GnomeVFSVolumeMonitor *volume_monitor,
GnomeVFSVolume *volume,
uri = gnome_vfs_volume_get_activation_uri (volume);
if (uri && (!strcmp (uri, MODEST_MCC1_VOLUMEPATH_URI))) {
- TnyAccount *mmc_account;
-
- mmc_account = modest_tny_account_new_for_local_folders (priv->account_mgr,
- priv->session,
- MODEST_MCC1_VOLUMEPATH);
-
- /* Add to the list of store accounts */
- tny_list_append (priv->store_accounts, G_OBJECT (mmc_account));
-
- g_signal_emit (G_OBJECT (self),
- signals [ACCOUNT_INSERTED_SIGNAL],
- 0, mmc_account);
- /* Free */
- g_object_unref (mmc_account);
+ add_mmc_account (self, TRUE /* emit the insert signal. */);
}
+
g_free (uri);
}
G_OBJECT_CLASS(parent_class)->finalize (obj);
}
+gboolean volume_path_is_mounted (const gchar* path)
+{
+ g_return_val_if_fail (path, FALSE);
+
+ gboolean result = FALSE;
+ gchar * path_as_uri = g_filename_to_uri (path, NULL, NULL);
+ g_return_val_if_fail (path_as_uri, FALSE);
+
+ /* Get the monitor singleton: */
+ GnomeVFSVolumeMonitor *monitor = gnome_vfs_get_volume_monitor();
+
+ /* This seems like a simpler way to do this, but it returns a
+ * GnomeVFSVolume even if the drive is not mounted: */
+ /*
+ GnomeVFSVolume *volume = gnome_vfs_volume_monitor_get_volume_for_path (monitor,
+ MODEST_MCC1_VOLUMEPATH);
+ if (volume) {
+ gnome_vfs_volume_unref(volume);
+ }
+ */
+
+ /* Get the mounted volumes from the monitor: */
+ GList *list = gnome_vfs_volume_monitor_get_mounted_volumes (monitor);
+ GList *iter = list;
+ for (iter = list; iter; iter = g_list_next (iter)) {
+ GnomeVFSVolume *volume = (GnomeVFSVolume*)iter->data;
+ if (volume) {
+ /*
+ char *display_name =
+ gnome_vfs_volume_get_display_name (volume);
+ printf ("volume display name=%s\n", display_name);
+ g_free (display_name);
+ */
+
+ char *uri =
+ gnome_vfs_volume_get_activation_uri (volume);
+ /* printf (" uri=%s\n", uri); */
+ if (uri && (strcmp (uri, path_as_uri) == 0))
+ result = TRUE;
+
+ g_free (uri);
+
+ gnome_vfs_volume_unref (volume);
+ }
+ }
+
+ g_list_free (list);
+
+ g_free (path_as_uri);
+
+ return result;
+}
ModestTnyAccountStore*
modest_tny_account_store_new (ModestAccountMgr *account_mgr,
tny_list_append (priv->store_accounts, G_OBJECT(local_account));
g_object_unref (local_account);
- /* Add the other remote accounts. Do this before adding the
+ /* Add the other remote accounts. Do this after adding the
local account, because we need to add our outboxes to the
global OUTBOX hosted in the local account */
add_existing_accounts (MODEST_TNY_ACCOUNT_STORE (obj));
-
+
+
+ /* Create the memory card account if the card is mounted: */
+
+ /* This is a singleton, so it does not need to be unrefed. */
+ if (volume_path_is_mounted (MODEST_MCC1_VOLUMEPATH)) {
+ /* It is mounted: */
+ add_mmc_account (MODEST_TNY_ACCOUNT_STORE (obj), FALSE /* don't emit the insert signal. */);
+ }
+
return MODEST_TNY_ACCOUNT_STORE(obj);
}
/* Get the connection-specific transport acccount, if any: */
ModestAccountMgr *account_manager = modest_runtime_get_account_mgr ();
+
+ /* Check if this account has connection-specific SMTP enabled */
+ if (!modest_account_mgr_get_use_connection_specific_smtp (account_manager, account_name)) {
+ return NULL;
+ }
+
gchar* server_account_name = modest_account_mgr_get_connection_specific_smtp (account_manager,
account_name, connection_name);
return NULL;
/* Get the connection-specific transport acccount, if any: */
+ /* Note: This gives us a reference: */
TnyAccount *account =
get_smtp_specific_transport_account_for_open_connection (self, account_name);
/* The special local folders don't have transport accounts. */
if (strcmp (account_name, MODEST_LOCAL_FOLDERS_ACCOUNT_ID) == 0)
account = NULL;
- else
+ else {
+ /* Note: This gives us a reference: */
account = modest_tny_account_store_get_server_account (self, account_name,
TNY_ACCOUNT_TYPE_TRANSPORT);
+ }
}
-
+
+ /* returns a reference. */
return account;
}