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 * or Kari Hurtta ***************************************************************************** * 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: */