00001 #ifndef INCL_JABBEROOX_VCARD
00002 #define INCL_JABBEROOX_VCARD
00003
00004 #include "judo.hpp"
00005
00006 #include <sigc++/object.h>
00007 #include <sigc++/slot.h>
00008
00009 namespace jabberoo
00010 {
00011 class vCard : public SigC::Object
00012 {
00013 public:
00014 enum Field
00015 {
00016 Firstname,
00017 Middlename,
00018 Lastname,
00019 Fullname,
00020 Nickname,
00021 EMail,
00022 Birthday,
00023 Telephone,
00024 URL,
00025 Description
00026 };
00027
00028 class Entry
00029 {
00030 public:
00031 Entry(judo::Element& elem): _elem(elem)
00032 {
00033 _data = _elem.getCDATA();
00034 }
00035 ~Entry()
00036 { }
00037
00038 void update()
00039 {
00040 judo::Element::iterator i = _elem.find("#CDATA", judo::Node::ntCDATA);
00041 if (i != _elem.end())
00042 _elem.erase(i);
00043 _elem.addCDATA(_data.c_str(), _data.length());
00044 }
00045
00046
00047 operator std::string() const
00048 { return std::string(_data); }
00049 Entry& operator=(const std::string& val)
00050 { _data = val; return *this; }
00051
00052 private:
00053 judo::Element& _elem;
00054 std::string _data;
00055 };
00056
00057 vCard(const judo::Element& elem);
00058 ~vCard();
00059
00060 vCard::Entry& operator[](vCard::Field field);
00061
00062 std::string toString(void);
00063 private:
00064 judo::Element _elem;
00065 typedef std::map<vCard::Field, vCard::Entry*>::iterator EntryIter;
00066 std::map<vCard::Field, vCard::Entry*> _entries;
00067 typedef std::map<vCard::Field, std::string>::iterator QueryIter;
00068 std::map<vCard::Field, std::string> _queries;
00069 };
00070 };
00071
00072 #endif // INCL_JABBEROOX_VCARD