Refactor email fetching methods in Limilabs service
Removed public methods `FetchEmailUidsAsync` and `FetchEmailByUidAsync` from `LimilabsImapEmailService` to simplify the public API. Refactored `FetchEmailUidsAsync` into a private static helper method that operates directly on an `Imap` instance. Removed exception handling logic specific to the removed methods. These changes aim to encapsulate email fetching functionality and streamline the service's design.
This commit is contained in:
@@ -79,62 +79,6 @@ public class LimilabsImapEmailService(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<long>> FetchEmailUidsAsync(
|
|
||||||
EmailAccountDto account,
|
|
||||||
MailSearchFilter filter,
|
|
||||||
CancellationToken cancellationToken = default)
|
|
||||||
{
|
|
||||||
using var imap = await OpenAsync(account, filter.Folder);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
List<long> uids = await FetchEmailUidsAsync(imap, filter, cancellationToken);
|
|
||||||
|
|
||||||
await imap.CloseAsync(cancellationToken);
|
|
||||||
return uids;
|
|
||||||
}
|
|
||||||
catch (Limilabs.Client.ServerException ex)
|
|
||||||
{
|
|
||||||
await imap.CloseSafelyAsync();
|
|
||||||
throw new AuthenticationFailedException(
|
|
||||||
$"IMAP authentication failed for account '{account.Username}'.", ex);
|
|
||||||
}
|
|
||||||
catch (Exception ex) when (ex is not OperationCanceledException)
|
|
||||||
{
|
|
||||||
await imap.CloseSafelyAsync();
|
|
||||||
throw new InvalidOperationException(
|
|
||||||
$"Failed to fetch email UIDs from IMAP server '{account.ImapServer}'.", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<ReceivedEmailContext?> FetchEmailByUidAsync(
|
|
||||||
EmailAccountDto account,
|
|
||||||
long uid,
|
|
||||||
string folder = "INBOX",
|
|
||||||
bool withAttachments = false,
|
|
||||||
CancellationToken cancellationToken = default)
|
|
||||||
{
|
|
||||||
using var imap = await OpenAsync(account, folder);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var mail = await FetchEmailByUidAsync(imap, uid, withAttachments, cancellationToken);
|
|
||||||
|
|
||||||
await imap.CloseAsync(cancellationToken);
|
|
||||||
return mail;
|
|
||||||
}
|
|
||||||
catch (Limilabs.Client.ServerException ex)
|
|
||||||
{
|
|
||||||
await imap.CloseSafelyAsync();
|
|
||||||
throw new AuthenticationFailedException(
|
|
||||||
$"IMAP authentication failed for account '{account.Username}'.", ex);
|
|
||||||
}
|
|
||||||
catch (Exception ex) when (ex is not OperationCanceledException)
|
|
||||||
{
|
|
||||||
await imap.CloseSafelyAsync();
|
|
||||||
Logger.LogWarning(ex, "Failed to fetch IMAP message UID={Uid} from folder {Folder}.", uid, folder);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task MarkAsSeenAsync(
|
public async Task MarkAsSeenAsync(
|
||||||
EmailAccountDto account,
|
EmailAccountDto account,
|
||||||
long uid,
|
long uid,
|
||||||
@@ -162,7 +106,7 @@ public class LimilabsImapEmailService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Private helpers
|
// Private helpers
|
||||||
private async Task<List<long>> FetchEmailUidsAsync(
|
private static async Task<List<long>> FetchEmailUidsAsync(
|
||||||
Imap imap,
|
Imap imap,
|
||||||
MailSearchFilter filter,
|
MailSearchFilter filter,
|
||||||
CancellationToken cancellationToken = default)
|
CancellationToken cancellationToken = default)
|
||||||
|
|||||||
Reference in New Issue
Block a user