Skip to content

Commit a1860ae

Browse files
committed
fix: ensure to use correct path separator #226
1 parent ace53b6 commit a1860ae

File tree

1 file changed

+65
-25
lines changed

1 file changed

+65
-25
lines changed

lib/src/mail/mail_client.dart

Lines changed: 65 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,15 @@ class MailClient {
357357
if (order != null) {
358358
boxes = sortMailboxes(order, boxes);
359359
}
360+
if (boxes.isNotEmpty) {
361+
final separator = boxes.first.pathSeparator;
362+
if (separator != _account.incoming.pathSeparator) {
363+
_account = _account.copyWith(
364+
incoming: _account.incoming.copyWith(pathSeparator: separator),
365+
);
366+
unawaited(_onConfigChanged?.call(_account));
367+
}
368+
}
360369
return boxes;
361370
}
362371

@@ -365,9 +374,10 @@ class MailClient {
365374
///
366375
/// Optionally set [createIntermediate] to false, in case not all intermediate
367376
/// folders should be created, if not already present on the server.
368-
Future<Tree<Mailbox?>> listMailboxesAsTree(
369-
{bool createIntermediate = true,
370-
List<MailboxFlag> order = defaultMailboxOrder}) async {
377+
Future<Tree<Mailbox?>> listMailboxesAsTree({
378+
bool createIntermediate = true,
379+
List<MailboxFlag> order = defaultMailboxOrder,
380+
}) async {
371381
final mailboxes = _mailboxes ?? await listMailboxes();
372382
List<Mailbox>? firstBoxes;
373383
firstBoxes = sortMailboxes(order, mailboxes, keepRemaining: false);
@@ -462,8 +472,11 @@ class MailClient {
462472
/// with [enableCondStore].
463473
///
464474
/// Optionally specify quick resync parameters with [qresync].
465-
Future<Mailbox> selectMailboxByPath(String path,
466-
{bool enableCondStore = false, QResyncParameters? qresync}) async {
475+
Future<Mailbox> selectMailboxByPath(
476+
String path, {
477+
bool enableCondStore = false,
478+
QResyncParameters? qresync,
479+
}) async {
467480
var mailboxes = _mailboxes;
468481
mailboxes ??= await listMailboxes();
469482
final mailbox = mailboxes.firstWhereOrNull((box) => box.path == path);
@@ -482,8 +495,11 @@ class MailClient {
482495
/// with [enableCondStore].
483496
///
484497
/// Optionally specify quick resync parameters with [qresync].
485-
Future<Mailbox> selectMailboxByFlag(MailboxFlag flag,
486-
{bool enableCondStore = false, QResyncParameters? qresync}) async {
498+
Future<Mailbox> selectMailboxByFlag(
499+
MailboxFlag flag, {
500+
bool enableCondStore = false,
501+
QResyncParameters? qresync,
502+
}) async {
487503
var mailboxes = _mailboxes;
488504
mailboxes ??= await listMailboxes();
489505
final mailbox = getMailbox(flag, mailboxes);
@@ -503,8 +519,10 @@ class MailClient {
503519
///
504520
/// Optionally specify quick resync parameters with [qresync] -
505521
/// for IMAP servers that support `QRESYNC` only.
506-
Future<Mailbox> selectInbox(
507-
{bool enableCondStore = false, QResyncParameters? qresync}) async {
522+
Future<Mailbox> selectInbox({
523+
bool enableCondStore = false,
524+
QResyncParameters? qresync,
525+
}) async {
508526
var mailboxes = _mailboxes;
509527
mailboxes ??= await listMailboxes();
510528
var inbox = mailboxes.firstWhereOrNull((box) => box.isInbox);
@@ -523,8 +541,11 @@ class MailClient {
523541
/// enabled with [enableCondStore].
524542
///
525543
/// Optionally specify quick resync parameters with [qresync].
526-
Future<Mailbox> selectMailbox(Mailbox mailbox,
527-
{bool enableCondStore = false, QResyncParameters? qresync}) async {
544+
Future<Mailbox> selectMailbox(
545+
Mailbox mailbox, {
546+
bool enableCondStore = false,
547+
QResyncParameters? qresync,
548+
}) async {
528549
final box = await _incomingMailClient.selectMailbox(mailbox,
529550
enableCondStore: enableCondStore, qresync: qresync);
530551
_selectedMailbox = box;
@@ -857,8 +878,12 @@ class MailClient {
857878
return Future.wait(futures);
858879
}
859880

860-
Future _sendMessageViaOutgoing(MimeMessage message, MailAddress? from,
861-
bool use8BitEncoding, List<MailAddress>? recipients) async {
881+
Future _sendMessageViaOutgoing(
882+
MimeMessage message,
883+
MailAddress? from,
884+
bool use8BitEncoding,
885+
List<MailAddress>? recipients,
886+
) async {
862887
await _outgoingMailClient.sendMessage(message,
863888
from: from, use8BitEncoding: use8BitEncoding, recipients: recipients);
864889
await _outgoingMailClient.disconnect();
@@ -869,8 +894,10 @@ class MailClient {
869894
///
870895
/// Optionally specify the [draftsMailbox] when the mail system does not
871896
/// support mailbox flags.
872-
Future<UidResponseCode?> saveDraftMessage(MimeMessage message,
873-
{Mailbox? draftsMailbox}) {
897+
Future<UidResponseCode?> saveDraftMessage(
898+
MimeMessage message, {
899+
Mailbox? draftsMailbox,
900+
}) {
874901
if (draftsMailbox == null) {
875902
return appendMessageToFlag(message, MailboxFlag.drafts,
876903
flags: [MessageFlags.draft, MessageFlags.seen]);
@@ -884,8 +911,10 @@ class MailClient {
884911
///
885912
/// Optionally specify the message [flags].
886913
Future<UidResponseCode?> appendMessageToFlag(
887-
MimeMessage message, MailboxFlag targetMailboxFlag,
888-
{List<String>? flags}) {
914+
MimeMessage message,
915+
MailboxFlag targetMailboxFlag, {
916+
List<String>? flags,
917+
}) {
889918
final mailbox = getMailbox(targetMailboxFlag);
890919
if (mailbox == null) {
891920
throw MailException(
@@ -898,8 +927,10 @@ class MailClient {
898927
///
899928
/// Optionally specify the message [flags].
900929
Future<UidResponseCode?> appendMessage(
901-
MimeMessage message, Mailbox targetMailbox,
902-
{List<String>? flags}) =>
930+
MimeMessage message,
931+
Mailbox targetMailbox, {
932+
List<String>? flags,
933+
}) =>
903934
_incomingMailClient.appendMessage(message, targetMailbox, flags);
904935

905936
/// Starts listening for new incoming messages.
@@ -1445,8 +1476,11 @@ abstract class _IncomingMailClient {
14451476

14461477
Future<List<Mailbox>> listMailboxes();
14471478

1448-
Future<Mailbox> selectMailbox(Mailbox mailbox,
1449-
{bool enableCondStore = false, QResyncParameters? qresync});
1479+
Future<Mailbox> selectMailbox(
1480+
Mailbox mailbox, {
1481+
bool enableCondStore = false,
1482+
QResyncParameters? qresync,
1483+
});
14501484

14511485
Future<ThreadResult> fetchThreads(
14521486
Mailbox mailbox,
@@ -1885,8 +1919,11 @@ class _IncomingImapClient extends _IncomingMailClient {
18851919
}
18861920

18871921
@override
1888-
Future<Mailbox> selectMailbox(Mailbox mailbox,
1889-
{bool enableCondStore = false, final QResyncParameters? qresync}) async {
1922+
Future<Mailbox> selectMailbox(
1923+
Mailbox mailbox, {
1924+
bool enableCondStore = false,
1925+
final QResyncParameters? qresync,
1926+
}) async {
18901927
await _pauseIdle();
18911928
try {
18921929
if (_selectedMailbox != null) {
@@ -2849,8 +2886,11 @@ class _IncomingPopClient extends _IncomingMailClient {
28492886
Future<List<Mailbox>> listMailboxes() => Future.value([_popInbox]);
28502887

28512888
@override
2852-
Future<Mailbox> selectMailbox(Mailbox mailbox,
2853-
{bool enableCondStore = false, QResyncParameters? qresync}) async {
2889+
Future<Mailbox> selectMailbox(
2890+
Mailbox mailbox, {
2891+
bool enableCondStore = false,
2892+
QResyncParameters? qresync,
2893+
}) async {
28542894
if (mailbox != _popInbox) {
28552895
throw MailException(mailClient, 'Unknown mailbox $mailbox');
28562896
}

0 commit comments

Comments
 (0)