Re: Oh no! Philip is on crack again!
- From: Philip Van Hoof <spam pvanhoof be>
- To: tinymail-devel-list gnome org
- Subject: Re: Oh no! Philip is on crack again!
- Date: Mon, 24 Mar 2008 00:30:13 +0100
Note that this is not what we will start with for 2.0.
I rather see something like this happening gradually.
For example, as one of the first items for 2.0 I have rewriting the
summary store in mind and putting in place all infrastructure to do per
required MIME part fetches (in stead of full message fetches).
On Mon, 2008-03-24 at 00:22 +0100, Philip Van Hoof wrote:
> A sample Tinymail 2.0 API ...
>
> So this is a mockup of what I have in mind ... at a very high level:
>
> So this is zooming out at big-city/country size.
>
> Indeed, Header is gone. That should be an implementation detail of
> Message. And I also think that this would be doable too. A year ago or
> so me and Dirk-Jan where discussing this, and it was his idea to simply
> get rid of Header and make it an implementation detail of Message.
>
>
> Some pointers:
>
> http://svn.gnome.org/viewvc/libgee/trunk/gee/collection.vala
> http://svn.gnome.org/viewvc/libgee/trunk/gee/iterable.vala
> http://svn.gnome.org/viewvc/libgee/trunk/gee/iterator.vala
> http://svn.gnome.org/viewvc/glib/trunk/gio/ginputstream.h
> http://svn.gnome.org/viewvc/glib/trunk/gio/goutputstream.h
> http://svn.gnome.org/viewvc/glib/trunk/gio/gcancellable.h
> http://svn.gnome.org/viewvc/glib/trunk/gio/gasyncresult.h
>
>
> namespace TinyMail {
>
> public class MimePart: Gee.Iterable <MimePart> {
> string Filename { get; }
> string Description { get; }
> string ContentId { get; }
> string ContentType { get; }
> gboolean IsAttachment { get; }
>
> void DecodeToStream (GIO.OutputStream stream);
> void DecodeToStreamAsync (GIO.OutputStream stream, GIO.Cancellable cancel, GIO.AsyncReadyCallback callback);
> }
>
> public class WritableMimePart: MimePart, Gee.Collection <MimePart> {
> void SetFilename (string filename);
> void SetDescription (string desc);
> void SetContentId (string contentid);
> void SetContentType (string type);
>
> // Note: adding and removing parts is API in Gee.Collection
>
> void Construct (GIO.InputStream stream, string mimetype, string transferencoding);
> }
>
> public class WritableMessage: Message, WritableMimePart {
> void SetFrom (string str);
> void SetTo (string str);
> void SetCc (string str);
> ...
> }
>
> public interface Message: MimePart {
> string From { get; }
> string To { get; }
> string Cc { get; }
> ...
> }
>
> private class MessageIterator: Gee.Iterator <Message> {
> }
>
> public class MessageContainerChangeSet {
> GetAdded (Gee.Collection <Message> list);
> GetRemoved (Gee.Collection <Message> list);
> }
>
> public interface MessageContainer: Gee.Iterable <Message> {
> signal void Changed (MessageContainerChangeSet change_set);
> }
>
> public abstract class SearchResult: MessageContainer {
> }
>
> public abstract class Folder: MessageContainer, Gee.Collection <Message> {
> void SyncronizeAsync (GIO.Cancellable cancel, GIO.AsyncReadyCallback callback);
> void RefreshAsync (GIO.Cancellable cancel, GIO.AsyncReadyCallback callback);
>
> void AddAsync (Message message, GIO.Cancellable cancel, GIO.AsyncReadyCallback callback);
> void RemoveAsync (Gee.List <Message> messages, GIO.Cancellable cancel, GIO.AsyncReadyCallback callback);
> void TransferAsync (Gee.List <Message> messages, Folder target, GIO.Cancellable cancel, GIO.AsyncReadyCallback callback);
> void CopyAsync (Gee.List <Message> messages, FolderStore target, GIO.Cancellable cancel, GIO.AsyncReadyCallback callback);
> }
>
> public interface MessageContainerStore {
> signal void Changed (MessageContainerStoreChangeSet change_set);
> }
>
> public class MessageContainerRename {
> string From { get; }
> MessageContainer To { get; }
> }
>
> public class MessageContainerStoreChangeSet {
> void GetAdded (Gee.Collection <MessageContainer> list);
> void GetRemoved (Gee.Collection <MessageContainer> list);
> void GetRenamed (Gee.Collection <MessageContainerRename> list);
> }
>
> public interface FolderStore: MessageContainerStore {
> void GetFoldersAsync (Gee.Container list, GIO.Cancellable cancel, GIO.AsyncReadyCallback callback);
> }
>
> public interface PasswordRequester {
> string RequestPassword ();
> void ForgetIncorrectPassword ();
> }
>
> public interface Account: PasswordRequester {
> string Name { get; set; }
> string Proto { get; set; }
> string User { get; set; }
> string Host { get; set; }
> int port { get; set; }
> string AuthMech { get; set; }
> string UrlString { get; set; }
> }
>
> public class Query {
> public ArrayList InFolders;
> public string Subject;
> public string From;
> public string To;
> public string Cc;
> public string Bcc;
> public time_t Sent;
> public time_t Received;
> }
>
> public interface StoreAccount: FolderStore {
> SearchResult Find (Query query);
> }
>
>
> public interface TransportAccount {
> void Send (Message message);
> }
>
> public interface SendQueue {
> Folder Outbox { get; }
> Folder Sentbox { get; }
> }
> }
>
>
--
Philip Van Hoof, freelance software developer
home: me at pvanhoof dot be
gnome: pvanhoof at gnome dot org
http://pvanhoof.be/blog
http://codeminded.be
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]