summaryrefslogtreecommitdiffstats
path: root/kopete/protocols/jabber/jabberresourcepool.h
blob: 65bc5e87021e3e725f0cd5d5c765f943f3f1c15f (plain)
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
130
 /*
  * jabberresourcepool.h
  *
  * Copyright (c) 2004 by Till Gerken <[email protected]>
  * Copyright (c) 2006 by Michaël Larouche <[email protected]>
  *
  * Kopete    (c) by the Kopete developers  <[email protected]>
  *
  * *************************************************************************
  * *                                                                       *
  * * 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 <[email protected]>
 * @author Michaël Larouche <[email protected]>
 */
class JabberResourcePool : public TQObject
{
	TQ_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