Exemplo n.º 1
0
        public ActionResult AddLabel(String labelName, Int64 mailId, Int64 mailAccountId = 0)
        {
            ISession     session = NHibernateManager.OpenSession();
            ITransaction tran    = session.BeginTransaction();

            try
            {
                MailAccount mailAccount = this.GetMailAccount(mailAccountId);
                Label       theLabel    = this.GetAccountLabel(labelName, mailAccount, session);
                if (theLabel == null)
                {
                    return(Json(new { success = false, message = "No se ha podido encontrar la etiqueta con el nombre:" + labelName + "." }, JsonRequestBehavior.AllowGet));
                }
                Mail theMail = new Mail(mailId, session);

                if (theMail.Entity.MailAccountEntity.Id != theLabel.Entity.MailAccountEntity.Id) //si el mail no es del mismo MailAccount de la etiqueta
                {
                    this.CreateLabel(labelName, theMail.Entity.MailAccountEntity.Id);            //DB e IMAP
                }
                theMail.AddLabel(theLabel, session);                                             //DB
                tran.Commit();
                mailAccount.AddLabelFolder(theMail, theLabel);                                   //IMAP

                return(Json(new { success = true }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception exc)
            {
                tran.Rollback();
                Log.LogException(exc, "Parametros de la llamada: label(" + labelName + "), mailId(" +
                                 mailId.ToString() + "), mailAccountId(" + mailAccountId + ").");
                return(Json(new { success = false }, JsonRequestBehavior.AllowGet));
            }
            finally
            {
                session.Close();
            }
        }