private async Task <string> UpdateMessage(EditModel model, int toUserId, bool NeedUser = false) { if (!NeedUser && toUserId == 0) { return(null); } using (MessagingDataProvider msgDP = new MessagingDataProvider()) { string toUser = await Resource.ResourceAccess.GetUserNameAsync(model.ToUserId); if (string.IsNullOrWhiteSpace(toUser)) { throw new Error(this.__ResStr("noUser", "User id {0} doesn't exist", model.ToUserId)); } List <DataProviderFilterInfo> filters = null; List <DataProviderFilterInfo> subFilters = null; subFilters = DataProviderFilterInfo.Join(subFilters, new DataProviderFilterInfo { Field = "FromUser", Operator = "==", Value = Manager.UserId }); subFilters = DataProviderFilterInfo.Join(subFilters, new DataProviderFilterInfo { Field = "ToUser", Operator = "==", Value = toUserId }); filters = DataProviderFilterInfo.Join(filters, new DataProviderFilterInfo { Logic = "||", Filters = subFilters }); subFilters = null; subFilters = DataProviderFilterInfo.Join(subFilters, new DataProviderFilterInfo { Field = "ToUser", Operator = "==", Value = Manager.UserId }); subFilters = DataProviderFilterInfo.Join(subFilters, new DataProviderFilterInfo { Field = "FromUser", Operator = "==", Value = toUserId }); filters = DataProviderFilterInfo.Join(filters, new DataProviderFilterInfo { Logic = "||", Filters = subFilters }); List <DataProviderSortInfo> sorts = null; sorts = DataProviderSortInfo.Join(sorts, new DataProviderSortInfo { Field = "Sent", Order = DataProviderSortInfo.SortDirection.Descending }); DataProviderGetRecords <Message> recs = await msgDP.GetItemsAsync(0, model.MaxMessages, sorts, filters); model.MessageData.Messages = recs.Data; model.MessageData.Messages.Reverse(); model.MessageData.FromUser = Manager.UserName; model.MessageData.ToUser = toUser; model.MessageData.TotalMessages = recs.Total; return(toUser); } }
public async Task Send(string toUser, string message) { YetaWFManager manager = await this.SetupSignalRAsync(); using (MessagingDataProvider msgDP = new MessagingDataProvider()) { if (manager.UserId == 0) { throw new InternalError("No current user"); } try { int toUserId = await Resource.ResourceAccess.GetUserIdAsync(toUser); if (toUserId == 0) { throw new Error(this.__ResStr("noUser", "User {0} doesn't exist", toUser)); } Message msg = new Message { FromUser = manager.UserId, ToUser = toUserId, Seen = false, MessageText = message, }; if (!await msgDP.AddItemAsync(msg)) { throw new InternalError("Message not delivered - Message could not be saved"); } Dispatch(Clients.User(toUser), "message", msg.Key, manager.UserName, message, Formatting.FormatDateTime(msg.Sent)); Dispatch(Clients.User(manager.UserName), "messageSent", msg.Key, toUser, message, Formatting.FormatDateTime(msg.Sent)); } catch (Exception exc) { string messageText = ErrorHandling.FormatExceptionMessage(exc); Dispatch(Clients.Caller, "notifyException", messageText); Message msg = new Message { FromUser = manager.UserId, ToUser = 0, Seen = false, MessageText = messageText, }; await msgDP.AddItemAsync(msg); } } }
public async Task AllMessagesSeen(string fromUser) { YetaWFManager manager = await this.SetupSignalRAsync(); if (manager.UserId == 0) { throw new InternalError("No current user"); } int fromUserId = await Resource.ResourceAccess.GetUserIdAsync(fromUser); if (fromUserId == 0) { throw new Error(this.__ResStr("noFromUser", "User {0} doesn't exist", fromUser)); } using (MessagingDataProvider msgDP = new MessagingDataProvider()) { List <DataProviderFilterInfo> filters = null; filters = DataProviderFilterInfo.Join(filters, new DataProviderFilterInfo { Field = "FromUser", Operator = "==", Value = fromUserId }); filters = DataProviderFilterInfo.Join(filters, new DataProviderFilterInfo { Field = "ToUser", Operator = "==", Value = manager.UserId }); filters = DataProviderFilterInfo.Join(filters, new DataProviderFilterInfo { Field = "Seen", Operator = "==", Value = false }); DataProviderGetRecords <Message> msgs = await msgDP.GetItemsAsync(0, 0, null, filters); foreach (Message msg in msgs.Data) { msg.Seen = true; await msgDP.UpdateItemAsync(msg); } } Dispatch(Clients.User(fromUser), "allMessagesSeen", manager.UserName); }
public async Task MessageSeen(int key) { YetaWFManager manager = await this.SetupSignalRAsync(); if (manager.UserId == 0) { throw new InternalError("No current user"); } using (MessagingDataProvider msgDP = new MessagingDataProvider()) { Message msg = await msgDP.GetItemAsync(key); if (msg.ToUser != manager.UserId) { throw new InternalError("User mismatch"); } if (!msg.Seen) { msg.Seen = true; await msgDP.UpdateItemAsync(msg); } string fromUser = await Resource.ResourceAccess.GetUserNameAsync(msg.FromUser); if (string.IsNullOrWhiteSpace(fromUser)) { throw new Error(this.__ResStr("noFromUser", "User {0} doesn't exist", msg.FromUser)); } string toUser = await Resource.ResourceAccess.GetUserNameAsync(msg.ToUser); if (string.IsNullOrWhiteSpace(toUser)) { throw new Error(this.__ResStr("noToUser", "User {0} doesn't exist", msg.ToUser)); } Dispatch(Clients.User(fromUser), "messageSeen", msg.Key, toUser); } }