using ClosedXML.Excel; using Phonebook.Utils; using Contact = Phonebook.Models.Contact; namespace Phonebook.Services; public class ContactService { private readonly DatabaseService _databaseService; public Action? OnContactsUpdated; public ContactService(DatabaseService databaseService) { _databaseService = databaseService; } public void InvokeUpdateContacts() { OnContactsUpdated?.Invoke(); } public async Task ClearAllContacts() { await _databaseService.ClearAll(); } public async Task> GetAllContacts() { return await IPlatformApplication.Current!.Services.GetService()!.GetContactsAsync(); } private static async IAsyncEnumerable GetPhoneContacts() { var contacts = await Contacts.Default.GetAllAsync(); foreach (var userContact in contacts) { var contact = new Contact(); contact.Name = userContact.DisplayName; var firstPhoneNumber = userContact.Phones.FirstOrDefault(); contact.PhoneNumber = firstPhoneNumber != null ? firstPhoneNumber.PhoneNumber : ""; var firstEmail = userContact.Emails.FirstOrDefault(); contact.Email = firstEmail != null ? firstEmail.EmailAddress : ""; contact.Address = ""; contact.Description = ""; contact.PhotoPath = ""; yield return contact; } } public async Task ImportFromLocalContact() { var createList = new List(); await foreach (var phoneContact in GetPhoneContacts()) { var foundId = await _databaseService.SearchIdByNameOrDefault(phoneContact); if(foundId.Id != 0) continue; createList.Add(phoneContact); } await _databaseService.SaveContactsAsync(createList); InvokeUpdateContacts(); } public async Task ExportToXlsx() { try { var allContacts = await GetAllContacts(); if (allContacts.Count <= 0) { return; } var fileName = $"contacts_{DateTime.Now:yyyyMMdd_HHmmss}.xlsx"; var localPath = Path.Combine(FileSystem.CacheDirectory, fileName); using (var workbook = new XLWorkbook()) { var worksheet = workbook.Worksheets.Add("Contacts"); worksheet.Cell(1, 1).Value = "Id"; worksheet.Cell(1, 2).Value = "Name"; worksheet.Cell(1, 3).Value = "PhoneNumber"; worksheet.Cell(1, 4).Value = "Email"; worksheet.Cell(1, 5).Value = "Address"; worksheet.Cell(1, 6).Value = "Description"; worksheet.Cell(1, 7).Value = "PhotoPath"; for (var i = 0; i < allContacts.Count; i++) { var contact = allContacts[i]; worksheet.Cell(2 + i, 1).Value = contact.Id; worksheet.Cell(2 + i, 2).Value = contact.Name; worksheet.Cell(2 + i, 3).Value = contact.PhoneNumber; worksheet.Cell(2 + i, 4).Value = contact.Email; worksheet.Cell(2 + i, 5).Value = contact.Address; worksheet.Cell(2 + i, 6).Value = contact.Description; worksheet.Cell(2 + i, 7).Value = contact.PhotoPath; } workbook.SaveAs(localPath); } await Share.Default.RequestAsync(new ShareFileRequest { Title = "Сохранить контакты", File = new ShareFile(localPath) }); } catch (Exception ex) { } } }