static gint compose_write_body_to_file (Compose *compose,
const gchar *file);
static gint compose_remove_reedit_target (Compose *compose);
+void compose_remove_draft (Compose *compose);
static gint compose_queue (Compose *compose,
gint *msgnum,
FolderItem **item);
return 0;
}
+void compose_remove_draft(Compose *compose)
+{
+ FolderItem *drafts;
+ MsgInfo *msginfo = compose->targetinfo;
+ drafts = account_get_special_folder(compose->account, F_DRAFT);
+
+ if (procmsg_msg_exist(msginfo)) {
+ folder_item_remove_msg(drafts, msginfo->msgnum);
+ folderview_update_item(drafts, TRUE);
+ }
+
+}
+
static gint compose_queue(Compose *compose, gint *msgnum, FolderItem **item)
{
return compose_queue_sub (compose, msgnum, item, FALSE);
{
Compose *compose = (Compose *)data;
AlertValue val;
-
+ gchar *tmp = NULL;
+
if (compose->exteditor_tag != -1) {
if (!compose_ext_editor_kill(compose))
return;
switch (val) {
case G_ALERTDEFAULT:
+ if (prefs_common.autosave)
+ compose_remove_draft(compose);
break;
case G_ALERTALTERNATE:
compose_draft_cb(data, 0, NULL);
compose_send_control_enter(compose);
}
+#define EDITABLE_LENGTH(x) \
+ strlen(gtk_editable_get_chars(x,0,-1))
+
static void text_inserted(GtkWidget *widget, const gchar *text,
gint length, gint *position, Compose *compose)
{
GTK_SIGNAL_FUNC(text_inserted),
compose);
gtk_signal_emit_stop_by_name(GTK_OBJECT(editable), "insert_text");
+
+
+ if (prefs_common.autosave &&
+ EDITABLE_LENGTH(editable) % prefs_common.autosave_length == 0)
+ compose_draft_cb((gpointer)compose, 1, NULL);
}
static gboolean compose_send_control_enter(Compose *compose)
#endif /* USE_GPGME */
static gint prohibit_duplicate_launch (void);
+static gchar * get_crashfile_name (void);
static void lock_socket_input_cb (gpointer data,
gint source,
GdkInputCondition condition);
/* make one all-folder processing before using sylpheed */
folder_func_to_all_folders(initial_processing, (gpointer *)mainwin);
+ /* if Sylpheed crashed, rebuild caches */
+ if (!cmd.crash && is_file_exist(get_crashfile_name())) {
+ debug_print("Sylpheed crashed, checking for new messages\n");
+ folderview_check_new_all();
+ }
+ /* make the crash-indicator file */
+ str_write_to_file("foo", get_crashfile_name());
+
addressbook_read_file();
inc_autocheck_timer_init(mainwin);
fd_close(lock_socket);
filename = get_socket_name();
unlink(filename);
+
+ /* delete crashfile */
+ if (!cmd.crash)
+ unlink(get_crashfile_name());
#if USE_SSL
ssl_done();
return filename;
}
+static gchar *get_crashfile_name(void)
+{
+ static gchar *filename = NULL;
+
+ if (filename == NULL) {
+ filename = g_strdup_printf("%s%csylpheed-crashed",
+ get_tmp_dir(), G_DIR_SEPARATOR);
+ }
+
+ return filename;
+}
+
static gint prohibit_duplicate_launch(void)
{
gint uxsock;
GtkWidget *checkbtn_smart_wrapping;
GtkWidget *checkbtn_block_cursor;
GtkWidget *checkbtn_reply_with_quote;
+
+ GtkWidget *checkbtn_autosave;
+ GtkWidget *entry_autosave_length;
} compose;
/* spelling */
{"smart_wrapping", "TRUE", &prefs_common.smart_wrapping,
P_BOOL, &compose.checkbtn_smart_wrapping,
prefs_set_data_from_toggle, prefs_set_toggle},
+ {"autosave", "FALSE", &prefs_common.autosave,
+ P_BOOL, &compose.checkbtn_autosave,
+ prefs_set_data_from_toggle, prefs_set_toggle},
+ {"autosave_length", "50", &prefs_common.autosave_length,
+ P_INT, &compose.entry_autosave_length,
+ prefs_set_data_from_entry, prefs_set_entry},
#if USE_ASPELL
{"enable_aspell", "TRUE", &prefs_common.enable_aspell,
P_BOOL, &spelling.checkbtn_enable_aspell,
GtkWidget *checkbtn_block_cursor;
GtkWidget *frame_msgwrap;
+ GtkWidget *hbox_autosave;
+ GtkWidget *checkbtn_autosave;
+ GtkWidget *entry_autosave_length;
+ GtkWidget *label_autosave_length;
+
vbox1 = gtk_vbox_new (FALSE, VSPACING);
gtk_widget_show (vbox1);
gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
PACK_CHECK_BUTTON (vbox2, checkbtn_redirect_keep_from,
_("Keep the original 'From' header when redirecting"));
+
+ hbox_autosave = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox_autosave);
+ gtk_box_pack_start (GTK_BOX (vbox1), hbox_autosave, FALSE, FALSE, 0);
+
+ PACK_CHECK_BUTTON (hbox_autosave, checkbtn_autosave,
+ _("Autosave to drafts every "));
+
+ entry_autosave_length = gtk_entry_new();
+ gtk_widget_set_usize (entry_autosave_length, 64, -1);
+ gtk_widget_show (entry_autosave_length);
+ gtk_box_pack_start (GTK_BOX (hbox_autosave), entry_autosave_length, FALSE, FALSE, 0);
+
+ label_autosave_length = gtk_label_new(_("characters"));
+ gtk_widget_show (label_autosave_length);
+ gtk_box_pack_start (GTK_BOX (hbox_autosave), label_autosave_length, FALSE, FALSE, 0);
+
hbox_undolevel = gtk_hbox_new (FALSE, 8);
gtk_widget_show (hbox_undolevel);
gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
compose.spinbtn_undolevel = spinbtn_undolevel;
compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
- compose.spinbtn_linewrap = spinbtn_linewrap;
- compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
- compose.checkbtn_wrapquote = checkbtn_wrapquote;
- compose.checkbtn_autowrap = checkbtn_autowrap;
- compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
+ compose.spinbtn_linewrap = spinbtn_linewrap;
+ compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
+ compose.checkbtn_wrapquote = checkbtn_wrapquote;
+ compose.checkbtn_autowrap = checkbtn_autowrap;
+ compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
+ compose.checkbtn_autosave = checkbtn_autosave;
+ compose.entry_autosave_length = entry_autosave_length;
+
compose.checkbtn_forward_as_attachment =
checkbtn_forward_as_attachment;
compose.checkbtn_redirect_keep_from =