talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit 2c1eaa1afc9669cf4fc62f7741e67dadb5919ce6
parent 59d1aa181639275f8bd221d8e105b29b5b1fadba
Author: Ricardo Mones <ricardo@mones.org>
Date:   Sun, 12 May 2024 01:30:36 +0200

Import mboxes from command line

Diffstat:
Mclaws-mail.desktop | 15+++++++++++++--
Mdoc/man/claws-mail.1 | 4+++-
Msrc/import.c | 14+++++++++-----
Msrc/import.h | 5++---
Msrc/main.c | 22+++++++++++++++++++++-
Msrc/mainwindow.c | 13++++++++++++-
Msrc/mainwindow.h | 4+++-
7 files changed, 63 insertions(+), 14 deletions(-)

diff --git a/claws-mail.desktop b/claws-mail.desktop @@ -44,10 +44,10 @@ Comment[tr]=GTK temelli hafif ve hızlı bir E-posta İstemcisi Terminal=false Type=Application StartupNotify=true -MimeType=x-scheme-handler/mailto; +MimeType=application/mbox;x-scheme-handler/mailto; X-Info=Claws Mail -Actions=GetMail;ComposeMail;SendFile; +Actions=GetMail;ComposeMail;SendFile;ImportMbox; [Desktop Action GetMail] Exec=claws-mail --receive-all @@ -84,3 +84,14 @@ Name[pl]=Wyślij plik... Name[pt]=Enviar ficheiro... Name[ru]=Отправить файл... Name[tr]=Ekli e-posta yaz... + +[Desktop Action ImportMbox] +Exec=claws-mail --import-mbox %f +Name=Import mbox file... +Name[ca]=Importar arxiu mbox... +Name[es]=Importar fichero mbox... +Name[fr]=Importer un fichier mbox... +Name[he]=ייבוא קובץ mbox... +Name[pt]=Importar ficheiro mbox... +Name[ru]=Импорт mbox файла... +Name[tr]=mbox dosyasını içe aktar... diff --git a/doc/man/claws-mail.1 b/doc/man/claws-mail.1 @@ -1,4 +1,4 @@ -.TH "CLAWS MAIL" "1" "March 17, 2022" "The Claws Mail team" "User Manuals" +.TH "CLAWS MAIL" "1" "February 17, 2024" "The Claws Mail team" "User Manuals" .SH "NAME" .LP @@ -103,6 +103,8 @@ This list is not complete. .br \fB \-\-insert\fR file1 [file2]...\fR .br +\fB \-\-import-mbox\fR file\fR +.br \fB \-\-receive\fR .br \fB \-\-receive\-all\fR diff --git a/src/import.c b/src/import.c @@ -1,6 +1,6 @@ /* * Claws Mail -- a GTK based, lightweight, and fast e-mail client - * Copyright (C) 1999-2022 the Claws Mail team and Hiroyuki Yamamoto + * Copyright (C) 1999-2024 the Claws Mail team and Hiroyuki Yamamoto * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -58,7 +58,7 @@ static void import_destsel_cb(GtkWidget *widget, gpointer data); static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data); static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); -gint import_mbox(FolderItem *default_dest) +gint import_mbox(FolderItem *default_dest, const gchar* mbox_file) /* return values: -2 skipped/cancelled, -1 error, 0 OK */ { gchar *dest_id = NULL; @@ -85,7 +85,10 @@ gint import_mbox(FolderItem *default_dest) } else { gtk_entry_set_text(GTK_ENTRY(dest_entry), ""); } - gtk_entry_set_text(GTK_ENTRY(file_entry), ""); + if (mbox_file) + gtk_entry_set_text(GTK_ENTRY(file_entry), mbox_file); + else + gtk_entry_set_text(GTK_ENTRY(file_entry), ""); gtk_widget_grab_focus(file_entry); manage_window_set_transient(GTK_WINDOW(window)); @@ -110,6 +113,7 @@ static void import_create(void) window = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "import"); gtk_window_set_title(GTK_WINDOW(window), _("Import mbox file")); + gtk_window_set_modal(GTK_WINDOW(window), TRUE); gtk_container_set_border_width(GTK_CONTAINER(window), 5); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_resizable(GTK_WINDOW(window), TRUE); @@ -237,13 +241,13 @@ static void import_ok_cb(GtkWidget *widget, gpointer data) g_free(mbox); - if (gtk_main_level() > 1) + if (gtk_main_level() > 0) gtk_main_quit(); } static void import_cancel_cb(GtkWidget *widget, gpointer data) { - if (gtk_main_level() > 1) + if (gtk_main_level() > 0) gtk_main_quit(); } diff --git a/src/import.h b/src/import.h @@ -1,6 +1,6 @@ /* * Claws Mail -- a GTK based, lightweight, and fast e-mail client - * Copyright (C) 1999-2012 Hiroyuki Yamamoto and the Claws Mail team + * Copyright (C) 1999-2024 Hiroyuki Yamamoto and the Claws Mail team * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -14,7 +14,6 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. - * */ #ifndef __IMPORT_H__ @@ -24,6 +23,6 @@ #include "folder.h" -gint import_mbox(FolderItem *default_dest); +gint import_mbox(FolderItem *default_dest, const gchar* mbox_file); #endif /* __IMPORT_H__ */ diff --git a/src/main.c b/src/main.c @@ -1,6 +1,6 @@ /* * Claws Mail -- a GTK based, lightweight, and fast e-mail client - * Copyright (C) 1999-2023 the Claws Mail team and Hiroyuki Yamamoto + * Copyright (C) 1999-2024 the Claws Mail team and Hiroyuki Yamamoto * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -205,6 +205,7 @@ static struct RemoteCmd { const gchar *target; gboolean debug; const gchar *geometry; + const gchar *import_mbox; } cmd; SessionStats session_stats; @@ -1506,6 +1507,10 @@ int main(int argc, char *argv[]) folderview_thaw(mainwin->folderview); main_window_cursor_normal(mainwin); + if (cmd.import_mbox) { + mainwindow_import_mbox(cmd.import_mbox); + } + if (!cmd.target && prefs_common.goto_folder_on_startup && folder_find_item_from_identifier(prefs_common.startup_folder) != NULL && !claws_crashed()) { @@ -1995,6 +2000,7 @@ static void parse_cmd_opt(int argc, char *argv[]) g_print("%s\n", _(" --reset-statistics reset session statistics")); g_print("%s\n", _(" --select folder[/msg] jump to the specified folder/message\n" " folder is a folder id like 'folder/sub_folder', a file:// uri or an absolute path")); + g_print("%s\n", _(" --import-mbox file import the specified mbox file\n")); g_print("%s\n", _(" --online switch to online mode")); g_print("%s\n", _(" --offline switch to offline mode")); g_print("%s\n", _(" --exit --quit -q exit Claws Mail")); @@ -2044,6 +2050,13 @@ static void parse_cmd_opt(int argc, char *argv[]) } else { parse_cmd_opt_error(_("Missing folder argument for option %s"), argv[i]); } + } else if (!strcmp(argv[i], "--import-mbox")) { + if (i+1 < argc) { + cmd.import_mbox = argv[i+1]; + i++; + } else { + parse_cmd_opt_error(_("Missing file argument for option %s"), argv[i]); + } } else if (i == 1 && argc == 2) { /* only one parameter. Do something intelligent about it */ if ((strstr(argv[i], "@") || !STRNCMP(argv[i], "mailto:")) && !strstr(argv[i], "://")) { @@ -2448,6 +2461,10 @@ static gint prohibit_duplicate_launch(int *argc, char ***argv) gchar *str = g_strdup_printf("select %s\n", cmd.target); CM_FD_WRITE_ALL(str); g_free(str); + } else if (cmd.import_mbox) { + gchar *str = g_strdup_printf("import %s\n", cmd.import_mbox); + CM_FD_WRITE_ALL(str); + g_free(str); } else if (cmd.search) { gchar buf[BUFFSIZE]; gchar *str = @@ -2701,6 +2718,9 @@ static void lock_socket_input_cb(gpointer data, } else if (!STRNCMP(buf, "select ")) { const gchar *target = buf+7; mainwindow_jump_to(target, TRUE); + } else if (!STRNCMP(buf, "import ")) { + const gchar *mbox_file = buf + 7; + mainwindow_import_mbox(mbox_file); } else if (!STRNCMP(buf, "search ")) { FolderItem* folderItem = NULL; GSList *messages = NULL; diff --git a/src/mainwindow.c b/src/mainwindow.c @@ -3938,7 +3938,7 @@ static void import_mbox_cb(GtkAction *action, gpointer data) { MainWindow *mainwin = (MainWindow *)data; /* only notify if import has failed */ - if (import_mbox(mainwin->summaryview->folder_item) == -1) { + if (import_mbox(mainwin->summaryview->folder_item, NULL) == -1) { alertpanel_error(_("Mbox import has failed.")); } } @@ -5576,3 +5576,14 @@ static void goto_prev_part_cb(GtkAction *action, gpointer data) && mainwin->messageview->mimeview) mimeview_select_prev_part(mainwin->messageview->mimeview); } + +void mainwindow_import_mbox(const gchar* mbox_file) +{ + MainWindow *mainwin = mainwindow_get_mainwindow(); + + strcrlftrunc((gchar *) mbox_file); + /* only notify if import has failed */ + if (import_mbox(mainwin->summaryview->folder_item, mbox_file) == -1) { + alertpanel_error(_("Mbox import has failed.")); + } +} diff --git a/src/mainwindow.h b/src/mainwindow.h @@ -1,6 +1,6 @@ /* * Claws Mail -- a GTK based, lightweight, and fast e-mail client - * Copyright (C) 1999-2023 the Claws Mail team and Hiroyuki Yamamoto + * Copyright (C) 1999-2024 the Claws Mail team and Hiroyuki Yamamoto * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -227,4 +227,6 @@ void mainwindow_reset_paned (GtkPaned *paned); void mainwin_accel_changed_cb (GtkAccelGroup *accelgroup, guint keyval, GdkModifierType modifier, GClosure *closure, GtkMenuItem *item); +void mainwindow_import_mbox(const gchar* mbox_file); + #endif /* __MAINWINDOW_H__ */