I much prefer fixing the underlying issues Skink has to work around to putting the work-arounds in Skink. If we were to take Skink into the core code, I would want it to be as simple as possible to cut down on maintenance costs. Re the [noscript] methods, there are about 12 in the core base and db classes, and half of them have to do with collation keys. I think those could be made scriptable by changing the idl to specify an out array of octets. The db methods that use nsTArray could be changed as well.
The pluggable store work deals with some of the same issues that Skink has to (e.g., folder discovery, db handling, etc). So, as Andrew suggested, the pluggable store stuff would need to land first, but beyond that, I'd like to make it so Skink doesn't have to deal with workarounds. The pluggable store work is an opportunity to clean it up, since it already has to change that code.
I'd still really like to have a mechanism for adding content to Thunderbird that wasn't so closely tied to the existing heavyweight folder+server+url classes. That mechanism could simply provide simple hooks for getting the content into a pluggable store that looks like a local mailbox to Thunderbird and the pluggable store could deal with getting the content.
The more you want that to look like our existing data sources (IMAP/Local/NNTP messages), the more you want to re-use the existing infrastructure. So Skink makes more sense for things like Exchange support. For something like twitter feeds, clicking on a twitter folder pane item could display something like a snowl-type stream and not play at all the existing infrastructure. The js folder pane allows you to have non-nsIMsgFolder items, and you can make selecting the item do whatever you want.
I really like the fact that Skinkglue allows you to write js account types relatively easily. The code is fairly clean considering the difficult problem it's solving. The main drawback is that it has to deal with all the core mailnews interfaces. I don't see those going away anytime soon. Skinkglue might lessen the pressure for those to go away, which is not good, but it also allows more stuff to be done in js, which is a win.
The path for Skinkglue getting into core would look something like this:
- Fix the core interfaces wherever practical to be scriptable so that Skinkglue an be simplified.
- Adapt Skinkglue to deal with pluggable stores and try to make the pluggable store code lessen the need for workarounds in Skinkglue
- Some sort of unit tests (e.g., tweequilla)
If Thunderbird is serious about the basic idea that was behind
Netscape's and Mozilla's MailNews module from the beginning, then all
message sources should be in a UI that is as unified as possible while
providing most of the specific upsides of each as well.
Right now, that's most the case, though Thunderbird is as I understand
falling apart visually at times due to the new experiments like faceted
search etc. not fitting the style of the rest of the UI as smoothly as a
UI designer would want it to be.
I think what Thunderbird would need is to have all, including the
traditional, message types go through scriptable and more lightweight
and pluggable interfaces.
(I personally also think that ultimately, Thunderbird needs to be able
to run integrated within Firefox if it wants to survive, but that might
just be myself dreaming things up.)
Robert Kaiser
_______________________________________________
tb-planning mailing list
tb-pl...@mozilla.org
https://mail.mozilla.org/listinfo/tb-planning
(I personally also think that ultimately, Thunderbird needs to be able to run integrated within Firefox if it wants to survive, but that might just be myself dreaming things up.)
On 6/2/2011 10:40 AM, David Bienvenu wrote:I am encouraged to see a pretty clear commitment from you that cleaning up these interfaces to better support js is valuable. You've probably thought that for awhile, but occasional comments from you (like a recent hesitation to remove the TArray db methods) left me in doubt. It's much harder for me to get motivated to work on things that I think will be only accepted reluctantly, than things that are really wanted.
It's a really important issue, whether or not new data sources appear enough like the older sources so that all of the standard UI bells and whistles can work with them. I'm thinking of things like tagging, marking as read, combining into virtual folders with mail items, filtering, threading, grouped headers, etc. You could always just include http://twitter.com in a tab, and call that "Twitter support" - but that is not really what we are talking about here.
My own vision is that a messaging client needs to be able to include as much as possible a set of standard features that are supported across a wide variety of data sources - and yet there still needs to be unique differences for each. So I think that the main point would be lost if new data items could not easily play with the existing infrastructure (and by that I mean user-facing issues like tagging, not nsIMsgDBHdr).
To have any hope of new data items reliably supporting an existing robust infrastructure, then the data items need to be able to inherit from an existing implementation of things like servers, folders and items. A key question is whether in the foreseeable future Thunderbird will provide js language versions of those things (like Calendar's ProviderBase for example). If not, does each new data source implement their own, or will something like the msqIOverridable interface be provided to allow using the existing C++ prototypes? This issue you have not really addressed.
Is it fair to say that there is a general commitment to the idea of solving the issues that SkinkGlue has identified in the core code, to move closer to allowing creating of new data items with javascript implementations?
My existing Exchange data types derive from the C++ SkinkGlue objects, so I will be continuing to adapt it to changes in the core code. Suggestions would be more than welcome here.
My "RMD" idea - http://wiki.kairo.at/wiki/RMD - was my try to get some
infrastructure up that could support that, basically by getting a
completely new in-tab Firefox add-on UI and organizational system into
place that would base on pluggable modules. It would be defined
primarily around web-based messaging systems like feeds and
twitter/status.net (using so different schemes is intentional) for
starting experimentation, but keep in mind that it should be extendable
to potentially support traditional as well as not-yet-invented messaging
systems as well. It would run completely in the browser, be able to use
app tabs, yadda, yadda.
Yes, this would be a complete interface rewrite, taking lessons from the
current mailnews UI into account, potentially reusing some good pieces
of code, but not fearing to build stuff really differently.
This might be something for an independent add-on dev, for Mozilla Labs,
or whatever - I didn't manage to get it into GSoC due to Mozilla having
limited slots (we had 3-4 students wanting to take it, though) and I
don't have the time to work on an actual implementation myself. Also,
I'm better in doing concepts than writing code. ;-)
Still, this all leads far away from the actual topic of the thread, I
guess, and potentially even from what this list is for - though
messaging people are now a part of Labs... ;-)
> I'm with you here. When the Thunderbird grows up and becomes a Swan,
> then we will have SwanFox as the integration.
>
> Ever since I wrote "Lessons from Google: Thunderbird as a Firefox
> extension!"
> <http://mesquilla.com/2010/06/01/lessons-from-google-thunderbird-as-a-firefox-extension/>
> I've been convinced that is the correct strategy. Any cat herders out
> there able to organize us in this direction?
<sigh> Please don't - or at least, it should be optional...
If I wanted to use SeaMonkey (or Opera), I'd use SeaMonkey (or Opera).