2007-03-25 [colin] 2.8.1cvs50
[claws.git] / src / main.c
index dae04eab5edd4bbbe342009db718c0625687820c..93eb262f75d8de1ebe32887f9b5b17125361fa01 100644 (file)
@@ -71,6 +71,7 @@
 #include "prefs_summaries.h"
 #include "prefs_themes.h"
 #include "prefs_other.h"
+#include "prefs_logging.h"
 #include "prefs_send.h"
 #include "prefs_wrapping.h"
 #include "prefs_compose_writing.h"
 
 #include "timing.h"
 
+#ifdef MAEMO
+#include <hildon-widgets/hildon-program.h>
+#include <gtk/gtkmain.h>
+#include <libosso.h>
+
+#define OSSO_NAME    "claws_mail"
+#define OSSO_SERVICE "com.nokia."OSSO_NAME
+#define OSSO_OBJECT  "/com/nokia/"OSSO_NAME
+#define OSSO_IFACE   "com.nokia."OSSO_NAME
+
+typedef struct _AppData AppData;
+struct _AppData {
+    HildonProgram *program;
+    HildonWindow *window;
+    osso_context_t *osso_context;
+};
+#endif
+
 gchar *prog_version;
 gchar *argv0;
 
@@ -185,6 +204,34 @@ static void exit_claws                     (MainWindow *mainwin);
 }
 
 static MainWindow *static_mainwindow;
+
+#ifdef MAEMO
+static HildonProgram *static_hildonprogram;
+void exit_event_handler(gboolean die_now, gpointer data)
+{
+       AppData *appdata;
+       appdata = (AppData *) data;
+       /* Do whatever application needs to do before exiting */
+       exit_claws(static_mainwindow);
+       hildon_banner_show_information(GTK_WIDGET(appdata->window), NULL,
+                                   _("Exiting..."));
+
+}
+
+/* Callback for normal D-BUS messages */
+gint dbus_req_handler(const gchar * interface, const gchar * method,
+                      GArray * arguments, gpointer data,
+                      osso_rpc_t * retval)
+{
+    AppData *appdata;
+    appdata = (AppData *) data;
+
+    osso_system_note_infoprint(appdata->osso_context, method, retval);
+    osso_rpc_free_val(retval);
+
+    return OSSO_OK;
+}
+#endif
 static gboolean emergency_exit = FALSE;
 
 #ifdef HAVE_STARTUP_NOTIFICATION
@@ -559,6 +606,10 @@ void main_set_show_at_startup(gboolean show)
 
 int main(int argc, char *argv[])
 {
+#ifdef MAEMO
+       osso_context_t *osso_context;
+       osso_return_t result;
+#endif
        gchar *userrc;
        MainWindow *mainwin;
        FolderView *folderview;
@@ -619,6 +670,13 @@ int main(int argc, char *argv[])
        gtk_set_locale();
        gtk_init(&argc, &argv);
 
+#ifdef MAEMO
+       osso_context = osso_initialize(OSSO_SERVICE, "2.8.1", TRUE, NULL);
+       if (osso_context == NULL) {
+               return OSSO_ERROR;
+       }
+       static_hildonprogram = HILDON_PROGRAM(hildon_program_get_instance());
+#endif 
        gdk_rgb_init();
        gtk_widget_set_default_colormap(gdk_rgb_get_colormap());
        gtk_widget_set_default_visual(gdk_rgb_get_visual());
@@ -723,7 +781,13 @@ int main(int argc, char *argv[])
                if (rename_force("claws.log", "claws.log.bak") < 0)
                        FILE_OP_ERROR("claws.log", "rename");
        }
-       set_log_file("claws.log");
+       set_log_file(LOG_PROTOCOL, "claws.log");
+
+       if (is_file_exist("filtering.log")) {
+               if (rename_force("filtering.log", "filtering.log.bak") < 0)
+                       FILE_OP_ERROR("filtering.log", "rename");
+       }
+       set_log_file(LOG_DEBUG_FILTERING, "filtering.log");
 
        CHDIR_RETURN_VAL_IF_FAIL(get_home_dir(), 1);
 
@@ -742,6 +806,7 @@ int main(int argc, char *argv[])
        prefs_summaries_init();
        prefs_message_init();
        prefs_other_init();
+       prefs_logging_init();
        prefs_receive_init();
        prefs_send_init();
 #ifdef USE_ASPELL
@@ -770,7 +835,29 @@ int main(int argc, char *argv[])
        news_gtk_init();
 
        mainwin = main_window_create();
+#ifdef MAEMO
+       AppData *appdata;
+       appdata = g_new0(AppData, 1);
+       appdata->program = static_hildonprogram;
+       appdata->window = mainwin->window;
+       appdata->osso_context = osso_context;
+       result = osso_rpc_set_cb_f(appdata->osso_context, 
+                OSSO_SERVICE, 
+                OSSO_OBJECT, 
+                OSSO_IFACE,
+                dbus_req_handler, appdata);
+       if (result != OSSO_OK) {
+               return OSSO_ERROR;
+       }
 
+       /* Add handler for Exit D-BUS messages */
+       result = osso_application_set_exit_cb(appdata->osso_context,
+                                               exit_event_handler,
+                                               (gpointer) appdata);
+       if (result != OSSO_OK) {
+               return OSSO_ERROR;
+       }
+#endif
        manage_window_focus_in(mainwin->window, NULL, NULL);
        folderview = mainwin->folderview;
 
@@ -915,10 +1002,10 @@ int main(int argc, char *argv[])
                main_window_cursor_normal(mainwin);
                if (folder_get_list() != NULL) {
                        alertpanel_error(_("Claws Mail has detected a configured "
-                                  "mailbox, but is it incomplete. It is "
+                                  "mailbox, but it is incomplete. It is "
                                   "possibly due to a failing IMAP account. Use "
-                                  "\"Rebuild folder tree\" on the mailbox's folder "
-                                  "to try to fix it."));
+                                  "\"Rebuild folder tree\" on the mailbox parent "
+                                  "folder's context menu to try to fix it."));
                } else {
                        alertpanel_error(_("Claws Mail has detected a configured "
                                   "mailbox, but could not load it. It is "
@@ -981,6 +1068,9 @@ int main(int argc, char *argv[])
 
        gtk_main();
 
+#ifdef MAEMO
+       osso_deinitialize(osso_context);
+#endif
        exit_claws(mainwin);
 
        return 0;
@@ -1038,7 +1128,8 @@ static void exit_claws(MainWindow *mainwin)
        remove_all_files(get_tmp_dir());
        remove_all_files(get_mime_tmp_dir());
 
-       close_log_file();
+       close_log_file(LOG_PROTOCOL);
+       close_log_file(LOG_DEBUG_FILTERING);
 
 #ifdef HAVE_LIBETPAN
        imap_main_done();
@@ -1492,6 +1583,7 @@ static gint prohibit_duplicate_launch(void)
        } else {
                gchar buf[BUFSIZ];
                fd_write_all(uxsock, "get_display\n", 12);
+               memset(buf, 0, sizeof(buf));
                fd_gets(uxsock, buf, sizeof(buf));
                if (strcmp2(buf, x_display)) {
                        printf("Claws Mail is already running on display %s.\n",
@@ -1639,6 +1731,7 @@ static void send_queue(void)
 {
        GList *list;
        gchar *errstr = NULL;
+       gboolean error = FALSE;
        for (list = folder_get_list(); list != NULL; list = list->next) {
                Folder *folder = list->data;
 
@@ -1650,6 +1743,9 @@ static void send_queue(void)
                        if (res) {
                                folder_item_scan(folder->queue);
                        }
+                       
+                       if (res < 0)
+                               error = TRUE;
                }
        }
        if (errstr) {
@@ -1658,7 +1754,7 @@ static void send_queue(void)
                g_free(errstr);
                alertpanel_error_log(tmp);
                g_free(tmp);
-       } else {
+       } else if (error) {
                alertpanel_error_log("Some errors occurred "
                                "while sending queued messages.");
        }
@@ -1706,3 +1802,10 @@ static void install_basic_sighandlers()
        sigprocmask(SIG_UNBLOCK, &mask, 0);
 #endif /* !G_OS_WIN32 */
 }
+
+#ifdef MAEMO
+HildonProgram *hildon_program()
+{
+       return static_hildonprogram;
+}
+#endif