bookmarkstorage.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "bookmarkstorage.h"
00016 #include "clientbase.h"
00017
00018
00019 namespace gloox
00020 {
00021
00022 BookmarkStorage::BookmarkStorage( ClientBase* parent )
00023 : PrivateXML( parent ),
00024 m_bookmarkHandler( 0 )
00025 {
00026 }
00027
00028 BookmarkStorage::~BookmarkStorage()
00029 {
00030 }
00031
00032 void BookmarkStorage::storeBookmarks( const BookmarkList& bList, const ConferenceList& cList )
00033 {
00034 Tag* s = new Tag( "storage" );
00035 s->addAttribute( XMLNS, XMLNS_BOOKMARKS );
00036
00037 BookmarkList::const_iterator itb = bList.begin();
00038 for( ; itb != bList.end(); ++itb )
00039 {
00040 Tag* i = new Tag( s, "url", "name", (*itb).name );
00041 i->addAttribute( "url", (*itb).url );
00042 }
00043
00044 ConferenceList::const_iterator itc = cList.begin();
00045 for( ; itc != cList.end(); ++itc )
00046 {
00047 Tag* i = new Tag( s, "conference", "name", (*itc).name );
00048 i->addAttribute( "jid", (*itc).jid );
00049 i->addAttribute( "autojoin", (*itc).autojoin ? "true" : "false" );
00050
00051 new Tag( i, "nick", (*itc).nick );
00052 new Tag( i, "password", (*itc).password );
00053 }
00054
00055 storeXML( s, this );
00056 }
00057
00058 void BookmarkStorage::requestBookmarks()
00059 {
00060 requestXML( "storage", XMLNS_BOOKMARKS, this );
00061 }
00062
00063 void BookmarkStorage::handlePrivateXML( const Tag* xml )
00064 {
00065 if( !xml )
00066 return;
00067
00068 BookmarkList bList;
00069 ConferenceList cList;
00070 const TagList& l = xml->children();
00071 TagList::const_iterator it = l.begin();
00072 for( ; it != l.end(); ++it )
00073 {
00074 if( (*it)->name() == "url" )
00075 {
00076 const std::string& url = (*it)->findAttribute( "url" );
00077 const std::string& name = (*it)->findAttribute( "name" );
00078
00079 if( !url.empty() && !name.empty() )
00080 {
00081 BookmarkListItem item;
00082 item.url = url;
00083 item.name = name;
00084 bList.push_back( item );
00085 }
00086 }
00087 else if( (*it)->name() == "conference" )
00088 {
00089 const std::string& jid = (*it)->findAttribute( "jid" );
00090 const std::string& name = (*it)->findAttribute( "name" );
00091
00092 if( !jid.empty() && !name.empty() )
00093 {
00094 const std::string& join = (*it)->findAttribute( "autojoin" );
00095 ConferenceListItem item;
00096 item.jid = jid;
00097 item.name = name;
00098 const Tag* nick = (*it)->findChild( "nick" );
00099 if( nick )
00100 item.nick = nick->cdata();
00101 const Tag* pwd = (*it)->findChild( "password" );
00102 if( pwd )
00103 item.password = pwd->cdata();
00104 item.autojoin = ( join == "true" || join == "1" );
00105 cList.push_back( item );
00106 }
00107 }
00108 }
00109
00110 if( m_bookmarkHandler )
00111 m_bookmarkHandler->handleBookmarks( bList, cList );
00112 }
00113
00114 void BookmarkStorage::handlePrivateXMLResult( const std::string& , PrivateXMLResult )
00115 {
00116 }
00117
00118 }