* fixed problem with stupid change of KProcess::setExecutable()

* added first version of a simple addressbook

svn path=/trunk/kdenetwork/kmail/; revision=3632
wilder-work
Stefan Taferner 29 years ago
parent e21970c315
commit f8397ccf9c
  1. 12
      Makefile.am
  2. 133
      kmaddrbook.cpp
  3. 58
      kmaddrbook.h
  4. 196
      kmaddrbookdlg.cpp
  5. 67
      kmaddrbookdlg.h
  6. 4
      kmglobal.h
  7. 7
      kmheaders.cpp
  8. 11
      kmmainwin.cpp
  9. 1
      kmmainwin.h
  10. 10
      kmmessage.cpp
  11. 8
      kmmessage.h
  12. 1
      kmmsgbase.h
  13. 40
      kmreaderwin.cpp
  14. 5
      kmsender.cpp
  15. 8
      main.cpp

@ -1,5 +1,5 @@
SUBDIRS = pics doc
INCLUDES = $(all_includes) -g
INCLUDES = $(all_includes)
LDADD = $(all_libraries) -lkhtmlw -ljscript -lkdeui -lkdecore -lqt -lXext -lX11 -lgif $(LIBJPEG) -lmimelib $(LIBSOCKET)
bin_PROGRAMS = kmail
@ -17,7 +17,8 @@ kmail_SOURCES = kmmainwin.cpp kmfolderdia.cpp kmfoldertree.cpp \
kmfilteraction.cpp kmidentity.cpp \
kmfolderseldlg.cpp kmfilter.cpp kmfilterdlg.cpp \
kmmsgbase.cpp kmmsglist.cpp kpgp.cpp \
kfileio.cpp keditcl1.cpp keditcl2.cpp
kfileio.cpp keditcl1.cpp keditcl2.cpp kmaddrbook.cpp \
kmaddrbookdlg.cpp
BUILT_SOURCES = kmmainwin.moc kmfolderdia.moc kmfolder.moc \
kmfoldertree.moc kmsettings.moc kmheaders.moc \
@ -26,7 +27,8 @@ BUILT_SOURCES = kmmainwin.moc kmfolderdia.moc kmfolder.moc \
kmacctmgr.moc kmfolderdir.moc kmfilteraction.moc \
kmfoldernode.moc kmacctseldlg.moc kmmsgpartdlg.moc \
kmimemagic.moc kmacctpop.moc kmaccount.moc \
kmfolderseldlg.moc kmfilterdlg.moc kpgp.moc keditcl.moc
kmfolderseldlg.moc kmfilterdlg.moc kpgp.moc keditcl.moc \
kmaddrbookdlg.moc
CLEAN_FILES = $(BUILT_SOURCES)
@ -147,3 +149,7 @@ kmmsgpartdlg.moc: kmmsgpartdlg.h
kpgp.cpp:kpgp.moc
kpgp.moc: kpgp.h
$(MOC) kpgp.h -o kpgp.moc
kmaddrbookdlg.cpp:kmaddrbookdlg.moc
kmaddrbookdlg.moc: kmaddrbookdlg.h
$(MOC) kmaddrbookdlg.h -o kmaddrbookdlg.moc

@ -0,0 +1,133 @@
// kmaddrbook.cpp
// Author: Stefan Taferner <taferner@kde.org>
// This code is under GPL
#include "kmaddrbook.h"
#include <kapp.h>
#include <qfile.h>
#include <assert.h>
//-----------------------------------------------------------------------------
KMAddrBook::KMAddrBook(): KMAddrBookInherited()
{
mModified = FALSE;
}
//-----------------------------------------------------------------------------
KMAddrBook::~KMAddrBook()
{
if (mModified) store();
writeConfig(FALSE);
}
//-----------------------------------------------------------------------------
void KMAddrBook::insert(const QString aAddress)
{
if (find(aAddress)<0)
{
inSort(aAddress);
mModified=TRUE;
}
}
//-----------------------------------------------------------------------------
void KMAddrBook::remove(const QString aAddress)
{
remove(aAddress);
mModified=TRUE;
}
//-----------------------------------------------------------------------------
void KMAddrBook::clear(void)
{
KMAddrBookInherited::clear();
mModified=TRUE;
}
//-----------------------------------------------------------------------------
void KMAddrBook::writeConfig(bool aWithSync)
{
KConfig* config = kapp->getConfig();
config->setGroup("Addressbook");
config->writeEntry("default", mDefaultFileName);
if (aWithSync) config->sync();
}
//-----------------------------------------------------------------------------
void KMAddrBook::readConfig(void)
{
KConfig* config = kapp->getConfig();
config->setGroup("Addressbook");
mDefaultFileName = config->readEntry("default");
if (mDefaultFileName.isEmpty())
mDefaultFileName = kapp->localkdedir()+"/share/apps/kmail/addressbook";
debug("addressbook: %s", mDefaultFileName.data());
}
//-----------------------------------------------------------------------------
int KMAddrBook::load(const char* aFileName)
{
char line[256];
const char* fname = (aFileName ? aFileName : (const char*)mDefaultFileName);
QFile file(fname);
assert(fname != NULL);
if (!file.open(IO_ReadOnly)) return file.status();
clear();
while (!file.atEnd())
{
if (file.readLine(line,255) < 0) return file.status();
if (line[strlen(line)-1] < ' ') line[strlen(line)-1] = '\0';
if (line[0]!='#' && line[0]!='\0') inSort(line);
}
file.close();
mModified = FALSE;
return IO_Ok;
}
//-----------------------------------------------------------------------------
int KMAddrBook::store(const char* aFileName)
{
char* addr;
const char* fname = (aFileName ? aFileName : (const char*)mDefaultFileName);
QFile file(fname);
assert(fname != NULL);
if (!file.open(IO_ReadWrite|IO_Truncate)) return file.status();
addr = "# kmail addressbook file\n";
if (file.writeBlock(addr,strlen(addr)) < 0) return file.status();
for (addr=first(); addr; addr=next())
{
if (file.writeBlock(addr,strlen(addr)) < 0) return file.status();
file.writeBlock("\n",1);
}
file.close();
mModified = FALSE;
return IO_Ok;
}
//-----------------------------------------------------------------------------
int KMAddrBook::compareItems(GCI aItem1, GCI aItem2)
{
return strcasecmp((const char*)aItem1, (const char*)aItem2);
}

@ -0,0 +1,58 @@
/* Simple Addressbook for KMail
* Author: Stefan Taferner <taferner@kde.org>
* This code is under GPL
*/
#ifndef KMAddrBook_h
#define KMAddrBook_h
#include <qstrlist.h>
#define KMAddrBookInherited QStrList
class KMAddrBook: protected QStrList
{
public:
KMAddrBook();
virtual ~KMAddrBook();
/** Insert given address to the addressbook. Sorted. Duplicate
addresses are not inserted. */
virtual void insert(const QString address);
/** Remove given address from the addressbook. */
virtual void remove(const QString address);
/** Returns first address in addressbook or NULL if addressbook is empty. */
virtual const char* first(void) { return KMAddrBookInherited::first(); }
/** Returns next address in addressbook or NULL. */
virtual const char* next(void) { return KMAddrBookInherited::next(); }
/** Clear addressbook (remove the contents). */
virtual void clear(void);
/** Open addressbook file and read contents. The default addressbook
file is used if no filename is given.
Returns IO_Ok on success and an IO device status on failure -- see
QIODevice::status(). */
virtual int load(const char* fileName=NULL);
/** Store addressbook in file or in same file of last load() call
if no filename is given. Returns IO_Ok on success and an IO device
status on failure -- see QIODevice::status(). */
virtual int store(const char* fileName=NULL);
/** Read/write configuration options. Uses the group "Addressbook"
in the app's config file. */
virtual void readConfig(void);
virtual void writeConfig(bool withSync=TRUE);
/** Test if the addressbook has unsaved changes. */
virtual bool modified(void) const { return mModified; }
protected:
virtual int compareItems(GCI item1, GCI item2);
QString mDefaultFileName;
bool mModified;
};
#endif /*KMAddrBook_h*/

@ -0,0 +1,196 @@
// kmaddrbookdlg.cpp
// Author: Stefan Taferner <taferner@kde.org>
#include "kmaddrbookdlg.h"
#include "kmaddrbook.h"
#include <assert.h>
#include <klocale.h>
#include <kapp.h>
//-----------------------------------------------------------------------------
KMAddrBookSelDlg::KMAddrBookSelDlg(KMAddrBook* aAddrBook, const char* aCap):
KMAddrBookSelDlgInherited(NULL, aCap, TRUE), mGrid(this, 2, 2),
mListBox(this),
mBtnOk(klocale->translate("Ok"),this),
mBtnCancel(klocale->translate("Cancel"),this)
{
const char* addr;
initMetaObject();
assert(aAddrBook != NULL);
mAddrBook = aAddrBook;
mAddress = 0;
mBtnOk.adjustSize();
mBtnOk.setMinimumSize(mBtnOk.size());
mBtnCancel.adjustSize();
mBtnCancel.setMinimumSize(mBtnCancel.size());
mGrid.addMultiCellWidget(&mListBox, 0, 0, 0, 1);
mGrid.addWidget(&mBtnOk, 1, 0);
mGrid.addWidget(&mBtnCancel, 1, 1);
mGrid.setRowStretch(0,10);
mGrid.setRowStretch(1,0);
mGrid.setColStretch(0,10);
mGrid.setColStretch(1,10);
mGrid.activate();
connect(&mBtnOk, SIGNAL(clicked()), SLOT(slotOk()));
connect(&mBtnCancel, SIGNAL(clicked()), SLOT(slotCancel()));
for (addr=mAddrBook->first(); addr; addr=mAddrBook->next())
{
mListBox.insertItem(addr);
}
}
//-----------------------------------------------------------------------------
KMAddrBookSelDlg::~KMAddrBookSelDlg()
{
}
//-----------------------------------------------------------------------------
void KMAddrBookSelDlg::slotOk()
{
int idx = mListBox.currentItem();
if (idx>=0) mAddress = mListBox.text(idx);
else mAddress = 0;
accept();
}
//-----------------------------------------------------------------------------
void KMAddrBookSelDlg::slotCancel()
{
mAddress = 0;
reject();
}
//=============================================================================
//
// Class KMAddrBookEditDlg
//
//=============================================================================
KMAddrBookEditDlg::KMAddrBookEditDlg(KMAddrBook* aAddrBook, const char* aCap):
KMAddrBookEditDlgInherited(NULL, aCap, TRUE), mGrid(this, 3, 4),
mListBox(this), mEdtAddress(this),
mBtnOk(klocale->translate("Ok"),this),
mBtnCancel(klocale->translate("Cancel"),this),
mBtnAdd(klocale->translate("Add"),this),
mBtnRemove(klocale->translate("Remove"),this)
{
const char* addr;
initMetaObject();
assert(aAddrBook != NULL);
mAddrBook = aAddrBook;
mEdtAddress.adjustSize();
mEdtAddress.setMinimumSize(mEdtAddress.size());
mBtnOk.adjustSize();
mBtnOk.setMinimumSize(mBtnOk.size());
mBtnCancel.adjustSize();
mBtnCancel.setMinimumSize(mBtnCancel.size());
mBtnAdd.adjustSize();
mBtnAdd.setMinimumSize(mBtnAdd.size());
mBtnRemove.adjustSize();
mBtnRemove.setMinimumSize(mBtnRemove.size());
mGrid.addMultiCellWidget(&mListBox, 0, 0, 0, 3);
mGrid.addMultiCellWidget(&mEdtAddress, 1, 1, 0, 3);
mGrid.addWidget(&mBtnOk, 2, 0);
mGrid.addWidget(&mBtnCancel, 2, 1);
mGrid.addWidget(&mBtnAdd, 2, 2);
mGrid.addWidget(&mBtnRemove, 2, 3);
mGrid.setRowStretch(0,10);
mGrid.setRowStretch(1,0);
mGrid.setRowStretch(2,0);
mGrid.setColStretch(0,10);
mGrid.setColStretch(1,10);
mGrid.setColStretch(2,10);
mGrid.setColStretch(3,10);
mGrid.activate();
connect(&mListBox, SIGNAL(highlighted(const char*)),
SLOT(slotLbxHighlighted(const char*)));
connect(&mBtnOk, SIGNAL(clicked()), SLOT(slotOk()));
connect(&mBtnCancel, SIGNAL(clicked()), SLOT(slotCancel()));
connect(&mBtnAdd, SIGNAL(clicked()), SLOT(slotAdd()));
connect(&mBtnRemove, SIGNAL(clicked()), SLOT(slotRemove()));
for (addr=mAddrBook->first(); addr; addr=mAddrBook->next())
{
mListBox.insertItem(addr);
}
}
//-----------------------------------------------------------------------------
KMAddrBookEditDlg::~KMAddrBookEditDlg()
{
}
//-----------------------------------------------------------------------------
void KMAddrBookEditDlg::slotLbxHighlighted(const char* aItem)
{
mEdtAddress.setText(aItem);
}
//-----------------------------------------------------------------------------
void KMAddrBookEditDlg::slotOk()
{
int idx, num;
const char* addr;
mAddrBook->clear();
num = mListBox.count();
for(idx=0; idx<num; idx++)
{
addr = mListBox.text(idx);
mAddrBook->insert(addr);
}
mAddrBook->store();
accept();
}
//-----------------------------------------------------------------------------
void KMAddrBookEditDlg::slotCancel()
{
reject();
}
//-----------------------------------------------------------------------------
void KMAddrBookEditDlg::slotAdd()
{
const char* addr = mEdtAddress.text();
if (!addr || !*addr) return;
mListBox.insertItem(addr, mListBox.currentItem());
}
//-----------------------------------------------------------------------------
void KMAddrBookEditDlg::slotRemove()
{
int idx = mListBox.currentItem();
if (idx >= 0) mListBox.removeItem(idx);
}
//-----------------------------------------------------------------------------
#include "kmaddrbookdlg.moc"

@ -0,0 +1,67 @@
/* KMail Addressbook selection and edit dialog classes
* Author: Stefan Taferner <taferner@kde.org>
* This code is under GPL
*/
#ifndef kmaddrbookdlg_h
#define kmaddrbookdlg_h
#include <qdialog.h>
#include <qpushbt.h>
#include <qlistbox.h>
#include <qlined.h>
#include <qlayout.h>
class KMAddrBook;
#define KMAddrBookSelDlgInherited QDialog
class KMAddrBookSelDlg: public QDialog
{
Q_OBJECT
public:
KMAddrBookSelDlg(KMAddrBook* addrBook, const char* caption);
virtual ~KMAddrBookSelDlg();
/** returns selected address or NULL if none was selected or the cancel
button was pressed. */
virtual const QString address(void) const { return mAddress; }
protected slots:
void slotOk();
void slotCancel();
protected:
KMAddrBook* mAddrBook;
QGridLayout mGrid;
QListBox mListBox;
QPushButton mBtnOk, mBtnCancel;
QString mAddress;
};
//-----------------------------------------------------------------------------
#define KMAddrBookEditDlgInherited QDialog
class KMAddrBookEditDlg: public QDialog
{
Q_OBJECT
public:
KMAddrBookEditDlg(KMAddrBook* addrBook, const char* caption);
virtual ~KMAddrBookEditDlg();
protected slots:
void slotOk();
void slotCancel();
void slotAdd();
void slotRemove();
void slotLbxHighlighted(const char* item);
protected:
KMAddrBook* mAddrBook;
QGridLayout mGrid;
QListBox mListBox;
QLineEdit mEdtAddress;
QPushButton mBtnOk, mBtnCancel, mBtnAdd, mBtnRemove;
};
#endif /*kmaddrbookdlg_h*/

@ -49,6 +49,10 @@ extern KStdAccel* keys;
class KMFilterMgr;
extern KMFilterMgr* filterMgr;
/** Addressbook. */
class KMAddrBook;
extern KMAddrBook* addrBook;
/** Dictionary of available mail filter actions. */
class KMFilterActionDict;
extern KMFilterActionDict* filterActionDict;

@ -25,13 +25,14 @@ KMHeaders::KMHeaders(KMMainWin *aOwner, QWidget *parent=0,
{
QString kdir = app->kdedir();
KIconLoader* loader = app->getIconLoader();
static QPixmap pixNew, pixUns, pixDel, pixOld, pixRep, pixSent, pixQueued;
static QPixmap pixNew, pixUns, pixDel, pixOld, pixRep, pixSent, pixQueued,
pixFwd;
mOwner = aOwner;
mFolder = NULL;
getMsgIndex = -1;
setColumn(0, nls->translate("F"), 16, KMHeadersInherited::PixmapColumn);
setColumn(0, nls->translate("F"), 17, KMHeadersInherited::PixmapColumn);
setColumn(1, nls->translate("Sender"), 200);
setColumn(2, nls->translate("Subject"), 270);
setColumn(3, nls->translate("Date"), 300);
@ -44,12 +45,14 @@ KMHeaders::KMHeaders(KMMainWin *aOwner, QWidget *parent=0,
pixRep = loader->loadIcon("kmmsgreplied.xpm");
pixQueued= loader->loadIcon("kmmsgqueued.xpm");
pixSent = loader->loadIcon("kmmsgsent.xpm");
pixFwd = loader->loadIcon("kmmsgforwarded.xpm");
dict().insert(KMMsgBase::statusToStr(KMMsgStatusNew), &pixNew);
dict().insert(KMMsgBase::statusToStr(KMMsgStatusUnread), &pixUns);
dict().insert(KMMsgBase::statusToStr(KMMsgStatusDeleted), &pixDel);
dict().insert(KMMsgBase::statusToStr(KMMsgStatusOld), &pixOld);
dict().insert(KMMsgBase::statusToStr(KMMsgStatusReplied), &pixRep);
dict().insert(KMMsgBase::statusToStr(KMMsgStatusForwarded), &pixFwd);
dict().insert(KMMsgBase::statusToStr(KMMsgStatusQueued), &pixQueued);
dict().insert(KMMsgBase::statusToStr(KMMsgStatusSent), &pixSent);

@ -20,6 +20,7 @@
#include "kmfiltermgr.h"
#include "kmversion.h"
#include "kmsender.h"
#include "kmaddrbookdlg.h"
#include <qaccel.h>
#include <qstring.h>
@ -241,6 +242,14 @@ void KMMainWin::slotFilter()
}
//-----------------------------------------------------------------------------
void KMMainWin::slotAddrBook()
{
KMAddrBookEditDlg dlg(addrBook, nls->translate("Addressbook"));
dlg.exec();
}
//-----------------------------------------------------------------------------
void KMMainWin::slotUnimplemented()
{
@ -570,6 +579,8 @@ void KMMainWin::setupMenuBar()
SLOT(slotSettings()));
fileMenu->insertItem(nls->translate("&Filter..."), this,
SLOT(slotFilter()));
fileMenu->insertItem(nls->translate("&Addressbook..."), this,
SLOT(slotAddrBook()));
fileMenu->insertSeparator();
fileMenu->insertItem(nls->translate("&Close"), this,
SLOT(slotClose()), keys->close());

@ -62,6 +62,7 @@ protected slots:
void slotNewMailReader();
void slotSettings();
void slotFilter();
void slotAddrBook();
void slotUnimplemented();
void slotViewChange();
void slotAddFolder();

@ -118,6 +118,7 @@ const QString KMMessage::id(void) const
return "";
}
//-----------------------------------------------------------------------------
#ifdef KRN
const QString KMMessage::refsAsAnchor(const QString references)
{
@ -150,7 +151,6 @@ const QString KMMessage::refsAsAnchor(const QString references)
return result.data();
}
#endif
/* End of functions added by KRN */
@ -312,7 +312,7 @@ const QString KMMessage::asQuotedString(const QString aHeaderStr,
//-----------------------------------------------------------------------------
KMMessage* KMMessage::createReply(bool replyToAll) const
KMMessage* KMMessage::createReply(bool replyToAll)
{
KMMessage* msg = new KMMessage;
QString str, replyStr, loopToStr, replyToStr, toStr;
@ -348,12 +348,14 @@ KMMessage* KMMessage::createReply(bool replyToAll) const
msg->setSubject("Re: " + subject());
else msg->setSubject(subject());
setStatus(KMMsgStatusReplied);
return msg;
}
//-----------------------------------------------------------------------------
KMMessage* KMMessage::createForward(void) const
KMMessage* KMMessage::createForward(void)
{
KMMessage* msg = new KMMessage;
QString str;
@ -371,6 +373,8 @@ KMMessage* KMMessage::createForward(void) const
msg->setSubject("Fwd: " + subject());
else msg->setSubject(subject());
setStatus(KMMsgStatusForwarded);
return msg;
}

@ -44,13 +44,13 @@ public:
/** Create a new message that is a reply to this message, filling all
required header fields with the proper values. The returned message
is not stored in any folder. */
virtual KMMessage* createReply(bool replyToAll=FALSE) const;
is not stored in any folder. Marks this message as replied. */
virtual KMMessage* createReply(bool replyToAll=FALSE);
/** Create a new message that is a forward of this message, filling all
required header fields with the proper values. The returned message
is not stored in any folder. */
virtual KMMessage* createForward(void) const;
is not stored in any folder. Marks this message as forwarded. */
virtual KMMessage* createForward(void);
/** Parse the string and create this message from it. */
virtual void fromString(const QString str);

@ -16,6 +16,7 @@ typedef enum
KMMsgStatusOld='O',
KMMsgStatusDeleted='D',
KMMsgStatusReplied='A',
KMMsgStatusForwarded='F',
KMMsgStatusQueued='Q',
KMMsgStatusSent='S'
} KMMsgStatus;

@ -205,15 +205,12 @@ void KMReaderWin::parseMsg(void)
{
str = msgPart.bodyDecoded();
if (str.size() > 100 && i>0) writePartIcon(&msgPart, i);
else if (stricmp(subtype, "html")==0)
{
if (i>0) mViewer->write("<BR><HR><BR>");
mViewer->write(str);
}
else
{
if (i>0) mViewer->write("<BR><HR><BR>");
writeBodyStr(str);
if (stricmp(subtype, "html")==0) mViewer->write(str);
else writeBodyStr(str);
}
}
else
@ -546,17 +543,34 @@ void KMReaderWin::slotUrlPopup(const char* aUrl, const QPoint& aPos)
//-----------------------------------------------------------------------------
void KMReaderWin::slotAtmOpen()
{
QString str, pname, cmd;
char* fileName;
QString str, pname, cmd, fileName;
char* tmpName;
int c;
KMMessagePart msgPart;
mMsg->bodyPart(mAtmCurrent, &msgPart);
pname = msgPart.name();
if (pname.isEmpty()) pname="unnamed";
fileName = tempnam("/tmp", NULL);
strcat(fileName, "-");
strcat(fileName, (const char*)pname);
tmpName = tempnam(NULL, NULL);
if (!tmpName)
{
warning(nls->translate("Could not create temporary file"));
return;
}
fileName = tmpName;
free(tmpName);
fileName += '-';
fileName += pname;
// remove quotes from the filename so that the shell does not get confused
c = 0;
while ((c = fileName.find('"', c)) >= 0)
fileName.remove(c, 1);
c = 0;
while ((c = fileName.find('\'', c)) >= 0)
fileName.remove(c, 1);
kbp->busy();
str = msgPart.bodyDecoded();
@ -564,9 +578,9 @@ void KMReaderWin::slotAtmOpen()
warning(nls->translate("Could not save temporary file %s"),
(const char*)fileName);
kbp->idle();
cmd = "kfmclient openURL \"";
cmd = "kfmclient openURL \'";
cmd += fileName;
cmd += "\"";
cmd += "\'";
debug(cmd);
system(cmd);
}

@ -31,7 +31,7 @@ KMSender::KMSender()
KMSender::~KMSender()
{
if (mMailerProc) delete mMailerProc;
writeConfig(TRUE);
writeConfig(FALSE);
}
@ -257,9 +257,8 @@ bool KMSender::sendMail(KMMessage* aMsg)
assert(mMailerProc != NULL);
mMailerProc->clearArguments();
*mMailerProc << aMsg->to();
*mMailerProc << mMailer << aMsg->to();
mMailerProc->setExecutable(mMailer);
mMailerProc->start(KProcess::DontCare, KProcess::Stdin);
if (!mMailerProc->writeStdin(msgstr.data(), msgstr.length()))
return FALSE;

@ -15,6 +15,7 @@
#include "kmversion.h"
#include "kmmessage.h"
#include "kmcomposewin.h"
#include "kmaddrbook.h"
#include <kapp.h>
#include <stdio.h>
@ -41,6 +42,8 @@ KMFolder* trashFolder = NULL;
KStdAccel* keys = NULL;
KMIdentity* identity = NULL;
KMFilterActionDict* filterActionDict = NULL;
KMAddrBook* addrBook = NULL;
bool shuttingDown = FALSE;
const char* aboutText =
"KMail [" KMAIL_VERSION "] by\n\n"
@ -161,6 +164,7 @@ static void init(int argc, char *argv[])
acctMgr = new KMAcctMgr(acctPath);
filterMgr = new KMFilterMgr;
filterActionDict = new KMFilterActionDict;
addrBook = new KMAddrBook;
inboxFolder = (KMFolder*)folderMgr->findOrCreate(
cfg->readEntry("inboxFolder", "inbox"));
@ -180,6 +184,8 @@ static void init(int argc, char *argv[])
acctMgr->readConfig();
filterMgr->readConfig();
addrBook->readConfig();
addrBook->load();
KMMessage::readConfig();
msgSender = new KMSender;
@ -197,6 +203,7 @@ static void cleanup(void)
if (trashFolder) trashFolder->close(TRUE);
if (msgSender) delete msgSender;
if (addrBook) delete addrBook;
if (filterMgr) delete filterMgr;
if (acctMgr) delete acctMgr;
if (folderMgr) delete folderMgr;
@ -211,7 +218,6 @@ static void cleanup(void)
main(int argc, char *argv[])
{
KMMainWin* mainWin;
KMComposeWin* comp;
init(argc, argv);

Loading…
Cancel
Save