Files
Phonebook/Services/ContactService.cs
2026-04-09 13:10:02 +03:00

133 lines
3.9 KiB
C#

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<List<Contact>> GetAllContacts()
{
return await IPlatformApplication.Current!.Services.GetService<DatabaseService>()!.GetContactsAsync();
}
private static async IAsyncEnumerable<Contact> 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<Contact>();
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)
{
}
}
}