* src/client/conversation-viewer/conversation-web-view.vala
(ConversationWebView): Remove has_selection method since we are
using the signal to specify if a selection was found or not. Update
call sites to use that.
(ConversationWebView::get_selection_for_find,
ConversationWebView::get_selection_for_quoting): Implement using calls
to web process JS methods.
* src/client/application/geary-controller.vala
(GearyController::create_reply_forward_widget): If we have a possible
message view to quote from, handle constructing the compser widget
asynchronously, when we know if we have a quote or not.
* src/client/conversation-viewer/conversation-viewer.vala:
(ConversationViewer::on_find_mode_changed): Handle getting text
selection for finds asynchonously.
* src/client/components/client-web-view.vala
(ClientWebView::get_string_result): New helper for getting string
values from JS calls.
* src/client/conversation-viewer/conversation-email.vala
(ConversationEmail::get_selection_for_quoting,
ConversationEmail::get_selection_for_find): Handxle errors when
obtaining selections from a message view.
* src/client/conversation-viewer/conversation-message.vala: Remove
methods that were simply passed through to the web view anyway. Update
call sies.
* src/client/web-process/util-conversation.vala: Port all remaining
functions to JS, remove.
* bindings/vapi/javascriptcore-4.0.vapi: Add methods needed to get
strings out of WebKit.JavascriptResult instances.
* ui/conversation-web-view.js: Implement selection functions in JS, minor
cleanup.
* src/client/application/geary-controller.vala (GearyController::open_async):
Load ComposerWebView resources.
* src/client/composer/composer-web-view.vala (ComposerWebView): Move
HTML/CSS template here from ComposerWidget. Load composer-web-view.js
on app init and add it to the web view's user content manager.
(ComposerWebView::load_html): Overridden to require HTML body and
signature, assemble complete HTML as appropriate before chaining up to
the default impl.
(ComposerWebView::load_finished_and_realised): Remove redundant method.
* src/client/composer/composer-widget.vala (ComposerWidget):
Remove 'message' prop since it is unused and onerous. Cache current
account's signature as a field so it can be passed through to the
editor as needed. Port on_link_clicked to composer-web-view.js.
* src/client/web-process/util-composer.vala: Remove function ported to JS
in composer-web-view.js
* ui/CMakeLists.txt: Include new ComposerWebView JS resource.
* ui/composer-web-view.js: Port composer HTML sanitisation methods to JS,
add to a custom subclass of PageState. Instantiate it and hook it up to
onload.
* ui/conversation-web-view.js: New script, port old HTML cleaning code in
vala to Javascript as new subclass of PageState. Instantiate that on
page load.
* src/client/conversation-viewer/conversation-web-view.vala
(ConversationWebView): Load and add new JS script for conversations.
* src/client/web-process/util-conversation.vala (Util.Conversation):
Remove migrated and obsolete code.
* ui/client-web-view.js (PageState): Allow on-load behaviour to be
overridden in subclasses.
* ui/CMakeLists.txt: Include new JS script.
* ui/conversation-web-view.css: Chase CSS class name changes.
WK2 seems to be reporting valid hight values now, so we don't need this
any more. With an additional small tweak, this also fixes auto-marking
messages as read under WK2.
* src/client/conversation-viewer/conversation-web-view.vala
(ConversationWebView): Remove ::is_height_valid property. Update call
sites to use ClientWebView::is_loaded instead.
* src/client/conversation-viewer/conversation-list-box.vala
(ConversationListBox::check_mark_read): Also check that the web view
has been allocated a positive size before auto-marking as read.
Add a "has_selection" param to avoid a second round-trip to the web
process to determine that.
* src/client/components/client-web-view.vala (ClientWebView): Add a
selection_changed signal, register a JS message handler for the JS
equivalent hook up firing the signal.
* src/client/web-process/web-process-extension.vala (GearyWebExtension):
Send a JS selectionChanged message when the page's selection changes.
* src/client/composer/composer-widget.vala,
src/client/conversation-viewer/conversation-email.vala,
src/client/conversation-viewer/conversation-message.vala: Uncomment
code that relied on the WK1 selection_changed signal, use signal param
rather than DOM calls.
* ui/client-web-view.js: Implement sending the selectionChanged message.
* ui/client-web-view.js: Move emitPreferredHeightChanged() into PageState
as ::preferredHeightChanged(). Add a explicit constructor, move
instance properties into that. Add an interval timer to periodically
update the preferred height until loaded.
* src/client/components/client-web-view.vala (ClientWebView): Register
for new remoteImageLoadBlocked message from JS. Add new
::remote_image_load_blocked signal to notify when a remote image load
was blocked. Add ::allow_remote_image_loading and ::load_remote_images
methods to allow th app to manage image loading state.
* src/client/conversation-viewer/conversation-email.vala
(ConversationEmail): Determine up front whether the message view should
load remote images and flag that, rather than passing through the email
flag and the contact store.
* src/client/conversation-viewer/conversation-message.vala
(ConversationMessage): Rmeove contact_store and
always_load_remote_images properties and related code, just let the
parent email view advise whether remote images should be initially
loaded and act accordingly. Look up to ClientWebView signal and methods
to handle manual remote image loading management by the user. Remove
some obsolete code.
* src/client/web-process/web-process-extension.vala (GearyWebExtension):
Replace allow_prefix implementation for remote image management with
explicit signalling to/from the application via JavaScript.
* ui/client-web-view.js: Add a new PageState object, add props and method
to implement remote image loading management.
* ui/client-web-view-allow-remote-images.js: Monkeypatch to be used when
remote images should be loaded by default.
* ui/CMakeLists.txt: Include new JS file.
* src/client/conversation-viewer/conversation-web-view.vala,
src/client/web-process/util-conversation.vala,
src/client/web-process/util-webkit.vala: Remove obsolete code.
* src/CMakeLists.txt: Also generate a custom Also generate a custom
webkit2gtk-web-extension-4.0 VAPI that re-includes javascriptcore
objects, so they can be access from the web extension.
* bindings/metadata/WebKit2WebExtension-4.0-custom.vala,
bindings/metadata/WebKit2WebExtension-4.0.metadata: Include in-tree
metadata for web extension VAPI, update to all access to JS obejcts.
* bindings/vapi/javascriptcore-4.0.vapi: Add a bunch of useful additional
objects and method.
* src/client/components/client-web-view.vala
(ClientWebView::load_app_script): Set script injection time to the
start of the document load.
* ui/client-web-view.js: Set an onload handler to report back the
preferred height.
* bindings/vapi/javascriptcore-4.0.vapi: Add some methods to
GlobalContext for accessing JSValues as ints.
* src/client/components/client-web-view.vala
(ClientWebView): Hook up UserContentManager script messages handler and
handler implementation for "preferredHeightChanged", update the new
preferred_height prop on the class, and queue a resize. Hook those
values up to the GTK allocation machinery.
(ClientWebView::get_int_result): Convenience method for getting an int
from a JavascriptResult.
(ClientWebView::get_preferred_height): Report back values as reported
by messages from the script handler.
(ClientWebView::register_message_handler): Convenience method for
registering script messages handlers.
* src/client/conversation-viewer/conversation-web-view.vala
(ConversationWebView): Remove now-redundant GTK allocation machinery.
* ui/client-web-view.js: Post a message to preferredHeightChanged when
the page is sorta-kinda loaded.
* src/client/application/geary-controller.vala
(GearyController::open_async): Load the app script for ClientWebView at
startup.
* src/client/components/client-web-view.vala
(ClientWebView::ClientWebView): Ensure we actually have a
UserContentManager instance to work with, add the app script to the
manager for the instance.
(ClientWebView::load_scripts): Actually load client-web-view.js.
(ClientWebView::load_user_stylesheet): Helper method for this class and
subsclasses for doing the actual script load from the app.
* ui/client-web-view.js: Add boilerplaye for new file.
* ui/CMakeLists.txt: Include client-web-view.js.
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.