diff --git a/src/client/ui/message-viewer.vala b/src/client/ui/message-viewer.vala index f5bb3b73..37f973fa 100644 --- a/src/client/ui/message-viewer.vala +++ b/src/client/ui/message-viewer.vala @@ -1258,8 +1258,10 @@ public class MessageViewer : WebKit.WebView { foreach (Geary.Attachment attachment in attachments) { // Generate the attachment table. WebKit.DOM.HTMLElement attachment_table = Util.DOM.clone_node(attachment_template); + string filename = Geary.String.is_null_or_whitespace(attachment.filename) ? + _("none") : attachment.filename; Util.DOM.select(attachment_table, ".info .filename") - .set_inner_text(attachment.filename); + .set_inner_text(filename); Util.DOM.select(attachment_table, ".info .filesize") .set_inner_text(Files.get_filesize_as_string(attachment.filesize)); attachment_table.set_attribute("data-attachment-id", "%lld".printf(attachment.id)); diff --git a/src/engine/api/geary-attachment.vala b/src/engine/api/geary-attachment.vala index 1529ec4a..aec2d5bb 100644 --- a/src/engine/api/geary-attachment.vala +++ b/src/engine/api/geary-attachment.vala @@ -6,14 +6,14 @@ public class Geary.Attachment { public const Email.Field REQUIRED_FIELDS = Email.Field.HEADER | Email.Field.BODY; - - public string filename { get; private set; } + + public string? filename { get; private set; } public string filepath { get; private set; } public string mime_type { get; private set; } public int64 filesize { get; private set; } public int64 id { get; private set; } - - internal Attachment(File data_dir, string filename, string mime_type, int64 filesize, + + internal Attachment(File data_dir, string? filename, string mime_type, int64 filesize, int64 message_id, int64 attachment_id) { this.filename = filename; @@ -22,11 +22,13 @@ public class Geary.Attachment { this.filepath = get_path(data_dir, message_id, attachment_id, filename); this.id = attachment_id; } - + internal static string get_path(File data_dir, int64 message_id, int64 attachment_id, - string filename) { + string? filename) { + // "none" should not be translated, or the user will be unable to retrieve their + // attachments with no filenames after changing their language. return "%s/attachments/%lld/%lld/%s".printf(data_dir.get_path(), message_id, attachment_id, - filename); + filename ?? "none"); } } diff --git a/src/engine/sqlite/api/sqlite-folder.vala b/src/engine/sqlite/api/sqlite-folder.vala index 62b98352..c948e729 100644 --- a/src/engine/sqlite/api/sqlite-folder.vala +++ b/src/engine/sqlite/api/sqlite-folder.vala @@ -668,10 +668,6 @@ private class Geary.Sqlite.Folder : Object, Geary.ReferenceSemantics { // Get the info about the attachment. string? filename = attachment.get_filename(); string mime_type = attachment.get_content_type().to_string(); - if (filename == null || filename.length == 0) { - /// Placeholder filename for attachments with no filename. - filename = _("none"); - } // Convert the attachment content into a usable ByteArray. GMime.DataWrapper attachment_data = attachment.get_content_object(); diff --git a/src/engine/sqlite/email/sqlite-message-attachment-row.vala b/src/engine/sqlite/email/sqlite-message-attachment-row.vala index b1160f2a..1f7a5703 100644 --- a/src/engine/sqlite/email/sqlite-message-attachment-row.vala +++ b/src/engine/sqlite/email/sqlite-message-attachment-row.vala @@ -8,11 +8,11 @@ public class Geary.Sqlite.MessageAttachmentRow : Geary.Sqlite.Row { public int64 id { get; private set; } public int64 message_id { get; private set; } public int64 filesize { get; private set; } - public string filename { get; private set; } + public string? filename { get; private set; } public string mime_type { get; private set; } public MessageAttachmentRow(MessageAttachmentTable table, int64 id, int64 message_id, - string filename, string mime_type, int64 filesize) { + string? filename, string mime_type, int64 filesize) { base (table); this.id = id;