[Nmailserver-commits] SF.net SVN: nmailserver: [186] NMail/trunk/NMail
Brought to you by:
dframpton-oss,
tmyroadctfig
|
From: <tmy...@us...> - 2007-04-24 15:46:37
|
Revision: 186
http://svn.sourceforge.net/nmailserver/?rev=186&view=rev
Author: tmyroadctfig
Date: 2007-04-24 08:46:35 -0700 (Tue, 24 Apr 2007)
Log Message:
-----------
Further work on local store data and unit tests.
Modified Paths:
--------------
NMail/trunk/NMail/DataTypes/LocalStore/ILocalStoreData.cs
NMail/trunk/NMail.LocalStore/LocalStore.cs
NMail/trunk/NMail.LocalStoreData.MySql/MySqlLocalStoreData.cs
NMail/trunk/NMail.LocalStoreData.NHibernate/InternalStoreFolder.cs
NMail/trunk/NMail.LocalStoreData.NHibernate/Mappings/NMail.LocalStoreData.NHibernate.InternalMessage.hbm.xml
NMail/trunk/NMail.LocalStoreData.NHibernate/NHibernateLocalStoreData.cs
NMail/trunk/NMail.UnitTests/NMail.UnitTests.csproj
Added Paths:
-----------
NMail/trunk/NMail.UnitTests/LocalStoreData/DeliverMessageTest1.cs
NMail/trunk/NMail.UnitTests/LocalStoreData/GetMessageIdTest1.cs
NMail/trunk/NMail.UnitTests/LocalStoreData/GetMessageIdsTest1.cs
NMail/trunk/NMail.UnitTests/LocalStoreData/GetMessageOffsetTest1.cs
NMail/trunk/NMail.UnitTests/LocalStoreData/GetNextMessageIdTest1.cs
NMail/trunk/NMail.UnitTests/LocalStoreData/GetSetMessageFlagsTest1.cs
Modified: NMail/trunk/NMail/DataTypes/LocalStore/ILocalStoreData.cs
===================================================================
--- NMail/trunk/NMail/DataTypes/LocalStore/ILocalStoreData.cs 2007-04-24 12:45:08 UTC (rev 185)
+++ NMail/trunk/NMail/DataTypes/LocalStore/ILocalStoreData.cs 2007-04-24 15:46:35 UTC (rev 186)
@@ -150,32 +150,32 @@
/// Gets the Id for the next message in the folder after the current Id.
/// </summary>
/// <param name="currentId">The Id to start looking from.</param>
- /// <param name="folder"></param>
+ /// <param name="folderId">The Id of the folder to get the next Id in.</param>
/// <returns>The Id of the next existing message or 0 if there is none.</returns>
- int GetNextMessageId(int messageId, StoreFolder folder);
+ int GetNextMessageId(int messageId, int folderId);
/// <summary>
/// Gets the Id for the next message to be added into the folder.
/// </summary>
- /// <param name="folder">The folder the message is in.</param>
+ /// <param name="folderId">The Id of the folder the message is in.</param>
/// <returns>The next message Id.</returns>
- int GetNextMessageId(StoreFolder folder);
+ int GetNextMessageId(int folderId);
/// <summary>
/// Gets the message Id (UID) corresponding to the given message offset.
/// </summary>
/// <param name="messageOffset">The offset of the message to lookup.</param>
- /// <param name="folder">The folder the message is in.</param>
+ /// <param name="folderId">The Id of the folder the message is in.</param>
/// <returns>The message Id or 0 if there is no such message.</returns>
- int GetMessageId(int messageOffset, StoreFolder folder);
+ int GetMessageId(int messageOffset, int folderId);
/// <summary>
/// Gets the message offset corresponding the to given message Id (UID).
/// </summary>
/// <param name="messageId">The Id of the message to lookup.</param>
- /// <param name="folder">The folder the message is in.</param>
+ /// <param name="folderId">The Id of the folder the message is in.</param>
/// <returns>The message offset or 0 if there is no such message.</returns>
- int GetMessageOffset(int messageId, StoreFolder folder);
+ int GetMessageOffset(int messageId, int folderId);
/// <summary>
/// Gets a list of message Ids for a given folder.
@@ -190,18 +190,18 @@
/// Gets the message flags for a message.
/// </summary>
/// <param name="messageId">The Id of the message to get the flags for.</param>
- /// <param name="folder">The folder the message is in.</param>
+ /// <param name="folderId">The Id of the folder the message is in.</param>
/// <returns>The message flags.</returns>
- StoreMessageFlags GetMessageFlags(int messageId, StoreFolder folder);
+ StoreMessageFlags? GetMessageFlags(int messageId, int folderId);
/// <summary>
/// Sets the message flags for a message.
/// </summary>
/// <remarks>This will replace any existing flags on the message.</remarks>
/// <param name="messageId">The Id of the message to set the flags for.</param>
- /// <param name="folder">The folder the message is in.</param>
+ /// <param name="folderId">The Id of the folder the message is in.</param>
/// <param name="flags">The flags to set.</param>
- void SetMessageFlags(int messageId, StoreFolder folder, StoreMessageFlags flags);
+ void SetMessageFlags(int messageId, int folderId, StoreMessageFlags flags);
#endregion
#region Message Retrieval
@@ -251,9 +251,9 @@
/// <summary>
/// Gets the number of messages in the given store folder.
/// </summary>
- /// <param name="folder">The folder to count the messages in.</param>
+ /// <param name="folderId">The Id of the folder to count the messages in.</param>
/// <returns>The message count.</returns>
- int GetMessageCount(StoreFolder folder);
+ int GetMessageCount(int folderId);
/// <summary>
/// Gets the number of messages with the specified flag set.
Modified: NMail/trunk/NMail.LocalStore/LocalStore.cs
===================================================================
--- NMail/trunk/NMail.LocalStore/LocalStore.cs 2007-04-24 12:45:08 UTC (rev 185)
+++ NMail/trunk/NMail.LocalStore/LocalStore.cs 2007-04-24 15:46:35 UTC (rev 186)
@@ -630,7 +630,7 @@
if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Read)) {
// Return the message Id
- return LocalStoreData.GetNextMessageId(currentId, folder);
+ return LocalStoreData.GetNextMessageId(currentId, folder.FolderId);
} else {
return 0;
@@ -649,7 +649,7 @@
if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Read)) {
// Return the message Id
- return LocalStoreData.GetNextMessageId(folder);
+ return LocalStoreData.GetNextMessageId(folder.FolderId);
} else {
return 0;
@@ -671,7 +671,7 @@
if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Read)) {
// Return the message Id
- return LocalStoreData.GetMessageId(messageOffset, folder);
+ return LocalStoreData.GetMessageId(messageOffset, folder.FolderId);
} else {
return 0;
@@ -693,7 +693,7 @@
if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Read)) {
// Return the message Id
- return LocalStoreData.GetMessageOffset(messageId, folder);
+ return LocalStoreData.GetMessageOffset(messageId, folder.FolderId);
} else {
return 0;
@@ -733,7 +733,7 @@
if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Read)) {
// Return the message flags
- return LocalStoreData.GetMessageFlags(messageId, folder);
+ return LocalStoreData.GetMessageFlags(messageId, folder.FolderId);
} else {
return null;
@@ -751,7 +751,12 @@
/// <param name="folder">The folder the message is in.</param>
/// <param name="flags">The flags to set.</param>
public void SetMessageFlags(IAuthenticationToken authToken, int messageId, StoreFolder folder, StoreMessageFlags flags) {
- StoreMessageFlags currentFlags = LocalStoreData.GetMessageFlags(messageId, folder);
+ StoreMessageFlags? tmpFlags = LocalStoreData.GetMessageFlags(messageId, folder.FolderId);
+ if (!tmpFlags.HasValue) {
+ throw new ArgumentException("Invalid message or folder Id.");
+ }
+
+ StoreMessageFlags currentFlags = tmpFlags.Value;
StoreMessageFlags changedFlags = (currentFlags ^ flags);
if ((changedFlags & StoreMessageFlags.Deleted) == StoreMessageFlags.Deleted) {
@@ -788,7 +793,7 @@
}
}
- LocalStoreData.SetMessageFlags(messageId, folder, flags);
+ LocalStoreData.SetMessageFlags(messageId, folder.FolderId, flags);
}
#endregion
#endregion
@@ -944,7 +949,7 @@
if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Read)) {
// Return the message count
- return LocalStoreData.GetMessageCount(folder);
+ return LocalStoreData.GetMessageCount(folder.FolderId);
} else {
return null;
Modified: NMail/trunk/NMail.LocalStoreData.MySql/MySqlLocalStoreData.cs
===================================================================
--- NMail/trunk/NMail.LocalStoreData.MySql/MySqlLocalStoreData.cs 2007-04-24 12:45:08 UTC (rev 185)
+++ NMail/trunk/NMail.LocalStoreData.MySql/MySqlLocalStoreData.cs 2007-04-24 15:46:35 UTC (rev 186)
@@ -491,11 +491,11 @@
#region Message Id and Offset
#region GetNextMessageId
- public int GetNextMessageId(int messageId, StoreFolder folder) {
+ public int GetNextMessageId(int messageId, int folderId) {
using (MySqlConnection cnn = MySqlHelper.GetConnection()) {
using (MySqlCommand cmd = cnn.CreateCommand()) {
cmd.CommandText = "SELECT FolderMessageId FROM Message WHERE FolderId = ?FolderId AND FolderMessageId > ?MessageId ORDER BY FolderMessageId LIMIT 1";
- cmd.Parameters.Add("?FolderId", folder.FolderId);
+ cmd.Parameters.Add("?FolderId", folderId);
cmd.Parameters.Add("?MessageId", messageId);
object o = cmd.ExecuteScalar();
@@ -504,11 +504,11 @@
}
}
- public int GetNextMessageId(StoreFolder folder) {
+ public int GetNextMessageId(int folderId) {
using (MySqlConnection cnn = MySqlHelper.GetConnection()) {
using (MySqlCommand cmd = cnn.CreateCommand()) {
cmd.CommandText = "SELECT NextMessageId FROM Folder WHERE FolderId = ?FolderId";
- cmd.Parameters.Add("?FolderId", folder.FolderId);
+ cmd.Parameters.Add("?FolderId", folderId);
object o = cmd.ExecuteScalar();
return (o == null) ? 0 : (int)o;
@@ -518,11 +518,11 @@
#endregion
#region GetMessageId
- public int GetMessageId(int messageOffset, StoreFolder folder) {
+ public int GetMessageId(int messageOffset, int folderId) {
using (MySqlConnection cnn = MySqlHelper.GetConnection()) {
using (MySqlCommand cmd = cnn.CreateCommand()) {
cmd.CommandText = "SELECT FolderMessageId FROM Message WHERE FolderId = ?FolderId ORDER BY FolderMessageId LIMIT 1 OFFSET ?Offset";
- cmd.Parameters.Add("?FolderId", folder.FolderId);
+ cmd.Parameters.Add("?FolderId", folderId);
cmd.Parameters.Add("?Offset", messageOffset - 1);
return (int)cmd.ExecuteScalar();
}
@@ -531,11 +531,11 @@
#endregion
#region GetMessageOffset
- public int GetMessageOffset(int messageId, StoreFolder folder) {
+ public int GetMessageOffset(int messageId, int folderId) {
using (MySqlConnection cnn = MySqlHelper.GetConnection()) {
using (MySqlCommand cmd = cnn.CreateCommand()) {
cmd.CommandText = "SELECT COUNT(*) FROM Message WHERE FolderId = ?FolderId AND FolderMessageId <= ?FolderMessageId";
- cmd.Parameters.Add("?FolderId", folder.FolderId);
+ cmd.Parameters.Add("?FolderId", folderId);
cmd.Parameters.Add("?FolderMessageId", messageId);
return Convert.ToInt32((long)cmd.ExecuteScalar());
}
@@ -569,32 +569,30 @@
#region Message Flags
#region GetMessageFlags
- public StoreMessageFlags GetMessageFlags(int messageId, StoreFolder folder) {
- StoreMessageFlags flags = StoreMessageFlags.None;
-
+ public StoreMessageFlags? GetMessageFlags(int messageId, int folderId) {
using (MySqlConnection cnn = MySqlHelper.GetConnection()) {
using (MySqlCommand cmd = cnn.CreateCommand()) {
cmd.CommandText = "SELECT MessageFlags FROM Message WHERE FolderId = ?FolderId AND FolderMessageId = ?FolderMessageId";
- cmd.Parameters.Add("?FolderId", folder.FolderId);
+ cmd.Parameters.Add("?FolderId", folderId);
cmd.Parameters.Add("?FolderMessageId", messageId);
object o = cmd.ExecuteScalar();
if (!Convert.IsDBNull(o)) {
- flags = (StoreMessageFlags) o;
+ return (StoreMessageFlags) o;
+ } else {
+ return null;
}
}
}
-
- return flags;
}
#endregion
#region SetMessageFlags
- public void SetMessageFlags(int messageId, StoreFolder folder, StoreMessageFlags flags) {
+ public void SetMessageFlags(int messageId, int folderId, StoreMessageFlags flags) {
using (MySqlConnection cnn = MySqlHelper.GetConnection()) {
using (MySqlCommand cmd = cnn.CreateCommand()) {
cmd.CommandText = "UPDATE Message SET MessageFlags = ?MessageFlags WHERE FolderId = ?FolderId AND FolderMessageId = ?FolderMessageId";
- cmd.Parameters.Add("?FolderId", folder.FolderId);
+ cmd.Parameters.Add("?FolderId", folderId);
cmd.Parameters.Add("?FolderMessageId", messageId);
cmd.Parameters.Add("?MessageFlags", (int) flags);
@@ -736,11 +734,11 @@
#region Message Counts
#region GetMessageCount
- public int GetMessageCount(StoreFolder folder) {
+ public int GetMessageCount(int folderId) {
using (MySqlConnection cnn = MySqlHelper.GetConnection()) {
using (MySqlCommand cmd = cnn.CreateCommand()) {
cmd.CommandText = "SELECT COUNT(*) as MessageCount FROM Message WHERE FolderId = ?FolderId";
- cmd.Parameters.Add("?FolderId", folder.FolderId);
+ cmd.Parameters.Add("?FolderId", folderId);
return Convert.ToInt32((Int64)cmd.ExecuteScalar());
}
}
@@ -783,7 +781,7 @@
int[] result = new int[folderMsgIds.Count];
for (int i = 0; i < folderMsgIds.Count; i++) {
- result[i] = GetMessageOffset((int) folderMsgIds[i], folder);
+ result[i] = GetMessageOffset((int) folderMsgIds[i], folder.FolderId);
cmd = cnn.CreateCommand();
cmd.Transaction = transaction;
Modified: NMail/trunk/NMail.LocalStoreData.NHibernate/InternalStoreFolder.cs
===================================================================
--- NMail/trunk/NMail.LocalStoreData.NHibernate/InternalStoreFolder.cs 2007-04-24 12:45:08 UTC (rev 185)
+++ NMail/trunk/NMail.LocalStoreData.NHibernate/InternalStoreFolder.cs 2007-04-24 15:46:35 UTC (rev 186)
@@ -41,7 +41,7 @@
this.ParentId = f.ParentId;
}
- private int nextMessageId;
+ private int nextMessageId = 1;
public int NextMessageId {
get { return nextMessageId; }
Modified: NMail/trunk/NMail.LocalStoreData.NHibernate/Mappings/NMail.LocalStoreData.NHibernate.InternalMessage.hbm.xml
===================================================================
--- NMail/trunk/NMail.LocalStoreData.NHibernate/Mappings/NMail.LocalStoreData.NHibernate.InternalMessage.hbm.xml 2007-04-24 12:45:08 UTC (rev 185)
+++ NMail/trunk/NMail.LocalStoreData.NHibernate/Mappings/NMail.LocalStoreData.NHibernate.InternalMessage.hbm.xml 2007-04-24 15:46:35 UTC (rev 186)
@@ -15,9 +15,9 @@
<property name="Headers" not-null="true"/>
- <property name="Preamble" not-null="true" type="Serializable"/>
+ <property name="Preamble" type="Serializable"/>
- <property name="Postamble" not-null="true" type="Serializable"/>
+ <property name="Postamble" type="Serializable"/>
<property name="MessageFlags" not-null="true"/>
Modified: NMail/trunk/NMail.LocalStoreData.NHibernate/NHibernateLocalStoreData.cs
===================================================================
--- NMail/trunk/NMail.LocalStoreData.NHibernate/NHibernateLocalStoreData.cs 2007-04-24 12:45:08 UTC (rev 185)
+++ NMail/trunk/NMail.LocalStoreData.NHibernate/NHibernateLocalStoreData.cs 2007-04-24 15:46:35 UTC (rev 186)
@@ -571,82 +571,96 @@
#region Message Id and Offset
#region GetNextMessageId
- public int GetNextMessageId(int messageId, StoreFolder folder) {
- //using (MySqlConnection cnn = MySqlHelper.GetConnection()) {
- // using (MySqlCommand cmd = cnn.CreateCommand()) {
- // cmd.CommandText = "SELECT FolderMessageId FROM Message WHERE FolderId = ?FolderId AND FolderMessageId > ?MessageId ORDER BY FolderMessageId LIMIT 1";
- // cmd.Parameters.Add("?FolderId", folder.FolderId);
- // cmd.Parameters.Add("?MessageId", messageId);
- // object o = cmd.ExecuteScalar();
+ /// <summary>
+ /// Gets the Id for the next message in the folder after the current Id.
+ /// </summary>
+ /// <param name="currentId">The Id to start looking from.</param>
+ /// <param name="folderId">The Id of the folder to get the next Id in.</param>
+ /// <returns>The Id of the next existing message or 0 if there is none.</returns>
+ public int GetNextMessageId(int messageId, int folderId) {
+ using (ISession session = this.hibernateFactory.OpenSession()) {
+ InternalMessage message = session.CreateCriteria(typeof(InternalMessage))
+ .Add(Expression.Eq("FolderId", folderId))
+ .Add(Expression.Gt("FolderMessageId", messageId))
+ .AddOrder(Order.Asc("FolderMessageId"))
+ .SetMaxResults(1)
+ .UniqueResult<InternalMessage>();
- // return (o == null) ? 0 : (int)o;
- // }
- //}
- throw new NotImplementedException();
+ return (message == null) ? 0 : message.FolderMessageId;
+ }
}
- public int GetNextMessageId(StoreFolder folder) {
- //using (MySqlConnection cnn = MySqlHelper.GetConnection()) {
- // using (MySqlCommand cmd = cnn.CreateCommand()) {
- // cmd.CommandText = "SELECT NextMessageId FROM Folder WHERE FolderId = ?FolderId";
- // cmd.Parameters.Add("?FolderId", folder.FolderId);
- // object o = cmd.ExecuteScalar();
-
- // return (o == null) ? 0 : (int)o;
- // }
- //}
- throw new NotImplementedException();
+ /// <summary>
+ /// Gets the Id for the next message to be added into the folder.
+ /// </summary>
+ /// <param name="folderId">The Id of the folder the message is in.</param>
+ /// <returns>The next message Id.</returns>
+ public int GetNextMessageId(int folderId) {
+ using (ISession session = this.hibernateFactory.OpenSession()) {
+ InternalStoreFolder folder = session.Get<InternalStoreFolder>(folderId);
+ return (folder == null) ? 0 : folder.NextMessageId;
+ }
}
#endregion
#region GetMessageId
- public int GetMessageId(int messageOffset, StoreFolder folder) {
- //using (MySqlConnection cnn = MySqlHelper.GetConnection()) {
- // using (MySqlCommand cmd = cnn.CreateCommand()) {
- // cmd.CommandText = "SELECT FolderMessageId FROM Message WHERE FolderId = ?FolderId ORDER BY FolderMessageId LIMIT 1 OFFSET ?Offset";
- // cmd.Parameters.Add("?FolderId", folder.FolderId);
- // cmd.Parameters.Add("?Offset", messageOffset - 1);
- // return (int)cmd.ExecuteScalar();
- // }
- //}
- throw new NotImplementedException();
+ /// <summary>
+ /// Gets the message Id (UID) corresponding to the given message offset.
+ /// </summary>
+ /// <param name="messageOffset">The offset of the message to lookup.</param>
+ /// <param name="folderId">The Id of the folder the message is in.</param>
+ /// <returns>The message Id or 0 if there is no such message.</returns>
+ public int GetMessageId(int messageOffset, int folderId) {
+ using (ISession session = this.hibernateFactory.OpenSession()) {
+ InternalMessage message = session.CreateCriteria(typeof(InternalMessage))
+ .Add(Expression.Eq("FolderId", folderId))
+ .AddOrder(Order.Asc("FolderMessageId"))
+ .SetFirstResult(messageOffset - 1)
+ .SetMaxResults(1)
+ .UniqueResult<InternalMessage>();
+
+ return (message == null) ? 0 : message.FolderMessageId;
+ }
}
#endregion
#region GetMessageOffset
- public int GetMessageOffset(int messageId, StoreFolder folder) {
- //using (MySqlConnection cnn = MySqlHelper.GetConnection()) {
- // using (MySqlCommand cmd = cnn.CreateCommand()) {
- // cmd.CommandText = "SELECT COUNT(*) FROM Message WHERE FolderId = ?FolderId AND FolderMessageId <= ?FolderMessageId";
- // cmd.Parameters.Add("?FolderId", folder.FolderId);
- // cmd.Parameters.Add("?FolderMessageId", messageId);
- // return Convert.ToInt32((long)cmd.ExecuteScalar());
- // }
- //}
- throw new NotImplementedException();
+ /// <summary>
+ /// Gets the message offset corresponding the to given message Id (UID).
+ /// </summary>
+ /// <param name="messageId">The Id of the message to lookup.</param>
+ /// <param name="folderId">The Id of the folder the message is in.</param>
+ /// <returns>The message offset or 0 if there is no such message.</returns>
+ public int GetMessageOffset(int messageId, int folderId) {
+ using (ISession session = this.hibernateFactory.OpenSession()) {
+ return session.CreateCriteria(typeof(InternalMessage))
+ .Add(Expression.Eq("FolderId", folderId))
+ .Add(Expression.Le("FolderMessageId", messageId))
+ .List<InternalMessage>().Count;
+ }
}
#endregion
#region GetMessageIds
+ /// <summary>
+ /// Gets a list of message Ids for a given folder.
+ /// </summary>
+ /// <param name="folderId">The Id of the folder the message is in.</param>
+ /// <returns>The list of messages in the folder.</returns>
public IList<int> GetMessageIds(int folderId) {
- //List<int> result = new List<int>();
+ List<int> result = new List<int>();
- //using (MySqlConnection cnn = MySqlHelper.GetConnection()) {
- // using (MySqlCommand cmd = cnn.CreateCommand()) {
- // cmd.CommandText = "SELECT FolderMessageId FROM Message WHERE FolderId = ?FolderId";
- // cmd.Parameters.Add("?FolderId", folderId);
+ using (ISession session = this.hibernateFactory.OpenSession()) {
+ IList<InternalMessage> messages = session.CreateCriteria(typeof(InternalMessage))
+ .Add(Expression.Eq("FolderId", folderId))
+ .List<InternalMessage>();
- // MySqlDataReader reader = cmd.ExecuteReader();
+ foreach (InternalMessage message in messages) {
+ result.Add(message.FolderMessageId);
+ }
+ }
- // while (reader.Read()) {
- // int id = (int) reader["FolderMessageId"];
- // result.Add(id);
- // }
- // }
- //}
-
- //return result;
- throw new NotImplementedException();
+ return result;
}
#endregion
#endregion
@@ -654,42 +668,53 @@
#region Message Flags
#region GetMessageFlags
- public StoreMessageFlags GetMessageFlags(int messageId, StoreFolder folder) {
- //StoreMessageFlags flags = StoreMessageFlags.None;
+ /// <summary>
+ /// Gets the message flags for a message.
+ /// </summary>
+ /// <param name="messageId">The Id of the message to get the flags for.</param>
+ /// <param name="folderId">The Id of the folder the message is in.</param>
+ /// <returns>The message flags.</returns>
+ public StoreMessageFlags? GetMessageFlags(int messageId, int folderId) {
+ using (ISession session = this.hibernateFactory.OpenSession()) {
+ InternalMessage message = session.CreateCriteria(typeof(InternalMessage))
+ .Add(Expression.Eq("FolderId", folderId))
+ .Add(Expression.Eq("FolderMessageId", messageId))
+ .UniqueResult<InternalMessage>();
- //using (MySqlConnection cnn = MySqlHelper.GetConnection()) {
- // using (MySqlCommand cmd = cnn.CreateCommand()) {
- // 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();
-
- // if (!Convert.IsDBNull(o)) {
- // flags = (StoreMessageFlags) o;
- // }
- // }
- //}
-
- //return flags;
- throw new NotImplementedException();
+ return (message == null) ? null : (StoreMessageFlags?) message.MessageFlags;
+ }
}
#endregion
#region SetMessageFlags
- public void SetMessageFlags(int messageId, StoreFolder folder, StoreMessageFlags flags) {
- //using (MySqlConnection cnn = MySqlHelper.GetConnection()) {
- // using (MySqlCommand cmd = cnn.CreateCommand()) {
- // 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("?MessageFlags", (int) flags);
+ /// <summary>
+ /// Sets the message flags for a message.
+ /// </summary>
+ /// <remarks>This will replace any existing flags on the message.</remarks>
+ /// <param name="messageId">The Id of the message to set the flags for.</param>
+ /// <param name="folderId">The Id of the folder the message is in.</param>
+ /// <param name="flags">The flags to set.</param>
+ public void SetMessageFlags(int messageId, int folderId, StoreMessageFlags flags) {
+ using (ISession session = this.hibernateFactory.OpenSession()) {
+ using (ITransaction tx = session.BeginTransaction()) {
- // if (cmd.ExecuteNonQuery() != 1) {
- // throw new Exception("Error updating message flags.");
- // }
- // }
- //}
- throw new NotImplementedException();
+ InternalMessage message = session.CreateCriteria(typeof(InternalMessage))
+ .Add(Expression.Eq("FolderId", folderId))
+ .Add(Expression.Eq("FolderMessageId", messageId))
+ .UniqueResult<InternalMessage>();
+
+ if (message == null) {
+ throw new ArgumentException("Invalid message or folder Id.");
+ }
+
+ message.MessageFlags = flags;
+
+ session.Update(message);
+
+ tx.Commit();
+ session.Close();
+ }
+ }
}
#endregion
@@ -828,15 +853,17 @@
#region Message Counts
#region GetMessageCount
- public int GetMessageCount(StoreFolder folder) {
- //using (MySqlConnection cnn = MySqlHelper.GetConnection()) {
- // using (MySqlCommand cmd = cnn.CreateCommand()) {
- // cmd.CommandText = "SELECT COUNT(*) as MessageCount FROM Message WHERE FolderId = ?FolderId";
- // cmd.Parameters.Add("?FolderId", folder.FolderId);
- // return Convert.ToInt32((Int64)cmd.ExecuteScalar());
- // }
- //}
- throw new NotImplementedException();
+ /// <summary>
+ /// Gets the number of messages in the given store folder.
+ /// </summary>
+ /// <param name="folderId">The Id of the folder to count the messages in.</param>
+ /// <returns>The message count.</returns>
+ public int GetMessageCount(int folderId) {
+ using (ISession session = this.hibernateFactory.OpenSession()) {
+ return session.CreateCriteria(typeof(InternalMessage))
+ .Add(Expression.Eq("FolderId", folderId))
+ .List<InternalMessage>().Count;
+ }
}
#endregion
Added: NMail/trunk/NMail.UnitTests/LocalStoreData/DeliverMessageTest1.cs
===================================================================
--- NMail/trunk/NMail.UnitTests/LocalStoreData/DeliverMessageTest1.cs (rev 0)
+++ NMail/trunk/NMail.UnitTests/LocalStoreData/DeliverMessageTest1.cs 2007-04-24 15:46:35 UTC (rev 186)
@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+using NUnit.Framework;
+
+using NMail.Configuration;
+using NMail.DataTypes;
+using NMail.DataTypes.LocalStore;
+using NMail.UnitTests.Resources;
+
+namespace NMail.UnitTests.LocalStoreData {
+ /// <summary>
+ /// Tests delivering a message.
+ /// </summary>
+ [TestFixture]
+ public class DeliverMessageTest1 : BaseLocalStoreDataTest {
+
+ [Test]
+ public void TestGetStoreFolder() {
+ LocalStoreUser user1 = new LocalStoreUser();
+ user1.Username = "Test";
+ this.localStoreData.CreateUser(user1);
+
+ Assert.IsTrue(user1.UserId > 0, "Valid user Id.");
+ Assert.IsTrue(user1.UserFolderId > 0, "Valid user folder Id.");
+
+ Message m1 = ResourceHelper.GetMessage("Test1.eml");
+ this.localStoreData.DeliverMessage(m1, user1.UserFolderId);
+
+ Assert.IsTrue(this.localStoreData.GetMessageCount(user1.UserFolderId) > 0, "Folder has messages.");
+ }
+ }
+}
Added: NMail/trunk/NMail.UnitTests/LocalStoreData/GetMessageIdTest1.cs
===================================================================
--- NMail/trunk/NMail.UnitTests/LocalStoreData/GetMessageIdTest1.cs (rev 0)
+++ NMail/trunk/NMail.UnitTests/LocalStoreData/GetMessageIdTest1.cs 2007-04-24 15:46:35 UTC (rev 186)
@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+using NUnit.Framework;
+
+using NMail.Configuration;
+using NMail.DataTypes;
+using NMail.DataTypes.LocalStore;
+using NMail.UnitTests.Resources;
+
+namespace NMail.UnitTests.LocalStoreData {
+ /// <summary>
+ /// Tests getting the message Id.
+ /// </summary>
+ [TestFixture]
+ public class GetMessageIdTest1 : BaseLocalStoreDataTest {
+
+ [Test]
+ public void TestGetMessageId() {
+ LocalStoreUser user1 = new LocalStoreUser();
+ user1.Username = "Test1";
+ this.localStoreData.CreateUser(user1);
+ Assert.IsTrue(user1.UserId > 0, "Valid user Id.");
+ Assert.IsTrue(user1.UserFolderId > 0, "Valid user folder Id.");
+
+ LocalStoreUser user2 = new LocalStoreUser();
+ user2.Username = "Test2";
+ this.localStoreData.CreateUser(user2);
+ Assert.IsTrue(user2.UserId > 0, "Valid user Id.");
+ Assert.IsTrue(user2.UserFolderId > 0, "Valid user folder Id.");
+
+ Message m1 = ResourceHelper.GetMessage("Test1.eml");
+ this.localStoreData.DeliverMessage(m1, user1.UserFolderId);
+ this.localStoreData.DeliverMessage(m1, user2.UserFolderId);
+
+ Assert.IsTrue(this.localStoreData.GetMessageId(1, user1.UserFolderId) > 0, "Valid message Id.");
+
+ this.localStoreData.DeliverMessage(m1, user1.UserFolderId);
+ Assert.IsTrue(this.localStoreData.GetMessageId(2, user1.UserFolderId) > 0, "Valid message Id.");
+ }
+ }
+}
Added: NMail/trunk/NMail.UnitTests/LocalStoreData/GetMessageIdsTest1.cs
===================================================================
--- NMail/trunk/NMail.UnitTests/LocalStoreData/GetMessageIdsTest1.cs (rev 0)
+++ NMail/trunk/NMail.UnitTests/LocalStoreData/GetMessageIdsTest1.cs 2007-04-24 15:46:35 UTC (rev 186)
@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+using NUnit.Framework;
+
+using NMail.Configuration;
+using NMail.DataTypes;
+using NMail.DataTypes.LocalStore;
+using NMail.UnitTests.Resources;
+
+namespace NMail.UnitTests.LocalStoreData {
+ /// <summary>
+ /// Tests getting the message Ids.
+ /// </summary>
+ [TestFixture]
+ public class GetMessageIdsTest1 : BaseLocalStoreDataTest {
+
+ [Test]
+ public void TestGetMessageIds() {
+ LocalStoreUser user1 = new LocalStoreUser();
+ user1.Username = "Test1";
+ this.localStoreData.CreateUser(user1);
+ Assert.IsTrue(user1.UserId > 0, "Valid user Id.");
+ Assert.IsTrue(user1.UserFolderId > 0, "Valid user folder Id.");
+
+ LocalStoreUser user2 = new LocalStoreUser();
+ user2.Username = "Test2";
+ this.localStoreData.CreateUser(user2);
+ Assert.IsTrue(user2.UserId > 0, "Valid user Id.");
+ Assert.IsTrue(user2.UserFolderId > 0, "Valid user folder Id.");
+
+ Message m1 = ResourceHelper.GetMessage("Test1.eml");
+ this.localStoreData.DeliverMessage(m1, user1.UserFolderId);
+ this.localStoreData.DeliverMessage(m1, user2.UserFolderId);
+ this.localStoreData.DeliverMessage(m1, user1.UserFolderId);
+
+ IList<int> messageIds = this.localStoreData.GetMessageIds(user1.UserFolderId);
+
+ Assert.AreEqual(2, messageIds.Count, "Two messages.");
+
+ Assert.AreEqual(1, this.localStoreData.GetMessageOffset(messageIds[0], user1.UserFolderId), "Correct message offset 1.");
+ Assert.AreEqual(2, this.localStoreData.GetMessageOffset(messageIds[1], user1.UserFolderId), "Correct message offset 2.");
+ }
+ }
+}
Added: NMail/trunk/NMail.UnitTests/LocalStoreData/GetMessageOffsetTest1.cs
===================================================================
--- NMail/trunk/NMail.UnitTests/LocalStoreData/GetMessageOffsetTest1.cs (rev 0)
+++ NMail/trunk/NMail.UnitTests/LocalStoreData/GetMessageOffsetTest1.cs 2007-04-24 15:46:35 UTC (rev 186)
@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+using NUnit.Framework;
+
+using NMail.Configuration;
+using NMail.DataTypes;
+using NMail.DataTypes.LocalStore;
+using NMail.UnitTests.Resources;
+
+namespace NMail.UnitTests.LocalStoreData {
+ /// <summary>
+ /// Tests getting the message offset.
+ /// </summary>
+ [TestFixture]
+ public class GetMessageOffsetTest1 : BaseLocalStoreDataTest {
+
+ [Test]
+ public void TestGetMessageOffset() {
+ LocalStoreUser user1 = new LocalStoreUser();
+ user1.Username = "Test1";
+ this.localStoreData.CreateUser(user1);
+ Assert.IsTrue(user1.UserId > 0, "Valid user Id.");
+ Assert.IsTrue(user1.UserFolderId > 0, "Valid user folder Id.");
+
+ LocalStoreUser user2 = new LocalStoreUser();
+ user2.Username = "Test2";
+ this.localStoreData.CreateUser(user2);
+ Assert.IsTrue(user2.UserId > 0, "Valid user Id.");
+ Assert.IsTrue(user2.UserFolderId > 0, "Valid user folder Id.");
+
+ Message m1 = ResourceHelper.GetMessage("Test1.eml");
+ this.localStoreData.DeliverMessage(m1, user1.UserFolderId);
+ this.localStoreData.DeliverMessage(m1, user2.UserFolderId);
+ this.localStoreData.DeliverMessage(m1, user1.UserFolderId);
+
+ int m1Uid = this.localStoreData.GetMessageId(1, user1.UserFolderId);
+ int m2Uid = this.localStoreData.GetMessageId(2, user1.UserFolderId);
+
+ Assert.IsTrue(m1Uid > 0, "Valid message Id 1.");
+ Assert.IsTrue(m2Uid > 0, "Valid message Id 2.");
+
+ Assert.AreEqual(1, this.localStoreData.GetMessageOffset(m1Uid, user1.UserFolderId), "Correct message offset 1.");
+ Assert.AreEqual(2, this.localStoreData.GetMessageOffset(m2Uid, user1.UserFolderId), "Correct message offset 2.");
+ }
+ }
+}
Added: NMail/trunk/NMail.UnitTests/LocalStoreData/GetNextMessageIdTest1.cs
===================================================================
--- NMail/trunk/NMail.UnitTests/LocalStoreData/GetNextMessageIdTest1.cs (rev 0)
+++ NMail/trunk/NMail.UnitTests/LocalStoreData/GetNextMessageIdTest1.cs 2007-04-24 15:46:35 UTC (rev 186)
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+using NUnit.Framework;
+
+using NMail.Configuration;
+using NMail.DataTypes;
+using NMail.DataTypes.LocalStore;
+using NMail.UnitTests.Resources;
+
+namespace NMail.UnitTests.LocalStoreData {
+ /// <summary>
+ /// Tests getting the next message Id.
+ /// </summary>
+ [TestFixture]
+ public class GetNextMessageIdTest1 : BaseLocalStoreDataTest {
+
+ [Test]
+ public void TestGetNextMessageId() {
+ LocalStoreUser user1 = new LocalStoreUser();
+ user1.Username = "Test";
+ this.localStoreData.CreateUser(user1);
+
+ Assert.IsTrue(user1.UserId > 0, "Valid user Id.");
+ Assert.IsTrue(user1.UserFolderId > 0, "Valid user folder Id.");
+
+ Assert.AreEqual(1, this.localStoreData.GetNextMessageId(user1.UserFolderId), "Next message Id is one.");
+
+ Message m1 = ResourceHelper.GetMessage("Test1.eml");
+ this.localStoreData.DeliverMessage(m1, user1.UserFolderId);
+
+ Assert.IsTrue(this.localStoreData.GetMessageCount(user1.UserFolderId) > 0, "Folder has messages.");
+
+ Assert.AreEqual(2, this.localStoreData.GetNextMessageId(user1.UserFolderId), "Next message Id is two.");
+ }
+ }
+}
Added: NMail/trunk/NMail.UnitTests/LocalStoreData/GetSetMessageFlagsTest1.cs
===================================================================
--- NMail/trunk/NMail.UnitTests/LocalStoreData/GetSetMessageFlagsTest1.cs (rev 0)
+++ NMail/trunk/NMail.UnitTests/LocalStoreData/GetSetMessageFlagsTest1.cs 2007-04-24 15:46:35 UTC (rev 186)
@@ -0,0 +1,54 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+using NUnit.Framework;
+
+using NMail.Configuration;
+using NMail.DataTypes;
+using NMail.DataTypes.LocalStore;
+using NMail.UnitTests.Resources;
+
+namespace NMail.UnitTests.LocalStoreData {
+ /// <summary>
+ /// Tests getting and setting the message flags.
+ /// </summary>
+ [TestFixture]
+ public class GetSetMessageFlagsTest1 : BaseLocalStoreDataTest {
+
+ [Test]
+ public void TestGetSetMessageFlags() {
+ LocalStoreUser user1 = new LocalStoreUser();
+ user1.Username = "Test1";
+ this.localStoreData.CreateUser(user1);
+ Assert.IsTrue(user1.UserId > 0, "Valid user Id.");
+ Assert.IsTrue(user1.UserFolderId > 0, "Valid user folder Id.");
+
+ LocalStoreUser user2 = new LocalStoreUser();
+ user2.Username = "Test2";
+ this.localStoreData.CreateUser(user2);
+ Assert.IsTrue(user2.UserId > 0, "Valid user Id.");
+ Assert.IsTrue(user2.UserFolderId > 0, "Valid user folder Id.");
+
+ Message m1 = ResourceHelper.GetMessage("Test1.eml");
+ this.localStoreData.DeliverMessage(m1, user1.UserFolderId);
+ this.localStoreData.DeliverMessage(m1, user2.UserFolderId);
+ this.localStoreData.DeliverMessage(m1, user1.UserFolderId);
+
+ int m1Uid = this.localStoreData.GetMessageId(1, user1.UserFolderId);
+ int m2Uid = this.localStoreData.GetMessageId(2, user1.UserFolderId);
+
+ Assert.IsTrue(m1Uid > 0, "Valid message Id 1.");
+ Assert.IsTrue(m2Uid > 0, "Valid message Id 2.");
+
+ Assert.AreEqual(StoreMessageFlags.Recent, this.localStoreData.GetMessageFlags(m1Uid, user1.UserFolderId), "Correct message flags 1.");
+ Assert.AreEqual(StoreMessageFlags.Recent, this.localStoreData.GetMessageFlags(m2Uid, user1.UserFolderId), "Correct message flags 2.");
+
+ this.localStoreData.SetMessageFlags(m1Uid, user1.UserFolderId, StoreMessageFlags.Answered);
+ this.localStoreData.SetMessageFlags(m2Uid, user1.UserFolderId, StoreMessageFlags.Draft | StoreMessageFlags.Flagged);
+
+ Assert.AreEqual(StoreMessageFlags.Answered, this.localStoreData.GetMessageFlags(m1Uid, user1.UserFolderId), "Correct message flags 3.");
+ Assert.AreEqual(StoreMessageFlags.Draft | StoreMessageFlags.Flagged, this.localStoreData.GetMessageFlags(m2Uid, user1.UserFolderId), "Correct message flags 4.");
+ }
+ }
+}
Modified: NMail/trunk/NMail.UnitTests/NMail.UnitTests.csproj
===================================================================
--- NMail/trunk/NMail.UnitTests/NMail.UnitTests.csproj 2007-04-24 12:45:08 UTC (rev 185)
+++ NMail/trunk/NMail.UnitTests/NMail.UnitTests.csproj 2007-04-24 15:46:35 UTC (rev 186)
@@ -52,6 +52,12 @@
<Compile Include="DataTypes\Helper\MimeHelperTests.cs" />
<Compile Include="DataTypes\Helper\StringTokenizerTests.cs" />
<Compile Include="LocalStoreData\BaseLocalStoreDataTest.cs" />
+ <Compile Include="LocalStoreData\GetSetMessageFlagsTest1.cs" />
+ <Compile Include="LocalStoreData\GetMessageIdsTest1.cs" />
+ <Compile Include="LocalStoreData\GetMessageOffsetTest1.cs" />
+ <Compile Include="LocalStoreData\GetMessageIdTest1.cs" />
+ <Compile Include="LocalStoreData\GetNextMessageIdTest1.cs" />
+ <Compile Include="LocalStoreData\DeliverMessageTest1.cs" />
<Compile Include="LocalStoreData\GetStoreFolderChildrenTest1.cs" />
<Compile Include="LocalStoreData\GetStoreFolderTest2.cs" />
<Compile Include="LocalStoreData\GetStoreFolderTest1.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|