/* -*- C++ -*- * Copyright (C) 2001-2003, Christof Meerwald * http://JabXPCOM.sunsite.dk */ /* * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; version 2 dated June, * 1991. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA */ #include "jabxpcom-message.h" #include "judoxpcom-wrapper.h" #include #include #include #include NS_IMPL_ISUPPORTS_INHERITED1(Jabber_ConstMessage_Wrapper, Jabber_ConstPacket_Wrapper, jabIConstMessage) Jabber_ConstMessage_Wrapper::Jabber_ConstMessage_Wrapper(const jabberoo::Message *message) : Jabber_ConstPacket_Wrapper(message), message_(message), managed_object_(false) { /* member initializers and constructor code */ #ifdef JABXPCOM_DEBUG printf("constructing Jabber_ConstMessage_Wrapper(%d)\n", managed_object_); #endif } Jabber_ConstMessage_Wrapper::~Jabber_ConstMessage_Wrapper() { /* destructor code */ #ifdef JABXPCOM_DEBUG printf("deleting Jabber_ConstMessage_Wrapper(%d)\n", managed_object_); #endif if (managed_object_) { delete message_; } } /* readonly attribute string body; */ NS_IMETHODIMP Jabber_ConstMessage_Wrapper::GetBody(nsACString &aBody) { const std::string body = message_->getBody(); aBody.Assign(body.data(), body.length()); return NS_OK; } /* readonly attribute string subject; */ NS_IMETHODIMP Jabber_ConstMessage_Wrapper::GetSubject(nsACString &aSubject) { const std::string subject = message_->getSubject(); aSubject.Assign(subject.data(), subject.length()); return NS_OK; } /* readonly attribute string dateTime; */ NS_IMETHODIMP Jabber_ConstMessage_Wrapper::GetDateTime(nsACString &aDateTime) { const std::string dateTime = message_->getDateTime(); aDateTime.Assign(dateTime.data(), dateTime.length()); return NS_OK; } /* readonly attribute string thread; */ NS_IMETHODIMP Jabber_ConstMessage_Wrapper::GetThread(nsACString &aThread) { const std::string thread = message_->getThread(); aThread.Assign(thread.data(), thread.length()); return NS_OK; } /* readonly attribute MessageType type; */ NS_IMETHODIMP Jabber_ConstMessage_Wrapper::GetType(MessageType *aType) { *aType = message_->getType(); return NS_OK; } /* jabIMessage reply (in string body); */ NS_IMETHODIMP Jabber_ConstMessage_Wrapper::Reply(const nsACString &body, jabIMessage **_retval) { *_retval = new Jabber_Message_Wrapper(message_->getFrom().c_str(), PromiseFlatCString(body).get(), message_->getType()); NS_ADDREF(*_retval); return NS_OK; } /* string getHtmlBody (); */ NS_IMETHODIMP Jabber_ConstMessage_Wrapper::GetHtmlBody(nsACString &_retval) { const judo::Element *html_elem = message_->getBaseElement().findElement("html"); if (html_elem) { const std::string body_text = html_elem->getChildCData("body"); _retval.Assign(body_text.data(), body_text.length()); return NS_OK; } return NS_ERROR_FAILURE; } void Jabber_ConstMessage_Wrapper::detach() { if (!managed_object_) { #ifdef JABXPCOM_DEBUG printf("detaching Jabber_ConstMessage_Wrapper()\n"); #endif message_ = new jabberoo::Message(*message_); managed_object_ = true; Jabber_ConstPacket_Wrapper::detach(message_); } } NS_IMPL_ADDREF_INHERITED(Jabber_Message_Wrapper, Jabber_ConstMessage_Wrapper) NS_IMPL_RELEASE_INHERITED(Jabber_Message_Wrapper, Jabber_ConstMessage_Wrapper) NS_INTERFACE_MAP_BEGIN(Jabber_Message_Wrapper) NS_INTERFACE_MAP_ENTRY(jabIMessage) NS_INTERFACE_MAP_ENTRY_AGGREGATED(jabIPacket, &packet_wrapper_) NS_INTERFACE_MAP_END_INHERITING(Jabber_ConstMessage_Wrapper) Jabber_Message_Wrapper::Jabber_Message_Wrapper(const char *jid, const char *body, MessageType mtype) : message_(jid, body, jabberoo::Message::Type(mtype)), packet_wrapper_(static_cast(this), message_), Jabber_ConstMessage_Wrapper(&message_) { /* member initializers and constructor code */ #ifdef JABXPCOM_DEBUG printf("constructing Jabber_Message_Wrapper()\n"); #endif } Jabber_Message_Wrapper::~Jabber_Message_Wrapper() { /* destructor code */ #ifdef JABXPCOM_DEBUG printf("deleting Jabber_Message_Wrapper()\n"); #endif } /* void setSubject (in string subject); */ NS_IMETHODIMP Jabber_Message_Wrapper::SetSubject(const nsACString &subject) { message_.setSubject(PromiseFlatCString(subject).get()); return NS_OK; } /* void setThread (in string thread); */ NS_IMETHODIMP Jabber_Message_Wrapper::SetThread(const nsACString &thread) { message_.setThread(PromiseFlatCString(thread).get()); return NS_OK; } /* void setHtmlBody (in string html_body); */ NS_IMETHODIMP Jabber_Message_Wrapper::SetHtmlBody(const nsACString &html_body) { judo::Element * const html_elem = message_.getBaseElement().addElement("html"); html_elem->putAttrib("xmlns", "http://jabber.org/protocol/xhtml-im"); judo::Element * const body_elem = html_elem->addElement("body"); body_elem->putAttrib("xmlns", "http://www.w3.org/1999/xhtml"); body_elem->appendChild(new judo::RawXML(PromiseFlatCString(html_body).get(), html_body.Length())); return NS_OK; }