gloox  1.0
message.h
00001 /*
00002   Copyright (c) 2007-2009 by Jakob Schroeter <js@camaya.net>
00003   This file is part of the gloox library. http://camaya.net/gloox
00004 
00005   This software is distributed under a license. The full license
00006   agreement can be found in the file LICENSE in this distribution.
00007   This software may not be copied, modified, sold or distributed
00008   other than expressed in the named license agreement.
00009 
00010   This software is distributed without any warranty.
00011 */
00012 
00013 #ifndef MESSAGE_H__
00014 #define MESSAGE_H__
00015 
00016 #include "delayeddelivery.h"
00017 #include "stanza.h"
00018 
00019 #include <string>
00020 
00021 namespace gloox
00022 {
00023 
00024   class JID;
00025 
00033   class GLOOX_API Message : public Stanza
00034   {
00035 
00036     friend class ClientBase;
00037 
00038     public:
00039 
00043       enum MessageType
00044       {
00045         Chat           =  1,        
00046         Error          =  2,        
00047         Groupchat      =  4,        
00048         Headline       =  8,        
00049         Normal         = 16,        
00050         Invalid        = 32         
00051       };
00052 
00062       Message( MessageType type, const JID& to,
00063                const std::string& body = EmptyString, const std::string& subject = EmptyString,
00064                const std::string& thread = EmptyString, const std::string& xmllang = EmptyString );
00065 
00069       virtual ~Message();
00070 
00075       MessageType subtype() const { return m_subtype; }
00076 
00086       const std::string body( const std::string& lang = "default" ) const
00087       {
00088         return findLang( m_bodies, m_body, lang );
00089       }
00090 
00100       const std::string subject( const std::string& lang = "default" ) const
00101       {
00102         return findLang( m_subjects, m_subject, lang );
00103       }
00104 
00109       const std::string& thread() const { return m_thread; }
00110 
00115       void setThread( const std::string& thread ) { m_thread = thread; }
00116 
00121       void setID( const std::string& id ) { m_id = id; }
00122 
00128       const DelayedDelivery* when() const
00129       {
00130         return static_cast<const DelayedDelivery*>( findExtension( ExtDelay ) );
00131       }
00132 
00133       // reimplemented from Stanza
00134       virtual Tag* tag() const;
00135 
00136     private:
00137 #ifdef MESSAGE_TEST
00138     public:
00139 #endif
00140 
00144       Message( Tag* tag );
00145 
00146       MessageType m_subtype;
00147       std::string m_body;
00148       std::string m_subject;
00149       StringMap* m_bodies;
00150       StringMap* m_subjects;
00151       std::string m_thread;
00152   };
00153 
00154 }
00155 
00156 #endif // MESSAGE_H__