vcardmanager.cpp

00001 /*
00002   Copyright (c) 2006 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 
00014 #include "vcardmanager.h"
00015 #include "vcardhandler.h"
00016 #include "vcard.h"
00017 #include "clientbase.h"
00018 #include "disco.h"
00019 
00020 namespace gloox
00021 {
00022 
00023   VCardManager::VCardManager( ClientBase *parent, Disco *disco )
00024     : m_parent( parent )
00025   {
00026     if( m_parent )
00027       m_parent->registerIqHandler( this, XMLNS_VCARD_TEMP );
00028 
00029     if( disco )
00030       disco->addFeature( XMLNS_VCARD_TEMP );
00031   }
00032 
00033   VCardManager::~VCardManager()
00034   {
00035     if( m_parent )
00036       m_parent->removeIqHandler( XMLNS_VCARD_TEMP );
00037   }
00038 
00039   void VCardManager::fetchVCard( const JID& jid, VCardHandler *vch )
00040   {
00041     if( !m_parent || !vch )
00042       return;
00043 
00044     TrackMap::const_iterator it = m_trackMap.find( jid.bare() );
00045     if( it != m_trackMap.end() )
00046       return;
00047 
00048     const std::string id = m_parent->getID();
00049     Tag *iq = new Tag( "iq" );
00050     iq->addAttribute( "type", "get" );
00051     iq->addAttribute( "id", id );
00052     iq->addAttribute( "to", jid.bare() );
00053     Tag *v = new Tag( iq, "vCard" );
00054     v->addAttribute( "xmlns", XMLNS_VCARD_TEMP );
00055 
00056     m_parent->trackID( this, id, VCardHandler::FetchVCard );
00057     m_trackMap[id] = vch;
00058     m_parent->send( iq );
00059   }
00060 
00061   void VCardManager::storeVCard( const VCard *vcard, VCardHandler *vch )
00062   {
00063     if( !m_parent || !vch )
00064       return;
00065 
00066     const std::string id = m_parent->getID();
00067     Tag *iq = new Tag( "iq" );
00068     iq->addAttribute( "type", "set" );
00069     iq->addAttribute( "id", id );
00070     iq->addChild( vcard->tag() );
00071 
00072     m_parent->trackID( this, id, VCardHandler::StoreVCard );
00073     m_trackMap[id] = vch;
00074     m_parent->send( iq );
00075   }
00076 
00077   bool VCardManager::handleIq( Stanza * /*stanza*/ )
00078   {
00079     return false;
00080   }
00081 
00082   bool VCardManager::handleIqID( Stanza *stanza, int context )
00083   {
00084     TrackMap::const_iterator it = m_trackMap.find( stanza->id() );
00085     if( it != m_trackMap.end() )
00086     {
00087       switch( stanza->subtype() )
00088       {
00089         case StanzaIqResult:
00090         {
00091           switch( context )
00092           {
00093             case VCardHandler::FetchVCard:
00094             {
00095               Tag *v = stanza->findChild( "vCard", "xmlns", XMLNS_VCARD_TEMP );
00096               if( v )
00097               {
00098                 (*it).second->handleVCard( stanza->from(), new VCard( v ) );
00099               }
00100               break;
00101             }
00102             case VCardHandler::StoreVCard:
00103               (*it).second->handleVCardResult( VCardHandler::StoreVCard, stanza->from() );
00104               break;
00105           }
00106         }
00107         break;
00108         case StanzaIqError:
00109         {
00110           switch( context )
00111           {
00112             case VCardHandler::FetchVCard:
00113               (*it).second->handleVCardResult( VCardHandler::FetchVCard, stanza->from(), stanza->error() );
00114               break;
00115             case VCardHandler::StoreVCard:
00116               (*it).second->handleVCardResult( VCardHandler::StoreVCard, stanza->from(), stanza->error() );
00117               break;
00118           }
00119           break;
00120         }
00121         default:
00122           return false;
00123       }
00124     }
00125     return false;
00126   }
00127 
00128 }

Generated on Sun Sep 24 21:57:32 2006 for gloox by  doxygen 1.4.7