Esempio n. 1
0
            public bool ReadMail(long mailId, long requesterId = -1)
            {
                Maple2.Sql.Model.Mail model = SafeGetMail(mailId, requesterId);
                if (model == null || model.ReadTime > model.CreationTime)
                {
                    return(false);
                }

                model.ReadTime = DateTime.UtcNow;
                return(context.TrySaveChanges());
            }
Esempio n. 2
0
            public bool DeleteMail(long mailId, long requesterId = -1)
            {
                Maple2.Sql.Model.Mail model = SafeGetMail(mailId, requesterId);
                if (model == null)
                {
                    return(false);
                }

                context.Mail.Remove(model);
                return(context.TrySaveChanges());
            }
Esempio n. 3
0
            private Maple2.Sql.Model.Mail SafeGetMail(long mailId, long requesterId)
            {
                Maple2.Sql.Model.Mail model = context.Mail.Find(mailId);
                if (model == null)
                {
                    return(null);
                }

                // requesterId prevents you from accessing other people's mail
                if (requesterId != -1 && model.RecipientId != requesterId)
                {
                    return(null);
                }

                return(model);
            }
Esempio n. 4
0
            /* Write */
            public long CreateMail(MailInfo mail)
            {
                Maple2.Sql.Model.Mail dbMail = storage.mailConverter.ToModel(mail);
                if (mail.Items.Count == 0)
                {
                    context.Mail.Add(dbMail);
                    return(context.TrySaveChanges() ? dbMail.Id : -1);
                }

                // Use transaction when saving items as well
                using IDbContextTransaction transaction = context.Database.BeginTransaction();
                context.Mail.Add(dbMail);
                if (!context.TrySaveChanges())
                {
                    return(-1);
                }

                itemOperations.StageSyncItems(dbMail.Id, mail.Items);
                transaction.Commit();
                return(dbMail.Id);
            }
Esempio n. 5
0
            /* Read */
            public MailInfo GetMail(long mailId, long requesterId = -1)
            {
                IQueryable <Maple2.Sql.Model.Mail> mailQuery = context.Mail.AsQueryable()
                                                               .Where(dbMail => dbMail.Id == mailId);

                if (requesterId != -1)
                {
                    mailQuery = mailQuery.Where(dbMail => dbMail.RecipientId == requesterId);
                }

                Maple2.Sql.Model.Mail model = mailQuery.SingleOrDefault();
                if (model == null)
                {
                    return(null);
                }

                MailInfo mail = storage.mailConverter.FromModel(model);

                mail.Items = itemOperations.GetItems(mail.Id);
                SetSenderName(mail);

                return(mail);
            }