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);
        }
Example #2
0
        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));
            }
        }
Example #3
0
        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);
            }
        }
Example #5
0
 internal MailContactContext(MailContactModel contact)
 {
     _contact = contact;
 }