[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kmail-devel
Subject:    Re: Stuff I'm working on
From:       Zack Rusin <zack () kde ! org>
Date:       2002-09-10 13:30:41
[Download RAW message or body]

On Tuesday 10 September 2002 06:49, Mauro DePascale wrote:
> I'm also very interested into the KMFolder interface rework: those
> protocol == "imap" checks prevent me to add folders support to the
> Domino code.

Done. Well almost ;) It will be a gradual change. I want to first 
provide the same outside interfaces for all folders. Now they all 
bahave the same way, meaning that now instead of

if ( folder->protocol() == "imap" ) {
 KMImapJob *job = new KMImapJob( msg );
 connect( job, SIGNAL(messageRetrieved(KMMessage*)),
                this, SLOT(slotMsgTransfered(KMMessage*)) );
  connect( job, SIGNAL(finished()),
                 this, SLOT(slotJobFinished()) );
  msg->setTransferInProgress( true );
}  else {
  //something else here
}

we'll have

KMFolderJob *job = folder->createJob( msg );
connect( job, SIGNAL(messageRetrieved(KMMessage*)),
               this, SLOT(slotMsgTransfered(KMMessage*)) );
connect( job, SIGNAL(finished()),
               this, SLOT(slotJobFinished()) );
job->start();

Folders act as job factories. Right now I switched only IMAP to the new 
interface, today I'm planning on doing the same for maildir and mbox. 
Then remove all protocol() == "imap" codepaths. Then start working on 
plugin interface and fixing some interfaces. What you most probably 
want is ability to write a simple plugin that would allow to get Domino 
folder support in. The plugin I currently have in mind would most 
probably look as follows:

class KMFolderPlugin : public QObject 
{
  Q_OBJECT
public: 
  KMFolderPlugin( KMAccount *parent = 0L, const char *name = 0L );
  virtual ~KMFolderPlugin();

  virtual void init( QPtrList<KMMessage> msgList )=0;
  virtual void unload()=0;
  virtual const char* id() const;
public slots:
  virtual void retrieveMessage( int idx ) =0;
  virtual void retrieveMessage( KMMessage *msg ) =0;

  virtual void storeMessage( KMMessage *msg )=0;
  virtual void removeMessage( int idx )=0;
  virtual void removeMessage( KMMessage *msg )=0;
signals:
  void messageRetrieved( KMMessage*, bool );
  void messageStored( KMMessage*, bool );
  void messageRemoved( KMMessage*, bool );
};

Probably adding some functions dealing with message sets and operating 
on QPtrList would be a good idea. Anyway, I want KMFolder to act as a 
plugin manager - meaning that users could easily switch the format of 
the stored messages at run-time as long as the respective plugin would 
be present - from maildir to sql based, from mbox to maildir - 
anything. 

Zack

-- 
Jesus saves...Passes to Gretzky...Gretzky shoots...He SCORES! 

_______________________________________________
KMail Developers mailing list
kmail@mail.kde.org
http://mail.kde.org/mailman/listinfo/kmail
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic