|
1 /* |
|
2 * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: The cache stores a single array of this type. |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 #include <s32strm.h> |
|
20 #include <ximpidentity.h> |
|
21 #include <presencebuddyinfo.h> |
|
22 |
|
23 #include "presencecacheservicestore.h" |
|
24 #include "presencecachebuddystore.h" |
|
25 #include "ximpidentityimp.h" |
|
26 #include "ximptrace.h" |
|
27 |
|
28 // --------------------------------------------------------------------------- |
|
29 // CPresenceCacheServiceStore::NewLC() |
|
30 // --------------------------------------------------------------------------- |
|
31 // |
|
32 EXPORT_C CPresenceCacheServiceStore* CPresenceCacheServiceStore::NewLC() |
|
33 { |
|
34 CPresenceCacheServiceStore* self = new( ELeave ) CPresenceCacheServiceStore; |
|
35 CleanupStack::PushL( self ); |
|
36 self->ConstructL(); |
|
37 return self; |
|
38 } |
|
39 |
|
40 // --------------------------------------------------------------------------- |
|
41 // CPresenceCacheServiceStore::NewL() |
|
42 // --------------------------------------------------------------------------- |
|
43 // |
|
44 EXPORT_C CPresenceCacheServiceStore* CPresenceCacheServiceStore::NewL() |
|
45 { |
|
46 CPresenceCacheServiceStore* self = NewLC(); |
|
47 CleanupStack::Pop( self ); |
|
48 return self; |
|
49 } |
|
50 |
|
51 // --------------------------------------------------------------------------- |
|
52 // CPresenceCacheServiceStore::~CPresenceCacheServiceStore() |
|
53 // --------------------------------------------------------------------------- |
|
54 // |
|
55 CPresenceCacheServiceStore::~CPresenceCacheServiceStore() |
|
56 { |
|
57 TInt count = iBuddyStoreCollection.Count(); |
|
58 for (TInt i=0;i<count;i++) |
|
59 { |
|
60 delete iBuddyStoreCollection[i]; |
|
61 } |
|
62 iBuddyStoreCollection.Close(); |
|
63 if(iServiceName) |
|
64 delete iServiceName; |
|
65 } |
|
66 |
|
67 // --------------------------------------------------------------------------- |
|
68 // CPresenceCacheServiceStore::CPresenceCacheServiceStore() |
|
69 // --------------------------------------------------------------------------- |
|
70 // |
|
71 CPresenceCacheServiceStore::CPresenceCacheServiceStore(): iServiceName(NULL) |
|
72 { |
|
73 } |
|
74 |
|
75 // --------------------------------------------------------------------------- |
|
76 // CPresenceCacheServiceStore::ConstructL() |
|
77 // --------------------------------------------------------------------------- |
|
78 // |
|
79 void CPresenceCacheServiceStore::ConstructL() |
|
80 { |
|
81 } |
|
82 |
|
83 // --------------------------------------------------------------------------- |
|
84 // CPresenceCacheServiceStore::SetServiceNameL() |
|
85 // --------------------------------------------------------------------------- |
|
86 // |
|
87 void CPresenceCacheServiceStore::SetServiceNameL(TDesC& aServiceName) |
|
88 { |
|
89 if(iServiceName) |
|
90 { |
|
91 delete iServiceName; |
|
92 iServiceName = NULL; |
|
93 } |
|
94 iServiceName = aServiceName.AllocL(); |
|
95 } |
|
96 |
|
97 // --------------------------------------------------------------------------- |
|
98 // CPresenceCacheServiceStore::GetObjectCollection() |
|
99 // --------------------------------------------------------------------------- |
|
100 // |
|
101 RPointerArray<CPresenceCacheBuddyStore>& CPresenceCacheServiceStore::GetObjectCollection() |
|
102 { |
|
103 return iBuddyStoreCollection; |
|
104 } |
|
105 |
|
106 // --------------------------------------------------------------------------- |
|
107 // CPresenceCacheServiceStore::ServiceName() |
|
108 // --------------------------------------------------------------------------- |
|
109 // |
|
110 TPtrC CPresenceCacheServiceStore::ServiceName() const |
|
111 { |
|
112 return *iServiceName; |
|
113 } |
|
114 |
|
115 // --------------------------------------------------------------------------- |
|
116 // CPresenceCacheServiceStore::Count() |
|
117 // --------------------------------------------------------------------------- |
|
118 // |
|
119 TInt CPresenceCacheServiceStore::Count() const |
|
120 { |
|
121 return iBuddyStoreCollection.Count(); |
|
122 } |
|
123 |
|
124 // --------------------------------------------------------------------------- |
|
125 // CPresenceCacheServiceStore::PresenceCount() |
|
126 // --------------------------------------------------------------------------- |
|
127 // |
|
128 TInt CPresenceCacheServiceStore::PresenceCount() const |
|
129 { |
|
130 return iPresenceCount; |
|
131 } |
|
132 |
|
133 // --------------------------------------------------------------------------- |
|
134 // CPresenceCacheServiceStore::AddBlind() |
|
135 // --------------------------------------------------------------------------- |
|
136 // |
|
137 TInt CPresenceCacheServiceStore::AddBlind(CPresenceCacheBuddyStore* aBuddyStore) |
|
138 { |
|
139 TRACE( _L("CPresenceCacheServiceStore::AddBlind - begin") ); |
|
140 TRACE_1( _L("______identity: %S"), &(aBuddyStore->BuddyId()->Identity())); |
|
141 |
|
142 if(!aBuddyStore) |
|
143 return KErrArgument; |
|
144 |
|
145 iBuddyStoreCollection.Append(aBuddyStore); |
|
146 |
|
147 // now update the presence count |
|
148 if(aBuddyStore->HasPresence()) |
|
149 { |
|
150 iPresenceCount++; |
|
151 } |
|
152 |
|
153 TRACE( _L("CPresenceCacheServiceStore::AddBlind - return")); |
|
154 return KErrNone; |
|
155 } |
|
156 |
|
157 |
|
158 // --------------------------------------------------------------------------- |
|
159 // CPresenceCacheServiceStore::AddOrReplacePresenceL() |
|
160 // --------------------------------------------------------------------------- |
|
161 // |
|
162 CPresenceCacheBuddyStore* CPresenceCacheServiceStore::AddOrReplacePresenceL |
|
163 (MPresenceBuddyInfo* aBuddyPresInfo) |
|
164 { |
|
165 TRACE( _L("CPresenceCacheServiceStore::AddOrReplacePresence - begin") ); |
|
166 TRACE_1( _L("______identity: %S"), &(aBuddyPresInfo->BuddyId()->Identity())); |
|
167 |
|
168 |
|
169 CPresenceCacheBuddyStore* newBuddyStore(NULL); |
|
170 if(!aBuddyPresInfo) |
|
171 return newBuddyStore; |
|
172 |
|
173 TBool oldPresExists(EFalse); |
|
174 |
|
175 TInt count = iBuddyStoreCollection.Count(); |
|
176 for(TInt i=0;i<count;i++) |
|
177 { |
|
178 if( (iBuddyStoreCollection[i])->EqualsIdentity(aBuddyPresInfo) ) |
|
179 { |
|
180 oldPresExists = (iBuddyStoreCollection[i])->HasPresence(); |
|
181 iBuddyStoreCollection[i]->SetPresenceBuddyInfo(aBuddyPresInfo); |
|
182 newBuddyStore = iBuddyStoreCollection[i]; |
|
183 TRACE( _L("_________Match found") ); |
|
184 break; |
|
185 } |
|
186 } |
|
187 |
|
188 //if not edited, we need to add a new buddy store |
|
189 if(!newBuddyStore) |
|
190 { |
|
191 MXIMPIdentity* id = CXIMPIdentityImp::NewLC(aBuddyPresInfo->BuddyId()->Identity()); |
|
192 newBuddyStore = CPresenceCacheBuddyStore::NewLC(this,id); |
|
193 newBuddyStore->SetPresenceBuddyInfo(aBuddyPresInfo); |
|
194 iBuddyStoreCollection.Append(newBuddyStore); |
|
195 CleanupStack::Pop(newBuddyStore); //newBuddyStore |
|
196 CleanupStack::Pop(1); //id |
|
197 } |
|
198 |
|
199 // new presence is certainly added, check whether it was existed |
|
200 if(!oldPresExists) |
|
201 { |
|
202 iPresenceCount++; |
|
203 } |
|
204 |
|
205 TRACE( _L("CPresenceCacheServiceStore::AddOrReplacePresence - return")); |
|
206 return newBuddyStore; |
|
207 } |
|
208 |
|
209 |
|
210 // --------------------------------------------------------------------------- |
|
211 // CPresenceCacheServiceStore::RemoveBlind() |
|
212 // --------------------------------------------------------------------------- |
|
213 // |
|
214 void CPresenceCacheServiceStore::RemoveBlind(CPresenceCacheBuddyStore* aPresenceBuddyInfo) |
|
215 { |
|
216 TInt index = iBuddyStoreCollection.Find(aPresenceBuddyInfo); |
|
217 if(index>-1) |
|
218 { |
|
219 delete iBuddyStoreCollection[index]; |
|
220 iBuddyStoreCollection.Remove(index); |
|
221 } |
|
222 } |
|
223 |
|
224 // --------------------------------------------------------------------------- |
|
225 // CPresenceCacheServiceStore::FindAndRemove() |
|
226 // --------------------------------------------------------------------------- |
|
227 // |
|
228 CPresenceCacheBuddyStore* CPresenceCacheServiceStore::FindAndRemove |
|
229 (const MXIMPIdentity& aIdentity, TInt& aErr) |
|
230 { |
|
231 TRACE( _L("CPresenceCacheServiceStore::FindAndRemove - begin") ); |
|
232 TRACE_1( _L("______identity: %S"), &(aIdentity.Identity())); |
|
233 TBool oldPresExists(EFalse); |
|
234 CPresenceCacheBuddyStore* buddyStore(NULL); |
|
235 aErr = KErrNotFound; |
|
236 |
|
237 TInt count = iBuddyStoreCollection.Count(); |
|
238 for(TInt i=0;i<count;i++) |
|
239 { |
|
240 if( (iBuddyStoreCollection[i])->EqualsIdentity(aIdentity) ) |
|
241 { |
|
242 oldPresExists = (iBuddyStoreCollection[i])->HasPresence(); |
|
243 |
|
244 //only delete presence if there are subscribers |
|
245 if((iBuddyStoreCollection[i])->HasSubscribers()) |
|
246 { |
|
247 (iBuddyStoreCollection[i])->SetPresenceBuddyInfo(NULL); |
|
248 buddyStore = iBuddyStoreCollection[i]; |
|
249 } |
|
250 else //if there are no subscribers remove the whole package |
|
251 { |
|
252 delete iBuddyStoreCollection[i]; |
|
253 iBuddyStoreCollection.Remove(i); |
|
254 } |
|
255 break; |
|
256 } |
|
257 } |
|
258 |
|
259 // update presence info counts |
|
260 if(oldPresExists) |
|
261 { |
|
262 iPresenceCount--; |
|
263 aErr = KErrNone; |
|
264 } |
|
265 |
|
266 TRACE_1( _L("CPresenceCacheServiceStore::FindAndRemove - buddyStore=%d"),buddyStore ); |
|
267 return buddyStore; |
|
268 } |
|
269 |
|
270 // --------------------------------------------------------------------------- |
|
271 // CPresenceCacheServiceStore::FindAndGet() |
|
272 // --------------------------------------------------------------------------- |
|
273 // |
|
274 CPresenceCacheBuddyStore* CPresenceCacheServiceStore::FindAndGet( |
|
275 const MXIMPIdentity& aIdentity) const |
|
276 { |
|
277 TRACE( _L("CPresenceCacheServiceStore::FindAndGet - begin") ); |
|
278 TRACE_1( _L("______identity: %S"), &(aIdentity.Identity())); |
|
279 CPresenceCacheBuddyStore* buddyStore(NULL); |
|
280 |
|
281 TInt count = iBuddyStoreCollection.Count(); |
|
282 for(TInt i=0;i<count;i++) |
|
283 { |
|
284 if( (iBuddyStoreCollection[i])->EqualsIdentity(aIdentity)) |
|
285 { |
|
286 buddyStore = iBuddyStoreCollection[i]; |
|
287 break; |
|
288 } |
|
289 } |
|
290 TRACE_1( _L("CPresenceCacheServiceStore::FindAndGet - buddyStore=%d"),buddyStore ); |
|
291 return buddyStore; |
|
292 } |
|
293 |
|
294 // --------------------------------------------------------------------------- |
|
295 // CPresenceCacheServiceStore::RemoveAllPresences() |
|
296 // --------------------------------------------------------------------------- |
|
297 // |
|
298 void CPresenceCacheServiceStore::RemoveAllPresences() |
|
299 { |
|
300 TRACE( _L("CPresenceCacheServiceStore::RemoveAllPresences - begin") ); |
|
301 |
|
302 TInt count = iBuddyStoreCollection.Count(); |
|
303 TRACE_1( _L("______store collection count: %d"), count); |
|
304 for(TInt i=0;i<count;i++) |
|
305 { |
|
306 (iBuddyStoreCollection[i])->RemovePresenceBuddyInfo(); |
|
307 //if it doesnt have subscribers delete this whole object |
|
308 if(!(iBuddyStoreCollection[i]->HasSubscribers())) |
|
309 { |
|
310 delete iBuddyStoreCollection[i]; |
|
311 iBuddyStoreCollection.Remove(i); |
|
312 count--; |
|
313 i--; |
|
314 } |
|
315 } |
|
316 iPresenceCount = 0; |
|
317 TRACE(_L("CPresenceCacheServiceStore::RemoveAllPresences - end")); |
|
318 } |
|
319 |
|
320 // eof |