protected override XElement[] Do(WebContext context) { Account receiver; if (context.httprequest.Form.AllKeys.Contains("receiverId")) { receiver = Account.LoadById(int.Parse(context.httprequest.Form["receiverId"])); } else if (context.httprequest.Form.AllKeys.Contains("receiverName")) { receiver = Account.LoadByUser(User.LoadByName(context.httprequest.Form["receiverName"])); } else { throw new ApplicationException("receiverId/receiverName not passed"); } if (Config.instance.IsMigrationEnabled && receiver.needsMigration) { throw new ApplicationException("User is not migrated"); } PMMessage newMessage = PMConversation.SendPMMessage( context.account, receiver, this.getTitle(context), this.getBody(context) ); newMessage.conversation.markAsRead(context.session.account, newMessage, newMessage); return(new XElement[] { newMessage.exportToXml(context) }); }
override protected IEnumerable <XElement> getSpecificData(WebContext context) { Account interlocutor = this.url.interlocutor; PMConversation conversation = PMConversation.LoadByAccounts(context.session.account, interlocutor); PageOuter pageOuter = PageOuter.createFromUrl( this.url, context.userSettings.postsPerPage, new Dictionary <char, Func <string, long> > { { 'p', s => Config.instance.mainConnection.GetCountByConditions( PMMessage.TableSpec.instance, new ComplexCondition( ConditionsJoinType.AND, new ComparisonCondition( PMMessage.TableSpec.instance.getColumnSpec(PMMessage.TableSpec.FIELD_OWNERID), ComparisonType.EQUAL, context.session.account.id.ToString() ), new ComparisonCondition( PMMessage.TableSpec.instance.getColumnSpec(PMMessage.TableSpec.FIELD_INTERLOCUTORID), ComparisonType.EQUAL, interlocutor.id.ToString() ), new ComparisonCondition( PMMessage.TableSpec.instance.getIdSpec(), ComparisonType.LESSTHAN, int.Parse(s).ToString() ) ) ) } } ); IEnumerable <PMMessage> messages = conversation.getMessages(pageOuter, context, pageOuter.ascendingDirection); XElement[] result = new XElement[] { conversation.exportToXml(context, false), new XElement("messages", from message in messages select message.exportToXml(context), pageOuter.exportToXml(2, 5, 2) ) }; if (messages.Count() > 0) { conversation.markAsRead(context.session.account, messages.Min(), messages.Max()); } foreach (var message in messages) { message.MarkAsRead(context.session.account); } return(result); }
override protected IEnumerable <XElement> getSpecificData(WebContext context) { PageOuter pageOuter = PageOuter.createFromUrl(this.url, context.userSettings.threadsPerPage); IEnumerable <PMConversation> conversations = PMConversation.getConversations(context.session.account, pageOuter, pageOuter.descendingDirection); XElement[] result = new XElement[] { new XElement("conversations", from conversation in conversations select conversation.exportToXml(context, false), pageOuter.exportToXml(1, 5, 1) ) }; return(result); }