X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-init.c;h=a51ca27944af2f3cf247bb8a133c8e984a508f1f;hb=ba298d44760a90ec16c7fbdea8bc6c4401c2f230;hp=6fc3f807da73f298ef487c7e4c66a4a0840aacde;hpb=98bc76b00da273d0253f82b32ba4384e6b9dd957;p=modest diff --git a/src/modest-init.c b/src/modest-init.c index 6fc3f80..a51ca27 100644 --- a/src/modest-init.c +++ b/src/modest-init.c @@ -46,15 +46,22 @@ #include #include #include +#include "widgets/modest-global-settings-dialog.h" +#include "modest-tny-msg.h" +#ifdef MODEST_PLATFORM_MAEMO +#include +#else +#include +#endif 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_g_type (void); static void init_debug_logging (void); static void init_default_settings (ModestConf *conf); +static void init_device_name (ModestConf *conf); /* * defaults for the column headers @@ -62,53 +69,52 @@ static void init_default_settings (ModestConf *conf); typedef struct { ModestHeaderViewColumn col; guint width; + gint sort; } FolderCols; + +static const guint MODEST_MAIN_PANED_POS = 280; + static const FolderCols INBOX_COLUMNS_DETAILS[] = { - {MODEST_HEADER_VIEW_COLUMN_MSGTYPE, 40}, - {MODEST_HEADER_VIEW_COLUMN_ATTACH, 40}, - {MODEST_HEADER_VIEW_COLUMN_FROM, 80}, - {MODEST_HEADER_VIEW_COLUMN_SUBJECT, 80}, - {MODEST_HEADER_VIEW_COLUMN_RECEIVED_DATE, 60}, - {MODEST_HEADER_VIEW_COLUMN_SIZE, 50} + {MODEST_HEADER_VIEW_COLUMN_MSGTYPE, 40, 0}, + {MODEST_HEADER_VIEW_COLUMN_ATTACH, 40, 0}, + {MODEST_HEADER_VIEW_COLUMN_FROM, 80, 0}, + {MODEST_HEADER_VIEW_COLUMN_SUBJECT, 80, 0}, + {MODEST_HEADER_VIEW_COLUMN_RECEIVED_DATE, 60, 0}, + {MODEST_HEADER_VIEW_COLUMN_SIZE, 50, 0} }; static const FolderCols INBOX_COLUMNS_TWOLINES[] = { - {MODEST_HEADER_VIEW_COLUMN_COMPACT_FLAG, 40}, - {MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_IN, 180}, - {MODEST_HEADER_VIEW_COLUMN_COMPACT_RECEIVED_DATE, 240} + {MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_IN, 180, 0}, }; static const FolderCols OUTBOX_COLUMNS_DETAILS[] = { - {MODEST_HEADER_VIEW_COLUMN_MSGTYPE, 40}, - {MODEST_HEADER_VIEW_COLUMN_ATTACH, 40}, - {MODEST_HEADER_VIEW_COLUMN_TO, 80}, - {MODEST_HEADER_VIEW_COLUMN_SUBJECT, 80}, - {MODEST_HEADER_VIEW_COLUMN_SENT_DATE, 80}, - {MODEST_HEADER_VIEW_COLUMN_SIZE, 50} + {MODEST_HEADER_VIEW_COLUMN_MSGTYPE, 40, 0}, + {MODEST_HEADER_VIEW_COLUMN_ATTACH, 40, 0}, + {MODEST_HEADER_VIEW_COLUMN_TO, 80, 0}, + {MODEST_HEADER_VIEW_COLUMN_SUBJECT, 80, 0}, + {MODEST_HEADER_VIEW_COLUMN_SENT_DATE, 80, 0}, + {MODEST_HEADER_VIEW_COLUMN_SIZE, 50, 0} }; static const FolderCols OUTBOX_COLUMNS_TWOLINES[] = { - {MODEST_HEADER_VIEW_COLUMN_COMPACT_FLAG, 40}, - {MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT,180}, - {MODEST_HEADER_VIEW_COLUMN_STATUS, 240} + {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}, - {MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT,180}, - {MODEST_HEADER_VIEW_COLUMN_COMPACT_SENT_DATE, 240} + {MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT,180, 0}, }; #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, @@ -134,7 +140,9 @@ modest_init_init_core (void) init_debug_g_type(); init_debug_logging(); - g_thread_init(NULL); + if (!g_thread_supported()) + g_thread_init(NULL); + gdk_threads_init (); if (!modest_runtime_init()) { @@ -143,6 +151,10 @@ modest_init_init_core (void) return FALSE; } + + /* do an initial guess for the device name */ + init_device_name (modest_runtime_get_conf()); + if (!modest_platform_init()) { modest_init_uninit (); g_printerr ("modest: failed to run platform-specific initialization\n"); @@ -159,13 +171,13 @@ modest_init_init_core (void) 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; @@ -185,9 +197,14 @@ modest_init_init_ui (gint argc, gchar** argv) /* Set application name */ g_set_application_name (modest_platform_get_app_name()); - g_warning (modest_platform_get_app_name()); + /* g_message (modest_platform_get_app_name()); */ + /* Init stock icons */ init_stock_icons (); + + /* Init notification system */ + notify_init ("Basics"); + return TRUE; } @@ -232,8 +249,8 @@ save_header_settings (ModestConf *conf, TnyFolderType type, /* the format is necessarily the same as the one in modest-widget-memory */ str = g_string_new (NULL); for (i = 0; i != col_num; ++i) - g_string_append_printf (str, "%d:%d ", - cols[i].col, cols[i].width); + g_string_append_printf (str, "%d:%d:%d ", + cols[i].col, cols[i].width, cols[i].sort); modest_conf_set_string (conf, key, str->str, NULL); g_free (key); @@ -255,6 +272,7 @@ static gboolean 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) { @@ -294,11 +312,42 @@ init_header_columns (ModestConf *conf, gboolean overwrite) 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; +} + +gboolean modest_init_one_local_folder (gchar *maildir_path) +{ + static const gchar* maildirs[] = { + "cur", "new", "tmp" + }; + + 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); + } + return TRUE; } /** - * init_local_folders: + * modest_init_local_folders: * * create the Local Folders folder under cache, if they * do not exist yet. @@ -306,32 +355,34 @@ init_header_columns (ModestConf *conf, gboolean overwrite) * Returns: TRUE if the folder were already there, or * they were created, FALSE otherwise */ -static gboolean -init_local_folders (void) -{ - 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); +gboolean +modest_init_local_folders (const gchar* location_filepath) +{ + gchar *maildir_path = modest_local_folder_info_get_maildir_path (location_filepath); + + if (location_filepath) { + /* For instance, for memory card, just create the top-level .modest folder: */ + if (g_mkdir_with_parents (maildir_path, 0755) < 0) { + g_printerr ("modest: %s: failed to create %s\n", __FUNCTION__, location_filepath); + g_free (maildir_path); + return FALSE; + } + } + 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) { g_free (maildir_path); return FALSE; } - g_free(dir); } } @@ -339,16 +390,6 @@ init_local_folders (void) return TRUE; } - - -static void -free_element (gpointer data, gpointer user_data) -{ - g_free (data); -} - - - /** * init_default_account_maybe: * @@ -362,29 +403,14 @@ free_element (gpointer data, gpointer user_data) 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; } @@ -394,14 +420,14 @@ static void init_debug_g_type (void) { GTypeDebugFlags gflags; - ModestInitDebugFlags mflags; + ModestRuntimeDebugFlags mflags; gflags = 0; mflags = modest_runtime_get_debug_flags (); - if (mflags & MODEST_INIT_DEBUG_DEBUG_OBJECTS) + if (mflags & MODEST_RUNTIME_DEBUG_DEBUG_OBJECTS) gflags |= G_TYPE_DEBUG_OBJECTS; - if (mflags & MODEST_INIT_DEBUG_DEBUG_SIGNALS) + if (mflags & MODEST_RUNTIME_DEBUG_DEBUG_SIGNALS) gflags |= G_TYPE_DEBUG_SIGNALS; g_type_init_with_debug_flags (gflags); @@ -410,10 +436,10 @@ init_debug_g_type (void) static void init_debug_logging (void) { - ModestInitDebugFlags mflags; + ModestRuntimeDebugFlags mflags; mflags = modest_runtime_get_debug_flags (); - if (mflags & MODEST_INIT_DEBUG_ABORT_ON_WARNING) + if (mflags & MODEST_RUNTIME_DEBUG_ABORT_ON_WARNING) g_log_set_always_fatal (G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING); @@ -423,11 +449,19 @@ init_debug_logging (void) 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*/ + + bind_textdomain_codeset (gettext_package, "UTF-8"); + textdomain (gettext_package); } @@ -545,4 +579,59 @@ init_default_settings (ModestConf *conf) 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); +} + + +/* set the device name -- note this is an initial guess from /etc/hostname + * on maemo-device it will most probably be replaced with the Bluetooth device + * name later during starting (see maemo/modest-maemo-utils.[ch]) + */ +static void +init_device_name (ModestConf *conf) +{ + int len = 255; /* max len */ + gchar *devname = NULL; + + if (!g_file_get_contents("/etc/hostname", &devname, &len, NULL) || len < 2 || len > 254) { + g_printerr ("modest: failed to read hostname\n"); + modest_conf_set_string (conf, MODEST_CONF_DEVICE_NAME, + MODEST_LOCAL_FOLDERS_DEFAULT_DISPLAY_NAME, + NULL); + } else { + /* remove the \n at the end */ + if (devname[len-1] == '\n') + devname[len-1] = '\0'; + else + devname[len] = '\0'; + + 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); }