1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
/*
* jabberresourcepool.h
*
* Copyright (c) 2004 by Till Gerken <till@tantalo.net>
* Copyright (c) 2006 by Michaël Larouche <michael.larouche@kdemail.net>
*
* Kopete (c) by the Kopete developers <kopete-devel@kde.org>
*
* *************************************************************************
* * *
* * This program is free software; you can redistribute it and/or modify *
* * it under the terms of the GNU General Public License as published by *
* * the Free Software Foundation; either version 2 of the License, or *
* * (at your option) any later version. *
* * *
* *************************************************************************
*/
#ifndef JABBERRESOURCEPOOL_H
#define JABBERRESOURCEPOOL_H
#include <tqobject.h>
#include <im.h>
class JabberResource;
class JabberAccount;
/**
* @author Till Gerken <till@tantalo.net>
* @author Michaël Larouche <michael.larouche@kdemail.net>
*/
class JabberResourcePool : public QObject
{
Q_OBJECT
public:
static XMPP::Resource EmptyResource;
typedef TQPtrList<JabberResource> ResourceList;
/**
* Default constructor
*/
JabberResourcePool ( JabberAccount *account );
/**
* Default destructor
*/
~JabberResourcePool();
/**
* Notify all relevant contacts in case
* a resource has been added, updated or removed.
*/
void notifyRelevantContacts ( const XMPP::Jid &jid );
/**
* Add a resource to the pool
*/
void addResource ( const XMPP::Jid &jid, const XMPP::Resource &resource );
/**
* Remove a resource from the pool
*/
void removeResource ( const XMPP::Jid &jid, const XMPP::Resource &resource );
/**
* Remove all resources for a given address from the pool
* NOTE: Since this method is mainly used for housekeeping,
* it does NOT notify any contacts.
*/
void removeAllResources ( const XMPP::Jid &jid );
/**
* Remove all resources from the pool
*/
void clear ();
/**
* Lock to a certain resource
*/
void lockToResource ( const XMPP::Jid &jid, const XMPP::Resource &resource );
/**
* Remove a resource lock
*/
void removeLock ( const XMPP::Jid &jid );
/**
* Return the JabberResource instance for the locked resource, if any.
*/
JabberResource *lockedJabberResource( const XMPP::Jid &jid );
/**
* Return currently locked resource, if any
*/
const XMPP::Resource &lockedResource ( const XMPP::Jid &jid );
/**
* Return a usable JabberResource for a given JID.
*
* @param jid Jid to look for the best resource.
* @param honourLock Honour the resource locked by the user.
*
* @return a JabberResource instance.
*/
JabberResource *bestJabberResource( const XMPP::Jid &jid, bool honourLock = true );
/**
* Return usable resource for a given JID
* Matches by userHost(), honours locks for a JID by default
*/
const XMPP::Resource &bestResource ( const XMPP::Jid &jid, bool honourLock = true );
/**
* Find all resources that exist for a given JID
*/
void findResources ( const XMPP::Jid &jid, JabberResourcePool::ResourceList &resourceList );
void findResources ( const XMPP::Jid &jid, XMPP::ResourceList &resourceList );
private slots:
void slotResourceDestroyed ( TQObject *sender );
void slotResourceUpdated ( JabberResource *resource );
private:
class Private;
Private *d;
};
#endif
|