Commit graph

7246 commits

Author SHA1 Message Date
Jim Nelson
9792780edb Display To:, From:, and Subject: in message viewer: #3812
Fields added.  However, it would be nice to use formatting to separate them from the body of the message.  This is not easy with Gtk.TextView/Gtk.TextBuffer; see https://bugzilla.gnome.org/show_bug.cgi?id=59390.  This may push us to move to Webkit earlier rather than later.
2011-07-14 15:47:01 -07:00
Jim Nelson
d1fa42fc13 Message view should not be editable: #3826
No longer editable and the cursor has been disabled as well.
2011-07-14 14:49:29 -07:00
Jim Nelson
fdc2853904 Display unread messages in boldface: #3807
This ticket enables this, however IMAP properties are not yet coming up from the local database yet, so this isn't technically complete.  That work will be included in the commit for #3805, which requires those properties.
2011-07-14 14:45:35 -07:00
Jim Nelson
9176d4778d Fixes a bug where the From: field remained undecoded (i.e. ISO charset) when first pulled from the server but would be properly decoded when pulled from the local database. 2011-07-14 14:00:38 -07:00
Jim Nelson
4b03ba004e Use GMime to display the text/plain portion of email messages: #3710
This makes available MIME portions of the message, although more work will need to be done to expose all MIME parts.
2011-07-06 15:46:24 -07:00
Jim Nelson
7f293f9a6f No longer crashes when running for the first time: #3798
Problem was that the client fetches folder objects for the special folders (Inbox, Drafts, etc.) prior to fetching the full folder list and the Engine's fetch_folder_async() call wasn't prepared to handle fetches for folders not located in the local database.
2011-07-04 13:54:00 -07:00
Jim Nelson
fff39e8a44 Move special folders to the top of the tree, put other folders in container, and start in Inbox: #3707 and #3692
This commit introduces the idea of a Personality, customizations for particular IMAP servers and services to allow the interface to configure itself for more natural use.  Also, this commit has the app start in the Inbox, and an optimization was added that makes showing what's in the Inbox (at least, what's in the local cache) come up instantly.
2011-07-01 19:33:35 -07:00
Jim Nelson
009a061a16 Fixes crasher when parsing an email address in an ISO encoding: #3790
GMime needs to be initialized prior to use.  It looks like it builds some internal caches for encoding/decoding, leading to a null pointer fault when not initialized.
2011-07-01 15:50:17 -07:00
Jim Nelson
0273b78005 Folder heirarchies: #3788
Now supporting folder heirarchies.  The client will now descend looking for subfolders.  This task now opens up multiple outstanding requests to the Engine as well as exercises the database schema.

Closing this ticket opens the door to finishing #3692.
2011-07-01 15:40:20 -07:00
Jim Nelson
a774034aff More responsive loading of folders: #3702
This commit introduces lazy loading of folder contents, which allows the Engine to report back email in chunks rather than all at once (which might require a round-trip to the server).  This allows for the local database results to be returned to the caller right away while background I/O is occuring.
2011-06-28 16:33:27 -07:00
Jim Nelson
708b3d754a Check for valac >= 0.12.0: #3726
This checks the version of Vala when ./waf configure is executed, not at build time, but that's okay.
2011-06-27 15:01:04 -07:00
Jim Nelson
328683ecfb Moved to waf for build system: #3690
This closes #3690 because waf fulfills that requirement, moving the .c's to a separate directory.  waf also gives us incremental builds, so -j4 is back.
2011-06-27 14:55:22 -07:00
Jim Nelson
41faa36103 New file naming scheme and organization for the Engine.
The code base is growing much faster than expected, faster than Shotwell it seems (not necessarily line count, but files and necessary organization of the library vs. Shotwell's initial flat directory).  After some thought decided to move to a more standard Vala/GTK naming scheme of all lowercase with dashes for spaces starting with namespace (minus the "geary-", unless the class was in the topmost namespace).  Three motivations:

1. Often confusing when working on code to see three "Folder.vala" in the gedit tabs: one IMAP, one SQLite, and one the interface definition.
2. This paves the way for waf integration, as right now we're held up using it because it barfs on projects with two files of the same name in different directories.
3. I find the CamelCase in the file browser becoming hard on the eyes, and this scheme seems a little more browsable.
2011-06-27 11:24:39 -07:00
Jim Nelson
f94018474b Sort folders in sidebar (case-insensitive): #3692
This is the first half of #3692, sorting the folders in the sidebar.  Also, this patch ensures that messages are listed in chronologically descending order.  (No option to change either sorts at this time.)
2011-06-24 16:28:05 -07:00
Jim Nelson
d179cb9bdd Persist messages locally: #3742
This completes the heavy lifting of persisting messages locally.  The strategy is that the local database may be sparsely populated, both in the availability of messages in a folder and the fields of a message that is partially stored.  As data is pulled from the remote server it's always stored in the database.  Future requests will always go to the database first, preventing unnecessary network traffic.

Also, this patch will detect when a message is stored in multiple folders on the server.  The database uses soft links from the folder to the message, so the message is stored only once in the database.  This technique relies heavily on the availability and validity of the Message-ID header, but we expect this to be reliable the vast majority of the time.
2011-06-23 19:07:04 -07:00
Jim Nelson
4ccabcbd3e Further work toward persisting messages locally (#3742).
This iteration now stores headers locally and fetches them first before going to the network.  Work done in the database to deal with IMAPisms.  More work on the GMime bindings (couple of mistakes in prior commit).
2011-06-21 17:48:40 -07:00
Jim Nelson
2fbe93afce Patched up InternetAddress* bindings in GMime.
InternetAddress and its children and brethren were not properly bound by vapigen, probably because they aren't prefixed with "GMime" (unlike everything else in the library).  Still some problems here, notably that certain private data members are exposed, but I've been unable to coax vapigen into not displaying them.  Will work for now.
2011-06-21 15:14:15 -07:00
Jim Nelson
ead5ccf567 Authors credit in About box wasn't null terminated (#3762) and license text now refers to Geary (#3761).
Additionally, the authors list now includes an email address.
2011-06-20 11:40:22 -07:00
Jim Nelson
9221937e95 Addition of MessageTable and MessageLocationTable toward fixing #3742.
Much of the API between the local and net stores had to be reworked for consistency as well as planning ahead for how messages will be retrieved and stored efficiently.  This work also attempts to keep in mind that other mail sources (POP, etc.) may be required in the future, and hopefully can be added without major rework.
2011-06-16 16:27:08 -07:00
Jim Nelson
ac41e9269a Fixes message list not updated when folder is selected: #3741
Engine now uses a master Folder object that synchronizes between the network and the local store.  Also, the Geary.Folder interface was getting ugly to code when the implementation was more than trivial, so moved to standard getters for it.
2011-06-13 15:16:57 -07:00
Jim Nelson
e22fa2b510 Merge branch 'master' of ssh://yorba.org/git/geary 2011-06-10 19:24:40 -07:00
Jim Nelson
4b8ac5689f First stab at implementing persistent storage of IMAP data: #3695.
This large diff represents a growth of the architecture to persist IMAP data as its downloaded.  When listing folders, a local database is consulted first to immediately feed to the caller.  In the background, network calls fetch the "real" list.  The two are collated for differences which are reported to the caller via signals, who are then responsible for updating the user interface appropriately.  No other synchronization work is represented in this diff.

Note that this breaks functionality: when a folder is selected, no messages appear in the message list.  Fixing this requires more work, and this patch was already large enough.  It's ticketed here: #3741
2011-06-10 19:17:35 -07:00
Jim Nelson
9e432d254e Revised package version requirements.
These requirements are more flexible for GTK, but still need GLib 2.28 for its TLS support.
2011-06-08 09:45:00 -07:00
Jim Nelson
38d9cb6790 Makefile now checks build dependencies (packages and minimum versions): #3699 2011-06-07 15:11:02 -07:00
Jim Nelson
40baadd8f6 Added COPYING, AUTHORS, and MAINTAINERS files: #3697. 2011-06-06 15:23:04 -07:00
Jim Nelson
b9836067ef Removed --save-temps from Makefile.
--save-temps only speeds up compilation when valac is invoked for compile-only and C compilation and linking are done separately and in parallel.  Since --save-temps leaves a lot of extraneous files sitting around that clutter "git status" (see #3690), removing it from the Makefile.
2011-06-06 14:44:36 -07:00
Jim Nelson
5f6076e8cb Fixed bug in keepalive code. Cleaned up some exceptions.
Keepalive could cause a segfault if the server closed the connection.  This fixes that as well as updates some of the exception-throwing code to use more appropriate ImapErrors.
2011-06-03 16:32:30 -07:00
Jim Nelson
013f6b57e1 Forgot to add MessageSet.vala in last commit. 2011-06-03 11:12:29 -07:00
Jim Nelson
58b4c381ea Added third pane to display message contents.
Message contents are now fetched from the server and displayed in the third pane when a message is selected.  Also made session management a bit smarter via ReferenceSemantics.
2011-06-02 17:57:04 -07:00
Jim Nelson
ce4ee132ed Added STATUS command and decoder.
Although no place in the code uses this yet, it will be useful in the near future.
2011-05-31 18:47:54 -07:00
Jim Nelson
9ac3fd0b68 Added SelectExamineResults decoder.
The result of a SELECT or EXAMINE command is now parsed and returned to the caller.  This information is boiled down to the Geary.Folder interface, which adds information about the folder to the object.
2011-05-31 15:40:39 -07:00
Jim Nelson
737f235d60 Create ClientSessionManager.
The ClientSessionManager maintains a pool of connections to an IMAP server, reusing them whenever possible.  It allows for multiple folders to be managed and monitored by an application without having to change contexts constantly (which also introduces side-effects, esp. with expunging deleted messages).
2011-05-30 18:18:52 -07:00
Jim Nelson
aa094cb813 Added folder list to sidebar.
geary now has an (unsorted) list of folders in its sidebar.  When one is clicked on the messages in that folder are displayed.  This patch also fixes an issue in the Serializer that wasn't dealing with quoted strings properly.
2011-05-27 17:22:21 -07:00
Jim Nelson
65eb370e96 Added menu bar and About box. Fixed bug in ISO8601 date conversion. 2011-05-26 18:26:36 -07:00
Jim Nelson
ba81ad43a4 Prettier dates and From: labels. Initial GMime integration.
This adds a VAPI (including generation files and Makefile) for GMime to the repo, which we'll be using extensively to come.  This VAPI is incomplete in many ways, so care should be used going forward.

Also, with GMime now interpreting RFC822 dates, can now pretty-print them.  Prettier From: names also added this time around.
2011-05-26 17:29:00 -07:00
Jim Nelson
a581218ea9 First pass of UI client in code base.
Client code will display a window listing Date, Subject, and From of all messages in inbox.  Username and password must be specified as a command argument.  Note that current IMAP envelope parsing doesn't handle group lists, which means some messages will be skipped over.
2011-05-24 19:40:06 -07:00
Jim Nelson
5021d8372d Added NOOP idling support to ClientSession.
ClientSession can now automatically send NOOP commands as keepalives at a specified interval.  Also, the CommandResponse decoders have been moved into their own directory (they will soon be fertile and multiply).  More work ahead on the FetchResults object, which should be like NoopResults and completely encapsulate all the information returned from a FETCH.
2011-05-23 18:58:34 -07:00
Jim Nelson
e56a6a599a Further fleshed out FETCH support.
Implemented a first stab at buffer management for IMAP literals.  Added FETCH decoding of various RFC822 elements.  Implemented a crude readmail program which will dump the full RFC822 message of any message in a mailbox.
2011-05-13 18:38:37 -07:00
Jim Nelson
e2d339dc4f Expanded and improved FETCH response decoding.
Library now uses an extensible system for decoding the various structured data that FETCH returns.  This system may be expanded later for decoding other CommandResponses (although FETCH is the command most in need of this).  Also created an RFC822 directory for data structures and code to deal with mail messages and a common directory for code that is used throughout the library but doesn't belong to util as they're "core" classes.
2011-05-13 12:44:28 -07:00
Jim Nelson
4778771c3d Updated console to accept multiple data item types for the "fetch" command. 2011-05-11 15:55:52 -07:00
Jim Nelson
fb577a98ab send_command_async() in ClientSession.
send_command_async() is now integrated into the ClientSession state machine.
2011-05-06 17:23:42 -07:00
Jim Nelson
42247df62b ClientSession improvements
Fleshed out the ClientSession state machine to follow the session state graph described by the IMAP specification.  ClientSession is now firmly a single-connection object that tracks the server state appropriately.  A higher-level class will need to be defined that manages multiple sessions (for when dealing with multiple folders, monitoring, etc.)
2011-05-06 13:19:32 -07:00
Jim Nelson
a43ab81fdf Improvements to Serializer and Deserializer
The input mode for Deserializer meant that the caller needed to manage the input stream and push data in an appropriate way; this is error-prone.  Now Deserializer manages the input stream and the modes it must be read from.  Serializer still works in a similar fashion as before, but now it deals with literal data more efficiently, writing it to the output stream directly (via splice_async()) rather than into the in-memory temporary buffer.  Serializable's serialize() method is now async, meaning that all serialization can occur asynchronously, which is how we want it going forward.
2011-05-04 17:20:17 -07:00
Jim Nelson
cbe3440fef Response.vala -> ServerResponse.vala 2011-04-14 01:16:40 +00:00
Jim Nelson
6433ebfa5b Further development building the layers of IMAP decode, connectivity, and session management. First-stab implementation of a preliminary Engine API. Tons of work to go and tons of clean-up to make what's here more robust and more efficient. 2011-04-14 01:15:05 +00:00
Jim Nelson
e3cab0804b Email client ho! 2011-04-11 23:16:21 +00:00