#include <modest-account-mgr.h>
#include <modest-account-mgr-helpers.h>
#include <modest-icon-names.h>
+#include "widgets/modest-global-settings-dialog.h"
+#include "modest-tny-msg.h"
+#ifdef MODEST_PLATFORM_MAEMO
+#include "modest-hildon-includes.h"
+#endif
+#include <locale.h>
static gboolean init_header_columns (ModestConf *conf, gboolean overwrite);
-static gboolean init_local_folders (void);
static gboolean init_default_account_maybe (ModestAccountMgr *acc_mgr);
static void init_i18n (void);
static void init_stock_icons (void);
static void init_debug_logging (void);
static void init_default_settings (ModestConf *conf);
static void init_device_name (ModestConf *conf);
+static gboolean init_ui (gint argc, gchar** argv);
/*
* defaults for the column headers
gint sort;
} FolderCols;
+
+static const guint MODEST_MAIN_PANED_POS = 280;
+
static const FolderCols INBOX_COLUMNS_DETAILS[] = {
{MODEST_HEADER_VIEW_COLUMN_MSGTYPE, 40, 0},
{MODEST_HEADER_VIEW_COLUMN_ATTACH, 40, 0},
};
static const FolderCols INBOX_COLUMNS_TWOLINES[] = {
- {MODEST_HEADER_VIEW_COLUMN_COMPACT_FLAG, 40, 0},
{MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_IN, 180, 0},
- {MODEST_HEADER_VIEW_COLUMN_COMPACT_RECEIVED_DATE, 240, 1}
};
static const FolderCols OUTBOX_COLUMNS_DETAILS[] = {
};
static const FolderCols OUTBOX_COLUMNS_TWOLINES[] = {
- {MODEST_HEADER_VIEW_COLUMN_COMPACT_FLAG, 40, 0},
- {MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT,180, 0},
- {MODEST_HEADER_VIEW_COLUMN_STATUS, 240, 0}
+ {MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT,180, 0}
+// {MODEST_HEADER_VIEW_COLUMN_STATUS, 240, 0}
};
static const FolderCols SENT_COLUMNS_TWOLINES[] = {
- {MODEST_HEADER_VIEW_COLUMN_COMPACT_FLAG, 40, 0},
{MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT,180, 0},
- {MODEST_HEADER_VIEW_COLUMN_COMPACT_SENT_DATE, 240, 1}
};
#ifdef MODEST_PLATFORM_MAEMO
static const TnyFolderType LOCAL_FOLDERS[] = {
- TNY_FOLDER_TYPE_OUTBOX,
+/* TNY_FOLDER_TYPE_OUTBOX, */
TNY_FOLDER_TYPE_DRAFTS,
TNY_FOLDER_TYPE_SENT
};
#else
static const TnyFolderType LOCAL_FOLDERS[] = {
- TNY_FOLDER_TYPE_OUTBOX,
+/* TNY_FOLDER_TYPE_OUTBOX, */
TNY_FOLDER_TYPE_DRAFTS,
TNY_FOLDER_TYPE_SENT,
TNY_FOLDER_TYPE_TRASH,
};
#endif /* MODEST_PLATFORM_MAEMO */
+static GList* new_cold_ids_gslist_from_array( const FolderCols* cols, guint col_num)
+{
+ GList *result = NULL;
+
+ guint i = 0;
+ for (i = 0; i < col_num; ++i) {
+ result = g_list_append (result, GINT_TO_POINTER (cols[i].col));
+ }
+
+ return result;
+}
+
+GList*
+modest_init_get_default_header_view_column_ids (TnyFolderType folder_type, ModestHeaderViewStyle style)
+{
+ GList *result = NULL;
+
+ switch (folder_type) {
+ case TNY_FOLDER_TYPE_SENT:
+ case TNY_FOLDER_TYPE_DRAFTS:
+ if (style == MODEST_HEADER_VIEW_STYLE_DETAILS)
+ result = new_cold_ids_gslist_from_array (OUTBOX_COLUMNS_DETAILS,
+ G_N_ELEMENTS(OUTBOX_COLUMNS_DETAILS));
+ else if (style == MODEST_HEADER_VIEW_STYLE_TWOLINES)
+ result = new_cold_ids_gslist_from_array (SENT_COLUMNS_TWOLINES,
+ G_N_ELEMENTS(SENT_COLUMNS_TWOLINES));
+ break;
+ case TNY_FOLDER_TYPE_OUTBOX:
+ if (style == MODEST_HEADER_VIEW_STYLE_TWOLINES)
+ result = new_cold_ids_gslist_from_array (OUTBOX_COLUMNS_TWOLINES,
+ G_N_ELEMENTS(OUTBOX_COLUMNS_TWOLINES));
+ break;
+
+ default:
+ if (style == MODEST_HEADER_VIEW_STYLE_DETAILS)
+ result = new_cold_ids_gslist_from_array (INBOX_COLUMNS_DETAILS,
+ G_N_ELEMENTS(INBOX_COLUMNS_DETAILS));
+ else if (style == MODEST_HEADER_VIEW_STYLE_TWOLINES)
+ result = new_cold_ids_gslist_from_array (INBOX_COLUMNS_TWOLINES,
+ G_N_ELEMENTS(INBOX_COLUMNS_TWOLINES));
+ };
+
+ if (!result) {
+ g_warning("DEBUG: %s: No default columns IDs found for "
+ "folder_type=%d, style=%d\n", __FUNCTION__, folder_type, style);
+ }
+
+ return result;
+}
+
gboolean
-modest_init_init_core (void)
+modest_init (int argc, char *argv[])
{
gboolean reset;
static gboolean invoked = FALSE;
return FALSE;
} else
invoked = TRUE;
-
+
init_i18n();
init_debug_g_type();
init_debug_logging();
- g_thread_init(NULL);
- gdk_threads_init ();
+ if (!gnome_vfs_initialized()) {
+ if (!gnome_vfs_init ()) {
+ g_printerr ("modest: failed to init gnome-vfs\n");
+ return FALSE;
+ }
+ }
if (!modest_runtime_init()) {
modest_init_uninit ();
g_printerr ("modest: failed to initialize the modest runtime\n");
return FALSE;
}
-
-
+
/* do an initial guess for the device name */
init_device_name (modest_runtime_get_conf());
-
- if (!modest_platform_init()) {
+
+ if (!modest_platform_init(argc, argv)) {
modest_init_uninit ();
g_printerr ("modest: failed to run platform-specific initialization\n");
return FALSE;
}
- /* based on the debug settings, we decide whether to overwrite old settings */
reset = modest_runtime_get_debug_flags () & MODEST_RUNTIME_DEBUG_FACTORY_SETTINGS;
if (!init_header_columns(modest_runtime_get_conf(), reset)) {
modest_init_uninit ();
init_default_settings (modest_runtime_get_conf ());
- if (!init_local_folders()) {
+ if (!modest_init_local_folders(NULL)) {
modest_init_uninit ();
g_printerr ("modest: failed to init local folders\n");
return FALSE;
}
- if (!init_default_account_maybe(modest_runtime_get_account_mgr ())) {
+ if (!init_default_account_maybe (modest_runtime_get_account_mgr ())) {
modest_init_uninit ();
g_printerr ("modest: failed to init default account\n");
return FALSE;
+ }
+
+ if (!init_ui (argc, argv)) {
+ modest_init_uninit ();
+ g_printerr ("modest: failed to init ui\n");
+ return FALSE;
}
return TRUE;
}
-gboolean
-modest_init_init_ui (gint argc, gchar** argv)
+static gboolean
+init_ui (gint argc, gchar** argv)
{
- if (!gtk_init_check(&argc, &argv)) {
- g_printerr ("modest: failed to initialize graphical ui\n");
- return FALSE;
- }
-
/* Set application name */
g_set_application_name (modest_platform_get_app_name());
- g_message (modest_platform_get_app_name());
+ /* g_message (modest_platform_get_app_name()); */
+ /* Init stock icons */
init_stock_icons ();
+
+ /* Init notification system */
+#ifdef MODEST_HAVE_HILDON_NOTIFY
+ notify_init ("Basics");
+#endif
return TRUE;
}
{
if (!modest_runtime_uninit())
g_printerr ("modest: failed to uninit runtime\n");
-
+
+ if (gnome_vfs_initialized())
+ gnome_vfs_shutdown ();
+
return TRUE;
}
{
int i;
gchar *key;
+ gchar *sort_key;
+ gchar *sort_value;
GString *str;
g_return_val_if_fail (cols, FALSE);
key = _modest_widget_memory_get_keyname_with_double_type ("header-view",
type, style,
MODEST_WIDGET_MEMORY_PARAM_COLUMN_WIDTH);
+ sort_key = _modest_widget_memory_get_keyname_with_double_type ("header-view",
+ type, style,
+ MODEST_WIDGET_MEMORY_PARAM_COLUMN_SORT);
/* if we're not in overwrite mode, only write stuff it
* there was nothing before */
if (!overwrite && modest_conf_key_exists(conf, key, NULL)) {
g_free (key);
+ g_free (sort_key);
return TRUE;
}
modest_conf_set_string (conf, key, str->str, NULL);
g_free (key);
g_string_free (str, TRUE);
+
+ if ( col_num > 0 ) {
+ gint sort_col_id;
+ if (cols[i].col == MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT)
+ sort_col_id = TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN;
+ else
+ sort_col_id = TNY_GTK_HEADER_LIST_MODEL_DATE_RECEIVED_TIME_T_COLUMN;
+ sort_value = g_strdup_printf("%d:%d:%d", sort_col_id, GTK_SORT_DESCENDING, 0);
+ modest_conf_set_string (conf, sort_key, sort_value, NULL);
+ g_free (sort_value);
+ }
+ g_free (sort_key);
return TRUE;
}
init_header_columns (ModestConf *conf, gboolean overwrite)
{
int folder_type;
+ gchar *key;
for (folder_type = TNY_FOLDER_TYPE_UNKNOWN;
folder_type <= TNY_FOLDER_TYPE_CALENDAR; ++folder_type) {
overwrite);
};
}
+
+ key = _modest_widget_memory_get_keyname (MODEST_CONF_MAIN_PANED_KEY, MODEST_WIDGET_MEMORY_PARAM_POS);
+ /* if we're not in overwrite mode, only write stuff it
+ * there was nothing before */
+ if (overwrite || !modest_conf_key_exists(conf, key, NULL))
+ modest_conf_set_int (conf, key, MODEST_MAIN_PANED_POS, NULL);
+
+ g_free (key);
return TRUE;
}
-/**
- * init_local_folders:
- *
- * create the Local Folders folder under cache, if they
- * do not exist yet.
- *
- * Returns: TRUE if the folder were already there, or
- * they were created, FALSE otherwise
- */
-static gboolean
-init_local_folders (void)
+gboolean modest_init_one_local_folder (gchar *maildir_path)
{
- int i;
- gchar *maildir_path;
static const gchar* maildirs[] = {
"cur", "new", "tmp"
};
- maildir_path = modest_local_folder_info_get_maildir_path ();
-
- for (i = 0; i != G_N_ELEMENTS(LOCAL_FOLDERS); ++i) {
- int j;
- for (j = 0; j != G_N_ELEMENTS(maildirs); ++j) {
- gchar *dir;
- dir = g_build_filename (maildir_path,
- modest_local_folder_info_get_type_name(LOCAL_FOLDERS[i]),
- maildirs[j],
- NULL);
- if (g_mkdir_with_parents (dir, 0755) < 0) {
- g_printerr ("modest: failed to create %s\n", dir);
- g_free (dir);
- g_free (maildir_path);
- return FALSE;
- }
- g_free(dir);
+ int j;
+ for (j = 0; j != G_N_ELEMENTS(maildirs); ++j) {
+ gchar *dir = g_build_filename (maildir_path,
+ maildirs[j],
+ NULL);
+ if (g_mkdir_with_parents (dir, 0755) < 0) {
+ g_printerr ("modest: %s: failed to create %s\n", __FUNCTION__, dir);
+ g_free (dir);
+ return FALSE;
}
+
+ g_free (dir);
}
-
- g_free (maildir_path);
+
return TRUE;
}
+/**
+ * modest_init_local_folders:
+ *
+ * create the Local Folders folder under cache, if they
+ * do not exist yet.
+ *
+ * Returns: TRUE if the folder were already there, or
+ * they were created, FALSE otherwise
+ */
+gboolean
+modest_init_local_folders (const gchar* location_filepath)
+{
+ gboolean retval = TRUE;
+ gchar *maildir_path = modest_local_folder_info_get_maildir_path (location_filepath);
-static void
-free_element (gpointer data, gpointer user_data)
-{
- g_free (data);
-}
+ if (location_filepath) {
+ /* For instance, for memory card, just create the top-level .modest folder
+ * and one "archive" folder (so that messages can be put somewhere):
+ */
+ gchar *dir = g_build_filename (maildir_path,
+ "Archive", NULL);
+ const gboolean created = modest_init_one_local_folder (dir);
+ g_free(dir);
+
+ if (!created) {
+ retval = FALSE;
+ }
+ #if 0
+ /* Do this if we only create the top-level dir: */
+ if (g_mkdir_with_parents (maildir_path, 0755) < 0) {
+ g_printerr ("modest: %s: failed to create %s\n", __FUNCTION__, location_filepath);
+ retval = FALSE;
+ }
+ #endif
+ }
+ else {
+ /* Create each of the standard on-disk folders.
+ * Per-account outbox folders will be created when first needed. */
+ int i;
+ for (i = 0; i != G_N_ELEMENTS(LOCAL_FOLDERS); ++i) {
+ gchar *dir = g_build_filename (maildir_path,
+ modest_local_folder_info_get_type_name(LOCAL_FOLDERS[i]),
+ NULL);
+ const gboolean created = modest_init_one_local_folder (dir);
+ g_free(dir);
+
+ if (!created) {
+ retval = FALSE;
+ }
+ }
+ }
+
+ g_free (maildir_path);
+ return retval;
+}
/**
* init_default_account_maybe:
static gboolean
init_default_account_maybe (ModestAccountMgr *acc_mgr)
{
- GSList *all_accounts = NULL;
gchar *default_account;
gboolean retval = TRUE;
-
- all_accounts = modest_account_mgr_account_names (acc_mgr);
- if (all_accounts) { /* if there are any accounts, there should be a default one */
- default_account =
- modest_account_mgr_get_default_account (acc_mgr);
- if (!default_account) {
- gchar *first_account;
- g_printerr ("modest: no default account defined\n");
- first_account = (gchar*)all_accounts->data;
- if ((retval = modest_account_mgr_set_default_account (acc_mgr, first_account)))
- g_printerr ("modest: set '%s' as the default account\n",
- first_account);
- else
- g_printerr ("modest: failed to set '%s' as the default account\n",
- first_account);
- g_free (default_account);
- }
- g_slist_foreach (all_accounts, free_element, NULL);
- g_slist_free (all_accounts);
- }
+
+ default_account = modest_account_mgr_get_default_account (acc_mgr);
+ if (!default_account)
+ retval = modest_account_mgr_set_first_account_as_default (acc_mgr);
+ g_free (default_account);
+
return retval;
}
static void
init_i18n (void)
{
+ const gchar* gettext_package;
/* Setup gettext, to use our .po files: */
/* GETTEXT_PACKAGE and MODEST_LOCALE_DIR are defined in config.h */
- bindtextdomain (GETTEXT_PACKAGE, MODEST_LOCALE_DIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
+/* #ifdef MODEST_HILDON_VERSION_0 */
+/* gettext_package = GETTEXT_PACKAGE; */
+/* bindtextdomain (gettext_package, MODEST_LOCALE_DIR); */
+/* #else */
+/* gettext_package = "osso-email"; /\* HACK to use the localizations *\/ */
+/* bindtextdomain (gettext_package, "/usr/share/locale"); */
+/* #endif /\*MODEST_HILDON_VERSION_0*\/ */
+
+ gettext_package = GETTEXT_PACKAGE;
+
+ bind_textdomain_codeset (gettext_package, "UTF-8");
+ textdomain (gettext_package);
+
+ setlocale (LC_ALL, "");
}
g_object_unref (transparent);
}
else
- g_warning ("failed to load %s icon", items_names[i]);
+ g_warning ("Modest: %s: failed to load %s icon", __FUNCTION__, items_names[i]);
}
/* Drop our reference to the factory, GTK will hold a reference. */
g_object_unref (factory);
if (!modest_conf_key_exists (conf, MODEST_CONF_SHOW_BCC, NULL))
modest_conf_set_bool (conf, MODEST_CONF_SHOW_BCC, FALSE, NULL);
+/* Not used:
if (!modest_conf_key_exists (conf, MODEST_CONF_CONNECT_AT_STARTUP, NULL))
modest_conf_set_bool (conf, MODEST_CONF_CONNECT_AT_STARTUP, TRUE, NULL);
+*/
+
+ /* Global settings */
+ if (!modest_conf_key_exists (conf, MODEST_CONF_AUTO_UPDATE, NULL))
+ modest_conf_set_bool (conf, MODEST_CONF_AUTO_UPDATE, TRUE, NULL);
+
+ if (!modest_conf_key_exists (conf, MODEST_CONF_UPDATE_WHEN_CONNECTED_BY, NULL))
+ modest_conf_set_int (conf, MODEST_CONF_UPDATE_WHEN_CONNECTED_BY, MODEST_CONNECTED_VIA_WLAN, NULL);
+ if (!modest_conf_key_exists (conf, MODEST_CONF_UPDATE_INTERVAL, NULL))
+ modest_conf_set_int (conf, MODEST_CONF_UPDATE_INTERVAL, MODEST_UPDATE_INTERVAL_15_MIN, NULL);
+
+ if (!modest_conf_key_exists (conf, MODEST_CONF_MSG_SIZE_LIMIT, NULL))
+ modest_conf_set_int (conf, MODEST_CONF_MSG_SIZE_LIMIT, 1000, NULL);
+
+ if (!modest_conf_key_exists (conf, MODEST_CONF_PLAY_SOUND_MSG_ARRIVE, NULL))
+ modest_conf_set_bool (conf, MODEST_CONF_PLAY_SOUND_MSG_ARRIVE, FALSE, NULL);
+
+ if (!modest_conf_key_exists (conf, MODEST_CONF_PREFER_FORMATTED_TEXT, NULL))
+ modest_conf_set_bool (conf, MODEST_CONF_PREFER_FORMATTED_TEXT, TRUE, NULL);
+
+ if (!modest_conf_key_exists (conf, MODEST_CONF_REPLY_TYPE, NULL))
+ modest_conf_set_int (conf, MODEST_CONF_REPLY_TYPE, MODEST_TNY_MSG_REPLY_TYPE_QUOTE, NULL);
}
static void
init_device_name (ModestConf *conf)
{
- int len = 255; /* max len */
+ unsigned int len = 255; /* max len */
gchar *devname = NULL;
if (!g_file_get_contents("/etc/hostname", &devname, &len, NULL) || len < 2 || len > 254) {
else
devname[len] = '\0';
- modest_conf_set_string (conf, MODEST_CONF_DEVICE_NAME,devname, NULL);
+ GError *err = NULL;
+ if (!modest_conf_set_string (conf, MODEST_CONF_DEVICE_NAME,devname, &err)) {
+ g_printerr ("modest: error setting device name '%s': %s",
+ devname, err ? err->message: "?");
+ g_error_free (err);
+ }
}
-
+
g_free (devname);
}