Hello,
Although I still need to put more thought in to the Edit / Update
scenarios in Mimi's stamping storyboards, we have
in a Mail Meeting on Monday and via IRC come up with some nice
starting points.
First I want to frame the context of Edit / Update as P2P sharing of
item data. Mail protocols (IMAP, SMTP, POP) are simply the
transport used to deliver the EIM information. This is import because
if we frame our discussions and design in this context
then additional protocols can be leveraged in the future for P2P
sharing such as XMPP. This would be a big win
for Chandler to have this type of flexibility and gets back to
Chandler's original intent of being a P2P sharing application.
Having framed the discussion in terms of P2P, I believe the success
of the Edit / Update workflows depends on the Chandler Mail Service
doing as little work as possible. When receiving mail, it is the Mail
Service layers role to identify that the mail message contains
sharing data and
pass that information off to the sharing layer for processing. When
sending mail, it is the Mail Service's role to identify that this
outgoing message
should share item data and call out to the sharing layer to serialize
the data for transport.
Does this strategy sound familiar? Well it is exactly how we send and
receive Ical .ics attachments in Chandler today.
The Mail Service sees that the message contains an ics attachment and
calls out to the Calendar / VObject code to de-serialize the
data. The Calendar / VObject code parses the ics attachment and sees
if the data matches an existing item in the repo. The
Calendar / VObject code either updates an existing item or creates a
new item based on the info in the ics file.
The Calendar / VObject code then passes the existing or newly created
item to the Mail Service where the Mail Service applies mail
specific processing such as parsing headers, creating to / from
EmailAddresses, etc on the item.
In the case of EIM, two items states would be transported the before
and after. Before is the state of the item before the user made
changes and sent the item via mail protocols. After is the current
state of the item the user wishes to share via mail protocols.
Presumably, the before and after states can be contained in one EIM /
XML serialization file.
When sending EIM P2P sharing data if the item is also an event I
think we would still want to send an ics attachment along with
the message for those people using traditional email clients and
alternative calendars such as Outlook or ICal.
When a mail is received in Chandler the mail service does the following:
1. If the message contains no ics or EIM xml attachments treat it is
a traditional mail message and convert the message to an item with a
MailStamp.
2. If the message contains an ics attachment and no EIM xml
attachment call out to the Calendar / VObject code and convert the
message to an item with an EventStamp and MailStamp.
3. If the message contains an EIM xml attachment ignore any ICal
attachements and call out to the sharing code to deserialize the item.
In the case of number 3 above the sharing layer would handle any
conflict resolution including displaying UI to allow the user to
approve or deny the changes.
There is also a unique case with the Edit / Update workflows where
the mail service is suppose to send a confirmation email to the
sender of the Edit / Update.
Although I am not totally convinced at this point that sending the
confirmation is needed it is part of the stamping storyboard.
This covers the case where the user wants to track his or her changes
out of band in a traditional email client. What should be contained
in this email is still up for debate.
It could either be the full event info including EIM XML
serialization or just a simple confirmation email ie. You send an
Update on "%Date" to "%Users".
Either way what should not happen is that the confirmation email gets
downloaded back in to Chandler and processed as an update for the
sender.
To prevent this I propose that each Chandler instance should have a
unique application level UUID. This UUID would be included as the
mail header X-Chandler-ID.
When a message is received if the sender is the same Chandler (the X-
Chandler-ID matches) then ignore the message. This works nicely since
one of the proposals
for Preview is to have an option where Chandler only downloads mail
from an IMAP or POP server that is sent from another Chandler. For
this case, we can leverage
the X-Chandler-ID as the key to determining if the message is from
Chandler. Thus allowing users to continue working with traditional
email clients while
leveraging Chandler for intercommunication as is the case with the
Edit / Update workflows.
Once we have a finalized implementation proposal we can talk about
division of work. For example, I can help implement the sharing code
logic
for processing and serializing P2P EIM XML.
Thoughts?
-Brian
On Dec 8, 2006, at 7:27 AM, Grant Baillie wrote:
On 7 Dec, 2006, at 21:47, Jeffrey Harris wrote:
That being the case, it would be helpful to know which kind of
emails
you're talking about here, and throughout your message. :) Without
that information, I can't tell what the rest of your post is
proposing,
or what problem it's intended to solve.
(I also have trouble wrapping my brain around the idea of a
"changing"
email, but that may or may not be related. ;) )
Changing email is definitely related, and it's certainly confusing
at first.
One way to look at this is to think about how Drafts work in many
mail clients. To the end-user, it looks as if they're editing an
email, whereas in reality the client is creating a new RFC(2)822
message and wiping out the original when the Draft is saved.
The crux of the communication stamp is that the same item can be
edited
and shared throughout a process of sending drafts, normally
sending the
item, or sending updates after the item's been normally sent.
So when I talked about emails, I was referring to updates (i.e.,
drafts
of not-yet-sent items, and updates to previously sent items).
Now that I think about it, I'm not actually sure what the payload
of a
normal send should be. Maybe the same as an update?
Well, I think we'd discussed on IRC sending out two EIM blobs in
emails (the previous and current versions). Presumably, for a first-
time send, the previous version wouldn't be there. But otherwise,
yes, pretty much the same.
--Grant
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Open Source Applications Foundation "chandler-dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/chandler-dev
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Open Source Applications Foundation "chandler-dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/chandler-dev