static char rcsid[] = "@(#)$Id: openmailbox.c,v 1.5 2007/08/18 09:09:09 hurtta Exp $";
/******************************************************************************
* The Elm (ME+) Mail System - $Revision: 1.5 $ $State: Exp $
*
* Author: Kari Hurtta <hurtta+elm@posti.FMI.FI>
* or Kari Hurtta <elm@elmme-mailer.org>
*****************************************************************************
* This routine mimics some routines from src/quit.c
* That code was following copyright:
*
* The Elm Mail System
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*****************************************************************************/
#include "def_elm.h"
#include "s_me.h"
DEBUG_VAR(Debug,__FILE__,"ELM");
/* Opens new mailbox to current mailbox view without closing current mailbox */
void OpenMailbox(mailbox,aview,page)
struct MailboxView *mailbox;
struct AliasView *aview;
struct menu_context *page;
{
struct folder_info *new_folder = NULL;
struct folder_browser * XXX = new_browser(selection_folder);
struct string * buffer = NULL;
int mc, old;
ask_again:
while(1) {
int mbc,i;
new_folder = folder_browser(page,
XXX,&buffer,
aview,
CATGETS(elm_msg_cat, MeSet,
MeAskOpenFolder,
"Open which folder: "));
if (!new_folder)
break;
DPRINT(Debug,3,(&Debug,
"OpenMailbox(%p): new folder = %p\n",
mailbox,new_folder));
mbc = get_storage_count(mailbox);
for (i = 0; i < mbc; i++) {
struct current_storage *storage = get_storage(mailbox,i);
if (!storage)
continue;
/* do not accept the same file as the current */
if (storage->current_folder &&
selection_is_folder(XXX,storage->current_folder)) {
lib_error(CATGETS(elm_msg_cat, MeSet,
MeFolderAlreadyOpened,
"Folder %S is already opened to current view."),
buffer);
/* Closing of IMAP folder may clear that error message
* se sleep on here ...
*/
FlushBuffer();
sleep_message();
leave_old_folder(&new_folder,CLOSE_NORMAL);
goto ask_again; /* prompt again */
}
}
/* Make sure this is a file the user can open, unless it is
* the default mailfile, which is openable even if empty
*/
if (!sessionlock_folder(new_folder,SESSIONLOCK_CHECK)) {
leave_old_folder(&new_folder,CLOSE_NORMAL);
continue; /* prompt again */
}
break; /* exit loop - we got the name of a good file */
}
if (!new_folder)
return;
old = get_selected(mailbox);
if (old) {
DPRINT(Debug,4,(&Debug,
"OpenMailbox: %d messages was selected.\n",old));
}
add_new_mailbox(new_folder,mailbox,page);
mc = get_message_count(mailbox);
DPRINT(Debug,4,(&Debug,
"OpenMailbox: %d messages total.\n",mc));
if (old) {
int i, selected = 0;
for (i = 0; i < mc; i++) {
if ( ison_status_message(mailbox,i,status_basic,VISIBLE))
selected++;
}
DPRINT(Debug,4,(&Debug," -> Now %d messages selected (was %d).\n",
selected,old));
set_selected(mailbox,selected);
}
}
void OpenMailboxPost(mailbox,page,LOC)
struct MailboxView *mailbox;
struct menu_context *page;
struct screen_parts *LOC;
{
{
struct menu_common MENU;
set_mcommon_from_mbxview(&MENU,mailbox);
get_page(&MENU, LOC->header_page); /* resort_mailbox no longer call get_page() */
}
menu_trigger_redraw(LOC->header_page);
menu_trigger_redraw(LOC->title_page);
}
/*
* Local Variables:
* mode:c
* c-basic-offset:4
* buffer-file-coding-system: iso-8859-1
* End:
*/
syntax highlighted by Code2HTML, v. 0.9.1