1 /*
2 userdetailsmanager.cpp - Storage of all user details seen during this session
3
4 Copyright (c) 2004 SUSE Linux AG http://www.suse.com
5
6 Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
7
8 *************************************************************************
9 * *
10 * This library is free software; you can redistribute it and/or *
11 * modify it under the terms of the GNU Lesser General Public *
12 * License as published by the Free Software Foundation; either *
13 * version 2 of the License, or (at your option) any later version. *
14 * *
15 *************************************************************************
16 */
17
18 #include "userdetailsmanager.h"
19
20 #include "client.h"
21 #include "tasks/getdetailstask.h"
22
UserDetailsManager(Client * parent)23 UserDetailsManager::UserDetailsManager(Client *parent)
24 : QObject(parent)
25 , m_client(parent)
26 {
27 }
28
~UserDetailsManager()29 UserDetailsManager::~UserDetailsManager()
30 {
31 }
32
dump(const QStringList & list)33 void UserDetailsManager::dump(const QStringList &list)
34 {
35 for (QStringList::ConstIterator it = list.begin(); it != list.end(); ++it) {
36 m_client->debug(QStringLiteral(" - %1").arg(*it));
37 }
38 }
39
known(const QString & dn)40 bool UserDetailsManager::known(const QString &dn)
41 {
42 if (dn == m_client->userDN()) {
43 return true;
44 }
45 // we always know the local user's details, so don't look them up
46 return m_detailsMap.keys().contains(dn);
47 }
48
details(const QString & dn)49 ContactDetails UserDetailsManager::details(const QString &dn)
50 {
51 // qDebug() << "UserDetailsManager::details() requested for " << dn.toLatin1();
52 return m_detailsMap[ dn ];
53 }
54
knownDNs()55 QStringList UserDetailsManager::knownDNs()
56 {
57 return m_detailsMap.keys();
58 }
59
addDetails(const ContactDetails & details)60 void UserDetailsManager::addDetails(const ContactDetails &details)
61 {
62 // qDebug() << "UserDetailsManager::addDetails, got " << details.dn;
63 m_detailsMap.insert(details.dn, details);
64 /* QStringList keys = m_detailsMap.keys();
65 dump( keys );
66 qDebug( "UserDetailsManager::addContact, pending: " );
67 dump( m_pendingDNs );*/
68 }
69
removeContact(const QString & dn)70 void UserDetailsManager::removeContact(const QString &dn)
71 {
72 m_detailsMap.remove(dn);
73 }
74
requestDetails(const QStringList & dnList,bool onlyUnknown)75 void UserDetailsManager::requestDetails(const QStringList &dnList, bool onlyUnknown)
76 {
77 // build a list of DNs that are not already subject to a pending request
78 QStringList requestList;
79 QStringListIterator it(dnList);
80 while (it.hasNext())
81 {
82 QString dn = it.next();
83 // don't request our own details
84 if (dn == m_client->userDN()) {
85 break;
86 }
87 // don't request details we already have unless the caller specified this
88 if (onlyUnknown && known(dn)) {
89 break;
90 }
91 if (!m_pendingDNs.contains(dn)) {
92 m_client->debug(QStringLiteral("UserDetailsManager::requestDetails - including %1").arg(dn));
93 requestList.append(dn);
94 m_pendingDNs.append(dn);
95 }
96 }
97 if (!requestList.empty()) {
98 GetDetailsTask *gdt = new GetDetailsTask(m_client->rootTask());
99 gdt->userDNs(requestList);
100 connect(gdt, SIGNAL(gotContactUserDetails(GroupWise::ContactDetails)),
101 SLOT(slotReceiveContactDetails(GroupWise::ContactDetails)));
102 // TODO: connect to gdt's finished() signal, check for failures, expand gdt to maintain a list of not found DNs?
103 gdt->go(true);
104 } else {
105 m_client->debug(QStringLiteral("UserDetailsManager::requestDetails - all requested contacts are already available or pending"));
106 }
107 }
108
requestDetails(const QString & dn,bool onlyUnknown)109 void UserDetailsManager::requestDetails(const QString &dn, bool onlyUnknown)
110 {
111 m_client->debug(QStringLiteral("UserDetailsManager::requestDetails for %1").arg(dn));
112 QStringList list;
113 list.append(dn);
114 requestDetails(list, onlyUnknown);
115 }
116
slotReceiveContactDetails(const GroupWise::ContactDetails & details)117 void UserDetailsManager::slotReceiveContactDetails(const GroupWise::ContactDetails &details)
118 {
119 m_client->debug(QStringLiteral("UserDetailsManager::slotReceiveContactDetails()"));
120 m_pendingDNs.removeAll(details.dn);
121 /*client()->userDetailsManager()->*/
122 addDetails(details);
123 qDebug()
124 << " Auth attribute: " << details.authAttribute
125 << " , Away message: " << details.awayMessage
126 << " , CN" << details.cn
127 << " , DN" << details.dn
128 << " , fullName" << details.fullName
129 << " , surname" << details.surname
130 << " , givenname" << details.givenName
131 << " , status" << details.status
132 << endl;
133 //emit temporaryContact( details );
134 emit gotContactDetails(details);
135 }
136