public static ConversationModel GetConversationFromGroup(long groupId, Guid memId) { ConversationModel con = new ConversationModel(); try { con.GroupMessageId = groupId; con.OwnerUserId = memId; var toMem = MemberCache.GetMemberDisplay(memId); con.FromName = toMem.DerbyName; var dc = new ManagementContext(); var gro = (from xx in dc.GroupMessages.Include("Messages") where xx.GroupId == groupId where xx.IsDeleted == false select new { xx.TitleOfMessage, Messages = (from yy in xx.Messages select new { yy.FromUser, yy.Created, yy.MessageId, yy.MessageText, yy.MessagesInbox }).OrderBy(z => z.MessageId), Recipients = xx.Recipients.Where(x => x.IsRemovedFromGroup == false), }).AsParallel().FirstOrDefault(); if (gro == null) return null; foreach (var user in gro.Recipients) { MemberDisplayMessage mem = new MemberDisplayMessage(); mem.DerbyName = user.Recipient.DerbyName; mem.Firstname = user.Recipient.Firstname; mem.LastName = user.Recipient.Lastname; if (user.Recipient.Photos.OrderByDescending(x => x.Created).FirstOrDefault() != null) mem.ThumbUrl = user.Recipient.Photos.OrderByDescending(x => x.Created).FirstOrDefault().ImageUrlThumb; mem.MemberId = user.Recipient.MemberId; mem.UserId = user.Recipient.AspNetUserId; con.Recipients.Add(mem); } con.Title = gro.TitleOfMessage; foreach (var message in gro.Messages) { try { MessageSingleModel ms = new MessageSingleModel(); ms.FromId = message.FromUser.MemberId; ms.FromName = message.FromUser.DerbyName; if (message.FromUser.Photos.OrderByDescending(x => x.Created).FirstOrDefault() != null) ms.ThumbUrl = message.FromUser.Photos.OrderByDescending(x => x.Created).FirstOrDefault().ImageUrlThumb; ms.MessageCreated = message.Created; ms.MessageId = message.MessageId; foreach (var inbox in message.MessagesInbox) { var user = con.Recipients.Where(x => x.MemberId == inbox.ToUser.MemberId).FirstOrDefault(); user.HasNotReadConversation = true; } if (!String.IsNullOrEmpty(message.MessageText)) { ms.MessageText = message.MessageText; ms.MessageTextHtml = message.MessageText; } if (ms.MessageCreated > con.LastPostDate) { con.LastPostDate = ms.MessageCreated; //con.IsConversationRead = ms.IsMessageRead; con.LastPostBy = ms.FromName; } if (con.Messages.Where(x => x.MessageId == ms.MessageId).FirstOrDefault() == null) con.Messages.Add(ms); } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType()); } } } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType()); } return con; }
private static void GetGroupMessages(Guid ownerId, MessageModel mess, ManagementContext dc, int page, int take) { //TODO: add Take(50) a few days from now. var to = (from xx in dc.GroupMessages where xx.IsDeleted == false where xx.Recipients.Where(z => z.IsRemovedFromGroup == false).Select(x => x.Recipient.MemberId).Contains(ownerId) select xx).AsParallel().OrderByDescending(x => x.LastModified).Skip(page * take).Take(take).ToList(); List<RDN.Library.DataModels.Messages.GroupMessage> groups = new List<DataModels.Messages.GroupMessage>(); //foreach (var recipient in to) foreach (var group in to) { try { //var group = recipient.Group; //var messages = recipient.Group.Messages; foreach (var message in group.Messages) { MessageSingleModel ms = new MessageSingleModel(); if (message.FromUser == null) { ms.FromId = new Guid(); } else { ms.FromId = message.FromUser.MemberId; ms.FromName = message.FromUser.DerbyName; } ms.MessageCreated = message.Created; ms.MessageId = message.MessageId; if (!String.IsNullOrEmpty(message.MessageText)) { ms.MessageText = RDN.Portable.Util.Strings.StringExt.HtmlDecode(message.MessageText); if (ms.MessageText.Length > 20) ms.MessageText = ms.MessageText.Remove(20); } var convo = mess.Conversations.Where(x => x.GroupMessageId == group.GroupId).FirstOrDefault(); if (convo == null) { ConversationModel con = new ConversationModel(); con.CanDelete = true; if (message.FromUser != null) { con.FromName = message.FromUser.DerbyName; con.FromId = message.FromUser.MemberId; } con.LastPostDate = ms.MessageCreated; if (message.MessagesInbox.Where(x => x.ToUser.MemberId == ownerId).FirstOrDefault() == null) con.IsConversationRead = true; con.GroupMessageId = group.GroupId; if (!String.IsNullOrEmpty(group.TitleOfMessage)) con.Title = group.TitleOfMessage; else con.Title = "Message"; if (message.FromUser != null) { con.LastPostBy = message.FromUser.DerbyName; } var recips = group.Recipients.Where(x => x.IsRemovedFromGroup == false); foreach (var rec in recips) { MemberDisplayMessage mem = new MemberDisplayMessage(); mem.DerbyName = rec.Recipient.DerbyName; mem.MemberId = rec.Recipient.MemberId; mem.UserId = rec.Recipient.AspNetUserId; var photo = rec.Recipient.Photos.FirstOrDefault(); if (photo != null) mem.ThumbUrl = photo.ImageUrlThumb; con.Recipients.Add(mem); } con.Messages.Add(ms); mess.Conversations.Add(con); } else { if (ms.MessageCreated > convo.LastPostDate) { convo.LastPostBy = ms.FromName; convo.LastPostDate = ms.MessageCreated; } else { convo.FromId = ms.FromId; convo.FromName = ms.FromName; } if (message.MessagesInbox.Where(x => x.ToUser.MemberId == ownerId).FirstOrDefault() != null) convo.IsConversationRead = false; else convo.IsConversationRead = true; convo.Messages.Add(ms); } groups.Add(group); } } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType()); } } mess.Conversations = mess.Conversations.OrderByDescending(x => x.LastPostDate).ToList(); }
public static List<MessageSingleModel> GetMessageHistoryWithGroup(long groupId, Guid ownerId, int lastMessageId) { List<MessageSingleModel> messHistory = new List<MessageSingleModel>(); try { var dc = new ManagementContext(); var gro = (from xx in dc.GroupMessages.Include("Messages").Include("Message.FromUser") where xx.GroupId == groupId where xx.IsDeleted == false select new { Messages = (from yy in xx.Messages where yy.MessageId > lastMessageId select new { yy.FromUser, yy.Created, yy.MessageId, yy.MessageText }) }).AsParallel().FirstOrDefault(); if (gro == null) return null; foreach (var message in gro.Messages) { try { MessageSingleModel ms = new MessageSingleModel(); ms.FromId = message.FromUser.MemberId; ms.FromName = message.FromUser.DerbyName; ms.MessageCreated = message.Created; ms.MessageId = message.MessageId; ms.MessageText = RDN.Portable.Util.Strings.StringExt.HtmlDecode(message.MessageText); if (messHistory.Where(x => x.MessageId == ms.MessageId).FirstOrDefault() == null) messHistory.Add(ms); } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType()); } } } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType()); } return messHistory; }
public static int EmailMembersAboutMessagesWaitingInInbox() { int emailsSent = 0; try { var dc = new ManagementContext(); int type = Convert.ToInt32(TaskTypeEnum.EmailMembersThatHaveMessagesSittingInInbox); var emailTask = dc.AutomatedTasks.Where(x => x.TaskIdForDescription == type).FirstOrDefault(); if (emailTask == null) { TaskForRunning newTask = new TaskForRunning(); newTask.FirstRun = DateTime.UtcNow; newTask.HoursBetweenEachRunOfTask = HOURS_BETWEEN_EMAILS_FOR_MESSAGES_IN_INBOX; newTask.LastRun = DateTime.UtcNow; newTask.TaskIdForDescription = type; dc.AutomatedTasks.Add(newTask); dc.SaveChanges(); } else { emailTask.HoursBetweenEachRunOfTask = HOURS_BETWEEN_EMAILS_FOR_MESSAGES_IN_INBOX; if (emailTask.LastRun.AddHours(HOURS_BETWEEN_EMAILS_FOR_MESSAGES_IN_INBOX) < DateTime.UtcNow) { List<Guid> membersToEmail = new List<Guid>(); MessageModel mess = new MessageModel(); emailTask.LastRun = DateTime.UtcNow; var to = (from xx in dc.MessageInbox.Include("Message").Include("Message.FromUser").Include("ToUser") where xx.UserNotifiedViaEmail == false where xx.IsRead == false select xx).ToList(); foreach (var message in to) { message.UserNotifiedViaEmail = true; message.NotifiedEmailDateTime = DateTime.UtcNow; try { MessageSingleModel ms = new MessageSingleModel(); ms.FromId = message.Message.FromUser.MemberId; ms.MessageText = RDN.Portable.Util.Strings.StringExt.HtmlDecode(message.Message.MessageText); membersToEmail.Add(message.ToUser.MemberId); if (ms.MessageText.Length > 20) ms.MessageText = ms.MessageText.Remove(20); var convo = mess.Conversations.Where(x => x.ConversationWithUser == ms.FromId && x.OwnerUserId == message.ToUser.MemberId).FirstOrDefault(); if (convo != null) { convo.Messages.Add(ms); } else { ConversationModel con = new ConversationModel(); con.ConversationWithUser = ms.FromId; con.FromName = message.Message.FromUser.DerbyName; con.OwnerUserId = message.ToUser.MemberId; con.Messages.Add(ms); mess.Conversations.Add(con); } } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType()); } } dc.SaveChanges(); membersToEmail = membersToEmail.Distinct().ToList(); var members = dc.Members.Where(x => x.AspNetUserId != null && x.AspNetUserId != new Guid()).Where(x => membersToEmail.Contains(x.MemberId)).ToList(); foreach (var mem in members) { string membersWhoSentThisMemberAMessage = String.Empty; foreach (var conv in mess.Conversations.Where(x => x.OwnerUserId == mem.MemberId)) { membersWhoSentThisMemberAMessage += conv.FromName; membersWhoSentThisMemberAMessage += "<br/>"; } try { var user = System.Web.Security.Membership.GetUser((object)mem.AspNetUserId); var emailData = new Dictionary<string, string> { { "derbyname",mem.DerbyName}, { "membersWhoSentMessages", membersWhoSentThisMemberAMessage}, { "viewConversationLink",ServerConfig.VIEW_MESSAGES_INBOX_MEMBER + mem.MemberId.ToString().Replace("-","") } }; EmailServer.EmailServer.SendEmail(ServerConfig.DEFAULT_EMAIL, ServerConfig.DEFAULT_EMAIL_FROM_NAME, user.UserName, EmailServer.EmailServer.DEFAULT_SUBJECT + " New Messages", emailData, EmailServer.EmailServerLayoutsEnum.SendLatestConversationsThreadToUser); emailsSent += 1; } catch (Exception exception) { Error.ErrorDatabaseManager.AddException(exception, exception.GetType()); } } dc.SaveChanges(); } } } catch (Exception exception) { Error.ErrorDatabaseManager.AddException(exception, exception.GetType()); } return emailsSent; }