VCard (General questions)
Hi . .I am using VC 2005. As soon as I successfully connect I am trying to get my vcard so that I show my name. But the call never returns back my vcard. What is the api I have to use so that I get my vcard details?
Below is the code I used.
IXMPPVCard mycard ;
mycard.AttachDispatch(m_XMPP.GetVCard()) ;//m_XMPP is an object of type IwodXMPPCom
Kindly let me know where i am going wrong.
Thanks and Regards
Varchas R S
Re: VCard
Hi Varchas,
First you should receive VCard from the server using XMPPVCard object Receive Method.
More help for Receive Method you can find here:
http://www.weonlydo.com/XMPP/Help/WODXMPPLib~XMPPVCard~Receive.html
Then in VCardDetails Event you can receive VCard details.
[code]debug.print Contact.VCard.NickName[/code]
You can find here list of VCard details you can receive:
http://www.weonlydo.com/XMPP/Help/WODXMPPLib~XMPPVCard.html
Let us know how it goes.
Regards,
Drazen
Re: VCard
Hello Drazen,
All those references are either in C# or in VB. I do not know the corresponding code or it doesnt seem to work.
This is what I tried
IXMPPVCard mycard ;
mycard.AttachDispatch(m_XMPP.GetVCard()) ;
mycard.Receive() ;
I am using gmail to test the application.
After calling Receive(), I do not get any VCardDetails event fired. Kindly let me know if the C++ code what I am trying is correct.
Thanks a ton for your help.
Do let me know.
Regards
Varchas R S
Hi Varchas,
First you should receive VCard from the server using XMPPVCard object Receive Method.More help for Receive Method you can find here:
http://www.weonlydo.com/XMPP/Help/WODXMPPLib~XMPPVCard~Receive.htmlThen in VCardDetails Event you can receive VCard details.
[code]debug.print Contact.VCard.NickName[/code]
You can find here list of VCard details you can receive:
http://www.weonlydo.com/XMPP/Help/WODXMPPLib~XMPPVCard.htmlLet us know how it goes.
Regards,
Drazen
Re: VCard
Hi. I used our Samples\VC\Component\MFC and I used this code to obtain first contact's VCard:[code] IXMPPContacts cnts;
cnts.AttachDispatch(m_XMPP.GetContacts(), TRUE);
VARIANT var;
var.vt = VT_I2;
var.iVal = 0;
IXMPPContact cnt;
cnt.AttachDispatch(cnts.GetItem(var), TRUE);
IXMPPVCard vcard;
vcard.AttachDispatch(cnt.GetVCard(), TRUE);
vcard.Receive();[/code]
Hope this helps!
Kreso
Re: VCard
Hello Kreso,
I actually want the vcard of the currently logged in user. Say xyz@gmail.com is logged in. I want the vcard of xyz@gmail.com. The code snippet you have shown works for xyz@gmail.com's contact. But I need to know how to get my own vcard. What is wrong in my approach?
Kindly let me know.
Thanks and Regards
Varchas R S
Re: VCard
Varchas,
Can you please update to latest version and use your previous code:
[code]IXMPPVCard mycard ;
mycard.AttachDispatch(m_XMPP.GetVCard()) ;
mycard.Receive() ; [/code]
Seems there was a small bug with gmail contacts, where server replied with Feature not implemented for some reason.
The latest version should resolve this problem.
Can you please update and try it out?
Regards,
Damba
Re: VCard
Hello Damba,
Now after installing the latest 1.3.3 version, I do get the VCardDetails function, but this is the code I am calling inside
void CJabberVC6Dlg::XMPP_VCardDetails(LPDISPATCH Contact, BOOL Partial)
{
IXMPPContact cnt;
cnt.AttachDispatch(Contact) ;
IXMPPVCard myvcard ;
myvcard.AttachDispatch(cnt.GetVCard()) ;
AfxMessageBox(myvcard.GetJid()) ;
}
The GetJid() returns and so no information is present. Is the code in that function correct?
Thanks for the help. We are almost there :)
Regards
Varchas R S
Varchas,
Can you please update to latest version and use your previous code:
[code]IXMPPVCard mycard ;
mycard.AttachDispatch(m_XMPP.GetVCard()) ;
mycard.Receive() ; [/code]Seems there was a small bug with gmail contacts, where server replied with Feature not implemented for some reason.
The latest version should resolve this problem.
Can you please update and try it out?
Regards,
Damba
Re: VCard
Hi.
This is not a bug actually, since JID returns parser XMPPID tag that can be found in VCard. If this tag is empty, then empty string was returned.
However, I agree it makes sense for it to contain JID in all cases, so I have add the code to put JID that is known from before to JID property in case it's not provided by the server.
So, please download update and try it out.
Kind regards,
Kreso
Re: VCard
Where do i get the update from? I treid fetching the email using getemail() but that also returned . So do I have to fill in the VCard like nickname, etc etc and use the function mycard.Send() to update it onto the server and then retrieve it when ever I want?
Thanks and Regards
Varchas R S
Hi.
This is not a bug actually, since JID returns parser XMPPID tag that can be found in VCard. If this tag is empty, then empty string was returned.However, I agree it makes sense for it to contain JID in all cases, so I have add the code to put JID that is known from before to JID property in case it's not provided by the server.
So, please download update and try it out.
Kind regards,
Kreso
Re: VCard
Hi. If you're our licensed user then request update form http://www.weonlydo.com/index.asp?update=1 , otherwise just download the evaluation again.
As for other properties being empty - it's because server doesn't have that information and does not provide it to us as well. In theory, all properties could be empty.
Regards,
Kreso
Re: VCard
how do i use the vcard object that is returned in the xmpp vcard event sink? i mean the GetPhoto object returned is an LDISPATCH one. so how do i use this in the code to return the picture of the contact?
Re: VCard
Sapna,
hi. It contains IPictureDisp type, so you can use whatever is related to that interface. For example, I found this URL for displaying the picture:
http://www.experts-exchange.com/Programming/Languages/CPP/Q_10118014.html
you can also access PhotoData through SAFEARRAY to contain actual image bytes.
Regards,
Kreso
Re: VCard
[code] void CViaClientDlg::XMPP_VCardDetails(LPDISPATCH Contact, BOOL Partial)
{
IXMPPContact cnt;
cnt.AttachDispatch(Contact);
IXMPPVCard contactVcard ;
cnt.AttachDispatch(contactVcard.GetPhoto()) ;
}[/code]
is this correct? what does it return? and where should i check for the returned value? because i don't know what to do or what variable stores the picture data. what more should i add and what should i remove?
thanks,
sapna
Re: VCard
No, that's not it. It is of IPictureDisp type. If you refer to experts-exchange link I provided you can see sample there, something like [code]void CViaClientDlg::XMPP_VCardDetails(LPDISPATCH Contact, BOOL Partial)
{
IXMPPContact cnt;
cnt.AttachDispatch(Contact);
IXMPPVCard vc;
vc.AttachDispatch(Contact.GetVCard()) ;
CPictureHolder foo;
foo.SetPictureDispatch(vc.GetPhoto());
}
[/code]
I didn't test it but I don't see why this wouldn't work.
Kreso
Re: VCard
do i have to use foo.Render with that? to display the picture?
Re: VCard
It's up to you what you will do with it. You can use MFC's Render to display it, or you can obtain image data from PhotoData property and display it using some other library, such as CXImage which I use in Wippien.
Kreso
Re: VCard
Sapna,
Can you please try this:
[code]IXMPPVCard mycard;
mycard.AttachDispatch(m_XMPP.GetVCard());
mycard.Receive();[/code]
Use the above code to retrieve VCard, and use this in VCardDetails Event:
[code]IXMPPContact cnt;
cnt.AttachDispatch(Contact) ;
IXMPPVCard myvcard ;
myvcard.AttachDispatch(cnt.GetVCard()) ;
AfxMessageBox(myvcard.GetJid());[/code]
Regards,
Damba
Re: VCard
Sapna,
Can you please try this:
[code]IXMPPVCard mycard;
mycard.AttachDispatch(m_XMPP.GetVCard());
mycard.Receive();[/code]Use the above code to retrieve VCard, and use this in VCardDetails Event:
[code]IXMPPContact cnt;
cnt.AttachDispatch(Contact) ;
//contact returns null if the picture is not present in the vcard
IXMPPVCard myvcard ;
myvcard.AttachDispatch(cnt.GetVCard()) ;AfxMessageBox(myvcard.GetJid());
//this code does not return anything because the myvcard does not have anything other than the picture. myvcard.GetJid() returns null
[/code]Regards,
Damba