geary/src/engine/sqlite/MessageRow.vala

155 lines
5.5 KiB
Vala
Raw Normal View History

/* Copyright 2011 Yorba Foundation
*
* This software is licensed under the GNU Lesser General Public License
* (version 2.1 or later). See the COPYING file in this distribution.
*/
public class Geary.Sqlite.MessageRow : Geary.Sqlite.Row {
public int64 id { get; set; default = INVALID_ID; }
public string? date { get; set; }
public time_t date_time_t { get; set; default = -1; }
public string? from { get; set; }
public string? sender { get; set; }
public string? reply_to { get; set; }
public string? to { get; set; }
public string? cc { get; set; }
public string? bcc { get; set; }
public string? message_id { get; set; }
public string? in_reply_to { get; set; }
public string? subject { get; set; }
public string? header { get; set; }
public string? body { get; set; }
public MessageRow(Table table) {
base (table);
}
public MessageRow.from_email(MessageTable table, Geary.Email email) {
base (table);
date = (email.date != null) ? email.date.original : null;
date_time_t = (email.date != null) ? email.date.as_time_t : -1;
from = flatten_addresses(email.from);
sender = flatten_addresses(email.sender);
reply_to = flatten_addresses(email.reply_to);
to = flatten_addresses(email.to);
cc = flatten_addresses(email.cc);
bcc = flatten_addresses(email.bcc);
message_id = (email.message_id != null) ? email.message_id.value : null;
in_reply_to = (email.in_reply_to != null) ? email.in_reply_to.value : null;
subject = (email.subject != null) ? email.subject.value : null;
header = (email.header != null) ? email.header.buffer.to_ascii_string() : null;
body = (email.body != null) ? email.body.buffer.to_ascii_string() : null;
}
public MessageRow.from_query_result(Table table, Geary.Email.Field fields, SQLHeavy.QueryResult result)
throws Error {
base (table);
id = fetch_int64_for(result, MessageTable.Column.ID);
if ((fields & Geary.Email.Field.DATE) != 0) {
date = fetch_string_for(result, MessageTable.Column.DATE_FIELD);
date_time_t = (time_t) fetch_int64_for(result, MessageTable.Column.DATE_INT64);
}
if ((fields & Geary.Email.Field.ORIGINATORS) != 0) {
from = fetch_string_for(result, MessageTable.Column.FROM_FIELD);
sender = fetch_string_for(result, MessageTable.Column.SENDER);
reply_to = fetch_string_for(result, MessageTable.Column.REPLY_TO);
}
if ((fields & Geary.Email.Field.RECEIVERS) != 0) {
to = fetch_string_for(result, MessageTable.Column.TO_FIELD);
cc = fetch_string_for(result, MessageTable.Column.CC);
bcc = fetch_string_for(result, MessageTable.Column.BCC);
}
if ((fields & Geary.Email.Field.REFERENCES) != 0) {
message_id = fetch_string_for(result, MessageTable.Column.MESSAGE_ID);
in_reply_to = fetch_string_for(result, MessageTable.Column.IN_REPLY_TO);
}
if ((fields & Geary.Email.Field.SUBJECT) != 0)
subject = fetch_string_for(result, MessageTable.Column.SUBJECT);
if ((fields & Geary.Email.Field.HEADER) != 0)
header = fetch_string_for(result, MessageTable.Column.HEADER);
if ((fields & Geary.Email.Field.BODY) != 0)
body = fetch_string_for(result, MessageTable.Column.BODY);
}
public Geary.Email to_email(int msg_num) throws Error {
Geary.Email email = new Geary.Email(msg_num);
email.date = (date != null) ? new RFC822.Date(date) : null;
email.from = unflatten_addresses(from);
email.sender = unflatten_addresses(sender);
email.reply_to = unflatten_addresses(reply_to);
email.to = unflatten_addresses(to);
email.cc = unflatten_addresses(cc);
email.bcc = unflatten_addresses(bcc);
email.message_id = (message_id != null) ? new RFC822.MessageID(message_id) : null;
email.in_reply_to = (in_reply_to != null) ? new RFC822.MessageID(in_reply_to) : null;
email.subject = (subject != null) ? new RFC822.Subject(subject) : null;
email.header = (header != null) ? new RFC822.Header(new Geary.Memory.StringBuffer(header))
: null;
email.body = (body != null) ? new RFC822.Text(new Geary.Memory.StringBuffer(body))
: null;
return email;
}
public string? flatten_addresses(RFC822.MailboxAddresses? addrs) {
if (addrs == null)
return null;
switch (addrs.size) {
case 0:
return null;
case 1:
return addrs[0].get_full_address();
default:
StringBuilder builder = new StringBuilder();
foreach (RFC822.MailboxAddress addr in addrs) {
if (!String.is_empty(builder.str))
builder.append(", ");
builder.append(addr.get_full_address());
}
return builder.str;
}
}
public RFC822.MailboxAddresses? unflatten_addresses(string? str) {
if (str == null)
return null;
return null;
}
}