[Nmailserver-commits] SF.net SVN: nmailserver: [111] NMail/trunk/NMail
Brought to you by:
dframpton-oss,
tmyroadctfig
|
From: <tmy...@us...> - 2007-01-10 09:09:28
|
Revision: 111
http://svn.sourceforge.net/nmailserver/?rev=111&view=rev
Author: tmyroadctfig
Date: 2007-01-10 01:09:26 -0800 (Wed, 10 Jan 2007)
Log Message:
-----------
Renamed Folder.FullName to FullyQualifiedName and added FullName. Also changed API for ILocalStore and ILocalStoreData. Added migration script to MySqlLocalStoreData.
Modified Paths:
--------------
NMail/trunk/NMail/DataTypes/Folder.cs
NMail/trunk/NMail/DataTypes/LocalStore/ILocalStore.cs
NMail/trunk/NMail/DataTypes/LocalStore/ILocalStoreData.cs
NMail/trunk/NMail.Administration.Web/CreateFolder.aspx
NMail/trunk/NMail.Administration.Web/CreateFolder.aspx.cs
NMail/trunk/NMail.Administration.Web/FolderDetails.aspx
NMail/trunk/NMail.Administration.Web/UserDetails.aspx
NMail/trunk/NMail.Administration.Web/ViewFolders.aspx
NMail/trunk/NMail.ImapService/Response/AclResponse.cs
NMail/trunk/NMail.ImapService/Response/ListResponse.cs
NMail/trunk/NMail.ImapService/State/AuthenticatedState.cs
NMail/trunk/NMail.LocalStore/LocalStore.cs
NMail/trunk/NMail.LocalStoreData.MySql/MySqlLocalStore.sql
NMail/trunk/NMail.LocalStoreData.MySql/MySqlLocalStoreData.cs
NMail/trunk/NMail.LocalStoreData.MySql/NMail.LocalStoreData.MySql.csproj
NMail/trunk/NMail.RemoteAccessService.Serializers/DataTypes/LocalStore/StoreFolderSerializer.cs
Added Paths:
-----------
NMail/trunk/NMail.LocalStoreData.MySql/MySqlLocalStoreData-1-to-2.sql
Modified: NMail/trunk/NMail/DataTypes/Folder.cs
===================================================================
--- NMail/trunk/NMail/DataTypes/Folder.cs 2007-01-08 12:58:59 UTC (rev 110)
+++ NMail/trunk/NMail/DataTypes/Folder.cs 2007-01-10 09:09:26 UTC (rev 111)
@@ -199,15 +199,29 @@
}
}
}
+
private string folder;
/// <summary>
- /// Gets the folder name for this folder.
+ /// Gets the folder name for this folder. E.g. "Inbox".
/// </summary>
+ /// <see cref="FullFolderName"/>
public string FolderName {
get {
+ int length = (this.Parent == null) ? 0 : this.Parent.FullFolderName.Length + 1;
+ return this.folder.Remove(0, length);
+ }
+ }
+
+ /// <summary>
+ /// Gets the full folder name for this folder. E.g. "Joe.Inbox".
+ /// </summary>
+ /// <see cref="FolderName"/>
+ public string FullFolderName {
+ get {
return this.folder;
}
+
}
private string nameSpace;
@@ -222,9 +236,9 @@
}
/// <summary>
- /// The fully qualified name for this folder.
+ /// The fully qualified name for this folder. E.g. "#LocalMail.Joe.Inbox".
/// </summary>
- public string QualifiedName {
+ public string FullyQualifiedName {
get {
return "#" + nameSpace + delimiter + folder;
}
Modified: NMail/trunk/NMail/DataTypes/LocalStore/ILocalStore.cs
===================================================================
--- NMail/trunk/NMail/DataTypes/LocalStore/ILocalStore.cs 2007-01-08 12:58:59 UTC (rev 110)
+++ NMail/trunk/NMail/DataTypes/LocalStore/ILocalStore.cs 2007-01-10 09:09:26 UTC (rev 111)
@@ -298,12 +298,13 @@
int? GetMessageCount(IAuthenticationToken authToken, StoreFolder folder);
/// <summary>
- /// Gets the number of messages with the RECENT flag set.
+ /// Gets the number of messages with the specified flags set.
/// </summary>
/// <param name="authToken">The authentication credentials.</param>
- /// <param name="folder">The folder to count the recent messages in.</param>
- /// <returns>The number of recent messages or null if invalid folder or privileges.</returns>
- int? GetRecentMessageCount(IAuthenticationToken authToken, StoreFolder folder);
+ /// <param name="folder">The folder to count the flagged messages in.</param>
+ /// <param name="flags">The flags to check for when counting.</param>
+ /// <returns>The number of messages or null if invalid folder or privileges.</returns>
+ int? GetMessageCountWithFlags(IAuthenticationToken authToken, StoreFolder folder, StoreMessageFlags flags);
#endregion
/// <summary>
Modified: NMail/trunk/NMail/DataTypes/LocalStore/ILocalStoreData.cs
===================================================================
--- NMail/trunk/NMail/DataTypes/LocalStore/ILocalStoreData.cs 2007-01-08 12:58:59 UTC (rev 110)
+++ NMail/trunk/NMail/DataTypes/LocalStore/ILocalStoreData.cs 2007-01-10 09:09:26 UTC (rev 111)
@@ -237,11 +237,12 @@
int GetMessageCount(StoreFolder folder);
/// <summary>
- /// Gets the number of messages with the RECENT flag set.
+ /// Gets the number of messages with the specified flag set.
/// </summary>
- /// <param name="folder">The folder to count the recent messages in.</param>
- /// <returns>The number of recent messages.</returns>
- int GetRecentMessageCount(StoreFolder folder);
+ /// <param name="folder">The folder to count the flagged messages in.</param>
+ /// <param name="flags">The flags to check for when counting.</param>
+ /// <returns>The number of messages.</returns>
+ int GetMessageCountWithFlags(StoreFolder folder, StoreMessageFlags flags);
#endregion
/// <summary>
Modified: NMail/trunk/NMail.Administration.Web/CreateFolder.aspx
===================================================================
--- NMail/trunk/NMail.Administration.Web/CreateFolder.aspx 2007-01-08 12:58:59 UTC (rev 110)
+++ NMail/trunk/NMail.Administration.Web/CreateFolder.aspx 2007-01-10 09:09:26 UTC (rev 111)
@@ -6,7 +6,7 @@
<asp:DetailsView ID="FolderDetailsView" runat="server" AutoGenerateRows="False"
DefaultMode="Insert" DataSourceID="CreateFolderDataSource" AutoGenerateInsertButton="True" OnModeChanging="FolderDetailsView_ModeChanging">
<Fields>
- <asp:BoundField DataField="FolderName" HeaderText="Folder Name" SortExpression="FolderName" />
+ <asp:BoundField DataField="FullFolderName" HeaderText="Folder Name" SortExpression="FolderName" />
</Fields>
</asp:DetailsView>
<asp:ObjectDataSource ID="CreateFolderDataSource" runat="server" InsertMethod="CreateFolder"
Modified: NMail/trunk/NMail.Administration.Web/CreateFolder.aspx.cs
===================================================================
--- NMail/trunk/NMail.Administration.Web/CreateFolder.aspx.cs 2007-01-08 12:58:59 UTC (rev 110)
+++ NMail/trunk/NMail.Administration.Web/CreateFolder.aspx.cs 2007-01-10 09:09:26 UTC (rev 111)
@@ -20,7 +20,7 @@
protected void FolderDataSource_Inserting(object sender, ObjectDataSourceMethodEventArgs e)
{
// Save the folder name to display in the insert callback below
- this.folderName = (string) e.InputParameters["FolderName"];
+ this.folderName = (string) e.InputParameters["FullFolderName"];
}
protected void FolderDataSource_Inserted(object sender, ObjectDataSourceStatusEventArgs e)
Modified: NMail/trunk/NMail.Administration.Web/FolderDetails.aspx
===================================================================
--- NMail/trunk/NMail.Administration.Web/FolderDetails.aspx 2007-01-08 12:58:59 UTC (rev 110)
+++ NMail/trunk/NMail.Administration.Web/FolderDetails.aspx 2007-01-10 09:09:26 UTC (rev 111)
@@ -19,7 +19,7 @@
<asp:BoundField DataField="FolderId" HeaderText="Folder Id" SortExpression="FolderId" InsertVisible="False" ReadOnly="True" />
<asp:HyperLinkField DataNavigateUrlFields="ParentId" DataNavigateUrlFormatString="FolderDetails.aspx?FolderId={0}"
DataTextField="ParentId" HeaderText="Parent Id" />
- <asp:BoundField DataField="FolderName" HeaderText="Folder Name" ReadOnly="True" SortExpression="FolderName" />
+ <asp:BoundField DataField="FullFolderName" HeaderText="Folder Name" ReadOnly="True" SortExpression="FolderName" />
<asp:BoundField DataField="NameSpace" HeaderText="Namespace" ReadOnly="True" SortExpression="NameSpace" InsertVisible="False" />
<asp:CheckBoxField DataField="HasChildren" HeaderText="Has Children" SortExpression="HasChildren" InsertVisible="False" ReadOnly="True" />
<asp:CommandField ShowDeleteButton="True" />
@@ -42,7 +42,7 @@
<asp:GridView ID="SubFoldersGridView" runat="server" AutoGenerateColumns="False" DataSourceID="FolderChildrenDataSource">
<Columns>
<asp:BoundField DataField="FolderId" HeaderText="Folder Id" SortExpression="FolderId" />
- <asp:BoundField DataField="FolderName" HeaderText="Folder Name" ReadOnly="True" SortExpression="FolderName" />
+ <asp:BoundField DataField="FullFolderName" HeaderText="Folder Name" ReadOnly="True" SortExpression="FolderName" />
<asp:BoundField DataField="NameSpace" HeaderText="Namespace" ReadOnly="True" SortExpression="NameSpace" />
<asp:CheckBoxField DataField="HasChildren" HeaderText="HasChildren" SortExpression="HasChildren" />
<asp:HyperLinkField DataNavigateUrlFields="FolderId" DataNavigateUrlFormatString="FolderDetails.aspx?FolderId={0}"
Modified: NMail/trunk/NMail.Administration.Web/UserDetails.aspx
===================================================================
--- NMail/trunk/NMail.Administration.Web/UserDetails.aspx 2007-01-08 12:58:59 UTC (rev 110)
+++ NMail/trunk/NMail.Administration.Web/UserDetails.aspx 2007-01-10 09:09:26 UTC (rev 111)
@@ -41,7 +41,7 @@
<asp:GridView ID="UserFoldersGridView" runat="server" AutoGenerateColumns="False" DataSourceID="UserFolderDataSource">
<Columns>
<asp:BoundField DataField="FolderId" HeaderText="Folder Id" SortExpression="FolderId" />
- <asp:BoundField DataField="FolderName" HeaderText="Folder Name" ReadOnly="True" SortExpression="FolderName" />
+ <asp:BoundField DataField="FullFolderName" HeaderText="Folder Name" ReadOnly="True" SortExpression="FolderName" />
<asp:BoundField DataField="NameSpace" HeaderText="Namespace" ReadOnly="True" SortExpression="NameSpace" />
<asp:CheckBoxField DataField="HasChildren" HeaderText="Has Children" SortExpression="HasChildren" />
<asp:HyperLinkField DataNavigateUrlFields="FolderId" DataNavigateUrlFormatString="FolderDetails.aspx?FolderId={0}"
Modified: NMail/trunk/NMail.Administration.Web/ViewFolders.aspx
===================================================================
--- NMail/trunk/NMail.Administration.Web/ViewFolders.aspx 2007-01-08 12:58:59 UTC (rev 110)
+++ NMail/trunk/NMail.Administration.Web/ViewFolders.aspx 2007-01-10 09:09:26 UTC (rev 111)
@@ -7,7 +7,7 @@
<asp:BoundField DataField="FolderId" HeaderText="Folder Id" SortExpression="FolderId" />
<asp:HyperLinkField DataNavigateUrlFields="ParentId" DataNavigateUrlFormatString="FolderDetails.aspx?FolderId={0}"
DataTextField="ParentId" HeaderText="Parent Id" />
- <asp:BoundField DataField="FolderName" HeaderText="Folder Name" ReadOnly="True" SortExpression="FolderName" />
+ <asp:BoundField DataField="FullFolderName" HeaderText="Folder Name" ReadOnly="True" SortExpression="FolderName" />
<asp:BoundField DataField="NameSpace" HeaderText="Namespace" ReadOnly="True" SortExpression="NameSpace" />
<asp:CheckBoxField DataField="HasChildren" HeaderText="Has Children" SortExpression="HasChildren" />
<asp:HyperLinkField DataNavigateUrlFields="FolderId" DataNavigateUrlFormatString="FolderDetails.aspx?FolderId={0}" Text="details" />
Modified: NMail/trunk/NMail.ImapService/Response/AclResponse.cs
===================================================================
--- NMail/trunk/NMail.ImapService/Response/AclResponse.cs 2007-01-08 12:58:59 UTC (rev 110)
+++ NMail/trunk/NMail.ImapService/Response/AclResponse.cs 2007-01-10 09:09:26 UTC (rev 111)
@@ -37,7 +37,7 @@
private Folder folder;
public override void WriteResponse(ImapServiceConnection cnn) {
- cnn.WriteLine("* {0} {1} {2} {3}", this.cmdString, this.folder.FolderName, this.ace.Identifier, StoreFolderPrivilegeHelper.ToImapString(this.ace.Privilege));
+ cnn.WriteLine("* {0} {1} {2} {3}", this.cmdString, this.folder.FullFolderName, this.ace.Identifier, StoreFolderPrivilegeHelper.ToImapString(this.ace.Privilege));
}
}
}
Modified: NMail/trunk/NMail.ImapService/Response/ListResponse.cs
===================================================================
--- NMail/trunk/NMail.ImapService/Response/ListResponse.cs 2007-01-08 12:58:59 UTC (rev 110)
+++ NMail/trunk/NMail.ImapService/Response/ListResponse.cs 2007-01-10 09:09:26 UTC (rev 111)
@@ -36,7 +36,7 @@
public ListResponse(StoreFolder folder) {
this.delimiter = folder.Delimiter;
- this.folder = folder.FolderName;
+ this.folder = folder.FullFolderName;
ListResponseType type = (folder.HasChildren)
? ListResponseType.HasChildren
: ListResponseType.HasNoChildren;
Modified: NMail/trunk/NMail.ImapService/State/AuthenticatedState.cs
===================================================================
--- NMail/trunk/NMail.ImapService/State/AuthenticatedState.cs 2007-01-08 12:58:59 UTC (rev 110)
+++ NMail/trunk/NMail.ImapService/State/AuthenticatedState.cs 2007-01-10 09:09:26 UTC (rev 111)
@@ -192,7 +192,7 @@
protected void sendSelectResponses(StoreFolder folder) {
QueueResponse(new SimpleResponse(ResponseType.Flags, @"(\Answered \Flagged \Deleted \Seen \Draft)"));
QueueResponse(new SimpleResponse(LocalStore.GetMessageCount(Session.AuthenticationToken, folder) + " EXISTS"));
- QueueResponse(new SimpleResponse(LocalStore.GetRecentMessageCount(Session.AuthenticationToken, folder) + " RECENT"));
+ QueueResponse(new SimpleResponse(LocalStore.GetMessageCountWithFlags(Session.AuthenticationToken, folder, StoreMessageFlags.Recent) + " RECENT"));
QueueResponse(new SimpleResponse(ResponseType.Ok, "[UIDNEXT " + LocalStore.GetNextMessageId(Session.AuthenticationToken, folder) + "]"));
QueueResponse(new SimpleResponse(ResponseType.Ok, "[UIDVALIDITY " + folder.FolderId + "]"));
@@ -253,7 +253,7 @@
response.AppendResponseItem("MESSAGES " + LocalStore.GetMessageCount(Session.AuthenticationToken, folder));
}
if ((cmd.Items & StatusItems.Recent) != StatusItems.None) {
- response.AppendResponseItem("RECENT " + LocalStore.GetRecentMessageCount(Session.AuthenticationToken, folder));
+ response.AppendResponseItem("RECENT " + LocalStore.GetMessageCountWithFlags(Session.AuthenticationToken, folder, StoreMessageFlags.Recent));
}
if ((cmd.Items & StatusItems.UidNext) != StatusItems.None) {
response.AppendResponseItem("UIDNEXT " + LocalStore.GetNextMessageId(Session.AuthenticationToken, folder));
Modified: NMail/trunk/NMail.LocalStore/LocalStore.cs
===================================================================
--- NMail/trunk/NMail.LocalStore/LocalStore.cs 2007-01-08 12:58:59 UTC (rev 110)
+++ NMail/trunk/NMail.LocalStore/LocalStore.cs 2007-01-10 09:09:26 UTC (rev 111)
@@ -350,7 +350,7 @@
Folder resolvedFolder = getResolvedFolder(authToken, newFolder);
if (resolvedFolder.Parent != null) {
- StoreFolder parent = GetStoreFolder(authToken, resolvedFolder.Parent.QualifiedName);
+ StoreFolder parent = GetStoreFolder(authToken, resolvedFolder.Parent.FullyQualifiedName);
if (parent != null) {
// Ensure the user has rights to get the message flags
@@ -922,18 +922,19 @@
#region Get Recent Message Count
/// <summary>
- /// Gets the number of messages with the RECENT flag set.
+ /// Gets the number of messages with the specified flags set.
/// </summary>
/// <param name="authToken">The authentication credentials.</param>
- /// <param name="folder">The folder to count the recent messages in.</param>
- /// <returns>The number of recent messages or null if invalid folder or privileges.</returns>
- public int? GetRecentMessageCount(IAuthenticationToken authToken, StoreFolder folder) {
+ /// <param name="folder">The folder to count the flagged messages in.</param>
+ /// <param name="flags">The flags to check for when counting.</param>
+ /// <returns>The number of messages or null if invalid folder or privileges.</returns>
+ public int? GetMessageCountWithFlags(IAuthenticationToken authToken, StoreFolder folder, StoreMessageFlags flags) {
// Ensure the user has rights to get the message count
if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Lookup)) {
// Return the count
- return LocalStoreData.GetRecentMessageCount(folder);
+ return LocalStoreData.GetMessageCountWithFlags(folder, flags);
} else {
return null;
Modified: NMail/trunk/NMail.LocalStoreData.MySql/MySqlLocalStore.sql
===================================================================
--- NMail/trunk/NMail.LocalStoreData.MySql/MySqlLocalStore.sql 2007-01-08 12:58:59 UTC (rev 110)
+++ NMail/trunk/NMail.LocalStoreData.MySql/MySqlLocalStore.sql 2007-01-10 09:09:26 UTC (rev 111)
@@ -8,7 +8,7 @@
Version INT NOT NULL
);
-INSERT INTO SchemaVersion (Version) VALUES (1);
+INSERT INTO SchemaVersion (Version) VALUES (2);
-- -----------------------------------------------------------------------
@@ -121,12 +121,7 @@
Headers LONGBLOB NOT NULL,
Preamble LONGBLOB,
Postamble LONGBLOB,
- SeenFlag BOOLEAN NOT NULL,
- AnsweredFlag BOOLEAN NOT NULL,
- FlaggedFlag BOOLEAN NOT NULL,
- DeletedFlag BOOLEAN NOT NULL,
- DraftFlag BOOLEAN NOT NULL,
- RecentFlag BOOLEAN NOT NULL,
+ MessageFlags INT NOT NULL,
Size INT NOT NULL,
InternalDate DATETIME NOT NULL,
PRIMARY KEY(MessageId),
Added: NMail/trunk/NMail.LocalStoreData.MySql/MySqlLocalStoreData-1-to-2.sql
===================================================================
--- NMail/trunk/NMail.LocalStoreData.MySql/MySqlLocalStoreData-1-to-2.sql (rev 0)
+++ NMail/trunk/NMail.LocalStoreData.MySql/MySqlLocalStoreData-1-to-2.sql 2007-01-10 09:09:26 UTC (rev 111)
@@ -0,0 +1,15 @@
+ALTER TABLE Message ADD COLUMN MessageFlags INT NOT NULL AFTER Postamble;
+
+UPDATE Message SET MessageFlags = 1 WHERE AnsweredFlag = 1;
+UPDATE Message SET MessageFlags = MessageFlags + 2 WHERE FlaggedFlag = 1;
+UPDATE Message SET MessageFlags = MessageFlags + 4 WHERE DeletedFlag = 1;
+UPDATE Message SET MessageFlags = MessageFlags + 8 WHERE SeenFlag = 1;
+UPDATE Message SET MessageFlags = MessageFlags + 16 WHERE DraftFlag = 1;
+UPDATE Message SET MessageFlags = MessageFlags + 32 WHERE RecentFlag = 1;
+
+ALTER TABLE Message DROP COLUMN AnsweredFlag;
+ALTER TABLE Message DROP COLUMN FlaggedFlag;
+ALTER TABLE Message DROP COLUMN DeletedFlag;
+ALTER TABLE Message DROP COLUMN SeenFlag;
+ALTER TABLE Message DROP COLUMN DraftFlag;
+ALTER TABLE Message DROP COLUMN RecentFlag;
\ No newline at end of file
Modified: NMail/trunk/NMail.LocalStoreData.MySql/MySqlLocalStoreData.cs
===================================================================
--- NMail/trunk/NMail.LocalStoreData.MySql/MySqlLocalStoreData.cs 2007-01-08 12:58:59 UTC (rev 110)
+++ NMail/trunk/NMail.LocalStoreData.MySql/MySqlLocalStoreData.cs 2007-01-10 09:09:26 UTC (rev 111)
@@ -80,20 +80,15 @@
cmd = cnn.CreateCommand();
cmd.Transaction = transaction;
cmd.Connection = cnn;
- cmd.CommandText = "INSERT INTO Message (FolderId, FolderMessageId, MimeMessage, Headers, Preamble, Postamble, SeenFlag, AnsweredFlag, FlaggedFlag, DeletedFlag, DraftFlag, RecentFlag, Size, InternalDate) " +
- "VALUES (?FolderId, ?FolderMessageId, ?MimeMessage, ?Headers, ?Preamble, ?Postamble, ?SeenFlag, ?AnsweredFlag, ?FlaggedFlag, ?DeletedFlag, ?DraftFlag, ?RecentFlag, ?Size, ?InternalDate)";
+ cmd.CommandText = "INSERT INTO Message (FolderId, FolderMessageId, MimeMessage, Headers, Preamble, Postamble, MessageFlags, Size, InternalDate) " +
+ "VALUES (?FolderId, ?FolderMessageId, ?MimeMessage, ?Headers, ?Preamble, ?Postamble, ?MessageFlags, ?Size, ?InternalDate)";
cmd.Parameters.Add("?FolderId", folder.FolderId);
cmd.Parameters.Add("?FolderMessageId", folderMessageId);
cmd.Parameters.Add("?MimeMessage", message.MultipartBody);
cmd.Parameters.Add("?Headers", message.Headers.Data.Bytes);
cmd.Parameters.Add("?Preamble", (message.Preamble != null) ? message.Preamble.Data.Bytes : null);
cmd.Parameters.Add("?Postamble", (message.Postamble != null) ? message.Postamble.Data.Bytes : null);
- cmd.Parameters.Add("?SeenFlag", false);
- cmd.Parameters.Add("?AnsweredFlag", false);
- cmd.Parameters.Add("?FlaggedFlag", false);
- cmd.Parameters.Add("?DeletedFlag", false);
- cmd.Parameters.Add("?DraftFlag", false);
- cmd.Parameters.Add("?RecentFlag", true);
+ cmd.Parameters.Add("?MessageFlags", StoreMessageFlags.Recent);
cmd.Parameters.Add("?Size", message.Size);
cmd.Parameters.Add("?InternalDate", DateTime.Now);
count = cmd.ExecuteNonQuery();
@@ -172,7 +167,7 @@
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "GetFolderId";
cmd.Parameters.Add("?FolderId", MySqlDbType.Int32);
- cmd.Parameters.Add("?Name", folder.FolderName);
+ cmd.Parameters.Add("?Name", folder.FullFolderName);
cmd.Parameters.Add("?NameSpace", folder.NameSpace);
cmd.Parameters["FolderId"].Direction = ParameterDirection.Output;
@@ -259,7 +254,7 @@
cmd.CommandText = "CreateFolder";
cmd.Parameters.Add("?ParentId", parentFolderId);
cmd.Parameters.Add("?NamespaceId", 1);
- cmd.Parameters.Add("?Name", newFolder.FolderName);
+ cmd.Parameters.Add("?Name", newFolder.FullFolderName);
cmd.Parameters.Add("?UserId", userId);
cmd.Parameters.Add("?FolderId", MySqlDbType.Int32);
cmd.Parameters.Add("?Result", MySqlDbType.Int32);
@@ -319,7 +314,7 @@
// Check only the top level folder is being renamed
char[] delim = { NMailConfiguration.Current.LocalStore.FolderDelimiter };
- string[] folderParts = folder.FolderName.Split(delim);
+ string[] folderParts = folder.FullFolderName.Split(delim);
string[] newParts = newFolderName.Split(delim);
if (folderParts.Length != newParts.Length) {
@@ -589,31 +584,13 @@
using (MySqlConnection cnn = MySqlHelper.GetConnection()) {
using (MySqlCommand cmd = cnn.CreateCommand()) {
- cmd.CommandText = "SELECT SeenFlag, AnsweredFlag, FlaggedFlag, DeletedFlag, DraftFlag, RecentFlag FROM Message WHERE FolderId = ?FolderId AND FolderMessageId = ?FolderMessageId";
+ cmd.CommandText = "SELECT MessageFlags FROM Message WHERE FolderId = ?FolderId AND FolderMessageId = ?FolderMessageId";
cmd.Parameters.Add("?FolderId", folder.FolderId);
cmd.Parameters.Add("?FolderMessageId", messageId);
+ object o = cmd.ExecuteScalar();
- using (MySqlDataReader reader = cmd.ExecuteReader()) {
- if (reader.Read()) {
- if ((sbyte) reader["SeenFlag"] == 1) {
- flags |= StoreMessageFlags.Seen;
- }
- if ((sbyte) reader["AnsweredFlag"] == 1) {
- flags |= StoreMessageFlags.Answered;
- }
- if ((sbyte) reader["FlaggedFlag"] == 1) {
- flags |= StoreMessageFlags.Flagged;
- }
- if ((sbyte) reader["DeletedFlag"] == 1) {
- flags |= StoreMessageFlags.Deleted;
- }
- if ((sbyte) reader["DraftFlag"] == 1) {
- flags |= StoreMessageFlags.Draft;
- }
- if ((sbyte) reader["RecentFlag"] == 1) {
- flags |= StoreMessageFlags.Recent;
- }
- }
+ if (!Convert.IsDBNull(o)) {
+ flags = (StoreMessageFlags) o;
}
}
}
@@ -626,15 +603,10 @@
public void SetMessageFlags(int messageId, StoreFolder folder, StoreMessageFlags flags) {
using (MySqlConnection cnn = MySqlHelper.GetConnection()) {
using (MySqlCommand cmd = cnn.CreateCommand()) {
- cmd.CommandText = "UPDATE Message SET SeenFlag = ?SeenFlag, AnsweredFlag = ?AnsweredFlag, FlaggedFlag = ?FlaggedFlag, DeletedFlag = ?DeletedFlag, DraftFlag = ?DraftFlag, RecentFlag = ?RecentFlag WHERE FolderId = ?FolderId AND FolderMessageId = ?FolderMessageId";
+ cmd.CommandText = "UPDATE Message SET MessageFlags = ?MessageFlags WHERE FolderId = ?FolderId AND FolderMessageId = ?FolderMessageId";
cmd.Parameters.Add("?FolderId", folder.FolderId);
cmd.Parameters.Add("?FolderMessageId", messageId);
- cmd.Parameters.Add("?SeenFlag", ((flags & StoreMessageFlags.Seen) != StoreMessageFlags.None));
- cmd.Parameters.Add("?AnsweredFlag", ((flags & StoreMessageFlags.Answered) != StoreMessageFlags.None));
- cmd.Parameters.Add("?FlaggedFlag", ((flags & StoreMessageFlags.Flagged) != StoreMessageFlags.None));
- cmd.Parameters.Add("?DeletedFlag", ((flags & StoreMessageFlags.Deleted) != StoreMessageFlags.None));
- cmd.Parameters.Add("?DraftFlag", ((flags & StoreMessageFlags.Draft) != StoreMessageFlags.None));
- cmd.Parameters.Add("?RecentFlag", ((flags & StoreMessageFlags.Recent) != StoreMessageFlags.None));
+ cmd.Parameters.Add("?MessageFlags", (int) flags);
if (cmd.ExecuteNonQuery() != 1) {
throw new Exception("Error updating message flags.");
@@ -785,13 +757,14 @@
}
#endregion
- #region GetRecentMessageCount
- public int GetRecentMessageCount(StoreFolder folder) {
+ #region GetMessageCountWithFlags
+ public int GetMessageCountWithFlags(StoreFolder folder, StoreMessageFlags flags) {
using (MySqlConnection cnn = MySqlHelper.GetConnection()) {
using (MySqlCommand cmd = cnn.CreateCommand()) {
- cmd.CommandText = "SELECT COUNT(*) FROM Message WHERE FolderId = ?FolderId AND RecentFlag = true";
+ cmd.CommandText = "SELECT COUNT(*) FROM Message WHERE FolderId = ?FolderId AND MessageFlags & ?MessageFlags = ?MessageFlags";
cmd.Parameters.Add("?FolderId", folder.FolderId);
- return Convert.ToInt32((long)cmd.ExecuteScalar());
+ cmd.Parameters.Add("?MessageFlags", flags);
+ return Convert.ToInt32((long) cmd.ExecuteScalar());
}
}
}
Modified: NMail/trunk/NMail.LocalStoreData.MySql/NMail.LocalStoreData.MySql.csproj
===================================================================
--- NMail/trunk/NMail.LocalStoreData.MySql/NMail.LocalStoreData.MySql.csproj 2007-01-08 12:58:59 UTC (rev 110)
+++ NMail/trunk/NMail.LocalStoreData.MySql/NMail.LocalStoreData.MySql.csproj 2007-01-10 09:09:26 UTC (rev 111)
@@ -116,6 +116,9 @@
</Content>
<Content Include="NMail.LocalStoreData.Mysql.build" />
</ItemGroup>
+ <ItemGroup>
+ <None Include="MySqlLocalStoreData-1-to-2.sql" />
+ </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PreBuildEvent>
Modified: NMail/trunk/NMail.RemoteAccessService.Serializers/DataTypes/LocalStore/StoreFolderSerializer.cs
===================================================================
--- NMail/trunk/NMail.RemoteAccessService.Serializers/DataTypes/LocalStore/StoreFolderSerializer.cs 2007-01-08 12:58:59 UTC (rev 110)
+++ NMail/trunk/NMail.RemoteAccessService.Serializers/DataTypes/LocalStore/StoreFolderSerializer.cs 2007-01-10 09:09:26 UTC (rev 111)
@@ -18,7 +18,7 @@
public StoreFolderSerializer(StoreFolder storeFolder) {
this.folderId = storeFolder.FolderId;
- this.name = storeFolder.FolderName;
+ this.name = storeFolder.FullFolderName;
this.nameSpace = storeFolder.NameSpace;
this.hasChildren = storeFolder.HasChildren;
this.parentId = storeFolder.ParentId;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|