Files
Work/pop/HOLD/POPDLG.CPP
2024-08-07 09:16:27 -04:00

241 lines
6.8 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()-1);
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++)
{
String strIndex;
Block<String> mailBlock;
::sprintf(strIndex,"hello(%d)",itemIndex);
mailBlock.insert(&String("From: Sean Kessler<europa@li.net>"));
mailBlock.insert(&String(" "));
mailBlock.insert(&String("Sean Kessler wrote:"));
mailBlock.insert(&strIndex);
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+1));
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];
if(itemID<0)return;
for(int itemIndex=0;itemIndex<mailList.size();itemIndex++)
{
lineItem+=mailList[itemIndex];
lineItem+="\r\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]);
}