Deal with MailboxAddresses, not strings, in composer

This commit is contained in:
Robert Schroll 2015-01-12 18:25:18 -08:00
parent a3aa8f770f
commit 6b4d841520
3 changed files with 39 additions and 15 deletions

View file

@ -230,8 +230,8 @@ public class ComposerWidget : Gtk.EventBox {
private bool action_flag = false;
private bool is_attachment_overlay_visible = false;
private Gee.List<Geary.Attachment>? pending_attachments = null;
private string reply_to_addresses = "";
private string reply_cc_addresses = "";
private Geary.RFC822.MailboxAddresses reply_to_addresses;
private Geary.RFC822.MailboxAddresses reply_cc_addresses;
private string reply_subject = "";
private string forward_subject = "";
private string reply_message_id = "";
@ -425,11 +425,11 @@ public class ComposerWidget : Gtk.EventBox {
switch (compose_type) {
case ComposeType.NEW_MESSAGE:
if (referred.to != null)
to = referred.to.to_rfc822_string();
to_entry.addresses = referred.to;
if (referred.cc != null)
cc = referred.cc.to_rfc822_string();
cc_entry.addresses = referred.cc;
if (referred.bcc != null)
bcc = referred.bcc.to_rfc822_string();
bcc_entry.addresses = referred.bcc;
if (referred.in_reply_to != null)
in_reply_to = referred.in_reply_to.to_rfc822_string();
if (referred.references != null)
@ -450,9 +450,9 @@ public class ComposerWidget : Gtk.EventBox {
case ComposeType.REPLY:
case ComposeType.REPLY_ALL:
to = reply_to_addresses;
to_entry.addresses = reply_to_addresses;
if (compose_type == ComposeType.REPLY_ALL)
cc = reply_cc_addresses;
cc_entry.addresses = reply_cc_addresses;
to_entry.modified = cc_entry.modified = false;
subject = reply_subject;
in_reply_to = reply_message_id;
@ -811,8 +811,9 @@ public class ComposerWidget : Gtk.EventBox {
case ComposeType.REPLY_ALL:
subject = reply_subject;
if (!recipients_modified) {
to = reply_to_addresses;
cc = (new_type == ComposeType.REPLY_ALL ? reply_cc_addresses : "");
to_entry.addresses = reply_to_addresses;
cc_entry.addresses = (new_type == ComposeType.REPLY_ALL) ?
reply_cc_addresses : null;
to_entry.modified = cc_entry.modified = false;
} else {
to_entry.select_region(0, -1);

View file

@ -11,34 +11,57 @@ public class EmailEntry : Gtk.Entry {
public bool modified = false;
// null or valid addresses
public Geary.RFC822.MailboxAddresses? addresses { get; private set; default = null; }
public Geary.RFC822.MailboxAddresses? addresses { get; set; default = null; }
private weak ComposerWidget composer;
private bool updating = false;
public EmailEntry(ComposerWidget composer) {
changed.connect(on_changed);
key_press_event.connect(on_key_press);
this.composer = composer;
notify["addresses"].connect(() => {
validate_addresses();
if (updating)
return;
updating = true;
modified = true;
text = (addresses == null) ? "" : addresses.to_rfc822_string();
updating = false;
});
}
private void on_changed() {
if (updating)
return;
modified = true;
((ContactEntryCompletion) get_completion()).reset_selection();
if (Geary.String.is_empty(text.strip())) {
updating = true;
addresses = null;
updating = false;
valid_or_empty = true;
empty = true;
return;
}
updating = true;
addresses = new Geary.RFC822.MailboxAddresses.from_rfc822_string(text);
updating = false;
}
private void validate_addresses() {
if (addresses.size == 0) {
valid_or_empty = true;
empty = true;
return;
}
empty = false;
foreach (Geary.RFC822.MailboxAddress address in addresses) {
if (!address.is_valid()) {
valid_or_empty = false;

View file

@ -69,7 +69,7 @@ private void remove_address(Gee.List<Geary.RFC822.MailboxAddress> addresses,
}
}
public string create_to_addresses_for_reply(Geary.Email email,
public Geary.RFC822.MailboxAddresses create_to_addresses_for_reply(Geary.Email email,
string? sender_address = null) {
Gee.List<Geary.RFC822.MailboxAddress> new_to =
new Gee.ArrayList<Geary.RFC822.MailboxAddress>();
@ -87,10 +87,10 @@ public string create_to_addresses_for_reply(Geary.Email email,
if (!String.is_empty(sender_address))
remove_address(new_to, sender_address);
return new_to.size > 0 ? new Geary.RFC822.MailboxAddresses(new_to).to_rfc822_string() : "";
return new Geary.RFC822.MailboxAddresses(new_to);
}
public string create_cc_addresses_for_reply_all(Geary.Email email,
public Geary.RFC822.MailboxAddresses create_cc_addresses_for_reply_all(Geary.Email email,
string? sender_address = null) {
Gee.List<Geary.RFC822.MailboxAddress> new_cc = new Gee.ArrayList<Geary.RFC822.MailboxAddress>();
@ -108,7 +108,7 @@ public string create_cc_addresses_for_reply_all(Geary.Email email,
if (!String.is_empty(sender_address))
remove_address(new_cc, sender_address, true);
return new_cc.size > 0 ? new Geary.RFC822.MailboxAddresses(new_cc).to_rfc822_string() : "";
return new Geary.RFC822.MailboxAddresses(new_cc);
}
public string reply_references(Geary.Email source) {