This gives us a means of using JS objects returned by UserContentManager
script messages directly from Vala.
* bindings/metadata/WebKit2-4.0.metadata: Tweak standard webkit2 VAPI to
re-include methods that return javascriptcore objects.
* bindings/vapi/javascriptcore-4.0.vapi: Copy generated VAPI file into
the tree, customise it so that it actually works.
* src/CMakeLists.txt: Generate the custom webkit2 VAPI, depend on
javascriptcore and include in-tree javascriptcore VAPI in the client
build.
* bindings/metadata/JSCore-3.0.metadata: Remove obsolete file.
We already need to 2.10 for the EditorState::typing-attributes property,
and we're probably going to want 2.8 anyway for
WebKit.UserContentManager::register_script_message_handler.
This means geary 0.12 won't compile under Debian stable unless backports
(bpo) are enabled, but that is how most users will get it 0.12
anyway. Further, the fact that stable is still shipping WK 2.6 is pretty
heinous from a security POV.
* src/CMakeLists.txt: Yoiks and away.
* src/client/application/geary-controller.vala (GearyController): Load
the ConversationWebView's stylesheets at startup.
* src/client/components/client-web-view.vala (ClientWebView): Add
::load_app_stylesheet and ::load_user_stylesheet static methods for use
by derived classes.
* src/client/conversation-viewer/conversation-web-view.vala
(ConversationWebView): Add static ::load_stylehseets method to load app
and user CSS. Remove old WK1 user style loading code.
* src/client/web-process/util-conversation.vala (Util.Conversation):
Remove old WK1 app style loading code.
* src/client/components/client-web-view.vala
(ClientWebView::add_inline_resource): Renamed fro add_cid_resource, to
make it more obvious what it is useful for and updated call sites.
(ClientWebView::add_inline_resources): New method for adding a complete
set of inline resources.
* src/client/conversation-viewer/conversation-email.vala
(ConversationEmail::ConversationEmail): Construct a map of inline
resources, add them to both the primary and attached messages.
(ConversationEmail::start_loading): Only load attachments once all web
views have been loaded, so any inline parts that were not displayed
inline can be displayed as attachments.
* src/client/components/client-web-view.vala
(ClientWebView::inline_resource_loaded): New signal to notify of when
an inline part has been loaded by the web view.
(ClientWebView::handle_cid_request): Fire new signal when a part is
loaded.
* src/client/conversation-viewer/conversation-email.vala
(ConversationEmail::connect_message_view_signals): Hook up new signal.
* src/client/conversation-viewer/conversation-message.vala
(ConversationMessage): Remove now-unesed attachment_displayed_inline signal.
* src/client/conversation-viewer/conversation-message.vala
(ConversationMessage): Remove ReplacedImage and related code.
(ConversationMessage::inline_image_replacer): Don't bother loading,
scaling, rotating and serialising the images, just add them as CID
resources.
* src/client/components/client-web-view.vala (ClientWebView): Modify the
cid_resources map contain memory buffers, not files, and update call
sites.
* src/client/conversation-viewer/conversation-message.vala
(ConversationMessage): Add a map to keep track of loaded resources,
update it using the WebView.resource-load-started signal, clear it
when the widget is destroyed.
(ConversationMessage::on_context_menu): Use the hit test to get the
image's URI, update the menu's action using that.
(ConversationMessage::on_save_image): Implement getting and saving
image data from the web resource object.
* src/client/application/geary-controller.vala
(GearyController::open_async): Register a handler for the 'cid' scheme.
* src/client/components/client-web-view.vala
(ClientWebView::handle_cid_request): Hook up requests for cid URIs
using attachment files.
* src/client/web-process/web-process-extension.vala
(GearyWebExtension::GearyWebExtension): Set the allow_prefix here,
since this is where we need to make the decision. Hook up to the
page-created and subsequently the send-request signals.
(GearyWebExtension::on_send_request): Always allow data and cid
requests through, only allow remote requests through if they have the
allow prefix.
(random_string): Moved here from util-random so we can call it.
* src/client/components/client-web-view.vala
(ClientWebView::allow_prefix): Keep this here for now, but its value
still needs to be fetched from the extension.
(ClientWebView::on_resource_load_started): Removed, the policy needs to
be set in the extension to actually work.
* src/CMakeLists.txt: Pass the build dir through to the application so it
can work out where to find the extension when running from the source
tree. Build geary-static as reloacatable so we can link it with the
extension. Actually link geary-static into the extension and install it.
* src/client/application/geary-application.vala
(GearyApplication::get_web_extensions_dir): New method that determines
where the web extension lib is to be found.
* src/client/application/geary-controller.vala
(GearyController::open_async): Set the extension dir on the WebContext,
and pass through logging config to the extension.
* src/client/web-process/web-process-extension.vala: Add a
GearyWebExtension extension object, create it on init and init logging.
* src/client/components/client-web-view.vala
(ClientWebView::on_decide_policy): HTML string page loads are treaded
as other navigation policy decisions, so allow them rather than
ignoring them.
* src/client/application/geary-controller.vala
(GearyController::open_async): Initialise WebKit default context here,
rather than in GearyApplication::startup so it happens after GTK+ has
been initialised.
Replace StylishWebView with ClientWebView, to act as a common base class
for the composer, conversation and other uses of web views.
Introduce a ComposerWebView that replaces WebviewEditFixer and extends
ClientWebView, and adds (dummy for now) methods for ComposerWidget to
call. Simiarly, make ConversationWebView extend ClientWebView, add dummy
calls to support the conversation viewer classes. Move common code from
both into ClientWebView.
Add a web-process library, unused other than for compile-time checking,
and move all client functions and methods involving DOM objects into util
classes there.
Bug 728002
* src/engine/imap-db/imap-db-account.vala
(Account::populate_search_table_batch_async): total_unindexed was wildy
inaccurate, since there may be been messages missing from MessageTable,
MessageSearchTable, or both. When clamped to 0, but when there actually
were messages to index, this would trigger an assert in the search
progress meter. So for now instead use something wildly overinflated
but guaranteed to not trigger the assert.
Bug 776654.
* src/engine/imap-db/imap-db-folder.vala (Folder): Add
REQUIRED_FTS_FIELDS constant that specifys what are the required fields
for FTS.
* src/engine/imap-db/imap-db-account.vala
(Account::populate_search_table_batch_async): Ensure rows returned meet
REQUIRED_FTS_FIELDS requirements.
Bug 755424.
* src/engine/imap/message/imap-uid-validity.vala (UIDValidity::MAX):
Allow values larger than permitted by RFC 3501 since at least one
server has been sending them.
* src/CMakeLists.txt: Make geary-client depend on the VAPI generation,
not the final client binary. Make geary-client depend on resource_copy
so valac can find the actual resource files.
* ui/CMakeLists.txt: Don't bother generating the GResources header file,
it's not needed.
* test/main.vala (main): Set the location of the compiled dev schema
before running any tests.
* test/CMakeLists.txt: Pass location of compiled GSettings schema through
to the test source. Depend on the geary binary so things like the
shcema are already compiled before compiling the tests.
* configure: Allow specifying a custom valadoc executable.
* src/CMakeLists.txt: Tidy up valadoc command, include dependencies when
in generated HTML output, enable warnings.
* src/engine/api/geary.vala: Provide boilerplate doc comment for the
Geary namespace.
* src/engine/api/geary-email.vala, src/engine/rfc822/rfc822.vala: Don't
use single-line doc comments, valadoc doesn't support them (see Bug
736483).
* src/engine/api/geary-folder-path.vala: Fix errors reported by valadoc.
* test/client/application/geary-configuration-test.vala: New unit test
for Configuration class.
* test/main.vala: Add new unit test to the client suite, ensure the
memory GSettings backend is used as the default so we get default
setting values, and never save any changes made.
* test/CMakeLists.txt: Add new unit test source.
* src/client/application/geary-config.vala: Tidy up code a bit to adhere
to code conventions.
* test/CMakeLists.txt: Add client lib and dependent packages to the
build.
* test/main.vala (main): Add test suites for both client and engine
tests to allow some more fine-grained control when running them. Also
add some sectioning doc comments.
This allows unit tests to link against client code for testing.
* src/CMakeLists.txt: Add a new geary-client static lib to the build,
that compiles all client code (except main.vala) as the executable
previously did, and generates a VAPI for it. Make the target for the
client then binary simply compile main.vala and link in the client
lib.
* src/client/application/geary-config.vala,
src/client/util/util-migrate.vala: Fix errors reported vy valac when
attempting to use the client lib VAPI.
* src/CMakeLists.txt, test/CMakeLists.txt: Rename engine lib to
geary-engine, add it to valac compilation steps via their list of
dependent packages, rather than as custom VAPIs.
This also makes the dependency betwen the client binary adn the webkit
CAPI generation explicit, and makes CLIENT_PACKAGES both complete and
less confusing.
* src/CMakeLists.txt: Add a custom target for webkit VAPI generation with
the VAPI as a dependency, so we can add that as a dependency of the
geary target, which means we won't need to use the ValaPrecompile
CUSTOM_VAPIS to add the dependency for us. With that in place, we can
simply add webkit to the client packages.
Fixes Base64 encoded parts when fetching PREVIEW, and armour, etc
stripping etc not being applied to previews geneated via
Geary.RFC822.Message.
* src/engine/rfc822/rfc822-utils.vala
(Geary.RFC822.Utils::to_preview_text): Assume line endings are LF
encoded, update doc comment and unit tests to reflect that.
* src/engine/rfc822/rfc822-message-data.vala (PreviewText.with_header):
Add CRLF filter to preveiw text to strip CR chars from lines.
Since currently, PREVIEW has some bad assumptions, we want to avoid using
it. As a workaround, when listing messages with PREVIEW, include ALL so
that HEADER and BODY are also retreived and the preview can synthesised,
also NONE to ensure that after setting ALL, UIDs will be returned in the
result.
Bug 714317.
* src/client/conversation-list/conversation-list-store.vala
(ConversationListStore): Include ALL and NONE in WITH_PREVIEW_FIELDS.
* src/client/conversation-viewer/conversation-list-box.vala
(ConversationListBox): Remove PREVIEW from REQUIRED_FIELDS, it's no
longer needed.
Since we can now generate a preview for a Geary.Email if it can construct
its RFC822 message, if a PREVIEW is requested and both both HEADER and
BODY are also requested, don't issue a seperate command for the PREVIEW.
As a result, messages downloaded via the email prefetcher will get
previews based on the complete message body.
* src/engine/imap-engine/imap-engine-email-prefetcher.vala: Update the
comment about synthesise ENVELOPE and PREVIEW, since we now do just
that from PREVIEW.
* src/engine/imap/api/imap-folder.vala (Folder::assemble_list_commands):
If the requested flags contains PREVIEW, but BODY and HEADER are also
requested, don't bother adding in additional commands for the PREVIEW.
(Folder::fetched_data_to_email): When setting the body, see if we can
also set the preview and if so, do so.