private async Task <MailContactModel> SaveContactToDatabaseAsync() { var contact = new MailContactModel { Name = Name, Address = Address }; using (var database = new DatabaseContext()) { database.MailContacts.Add(contact); await database.SaveChangesAsync(); } return(contact); }
private static async Task <KeyCollection> DownloadKeysForContactAsync(MailContactModel contact, WebClient client) { var server = Settings.Default.KeyServer; var address = String.Format("{0}/keys?email={1}", server, contact.Address); var uri = new Uri(address, UriKind.Absolute); client.Headers.Add(HttpRequestHeader.UserAgent, Settings.Default.UserAgent); var response = await client.OpenReadTaskAsync(uri); using (var reader = new StreamReader(response)) { var json = await reader.ReadToEndAsync(); return(JsonConvert.DeserializeObject <KeyCollection>(json)); } }
private static async Task UpdateKeysInDatabaseForContactAsync(MailContactModel contact, KeyCollection collection) { try { using (var database = new DatabaseContext()) { var keys = await database.PublicKeys.Where(x => x.ContactId == contact.Id).ToArrayAsync(); var keysToBeAdded = collection.Keys.Except(keys.Select(x => x.Data)); foreach (var key in keysToBeAdded) { database.PublicKeys.Add(new PublicKeyModel { ContactId = contact.Id, Data = key }); } await database.SaveChangesAsync(); } } catch (Exception ex) { Logger.Error(ex); } }
public async Task InitAsync() { var reader = await GetMailMessageReaderAsync(); Subject = reader.Headers.Subject; Date = reader.Headers.DateSent.ToLocalTime(); try { using (var database = new DatabaseContext()) { var from = await database.MailContacts .FirstOrDefaultAsync(x => x.Address == reader.Headers.From.Address); if (from == null) { from = new MailContactModel { Name = reader.Headers.From.DisplayName, Address = reader.Headers.From.Address }; database.MailContacts.Add(from); } _from = new MailContactContext(from); foreach (var value in reader.Headers.To) { var v = value; var contact = await database.MailContacts .FirstOrDefaultAsync(x => x.Address == v.Address); if (contact == null) { contact = new MailContactModel { Name = v.DisplayName, Address = v.Address }; database.MailContacts.Add(contact); } _to.Add(new MailContactContext(contact)); } foreach (var value in reader.Headers.Cc) { var v = value; var contact = await database.MailContacts .FirstOrDefaultAsync(x => x.Address == v.Address); if (contact == null) { contact = new MailContactModel { Name = v.DisplayName, Address = v.Address }; database.MailContacts.Add(contact); } _cc.Add(new MailContactContext(contact)); } foreach (var attachment in reader.FindAllAttachments()) { _attachments.Add(new AttachmentContext(attachment)); } await database.SaveChangesAsync(); } } catch (Exception ex) { Logger.Error(ex); } }
internal MailContactContext(MailContactModel contact) { _contact = contact; }