X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-init.c;h=7797e951311cd16f2446e237bc410fd2a018386b;hp=2217eb113791e7d5dc756f9bf7059ba1d752077f;hb=e45958deaf9701399c552ea0d84c2447efacd4ca;hpb=5665c1728b8a91813db3ed9c29f208b6855f03c6 diff --git a/src/modest-init.c b/src/modest-init.c index 2217eb1..7797e95 100644 --- a/src/modest-init.c +++ b/src/modest-init.c @@ -48,7 +48,10 @@ #include #include "widgets/modest-global-settings-dialog.h" #include "modest-tny-msg.h" -#ifdef MODEST_PLATFORM_MAEMO +#include +#include + +#ifndef MODEST_TOOLKIT_GTK #include "modest-hildon-includes.h" #endif #include @@ -61,6 +64,10 @@ 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); +static gboolean init_ui (gint argc, gchar** argv); + + +static gboolean _is_initialized = FALSE; /* * defaults for the column headers @@ -72,10 +79,10 @@ typedef struct { } FolderCols; -static const guint MODEST_MAIN_PANED_POS = 280; +static const guint MODEST_MAIN_PANED_POS_PERCENTAGE = 30; +static const guint MODEST_MSG_PANED_POS_PERCENTAGE = 50; static const FolderCols INBOX_COLUMNS_DETAILS[] = { - {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}, @@ -88,7 +95,6 @@ static const FolderCols INBOX_COLUMNS_TWOLINES[] = { }; static const FolderCols OUTBOX_COLUMNS_DETAILS[] = { - {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}, @@ -105,7 +111,7 @@ static const FolderCols SENT_COLUMNS_TWOLINES[] = { {MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT,180, 0}, }; -#ifdef MODEST_PLATFORM_MAEMO +#ifndef MODEST_TOOLKIT_GTK static const TnyFolderType LOCAL_FOLDERS[] = { /* TNY_FOLDER_TYPE_OUTBOX, */ TNY_FOLDER_TYPE_DRAFTS, @@ -119,9 +125,10 @@ static const TnyFolderType LOCAL_FOLDERS[] = { TNY_FOLDER_TYPE_TRASH, TNY_FOLDER_TYPE_ARCHIVE }; -#endif /* MODEST_PLATFORM_MAEMO */ +#endif /* MODEST_TOOLKIT_GTK */ -static GList* new_cold_ids_gslist_from_array( const FolderCols* cols, guint col_num) +static GList* +new_cold_ids_gslist_from_array( const FolderCols* cols, guint col_num) { GList *result = NULL; @@ -171,23 +178,47 @@ modest_init_get_default_header_view_column_ids (TnyFolderType folder_type, Modes return result; } + +static gboolean +force_ke_recv_load (void) +{ + if (strcmp ("cerm_device_memory_full", + dgettext("ke-recv", "cerm_device_memory_full")) == 0) { + g_warning ("%s: cannot get translation for cerm_device_memory_full", + __FUNCTION__); + return FALSE; + } + + return TRUE; +} + + gboolean -modest_init_init_core (int argc, char *argv[]) +modest_init (int argc, char *argv[]) { gboolean reset; - static gboolean invoked = FALSE; - if (invoked) { - g_printerr ("modest: modest_init_init_core may only be invoked once\n"); - g_assert (!invoked); /* abort */ + if (_is_initialized) { + g_printerr ("modest: %s may only be invoked once\n", __FUNCTION__); return FALSE; - } else - invoked = TRUE; + } init_i18n(); + + if (!force_ke_recv_load()) { + g_printerr ("modest: %s: ke-recv is missing " + "or memory is very low\n", __FUNCTION__); + /* don't return FALSE here, because it might be that ke-recv is + missing. TODO: find a way to verify that + */ + } + init_debug_g_type(); init_debug_logging(); + /* initialize the prng, we need it when creating random files */ + srandom((int)getpid()); + if (!gnome_vfs_initialized()) { if (!gnome_vfs_init ()) { g_printerr ("modest: failed to init gnome-vfs\n"); @@ -200,11 +231,11 @@ modest_init_init_core (int argc, char *argv[]) g_printerr ("modest: failed to initialize the modest runtime\n"); return FALSE; } - + modest_plugin_factory_load_all (modest_runtime_get_plugin_factory ()); + /* do an initial guess for the device name */ init_device_name (modest_runtime_get_conf()); - if (!modest_platform_init(argc, argv)) { modest_init_uninit (); @@ -231,20 +262,21 @@ modest_init_init_core (int argc, char *argv[]) modest_init_uninit (); g_printerr ("modest: failed to init default account\n"); return FALSE; - } + } - return TRUE; + if (!init_ui (argc, argv)) { + modest_init_uninit (); + g_printerr ("modest: failed to init ui\n"); + return FALSE; + } + + return _is_initialized = 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()); */ @@ -252,12 +284,10 @@ modest_init_init_ui (gint argc, gchar** argv) /* Init stock icons */ init_stock_icons (); - /* Init notification system */ + /* Init notification system */ #ifdef MODEST_HAVE_HILDON_NOTIFY notify_init ("Basics"); #endif - - return TRUE; } @@ -265,12 +295,19 @@ modest_init_init_ui (gint argc, gchar** argv) gboolean modest_init_uninit (void) { + if (!_is_initialized) + return TRUE; + if (!modest_runtime_uninit()) g_printerr ("modest: failed to uninit runtime\n"); - if (gnome_vfs_initialized()) - gnome_vfs_shutdown (); + if (!modest_platform_uninit()) + g_printerr ("modest: failed to uninit platform\n"); + if (gnome_vfs_initialized()) /* apparently, this returns TRUE, even after a shutdown */ + gnome_vfs_shutdown (); + + _is_initialized = FALSE; return TRUE; } @@ -304,6 +341,7 @@ save_header_settings (ModestConf *conf, TnyFolderType type, * there was nothing before */ if (!overwrite && modest_conf_key_exists(conf, key, NULL)) { g_free (key); + g_free (sort_key); return TRUE; } @@ -319,7 +357,7 @@ save_header_settings (ModestConf *conf, TnyFolderType type, if ( col_num > 0 ) { gint sort_col_id; - if (cols[i].col == MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT) + if (cols[0].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; @@ -386,11 +424,21 @@ init_header_columns (ModestConf *conf, gboolean overwrite) }; } - key = _modest_widget_memory_get_keyname (MODEST_CONF_MAIN_PANED_KEY, MODEST_WIDGET_MEMORY_PARAM_POS); + 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_float (conf, key, MODEST_MAIN_PANED_POS_PERCENTAGE, NULL); + + g_free (key); + + key = _modest_widget_memory_get_keyname (MODEST_CONF_MSG_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); + modest_conf_set_float (conf, key, MODEST_MSG_PANED_POS_PERCENTAGE, NULL); g_free (key); return TRUE; @@ -431,15 +479,32 @@ gboolean modest_init_one_local_folder (gchar *maildir_path) gboolean modest_init_local_folders (const gchar* location_filepath) { + gboolean retval = TRUE; + 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: */ + /* 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, + modest_local_folder_info_get_type_name(TNY_FOLDER_TYPE_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); - g_free (maildir_path); - return FALSE; + retval = FALSE; } + #endif } else { /* Create each of the standard on-disk folders. @@ -453,14 +518,13 @@ modest_init_local_folders (const gchar* location_filepath) g_free(dir); if (!created) { - g_free (maildir_path); - return FALSE; + retval = FALSE; } } } g_free (maildir_path); - return TRUE; + return retval; } /** @@ -498,9 +562,9 @@ init_debug_g_type (void) gflags = 0; mflags = modest_runtime_get_debug_flags (); - if (mflags & MODEST_RUNTIME_DEBUG_DEBUG_OBJECTS) + if (mflags & MODEST_RUNTIME_DEBUG_OBJECTS) gflags |= G_TYPE_DEBUG_OBJECTS; - if (mflags & MODEST_RUNTIME_DEBUG_DEBUG_SIGNALS) + if (mflags & MODEST_RUNTIME_DEBUG_SIGNALS) gflags |= G_TYPE_DEBUG_SIGNALS; g_type_init_with_debug_flags (gflags); @@ -522,23 +586,26 @@ 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 */ -/* #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); + /* little trick make en_GB the fallback language, instead + * of the logical IDs + * we need the ugly ifdefs, because modest_platform_init is + * too late. + */ + const gchar *lc_messages = getenv ("LC_MESSAGES"); + + if (!lc_messages) { + setenv ("LANGUAGE", "en_GB", 1); + setenv ("LC_MESSAGES", "en_GB", 1); + } else { + gchar *language = g_strdup_printf ("%s:en_GB", lc_messages); + setenv ("LANGUAGE", language, 1); + g_free (language); + } + /* end of little trick */ - setlocale (LC_ALL, ""); + bindtextdomain (GETTEXT_PACKAGE, MODEST_LOCALE_DIR); + bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); + textdomain (GETTEXT_PACKAGE); } @@ -558,11 +625,11 @@ init_stock_icons (void) gint i; static GtkStockItem items[] = { -#ifdef MODEST_PLATFORM_MAEMO - { MODEST_STOCK_SPLIT_VIEW, "split view", 0, 0, NULL }, +#ifndef MODEST_TOOLKIT_GTK { MODEST_STOCK_SORT, "sort mail", 0, 0, NULL }, { MODEST_STOCK_REFRESH, "refresh mail", 0, 0, NULL }, -#endif /*MODEST_PLATFORM_MAEMO*/ +#endif /*MODEST_TOOLKIT_GTK*/ + { MODEST_STOCK_SPLIT_VIEW, "split view", 0, 0, NULL }, { MODEST_STOCK_MAIL_SEND, "send mail", 0, 0, NULL }, { MODEST_STOCK_NEW_MAIL, "new mail", 0, 0, NULL }, /* { MODEST_STOCK_SEND_RECEIVE, "send receive", 0, 0, NULL }, */ @@ -576,11 +643,11 @@ init_stock_icons (void) }; static gchar *items_names [] = { -#ifdef MODEST_PLATFORM_MAEMO - MODEST_TOOLBAR_ICON_SPLIT_VIEW, +#ifndef MODEST_TOOLKIT_GTK MODEST_TOOLBAR_ICON_SORT, MODEST_TOOLBAR_ICON_REFRESH, -#endif /*MODEST_PLATFORM_MAEMO*/ +#endif /*MODEST_TOOLKIT_GTK*/ + MODEST_TOOLBAR_ICON_SPLIT_VIEW, MODEST_TOOLBAR_ICON_MAIL_SEND, MODEST_TOOLBAR_ICON_NEW_MAIL, /* MODEST_TOOLBAR_ICON_SEND_RECEIVE, */ @@ -591,7 +658,7 @@ init_stock_icons (void) /* MODEST_TOOLBAR_ICON_NEXT, */ /* MODEST_TOOLBAR_ICON_PREV, */ /* MODEST_TOOLBAR_ICON_STOP */ - MODEST_TOOLBAR_ICON_FORMAT_BULLETS, +/* MODEST_TOOLBAR_ICON_FORMAT_BULLETS, */ }; registered = TRUE; @@ -608,7 +675,7 @@ init_stock_icons (void) /* Register icons to accompany stock items */ for (i = 0; i < G_N_ELEMENTS (items); i++) { -#ifdef MODEST_PLATFORM_MAEMO /* MODES_PLATFORM_ID: 1 ==> gnome, 2==> maemo */ +#ifndef MODEST_PLATFORM_GTK pixbuf = gtk_icon_theme_load_icon (current_theme, items_names[i], 26, @@ -630,7 +697,7 @@ init_stock_icons (void) 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); @@ -641,27 +708,38 @@ init_stock_icons (void) static void init_default_settings (ModestConf *conf) { - if (!modest_conf_key_exists (conf, MODEST_CONF_SHOW_TOOLBAR, NULL)) - modest_conf_set_bool (conf, MODEST_CONF_SHOW_TOOLBAR, TRUE, NULL); + /* Show toolbar keys */ + if (!modest_conf_key_exists (conf, MODEST_CONF_MAIN_WINDOW_SHOW_TOOLBAR, NULL)) + modest_conf_set_bool (conf, MODEST_CONF_MAIN_WINDOW_SHOW_TOOLBAR, TRUE, NULL); + + if (!modest_conf_key_exists (conf, MODEST_CONF_MAIN_WINDOW_SHOW_TOOLBAR_FULLSCREEN, NULL)) + modest_conf_set_bool (conf, MODEST_CONF_MAIN_WINDOW_SHOW_TOOLBAR_FULLSCREEN, TRUE, NULL); + + if (!modest_conf_key_exists (conf, MODEST_CONF_MSG_VIEW_WINDOW_SHOW_TOOLBAR, NULL)) + modest_conf_set_bool (conf, MODEST_CONF_MSG_VIEW_WINDOW_SHOW_TOOLBAR, TRUE, NULL); - if (!modest_conf_key_exists (conf, MODEST_CONF_SHOW_TOOLBAR_FULLSCREEN, NULL)) - modest_conf_set_bool (conf, MODEST_CONF_SHOW_TOOLBAR_FULLSCREEN, TRUE, NULL); + if (!modest_conf_key_exists (conf, MODEST_CONF_MSG_VIEW_WINDOW_SHOW_TOOLBAR_FULLSCREEN, NULL)) + modest_conf_set_bool (conf, MODEST_CONF_MSG_VIEW_WINDOW_SHOW_TOOLBAR_FULLSCREEN, TRUE, NULL); + + if (!modest_conf_key_exists (conf, MODEST_CONF_EDIT_WINDOW_SHOW_TOOLBAR, NULL)) + modest_conf_set_bool (conf, MODEST_CONF_EDIT_WINDOW_SHOW_TOOLBAR, TRUE, NULL); + if (!modest_conf_key_exists (conf, MODEST_CONF_EDIT_WINDOW_SHOW_TOOLBAR_FULLSCREEN, NULL)) + modest_conf_set_bool (conf, MODEST_CONF_EDIT_WINDOW_SHOW_TOOLBAR_FULLSCREEN, TRUE, NULL); + + /* Editor keys */ if (!modest_conf_key_exists (conf, MODEST_CONF_SHOW_CC, NULL)) modest_conf_set_bool (conf, MODEST_CONF_SHOW_CC, TRUE, NULL); if (!modest_conf_key_exists (conf, MODEST_CONF_SHOW_BCC, NULL)) modest_conf_set_bool (conf, MODEST_CONF_SHOW_BCC, FALSE, NULL); - 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); + modest_conf_set_int (conf, MODEST_CONF_UPDATE_WHEN_CONNECTED_BY, MODEST_CONNECTED_VIA_WLAN_OR_WIMAX, 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); @@ -677,6 +755,9 @@ init_default_settings (ModestConf *conf) 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); + + if (!modest_conf_key_exists (conf, MODEST_CONF_FETCH_HTML_EXTERNAL_IMAGES, NULL)) + modest_conf_set_bool (conf, MODEST_CONF_FETCH_HTML_EXTERNAL_IMAGES, FALSE, NULL); } @@ -687,11 +768,11 @@ init_default_settings (ModestConf *conf) static void init_device_name (ModestConf *conf) { - unsigned int len = 255; /* max len */ + gsize 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"); + g_warning ("%s: failed to read hostname\n", __FUNCTION__); modest_conf_set_string (conf, MODEST_CONF_DEVICE_NAME, MODEST_LOCAL_FOLDERS_DEFAULT_DISPLAY_NAME, NULL);