diff --git a/MailKit/IMailFolder.cs b/MailKit/IMailFolder.cs index 940d80670f..2ba9cafc27 100644 --- a/MailKit/IMailFolder.cs +++ b/MailKit/IMailFolder.cs @@ -225,6 +225,15 @@ public interface IMailFolder : IEnumerable /// if the folder is currently open; otherwise, . bool IsOpen { get; } + /// + /// Get whether or not the folder can be opened. + /// + /// + /// Gets whether or not the folder can be opened. + /// + /// if the folder can be opened; otherwise, . + bool CanOpen { get; } + /// /// Get whether or not the folder exists. /// diff --git a/MailKit/MailFolder.cs b/MailKit/MailFolder.cs index b4c8fffa47..dea8db446f 100644 --- a/MailKit/MailFolder.cs +++ b/MailKit/MailFolder.cs @@ -296,6 +296,17 @@ public abstract bool IsOpen { get; } + /// + /// Get whether or not the folder can be opened. + /// + /// + /// Gets whether or not the folder can be opened. + /// + /// if the folder can be opened; otherwise, . + public bool CanOpen { + get { return (Attributes & (FolderAttributes.NoSelect | FolderAttributes.NonExistent)) == 0; } + } + /// /// Get a value indicating whether the folder exists. /// diff --git a/UnitTests/Net/Imap/ImapFolderTests.cs b/UnitTests/Net/Imap/ImapFolderTests.cs index 6f5375df52..c50bfbf0bc 100644 --- a/UnitTests/Net/Imap/ImapFolderTests.cs +++ b/UnitTests/Net/Imap/ImapFolderTests.cs @@ -1711,6 +1711,7 @@ public void TestCreateRenameDelete () sublevel1.Closed += (o, e) => { sub1Closed++; }; sublevel2.Closed += (o, e) => { sub2Closed++; }; + Assert.That (sublevel1.CanOpen, Is.True, "SubLevel1 can be opened"); sublevel1.Open (FolderAccess.ReadWrite); sublevel1.Rename (toplevel2, "SubLevel1"); @@ -1722,6 +1723,7 @@ public void TestCreateRenameDelete () Assert.That (top1Deleted, Is.EqualTo (1), "TopLevel1 should have received a Deleted event"); Assert.That (toplevel1.Exists, Is.False, "TopLevel1.Exists"); + Assert.That (sublevel2.CanOpen, Is.True, "SubLevel2 can be opened"); sublevel2.Open (FolderAccess.ReadWrite); toplevel2.Rename (personal, "TopLevel"); @@ -1786,6 +1788,7 @@ public async Task TestCreateRenameDeleteAsync () sublevel1.Closed += (o, e) => { sub1Closed++; }; sublevel2.Closed += (o, e) => { sub2Closed++; }; + Assert.That (sublevel1.CanOpen, Is.True, "SubLevel1 can be opened"); await sublevel1.OpenAsync (FolderAccess.ReadWrite); await sublevel1.RenameAsync (toplevel2, "SubLevel1"); @@ -1797,6 +1800,7 @@ public async Task TestCreateRenameDeleteAsync () Assert.That (top1Deleted, Is.EqualTo (1), "TopLevel1 should have received a Deleted event"); Assert.That (toplevel1.Exists, Is.False, "TopLevel1.Exists"); + Assert.That (sublevel2.CanOpen, Is.True, "SubLevel2 can be opened"); await sublevel2.OpenAsync (FolderAccess.ReadWrite); await toplevel2.RenameAsync (personal, "TopLevel");