namespace TinyMail { public class MimePart: Gee.Iterable { 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 { void SetFilename (string filename); void SetDescription (string desc); void SetContentId (string contentid); void SetContentType (string type); void Construct (GIO.InputStream stream, string mimetype, string transferencoding); } public class Message: MimePart { } private class MessageIterator: Gee.Iterator { } public class MessageContainerChangeSet { GetAdded (Gee.Collection list); GetRemoved (Gee.Collection list); } // Observable with signals, the signal will get a MessageContainerChangeSet public interface MessageContainer: Gee.Iterable { } public abstract class SearchResult: MessageContainer { } public abstract class Folder: MessageContainer, Gee.Collection { void SyncronizeAsync (GIO.Cancellable cancel, GIO.AsyncReadyCallback callback); void AddAsync (Message message, GIO.Cancellable cancel, GIO.AsyncReadyCallback callback); void RemoveAsync (Gee.List messages, GIO.Cancellable cancel, GIO.AsyncReadyCallback callback); void TransferAsync (Gee.List messages, Folder target, GIO.Cancellable cancel, GIO.AsyncReadyCallback callback); void CopyAsync (Gee.List messages, FolderStore target, GIO.Cancellable cancel, GIO.AsyncReadyCallback callback); } // Observable with signals, the signal will get a MessageContainerStoreChangeSet public interface MessageContainerStore { } public class MessageContainerRename { string From { get; } MessageContainer To { get; } } public class MessageContainerStoreChangeSet { void GetAdded (Gee.Collection list); void GetRemoved (Gee.Collection list); void GetRenamed (Gee.Collection list); } public interface FolderStore: MessageContainerStore { } 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: MessageContainerStore { SearchResult Find (Query query); GetFolders (Gee.Container list); } public interface TransportAccount { void Send (Message message); } public interface SendQueue { Folder Outbox { get; } Folder Sentbox { get; } } }