This ensures both inline images are saved using the specified content filename, if any, and that an extension is attempted to be guessed when no filename is specified. Fixes Bug 713999, Bug 712923, Bug 778026. * src/client/application/geary-controller.vala: Major rework of how attachments are saved. Rework how save dialogs are constructed, combining common code paths into one constrcutor method. Split up code for saving one attachment vs many into two different methods. Ensure all code baths ultimately use the same method to do the actual saving. Lookup a attachment when saving an inline image and use that by default. Get filenames from new Attachment::get_useful_filename method that guesses if needed. * src/client/conversation-viewer/conversation-message.vala (ConversationMessage::save_image): Fix name of first param to reflect what it actually is. * src/engine/api/geary-attachment.vala (Attachment): Add ::get_safe_filename method that checks the type of both the attachment's content and its file name, if any. Will construct an appropriate file name if non is given. Add unit tests. * src/engine/api/geary-email.vala (Email): Add new ::get_attachment_by_content_id to lookup attachments by MIME content-id. Rename old ::get_attachment method to disambiguate.
83 lines
2.5 KiB
Vala
83 lines
2.5 KiB
Vala
/*
|
|
* Copyright 2016 Michael Gratton <mike@vee.net>
|
|
*
|
|
* This software is licensed under the GNU Lesser General Public License
|
|
* (version 2.1 or later). See the COPYING file in this distribution.
|
|
*/
|
|
|
|
// Defined by CMake build script.
|
|
extern const string _GSETTINGS_DIR;
|
|
|
|
int main(string[] args) {
|
|
/*
|
|
* Set env vars right up front to avoid weird bugs
|
|
*/
|
|
|
|
// Use the memory GSettings DB so we a) always start with default
|
|
// values, and b) don't persist any changes made during a test
|
|
Environment.set_variable("GSETTINGS_BACKEND", "memory", true);
|
|
|
|
// Let GSettings know where to find the dev schema
|
|
Environment.set_variable("GSETTINGS_SCHEMA_DIR", _GSETTINGS_DIR, true);
|
|
|
|
/*
|
|
* Initialise all the things.
|
|
*/
|
|
|
|
Gtk.init(ref args);
|
|
Test.init(ref args);
|
|
|
|
Geary.RFC822.init();
|
|
Geary.HTML.init();
|
|
Geary.Logging.init();
|
|
|
|
/*
|
|
* Hook up all tests into appropriate suites
|
|
*/
|
|
|
|
TestSuite engine = new TestSuite("engine");
|
|
|
|
engine.add_suite(new Geary.AttachmentTest().get_suite());
|
|
engine.add_suite(new Geary.HTML.UtilTest().get_suite());
|
|
engine.add_suite(new Geary.IdleManagerTest().get_suite());
|
|
engine.add_suite(new Geary.Inet.Test().get_suite());
|
|
engine.add_suite(new Geary.JS.Test().get_suite());
|
|
engine.add_suite(new Geary.Mime.ContentTypeTest().get_suite());
|
|
engine.add_suite(new Geary.RFC822.MailboxAddressTest().get_suite());
|
|
engine.add_suite(new Geary.RFC822.MessageTest().get_suite());
|
|
engine.add_suite(new Geary.RFC822.MessageDataTest().get_suite());
|
|
engine.add_suite(new Geary.RFC822.Utils.Test().get_suite());
|
|
engine.add_suite(new Geary.TimeoutManagerTest().get_suite());
|
|
|
|
TestSuite client = new TestSuite("client");
|
|
|
|
// Keep this before other ClientWebView based tests since it tests
|
|
// WebContext init
|
|
client.add_suite(new ClientWebViewTest().get_suite());
|
|
|
|
client.add_suite(new ComposerWebViewTest().get_suite());
|
|
client.add_suite(new ConfigurationTest().get_suite());
|
|
|
|
TestSuite js = new TestSuite("js");
|
|
|
|
js.add_suite(new ComposerPageStateTest().get_suite());
|
|
js.add_suite(new ConversationPageStateTest().get_suite());
|
|
|
|
/*
|
|
* Run the tests
|
|
*/
|
|
TestSuite root = TestSuite.get_root();
|
|
root.add_suite(engine);
|
|
root.add_suite(client);
|
|
root.add_suite(js);
|
|
|
|
int ret = -1;
|
|
Idle.add(() => {
|
|
ret = Test.run();
|
|
Gtk.main_quit();
|
|
return false;
|
|
});
|
|
|
|
Gtk.main();
|
|
return ret;
|
|
}
|