Re: [Evolution-hackers] Camel plans and possibilities
- From: Jeffrey Stedfast <fejj ximian com>
- To: Not Zed <notzed ximian com>
- Cc: evolution-hackers ximian com
- Subject: Re: [Evolution-hackers] Camel plans and possibilities
- Date: Tue, 08 Jul 2003 14:53:47 -0400
On Wed, 2003-06-25 at 23:54, Not Zed wrote:
> I put this (long) list together of a bunch of things that should be
> addressed in camel.
>
> Its a bit like a TODO list for 1.6/making a separate camel, although not
> all of the stuff will likely be included because there's a ton of it.
>
> (I used the .h files to mean the class contained, so a couple files
> might have been skipped. I didn't go into much detail on the backend
> stores etc).
>
> Cheers
> Michael
>
>
> In all cases:
> - should remove dependent headers from header files, force client code
> to include appropriate header dependencies, a-la libc.
> - do we remove non-threaded case code?
> - can we control exported symbols from plugins using libtool?
> - need to consider breaking up directory structure
> - check all uses of strcasecmp, generally not correct since we must
> force us-ascii
> - remove the last gal reference
> - what to do about e-util - we only use a few non-gui related files
> from e-util,
> could either copy, or move them to camel/e-util and rename it.
>
> New classes and types
> - CamelIterator (CamelI?) for iterators, for searches, camel-index,
> etc.
> - CamelPlugin
> - CamelProvider should be a real object
> - CamelStreamPipe - for unnamed pipes
> - Some sort of camel configuration, for global stuff, e.g. charsets,
> etc.
>
> Priorities
> - how to access the message in a raw form without having to re-encode,
> or keep the whole raw form around.
if we didn't convert to utf-8 in camel-mime-part-utils, we could easily
keep the raw message content. the only problem we'd have then, is the
smarts for detecting windows charsets. perhaps we can add some smarts to
camel-mime-filter-charset to change the iconv_t on-the-fly internally if
it finds that the iso-8859-* charset is really a windows-cp125* charset?
would that even work? if so, it'd kick ass...
> - plugins for sasl auth types, and providers
> - namespace cleanup
I've namespaced the string-utils code so far...
>
> Lower priorities
> - iterating searches
> - configuration stuff
>
> Providers
> (very quick comments)
>
> local
> - its a bit of a mess, but works
> nntp
> - unmaintained
> imap
> - needs to be rewritten, if possible
> - needs to be able to get messages and the like, incrementally
> - be nice to have a fast-mode without support for mlist stuff
> (i.e. based on ENVELOPE fetches)
> sendmail
> - 'it works' - should use camel-process or something if it doesn't
> already
> smtp
> - 'it works' too
> pop3
> - already rewritten. still relatively bit-rot free
>
> Camel core
>
> camel.h
> - imho, remove this, or at least, change it not to inlude all of camel
> - where to put camel-init?
> - how to hook into camel-init?
> - how to hook plugins?
> camel-object.h
> - be nice to implement (inheritable?) interfaces
> - object bag should support multiple outstanding reservations(?)
> - need to reduce overhead for using hooks. should probably use
> g_recursive_mutex, or fix e_mutex to use native rec mutex's if
> available.
> - should be able to build without the magic tags
> - remove CamelType, or rename CamelObjectClass, they're the same typdef
> anyway.
> - uses e-util
> - make camel_object_init non-recursive?
> - make camel object class refcounted, and disposable?
> camel-arg.h
> - not sure, implementation not ideal, or very efficient
> camel-exception.h
> - add imapp longjmp exceptions?
> - should fix api, setv is incorrectly named ...
> - should define more, and more reasonable exceptions
> - also, string mappings for exception types?
> - extensible excption id's?
> camel-operation.h
> - depends on e-util
> camel-types.h
> - should just kill this
>
> camel-private.h
> - this is mainly used to share access to locks
> - maybe locks should be moved to public api's, if they're public
>
> camel-url.h
> - s/camel_url_copy/camel_url_clone/ ?
> - camel_url_new probably doesn't need an exception, it only sets one
> type
> - is the base stuff still used ... or was it moved to gtkhtml?
>
> camel-address.h
> camel-news-address.h
> camel-internet-address.h
> - ok
>
> camel-index.h
> - cursors to be replaced by/subclass camel iterators?
> camel-block-file.h
> camel-partition-table.h
> camel-text-index.h
> - basically ok, but really need to find those looping and crashing
> bugs :(
>
> camel-charset-map.h
> - remove the charset_to_windows, move it to the iconv charset handling
> stuff
> - are we still using this?
> camel-charset-map-private.h
> camel-i18n.h
> - doesn't glib cover this functionality?
> camel-iconv.h
> - copy of gal/e-iconv, must decide what to use
just updated camel-iconv code to use the latest e-iconv stuff.
> camel-utf8.h
> - g_string_append_u should be camel namespaced
> - should probably just move to camel-string-utils
>
> camel-certdb.h
> - seems complicated for what it does
> camel-cipher-context.h
> - needs api tweaks to cover all security context types as plugins
> camel-gpg-context.h
> - uses gal/e-iconv
> - object should be CamelGPGContext, not CamelGpgContext
> camel-pkcs7-context.h
> - what is this for?
> camel-smime-context.h
> - should derive from cipher-context, not cmscontext?
> - the object should be CamelSMIMEContext, not CamelSMimeContext
> camel-smime.h
> - should be moved into camel-smime-context or camel-smime-utils?
> camel-smime-utils.h
> camel-cms-context.h
> - should derive from camel-cipher-context, or just not exist
> camel-pgp-mime.h
> - should be moved into camel-gpg-context?
this just needs to be removed, it serves no purpose anymore.
>
> camel-data-wrapper.h
> - needs some work on the awful mime-type api parts
> - rawtext should be removed (and implied)
> camel-medium.h
> - needs a better header interface, currently cannot handle removal of
> duplicates
> perhaps using a simple iterator?
> - complex api for what it does
> - privatise private parts
> camel-mime-part.h
> - needs to honour content-languages
> - should probably use camel_object_get* instead of bulky api (also
> allows easier override)
> - should no longer implictly encode parts?
> - uses gal/e-iconv
> - privatise private parts
> camel-mime-part-utils.h
> - should treat all content as opaque, and perform no encoding/decoding
> - can this be more 'streamed'??
> - uses gal/e-iconv
> - privatise private parts
> camel-mime-message.h
> - remove the mbox_from encoding to somewhere else (mime-utils?)
> - use object_get* methods?
> - uses gal/e-iconv (why??)
> - privatise private parts
> - it would be nice to have it more streamable
> camel-mime-parser.h
> - object should be CamelMIMEParser
> - namespace (HSCAN_* enums)
> - remove unused virtual methods/events in class
> camel-mime-utils.h
> - namespace namespace namespace
> - could probably be split a little bit (e.g. transfer-encoding
> encoders/decoders)
> - could export some more api (e.g. rfc822 type macro's)
> - uses gal/e-iconv
> camel-multipart.h
> - should be purely abstract, with a camel-mime-multipart subpart?
> - it would be nice to have it more streamable
> camel-multipart-encrypted.h
> - seems ok
> camel-multipart-signed.h
> - should clean up the fugly 'parser' code internally
>
> camel-file-utils.h
> camel-io.h
> - remove, move methods into camel-file-utils
done.
> camel-data-cache.h
> - need to finish all api, and api docs
> camel-uid-cache.h
> - needs to be made incremental, and more robust. this is a priority
> for pop
>
> camel-lock.h
> camel-lock-client.h
> - could probably use camel-io safe-write safe-read methods
> camel-lock-helper.h
> - needs to pass back more detail in error codes (errno is all we have i
> think, so should do)
>
> camel-session.h
> - if its going to have a thread api, it needs to be more complete,
> and have progress notification, cancellation, etc. the implementer
> should be able to override most thread stuff itself (e.g. use
> gthreads if it wants).
> - some of the api's seems a bit messy/inconsistent with each other
> e.g. get_password should have service as second arg
> - uses e-util
> camel-provider.h
> - should be a plugin
> - should be an active, actual object
> - needs much better autodetect interface
> - possibly change authtypes stuff
> camel-transport.h
> - s/send_to/send/
> camel-service.h
> - possible changes to authtypes
> - move hostname lookup stuff somewhere else. should probably also
> use the glibc async dns api if possible and it is available.
> camel-store.h
> - use camel-store-summary for all summary ops?
> - remove camel_mkdir_heir, use camel-file-util
done.
> - the store_noop thing is a bit weird (i.e. when to use it?)
> - be nice to have a 'subscribed interface' ?
> - needs acl interface
> - should create, delete, rename, return unopened, blank folder
> objects? would this make store-summary redundant (or just
> internal?)
> - some locking should be finer grained/moved to subclasses
> - server-side filtering??
> should the filter-driver be set on the store, and
> not requested from the session? makes editing painful though.
> camel-store-summary.h
> - api a little clumsy
> - possibly should offer more virtual methods (get, etc)
> - use iterators?
> camel-folder.h
> - should this be able to be created, unopened?
> - s/transfer_messages_to/transfer_messages/
> - summary and search done via interfaces?
> - should flag/tag get/set be done via messageinfo's? (would require
> summary support).
> - some locking should be finer grained/moved to subclasses
> - some data queries should be object_get only
> - what about a sorting interface? incremental summary queries? etc?
> camel-search-private.h
> camel-folder-summary.h
> - api is troublesome for some backends, e.g. imap, which dont merely
> append items
> - api is enourmous anyway, and summarising works strangely
> - need to be able to append without reading/writing whole file?
> - indexing needs to be done some other way (externally?)
> - uses gal/e-iconv
> - maybe it should just be an interface
> - use iterators?
> - CamelMessageInfo's should probably be self-contained (i.e. contain
> a 'class' pointer) - will add slightly to memory use in
> current model, but will allow e.g. disk-based summaries loaded on
> demand using existing api's.
> camel-folder-search.h
> - api is weird (set_summary, set_folder, etc, run search, they get
> unset implictly)
> - execute expression is ugly code
> - would be nice to make this return values incrementally, using some
> iterator type thing
> cancellation could be cleaner too
> - otoh this might not be worth it (e.g. trying to return values in
> summary order always)
> - hide private bits
> camel-folder-thread.h
> - really needs the incremental api to be done incrementally (then
> again, its so fast anyway ...)
> - should it just create a table of uid's instead, so that messageids
> can be loaded
> on demand?
> camel-vee-store.h
> - needs some pretty major architectural issues fixed
> camel-vee-folder.h
> - needs some pretty major architectural issues fixed
> - mainly how unmatched works and how vfolders are stored in memory
> camel-vtrash-folder.h
> - should be child of a first-class vtrash provider/store?
>
> camel-digest-store.h
> - not sure this serves any purpose?
> camel-digest-folder.h
> - more or less ok
> camel-digest-summary.h
> - is a noop, should probably be removed (just use camel-folder-summary
> directly)
>
> camel-disco-store.h
> camel-disco-folder.h
> camel-disco-diary.h
> - please die and go to hell :) disconnected operation should probably
> be moved
> to camel-store, either as an interface, or a few extra api's to see
> if its
> supported, etc. The diary stuff should just be part of the backend.
>
> camel-filter-driver.h
> - possibly, should use virtual methods (and hence subclassing), for the
> various
> callbacks
> - actually, should probably subclass and add api to allow extension,
> and remove
> all of the callbacks
> - esexp would need to ignore unknown methods when running?
> - 'shell' should be a builtin command, dont use gnome_exec*
> - _filter_message api is bloated
> - logfile format needs to be more parsable
> - need to fix the run-once stuff
> camel-filter-search.h
> - also needs to be extensible, should probably be an object which can
> be attached
> to the filter-driver.
> - uses gal/e-iconv
>
> camel-html-parser.h
> - probably ok, for what its for
> - maybe should be moved into camel-mime-filter-html.c
>
> camel-mime-filter.h
> - this and all subclasses, s/CamelMime/CamelMIME/
> - could probably have a check_room method
> camel-mime-filter-basic.h
> - rename to CamelMIMEFilterEncoding, since thats what it does
> camel-mime-filter-bestenc.h
> - basically ok
> camel-mime-filter-charset.h
> - probably ok, although probably need some better fallback when iconv
> gives up
> - uses gal/e-iconv
> camel-mime-filter-canon.h
> camel-mime-filter-crlf.h
> - one of these is redundant and/or the functionality should be merged?
> camel-mime-filter-enriched.h
> - shouldn't use alloca in a loop, but otherwise ok
> - maybe should be renamed enriched_to_html?
> camel-mime-filter-from.h
> - should remove as well as add >'s, e.g. >From -> >>From and >From ->
> >From in decode
> - could probably be done as part of canonicalisation filter
> camel-mime-filter-html.h
> - ok for indexing which is where its used
> - perhaps should include camel-html-parser instead of separate file
> - renamed html_to_plain ?
> camel-mime-filter-index.h
> - seems ok, not sure what set_index is for though
> camel-mime-filter-linewrap.h
> - ok
> camel-mime-filter-save.h
> - ok
> camel-mime-filter-tohtml.h
> - is citation colour used anymore?
> - should it be using html tags for citations, not just colours?
>
> camel-url-scanner.h
> - uses own chartype tables (camel-mime-utils has some already)
> - uses e-util/e-trie
>
> camel-movemail.h
> - probably needs to make runtime decision about solaris style mailbox
> - should it just be part of fileutils?
>
> camel-process.h
> - should probably be an object, with programmable input/output streams
> - need a stream-unamed-pipe or something too?
>
> camel-sasl.h
> - s/CamelSasl/CamelSASL/
> - all sasl mechanisms need to be dynamic plugins
> - service should be first arg to sasl_new
> - authtypes perhaps should have more direct references to sasl ones?
> camel-sasl-anonymous.h
> - not sure how this fits into being a plugin
> - is this used anywhere?
> camel-sasl-cram-md5.h
> camel-sasl-digest-md5.h
> - uses gal/e-iconv?
> camel-sasl-gssapi.h
> camel-sasl-kerberos4.h
> camel-sasl-login.h
> camel-sasl-ntlm.h
> camel-sasl-plain.h
> camel-sasl-popb4smtp.h
>
> camel-stream.h
> - use the glibc printf stuff to printf to a stream where available
> (uses less copying)
> camel-seekable-stream.h
> - should this just be based on a normal stream with a seekable flag?
> camel-seekable-substream.h
> - not sure how useful, only used by camel-multipart. although when we
> make camel
> camel-stream-buffer.h
> - should be used more often (in output anyway)
> camel-stream-filter.h
> - ok
> camel-stream-fs.h
> - also need a non-seekable fd based stream
> camel-stream-mem.h
> - maybe this should make the stream out of chunks, a bytearray is
> pretty inefficient
> camel-stream-null.h
>
> camel-stream-ssl.h
> - what is this? if its openssl it should be stream-openssl
>
> camel-tcp-stream.h
> - s/CamelTcp/CamelTCP/
> camel-http-stream.h
> - should probably get this more tested, and use it in evolution?
> - ftp stream too?
> camel-tcp-stream-raw.h
> camel-tcp-stream-ssl.h
> - is there any way to get rid of service argument? e.g. w/ callback?
> or just use session?
>
> string-utils.h
> - fix the filename - camel-string-utils.h
done.
> - namespace any g_* functions out of g_*
done.
> - maybe just move the utf8 stuff here
> - also probably the character classes, and some of the camel-mime-utils
> stuff
Jeff
--
Jeffrey Stedfast
Evolution Hacker - Ximian, Inc.
fejj ximian com - www.ximian.com
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]