*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifdef HAVE_CONFIG_H
#include <string.h>
#include "imap.h"
#include "imap_gtk.h"
+#include "inc.h"
#ifdef HAVE_LIBETPAN
}
if (time(NULL) - last_login_err > 10) {
- alertpanel_error(_("Connection to %s failed: login refused.%s"),
+ if (!prefs_common.no_recv_err_panel) {
+ alertpanel_error(_("Connection to %s failed: "
+ "login refused.%s"),
SESSION(session)->server, ext_info);
+ } else {
+ log_error(_("Connection to %s failed: "
+ "login refused.%s\n"),
+ SESSION(session)->server, ext_info);
+ }
}
last_login_err = time(NULL);
}
g_return_val_if_fail(FOLDER_CLASS(folder) == &imap_class, NULL);
g_return_val_if_fail(folder->account != NULL, NULL);
- if (prefs_common.work_offline && !imap_gtk_should_override()) {
+ if (prefs_common.work_offline && !inc_offline_should_override()) {
return NULL;
}
: account->ssl_imap == SSL_TUNNEL ? IMAPS_PORT : IMAP4_PORT;
ssl_type = account->ssl_imap;
#else
+ if (account->ssl_imap != SSL_NONE) {
+ if (alertpanel_full(_("Insecure connection"),
+ _("This connection is configured to be secured "
+ "using SSL, but SSL is not available in this "
+ "build of Sylpheed-Claws. \n\n"
+ "Do you want to continue connecting to this "
+ "server? The communication would not be "
+ "secure."),
+ _("Con_tinue connecting"),
+ GTK_STOCK_CANCEL, NULL,
+ FALSE, NULL, ALERT_WARNING,
+ G_ALERTALTERNATE) != G_ALERTDEFAULT)
+ return NULL;
+ }
port = account->set_imapport ? account->imapport
: IMAP4_PORT;
#endif
alertpanel_error(_("Can't connect to IMAP4 server: %s:%d"),
account->recv_server, port);
} else {
- log_error(_("Can't connect to IMAP4 server: %s:%d"),
+ log_error(_("Can't connect to IMAP4 server: %s:%d\n"),
account->recv_server, port);
}
for (cur = file_list; cur != NULL; cur = cur->next) {
IMAPFlags iflags = 0;
guint32 new_uid = 0;
-
+ gchar *real_file = NULL;
+ gboolean file_is_tmp = FALSE;
fileinfo = (MsgFileInfo *)cur->data;
if (fileinfo->flags) {
if (!MSG_IS_UNREAD(*fileinfo->flags))
iflags |= IMAP_FLAG_SEEN;
}
-
+
+ if (fileinfo->flags) {
+ if ((MSG_IS_QUEUED(*fileinfo->flags)
+ || MSG_IS_DRAFT(*fileinfo->flags))
+ && !folder_has_parent_of_type(dest, F_QUEUE)
+ && !folder_has_parent_of_type(dest, F_DRAFT)) {
+ real_file = get_tmp_file();
+ file_is_tmp = TRUE;
+ if (procmsg_remove_special_headers(
+ fileinfo->file,
+ real_file) !=0) {
+ g_free(real_file);
+ g_free(destdir);
+ return -1;
+ }
+ }
+ }
+ if (real_file == NULL)
+ real_file = g_strdup(fileinfo->file);
+
if (folder_has_parent_of_type(dest, F_QUEUE) ||
folder_has_parent_of_type(dest, F_OUTBOX) ||
folder_has_parent_of_type(dest, F_DRAFT) ||
folder_has_parent_of_type(dest, F_TRASH))
iflags |= IMAP_FLAG_SEEN;
- ok = imap_cmd_append(session, destdir, fileinfo->file, iflags,
+ ok = imap_cmd_append(session, destdir, real_file, iflags,
&new_uid);
if (ok != IMAP_SUCCESS) {
- g_warning("can't append message %s\n", fileinfo->file);
+ g_warning("can't append message %s\n", real_file);
+ if (file_is_tmp)
+ g_unlink(real_file);
+ g_free(real_file);
g_free(destdir);
return -1;
}
GINT_TO_POINTER(dest->last_num + 1));
if (last_uid < new_uid)
last_uid = new_uid;
+ if (file_is_tmp)
+ g_unlink(real_file);
}
g_free(destdir);
msginfo = (MsgInfo *)msglist->data;
g_return_val_if_fail(msginfo->folder != NULL, -1);
- if (folder == msginfo->folder->folder) {
+ if (folder == msginfo->folder->folder &&
+ !folder_has_parent_of_type(msginfo->folder, F_DRAFT) &&
+ !folder_has_parent_of_type(msginfo->folder, F_QUEUE)) {
ret = imap_do_copy_msgs(folder, dest, msglist, relation);
return ret;
}
data->numlist = newlist;
data->cur += count;
- if (prefs_common.work_offline && !imap_gtk_should_override()) {
+ if (prefs_common.work_offline && !inc_offline_should_override()) {
g_free(data);
return NULL;
}
data->headers = headers;
data->body = body;
- if (prefs_common.work_offline && !imap_gtk_should_override()) {
+ if (prefs_common.work_offline && !inc_offline_should_override()) {
g_free(data);
return -1;
}
{
int r;
- if (prefs_common.work_offline && !imap_gtk_should_override()) {
+ if (prefs_common.work_offline && !inc_offline_should_override()) {
return -1;
}
data->item = item;
data->msgnum_list = msgnum_list;
- if (prefs_common.work_offline && !imap_gtk_should_override()) {
+ if (prefs_common.work_offline && !inc_offline_should_override()) {
g_free(data);
return -1;
}
gboolean selected_folder;
debug_print("get_num_list\n");
- statusbar_print_all("Scanning %s...\n", FOLDER_ITEM(item)->path
- ? FOLDER_ITEM(item)->path:"");
g_return_val_if_fail(folder != NULL, -1);
g_return_val_if_fail(item != NULL, -1);
session = imap_session_get(folder);
g_return_val_if_fail(session != NULL, -1);
+ statusbar_print_all("Scanning %s...\n", FOLDER_ITEM(item)->path
+ ? FOLDER_ITEM(item)->path:"");
+
selected_folder = (session->mbox != NULL) &&
(!strcmp(session->mbox, item->item.path));
if (selected_folder) {
if (!MSG_IS_REPLIED(msginfo->flags) && (newflags & MSG_REPLIED))
flags_set |= IMAP_FLAG_ANSWERED;
if ( MSG_IS_REPLIED(msginfo->flags) && !(newflags & MSG_REPLIED))
- flags_set |= IMAP_FLAG_ANSWERED;
+ flags_unset |= IMAP_FLAG_ANSWERED;
+
+ if (!MSG_IS_DELETED(msginfo->flags) && (newflags & MSG_DELETED))
+ flags_set |= IMAP_FLAG_DELETED;
+ if ( MSG_IS_DELETED(msginfo->flags) && !(newflags & MSG_DELETED))
+ flags_unset |= IMAP_FLAG_DELETED;
numlist.next = NULL;
numlist.data = GINT_TO_POINTER(msginfo->msgnum);
GRelation *msgflags = stuff->msgflags;
IMAPSession *session;
GSList *sorted_list;
- GSList *unseen = NULL, *answered = NULL, *flagged = NULL;
- GSList *p_unseen, *p_answered, *p_flagged;
+ GSList *unseen = NULL, *answered = NULL, *flagged = NULL, *deleted = NULL;
+ GSList *p_unseen, *p_answered, *p_flagged, *p_deleted;
GSList *elem;
GSList *seq_list, *cur;
gboolean reverse_seen = FALSE;
flagged = g_slist_concat(flagged, uidlist);
}
+
+ r = imap_threaded_search(folder, IMAP_SEARCH_TYPE_DELETED,
+ imapset, &lep_uidlist);
+ if (r == MAILIMAP_NO_ERROR) {
+ GSList * uidlist;
+
+ uidlist = imap_uid_list_from_lep(lep_uidlist);
+ mailimap_search_result_free(lep_uidlist);
+
+ deleted = g_slist_concat(deleted, uidlist);
+ }
}
p_unseen = unseen;
p_answered = answered;
p_flagged = flagged;
+ p_deleted = deleted;
for (elem = sorted_list; elem != NULL; elem = g_slist_next(elem)) {
MsgInfo *msginfo;
}
if (gslist_find_next_num(&p_answered, msginfo->msgnum) == msginfo->msgnum)
flags |= MSG_REPLIED;
+ else
+ flags &= ~MSG_REPLIED;
if (gslist_find_next_num(&p_flagged, msginfo->msgnum) == msginfo->msgnum)
flags |= MSG_MARKED;
+ else
+ flags &= ~MSG_MARKED;
+ if (gslist_find_next_num(&p_deleted, msginfo->msgnum) == msginfo->msgnum)
+ flags |= MSG_DELETED;
+ else
+ flags &= ~MSG_DELETED;
g_relation_insert(msgflags, msginfo, GINT_TO_POINTER(flags));
}
imap_lep_set_free(seq_list);
g_slist_free(flagged);
+ g_slist_free(deleted);
g_slist_free(answered);
g_slist_free(unseen);
g_slist_free(sorted_list);
data->msginfo_list = msginfo_list;
data->msgflags = msgflags;
- if (prefs_common.work_offline && !imap_gtk_should_override()) {
+ if (prefs_common.work_offline && !inc_offline_should_override()) {
g_free(data);
return -1;
}