242 lines
6.7 KiB
C++
242 lines
6.7 KiB
C++
#include <pop/popdlg.hpp>
|
|
#include <pop/srvrdlg.hpp>
|
|
#include <pop/popclnt.hpp>
|
|
#include <pop/srvrreg.hpp>
|
|
#include <pop/logindlg.hpp>
|
|
#include <pop/header.hpp>
|
|
#include <pop/mail.hpp>
|
|
#include <common/systime.hpp>
|
|
#include <common/opendlg.hpp>
|
|
#include <statbar/statbar.hpp>
|
|
#include <imagelst/ftree.hpp>
|
|
|
|
POPDlg::POPDlg(void)
|
|
{
|
|
mInitHandler.setCallback(this,&POPDlg::initHandler);
|
|
mDestroyHandler.setCallback(this,&POPDlg::destroyHandler);
|
|
mCommandHandler.setCallback(this,&POPDlg::commandHandler);
|
|
mCloseHandler.setCallback(this,&POPDlg::closeHandler);
|
|
mDlgCodeHandler.setCallback(this,&POPDlg::dlgCodeHandler);
|
|
mMailSelChangedHandler.setCallback(this,&POPDlg::mailSelChangedHandler);
|
|
DWindow::insertHandler(VectorHandler::InitDialogHandler,&mInitHandler);
|
|
DWindow::insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
|
DWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
|
DWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler);
|
|
DWindow::insertHandler(VectorHandler::DialogCodeHandler,&mDlgCodeHandler);
|
|
}
|
|
|
|
POPDlg::~POPDlg()
|
|
{
|
|
DWindow::removeHandler(VectorHandler::InitDialogHandler,&mInitHandler);
|
|
DWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
|
DWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
|
DWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler);
|
|
DWindow::insertHandler(VectorHandler::DialogCodeHandler,&mDlgCodeHandler);
|
|
}
|
|
|
|
POPDlg &POPDlg::operator=(const POPDlg &/*somePOPDlg*/)
|
|
{ // private implementation
|
|
return *this;
|
|
}
|
|
|
|
BOOL POPDlg::perform(void)
|
|
{
|
|
return ::DialogBoxParam(processInstance(),(LPSTR)"POPCLIENT",(HWND)0,DWindow::DlgProc,(LPARAM)(DWindow*)this);
|
|
}
|
|
|
|
|
|
CallbackData::ReturnType POPDlg::initHandler(CallbackData &/*someCallbackData*/)
|
|
{
|
|
mStatusBar=new StatusBar(*this);
|
|
mFolderTree=new FolderTree(*this,Rect(xFolder,yFolder,cxFolder,cyFolder));
|
|
mMailTree=new FolderTree(*this,Rect(xMail,yMail,cxMail,cyMail));
|
|
mMailTree->insertHandler(FolderTree::SelChangedHandler,&mMailSelChangedHandler);
|
|
|
|
|
|
|
|
|
|
mStatusBar.disposition(PointerDisposition::Delete);
|
|
// getMail();
|
|
// retrieveMail();
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType POPDlg::destroyHandler(CallbackData &/*someCallbackData*/)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType POPDlg::dlgCodeHandler(CallbackData &/*someCallbackData*/)
|
|
{
|
|
return (CallbackData::ReturnType)DLGC_WANTARROWS|DLGC_WANTCHARS;
|
|
}
|
|
|
|
CallbackData::ReturnType POPDlg::commandHandler(CallbackData &someCallbackData)
|
|
{
|
|
switch(someCallbackData.wmCommandID())
|
|
{
|
|
case IDOK :
|
|
break;
|
|
case IDCANCEL :
|
|
endDialog(FALSE);
|
|
break;
|
|
case Server :
|
|
handleServer(someCallbackData);
|
|
break;
|
|
case GetMail :
|
|
getMail();
|
|
break;
|
|
}
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType POPDlg::closeHandler(CallbackData &/*someCallbackData*/)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType POPDlg::mailSelChangedHandler(CallbackData &someCallbackData)
|
|
{
|
|
setDisplay(someCallbackData.loWord());
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
void POPDlg::handleServer(CallbackData &someCallbackData)
|
|
{
|
|
ServerDialog serverDialog(*this);
|
|
serverDialog.performDialog();
|
|
}
|
|
|
|
void POPDlg::getMail(void)
|
|
{
|
|
retrieveMail();
|
|
populateMail();
|
|
populateFolders();
|
|
}
|
|
|
|
void POPDlg::retrieveMail(void)
|
|
{
|
|
mMailBlock.remove();
|
|
|
|
for(int itemIndex=0;itemIndex<20;itemIndex++)
|
|
{
|
|
Block<String> mailBlock;
|
|
mailBlock.insert(&String("From: Sean Kessler<europa@li.net>"));
|
|
mailBlock.insert(&String(" "));
|
|
mailBlock.insert(&String("Sean Kessler wrote:"));
|
|
mailBlock.insert(&String("hello"));
|
|
mMailBlock.insert(&Mail(mailBlock));
|
|
}
|
|
}
|
|
|
|
#if 0
|
|
void POPDlg::retrieveMail(void)
|
|
{
|
|
POPClient popClient;
|
|
ServerReg serverReg;
|
|
WORD messages;
|
|
WORD octets;
|
|
|
|
mMailBlock.remove();
|
|
if(!handleLoginParams(serverReg)){userMessage("Incorrect Login.");return;}
|
|
if(!popClient.open(serverReg.serverName())){userMessage("Connect Failed..");return;}
|
|
if(!popClient.authenticate(serverReg.userName(),serverReg.password()))
|
|
{
|
|
popClient.quit();
|
|
popClient.close();
|
|
userMessage("Authentication Failed.");
|
|
return;
|
|
}
|
|
popClient.stat(messages,octets);
|
|
if(!messages){userMessage("No Messages.");return;}
|
|
for(int msgIndex=1;msgIndex<=messages;msgIndex++)
|
|
{
|
|
mMailBlock.insert(&Mail());
|
|
Block<String> &msgLines=mMailBlock[mMailBlock.size()-1];
|
|
Header &mailHeader=mMailBlock[mMailBlock.size()-1];
|
|
popClient.retrieve(msgIndex,msgLines);
|
|
mailHeader=msgLines;
|
|
if(!msgLines.size())continue;
|
|
}
|
|
popClient.quit();
|
|
popClient.close();
|
|
}
|
|
#endif
|
|
|
|
BOOL POPDlg::handleLoginParams(ServerReg &serverReg)
|
|
{
|
|
if(serverReg.serverName().isNull()){::MessageBox(*this,(LPSTR)"No Server Defined",(LPSTR)"SERVER ERROR",MB_ICONSTOP);return FALSE;}
|
|
if(serverReg.userName().isNull()||serverReg.password().isNull())
|
|
{
|
|
String userName;
|
|
String password;
|
|
LoginDialog loginDialog;
|
|
if(!loginDialog.performLogin())return FALSE;
|
|
userName=loginDialog.userName();
|
|
password=loginDialog.password();
|
|
serverReg.userName(userName);
|
|
serverReg.password(password);
|
|
}
|
|
if(serverReg.userName().isNull()||serverReg.password().isNull())return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
void POPDlg::populateMail(void)
|
|
{
|
|
String strMailBox(STRING_MAILBOXNAME);
|
|
|
|
mMailTree->setRedraw(FALSE);
|
|
mMailTree->remove();
|
|
mMailTree->addRootNode(FolderTree::FolderClosed,strMailBox,makeItemID(NullNode,RootID));
|
|
for(int itemIndex=0;itemIndex<mMailBlock.size();itemIndex++)
|
|
{
|
|
TreeViewItem insertItem(0,0,0,0,(LPSTR)mMailBlock[itemIndex].from(),mMailBlock[itemIndex].from().length(),FolderTree::FolderClosed,FolderTree::FolderOpen,0,makeItemID(MailNode,itemIndex));
|
|
mMailTree->addNode(TreeView::NodeChild,insertItem,strMailBox);
|
|
|
|
}
|
|
mMailTree->setRedraw(TRUE);
|
|
}
|
|
|
|
void POPDlg::populateFolders(void)
|
|
{
|
|
String strUserFolder(STRING_USERFOLDERNAME);
|
|
|
|
mFolderTree->setRedraw(FALSE);
|
|
mFolderTree->remove();
|
|
mFolderTree->addRootNode(FolderTree::FolderClosed,strUserFolder,makeItemID(NullNode,RootID));
|
|
mFolderTree->setRedraw(TRUE);
|
|
}
|
|
|
|
void POPDlg::setDisplay(int itemID)
|
|
{
|
|
String lineItem;
|
|
Block<String> &mailList=mMailBlock[itemID];
|
|
|
|
for(int itemIndex=0;itemIndex<mailList.size();itemIndex++)
|
|
{
|
|
lineItem=mailList[itemIndex];
|
|
lineItem+="\n";
|
|
}
|
|
setText(EditControl,(LPSTR)lineItem);
|
|
}
|
|
|
|
void POPDlg::userMessage(const String &message)
|
|
{
|
|
::MessageBox(*this,(LPSTR)(String&)message,(LPSTR)"POPClient",MB_OK);
|
|
}
|
|
|
|
// **************** virtuals
|
|
|
|
void POPDlg::message(const String &messageString)
|
|
{
|
|
if(!mStatusBar.isOkay())return;
|
|
mStatusBar->setText(messageString);
|
|
}
|
|
|
|
void POPDlg::message(Block<String> &messageStrings)
|
|
{
|
|
if(!mStatusBar.isOkay())return;
|
|
for(int lineIndex=0;lineIndex<messageStrings.size();lineIndex++)
|
|
mStatusBar->setText(messageStrings[lineIndex]);
|
|
}
|