Normal
Hey <ok|, I guess I'd have to say it is stalled at best! - I've had even less time than anticipated and its only going to get worse over these next few months as we're hitting a crunch at work.If you are happy to pick this up then go for it! I've uploaded my sources which you are free to continue with or ignore as you want!http://www.topflat.charitydays.co.uk/mp/messaging/MESSAGING_MERGED_9_JULY_2006.zipIt sounds like our aims are similar.My sources are stripped down/refactoring of mymail. Now called MyMessages.My ambition was to have a common messaging plugin that could be extended to support any number of 'providers'. It was to make adding new providers really simple since all the GUI, Database, Notifications etc should be common.My zip includes my stubbed out class design, I added a message database and config loading for abstract provider. I was starting with the pop3 provider - began moving over agrees mymail implementation code.The code I have kicks off a timer thread for each provider at low priority and would every N seconds retrieve new messages.There is a ComplexMatch class there I wrote which will do filtering on multiple fields. (strings only atm, but was to be extended to numbers, dates etc). It supports REGEXP. Expressions of this sort can be written:((PROVIDER IS POP3) AND (SENDER CONTAINS "Bob"))My idea was that all messages (from all providers) would get put into the single database.Providers would be defined via the MP config app:MyMessages Setup:-Add Provider:***********************--Generic Params:---Message Count (so only newest N messages from each provider are held in the DB).--Specifiy Type (eg POP3)---Type Specific Params: Server etc.-Add Folder(View):***********************--Folder Name--Folder FilterString (for ComplexMatch).--Notify? (on/off)--Notification Count (so every Nth message that qualifies for this folder triggers a GUI notification popup).A single message can match zero, one or more filters (folders). The folder's filter is run on each message as it's retrieved from the provider and a bitmask of matched folders is created and stored with the message in the database. It's then easy at viewing time to determine which messages match a specific folder view.Supporting user defined folders via filterstrings allows for rich expression of views. Regular (common) views such as 'Not Read' can be added via this too. Users can dump all messages from all providers into a single folder or have folder per provider, per sender, per receiver etc etcThe notification count is used so that high-frequency folders don't keep swamping the user with popups.The provider message count is used so that user doesn't have to worry about deleteing messages - the database is self-trimming - it's just a 'cached view' onto the newest messages (from each provider).Other provider types (these exist as multiple plugins, but my hope was that if a single abstract messaging plugin could be show to work (for pop3) that these would be integrated here.):- Forums- SVN Checkins- GMail- MSN MessageretcThe interface with the Provider resolves to something as simple as:IProvider::RefreshNewestMessages( int count )How a provider gets its messages is an implementation detail (provider specific).Hope all this makes sense - none of it is that complicated, but I think would provide for a really powerful and flexible yet consistent system.As I say feel free to ignore my ramblings/ideas!Cheers,BigJ
Hey <ok|, I guess I'd have to say it is stalled at best! - I've had even less time than anticipated and its only going to get worse over these next few months as we're hitting a crunch at work.
If you are happy to pick this up then go for it! I've uploaded my sources which you are free to continue with or ignore as you want!
http://www.topflat.charitydays.co.uk/mp/messaging/MESSAGING_MERGED_9_JULY_2006.zip
It sounds like our aims are similar.
My sources are stripped down/refactoring of mymail. Now called MyMessages.
My ambition was to have a common messaging plugin that could be extended to support any number of 'providers'. It was to make adding new providers really simple since all the GUI, Database, Notifications etc should be common.
My zip includes my stubbed out class design, I added a message database and config loading for abstract provider. I was starting with the pop3 provider - began moving over agrees mymail implementation code.
The code I have kicks off a timer thread for each provider at low priority and would every N seconds retrieve new messages.
There is a ComplexMatch class there I wrote which will do filtering on multiple fields. (strings only atm, but was to be extended to numbers, dates etc). It supports REGEXP. Expressions of this sort can be written:
((PROVIDER IS POP3) AND (SENDER CONTAINS "Bob"))
My idea was that all messages (from all providers) would get put into the single database.
Providers would be defined via the MP config app:
MyMessages Setup:
-Add Provider:
***********************
--Generic Params:
---Message Count (so only newest N messages from each provider are held in the DB).
--Specifiy Type (eg POP3)
---Type Specific Params: Server etc.
-Add Folder(View):
--Folder Name
--Folder FilterString (for ComplexMatch).
--Notify? (on/off)
--Notification Count (so every Nth message that qualifies for this folder triggers a GUI notification popup).
A single message can match zero, one or more filters (folders). The folder's filter is run on each message as it's retrieved from the provider and a bitmask of matched folders is created and stored with the message in the database. It's then easy at viewing time to determine which messages match a specific folder view.
Supporting user defined folders via filterstrings allows for rich expression of views. Regular (common) views such as 'Not Read' can be added via this too. Users can dump all messages from all providers into a single folder or have folder per provider, per sender, per receiver etc etc
The notification count is used so that high-frequency folders don't keep swamping the user with popups.
The provider message count is used so that user doesn't have to worry about deleteing messages - the database is self-trimming - it's just a 'cached view' onto the newest messages (from each provider).
Other provider types (these exist as multiple plugins, but my hope was that if a single abstract messaging plugin could be show to work (for pop3) that these would be integrated here.):
- Forums
- SVN Checkins
- GMail
- MSN Messager
etc
The interface with the Provider resolves to something as simple as:
IProvider::RefreshNewestMessages( int count )
How a provider gets its messages is an implementation detail (provider specific).
Hope all this makes sense - none of it is that complicated, but I think would provide for a really powerful and flexible yet consistent system.
As I say feel free to ignore my ramblings/ideas!
Cheers,
BigJ