Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
                }
            }
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
            }
        }