|
1 /* |
|
2 * Copyright (c) 2002 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: |
|
15 * CMsgLogsObserver implementation file |
|
16 * |
|
17 */ |
|
18 |
|
19 |
|
20 |
|
21 // INCLUDE FILES |
|
22 #include <e32base.h> |
|
23 #include <logcli.h> |
|
24 #include <logview.h> |
|
25 #include <mmsconst.h> |
|
26 #include <LogsApiConsts.h> |
|
27 #include <AknGlobalNote.h> |
|
28 |
|
29 #include "MsgErrorWatcher.h" |
|
30 #include "MsgLogsObserver.h" |
|
31 |
|
32 #include "MsgErrorWatcherLogging.h" |
|
33 |
|
34 // CONSTANTS |
|
35 _LIT(KMmsLogEventTypeName, "MMS"); |
|
36 |
|
37 // ================= MEMBER FUNCTIONS ======================= |
|
38 |
|
39 // --------------------------------------------------------- |
|
40 // CMsgLogsObserver::CMsgLogsObserver |
|
41 // |
|
42 // C++ constructor can NOT contain any code, that |
|
43 // might leave. |
|
44 // --------------------------------------------------------- |
|
45 // |
|
46 CMsgLogsObserver::CMsgLogsObserver( CMsgErrorWatcher* aWatcher, RFs& aFs ) |
|
47 : CActive( CActive::EPriorityStandard ), |
|
48 iWatcher( aWatcher ), |
|
49 iFs( aFs ) |
|
50 { |
|
51 CActiveScheduler::Add( this ); |
|
52 } |
|
53 |
|
54 // --------------------------------------------------------- |
|
55 // CMsgLogsObserver::NewL |
|
56 // |
|
57 // Two-phased constructor. |
|
58 // --------------------------------------------------------- |
|
59 // |
|
60 CMsgLogsObserver* CMsgLogsObserver::NewL( CMsgErrorWatcher* aWatcher, RFs& aFs ) |
|
61 { |
|
62 CMsgLogsObserver* self = new ( ELeave ) CMsgLogsObserver( aWatcher, aFs ); |
|
63 |
|
64 CleanupStack::PushL( self ); |
|
65 self->ConstructL(); |
|
66 CleanupStack::Pop( self ); |
|
67 |
|
68 return self; |
|
69 } |
|
70 |
|
71 // --------------------------------------------------------- |
|
72 // CMsgLogsObserver::~CMsgLogsObserver |
|
73 // |
|
74 // Destructor |
|
75 // --------------------------------------------------------- |
|
76 // |
|
77 CMsgLogsObserver::~CMsgLogsObserver() |
|
78 { |
|
79 Cancel(); |
|
80 if (iFilterList) |
|
81 { |
|
82 iFilterList->ResetAndDestroy(); // destroy old log filters |
|
83 } |
|
84 delete iFilterList; |
|
85 delete iLogViewEvent; |
|
86 delete iLogEvent; |
|
87 delete iDummyLogEvent1; |
|
88 delete iDummyLogEvent2; |
|
89 delete iLogClient; |
|
90 delete iLogEventType; |
|
91 |
|
92 } |
|
93 |
|
94 // --------------------------------------------------------- |
|
95 // CMsgLogsObserver::ConstructL() |
|
96 // |
|
97 // Symbian OS default constructor can leave. |
|
98 // --------------------------------------------------------- |
|
99 // |
|
100 void CMsgLogsObserver::ConstructL() |
|
101 { |
|
102 iLogClient = CLogClient::NewL( iFs ); |
|
103 iLogEvent = CLogEvent::NewL(); |
|
104 |
|
105 iLogViewEvent = CLogViewEvent::NewL( *iLogClient, *this ); |
|
106 iFilterList = new ( ELeave ) CLogFilterList(); |
|
107 iLogClient->GetString( iDelivered, R_LOG_DEL_DONE ); |
|
108 |
|
109 |
|
110 //AddNewEventType for dummy event |
|
111 AddEventTypeL(); |
|
112 } |
|
113 |
|
114 // --------------------------------------------------------- |
|
115 // CMsgLogsObserver::AppendFiltersL |
|
116 // --------------------------------------------------------- |
|
117 // |
|
118 void CMsgLogsObserver::AppendFiltersL() |
|
119 { |
|
120 CLogFilter* filter; |
|
121 |
|
122 /// Event Type: MMS |
|
123 /// Status: Delivered |
|
124 filter = CLogFilter::NewL(); |
|
125 CleanupStack::PushL( filter ); |
|
126 filter->SetEventType( KLogMmsEventTypeUid ); |
|
127 filter->SetStatus( iDelivered ); |
|
128 iFilterList->AppendL( filter ); |
|
129 CleanupStack::Pop(); //filter |
|
130 |
|
131 // Event Type: MMS |
|
132 // Status: Read |
|
133 filter = CLogFilter::NewL(); |
|
134 CleanupStack::PushL( filter ); |
|
135 filter->SetEventType( KLogMmsEventTypeUid ); |
|
136 filter->SetStatus( KLogsMsgReadText ); |
|
137 iFilterList->AppendL( filter ); |
|
138 CleanupStack::Pop(); //filter |
|
139 return; |
|
140 } |
|
141 |
|
142 // --------------------------------------------------------- |
|
143 // CMsgLogsObserver::CreateFiltersL |
|
144 // --------------------------------------------------------- |
|
145 // |
|
146 void CMsgLogsObserver::CreateFiltersL() |
|
147 { |
|
148 MEWLOGGER_WRITE( "CreateFiltersL()" ); |
|
149 iState = EMsgLogsCreatingFilters; |
|
150 AppendFiltersL(); |
|
151 if( !IsActive() ) |
|
152 { |
|
153 if ( iLogViewEvent->SetFilterL( *iFilterList, iStatus ) ) |
|
154 { |
|
155 MEWLOGGER_WRITE( "Setting filter succesfully started" ); |
|
156 SetActive(); |
|
157 } |
|
158 else |
|
159 { |
|
160 MEWLOGGER_WRITE( "Setting filter: CompleteSelf();" ); |
|
161 CompleteSelf(); |
|
162 } |
|
163 } |
|
164 } |
|
165 |
|
166 // --------------------------------------------------------- |
|
167 // CMsgLogsObserver::DoCancel |
|
168 // |
|
169 // From active object framework |
|
170 // --------------------------------------------------------- |
|
171 // |
|
172 void CMsgLogsObserver::DoCancel() |
|
173 { |
|
174 if ( iLogViewEvent ) |
|
175 { |
|
176 iLogViewEvent->Cancel(); |
|
177 } |
|
178 if ( iLogClient ) |
|
179 { |
|
180 iLogClient->Cancel(); |
|
181 } |
|
182 } |
|
183 |
|
184 // --------------------------------------------------------- |
|
185 // CMsgLogsObserver::RunL |
|
186 // |
|
187 // From active object framework |
|
188 // --------------------------------------------------------- |
|
189 // |
|
190 void CMsgLogsObserver::RunL() |
|
191 { |
|
192 switch ( iState ) |
|
193 { |
|
194 case EMsgLogsIdle: |
|
195 MEWLOGGER_WRITE( "Idle state in RunL" ); |
|
196 break; |
|
197 case EMsgLogsGettingEvent: |
|
198 { |
|
199 MEWLOGGER_WRITE( "call ShowNoteL() in RunL" ); |
|
200 TRAP_IGNORE( ShowNoteL() ); |
|
201 iState = EMsgLogsIdle; |
|
202 break; |
|
203 } |
|
204 case EMsgLogsDeletingDummyEvent1: |
|
205 MEWLOGGER_WRITE( "call DeleteDummyEvent2() in RunL" ); |
|
206 DeleteDummyEvent2(); |
|
207 break; |
|
208 case EMsgLogsDeletingDummyEvent2: |
|
209 iState = EMsgLogsIdle; |
|
210 break; |
|
211 case EMsgLogsCreatingFilters: |
|
212 MEWLOGGER_WRITE( "call DeleteDummyEvent1() in RunL" ); |
|
213 DeleteDummyEvent1(); |
|
214 break; |
|
215 case EMsgLogsAddingEventType: |
|
216 //Event type already exists |
|
217 if ( iStatus.Int() == KErrAlreadyExists) |
|
218 { |
|
219 MEWLOGGER_WRITE( "Event type already exists in RunL" ); |
|
220 //No need to create any dummy entrys |
|
221 //This not first boot |
|
222 iState = EMsgLogsAddingDummyEvent2; |
|
223 CompleteSelf(); |
|
224 } |
|
225 else |
|
226 { |
|
227 MEWLOGGER_WRITE( "call AddDummyEvent1L() in RunL" ); |
|
228 TRAP_IGNORE( AddDummyEvent1L() ); |
|
229 } |
|
230 break; |
|
231 case EMsgLogsAddingDummyEvent1: |
|
232 MEWLOGGER_WRITE( "call AddDummyEvent2L() in RunL" ); |
|
233 TRAP_IGNORE( AddDummyEvent2L() ); |
|
234 break; |
|
235 case EMsgLogsAddingDummyEvent2: |
|
236 MEWLOGGER_WRITE( "call CreateFiltersL() in RunL" ); |
|
237 TRAP_IGNORE( CreateFiltersL() ); |
|
238 break; |
|
239 default: |
|
240 // Nothing to do but wait. |
|
241 iState = EMsgLogsIdle; |
|
242 break; |
|
243 } |
|
244 } |
|
245 |
|
246 // --------------------------------------------------------- |
|
247 // CMsgLogsObserver::HandleLogViewChangeEventAddedL |
|
248 // --------------------------------------------------------- |
|
249 // |
|
250 void CMsgLogsObserver::HandleLogViewChangeEventAddedL(TLogId aId, TInt /*aViewIndex*/, TInt /*aChangeIndex*/, TInt /*aTotalChangeCount*/) |
|
251 { |
|
252 GetLogEventL( aId ); |
|
253 } |
|
254 |
|
255 // --------------------------------------------------------- |
|
256 // CMsgLogsObserver::HandleLogViewChangeEventChangedL |
|
257 // --------------------------------------------------------- |
|
258 // |
|
259 void CMsgLogsObserver::HandleLogViewChangeEventChangedL(TLogId aId, TInt /*aViewIndex*/, TInt /*aChangeIndex*/, TInt /*aTotalChangeCount*/) |
|
260 { |
|
261 GetLogEventL( aId ); |
|
262 } |
|
263 |
|
264 // --------------------------------------------------------- |
|
265 // CMsgLogsObserver::HandleLogViewChangeEventDeletedL |
|
266 // --------------------------------------------------------- |
|
267 // |
|
268 void CMsgLogsObserver::HandleLogViewChangeEventDeletedL(TLogId /*aId*/, TInt /*aViewIndex*/, TInt /*aChangeIndex*/, TInt /*aTotalChangeCount*/) |
|
269 { |
|
270 // We're not interested. |
|
271 } |
|
272 |
|
273 // --------------------------------------------------------- |
|
274 // CMsgLogsObserver::GetLogEventL |
|
275 // --------------------------------------------------------- |
|
276 // |
|
277 void CMsgLogsObserver::GetLogEventL( TLogId aId ) |
|
278 { |
|
279 if ( !IsActive() ) |
|
280 { |
|
281 iState = EMsgLogsGettingEvent; |
|
282 iLogEvent->SetId( aId ); |
|
283 iLogClient->GetEvent( *iLogEvent, iStatus ); |
|
284 SetActive(); |
|
285 } |
|
286 // else we missed this one! |
|
287 } |
|
288 |
|
289 // --------------------------------------------------------- |
|
290 // CMsgLogsObserver::Delivered |
|
291 // --------------------------------------------------------- |
|
292 // |
|
293 void CMsgLogsObserver::ShowNoteL() |
|
294 { |
|
295 if ( iDelivered.Compare( iLogEvent->Status() ) == 0 && |
|
296 !( iLogEvent->Flags() & KLogEventRead ) ) |
|
297 { |
|
298 iWatcher->ShowDeliveredNoteL( iLogEvent->RemoteParty() ); |
|
299 } |
|
300 else if ( iLogEvent->Status().Compare( KLogsMsgReadText ) == 0 && |
|
301 !( iLogEvent->Flags() & KLogEventRead ) ) |
|
302 { |
|
303 iWatcher->ShowReadNoteL( iLogEvent->RemoteParty() ); |
|
304 } |
|
305 } |
|
306 |
|
307 |
|
308 // --------------------------------------------------------- |
|
309 // CMsgLogsObserver::AddEventTypeL |
|
310 // |
|
311 // --------------------------------------------------------- |
|
312 // |
|
313 void CMsgLogsObserver::AddEventTypeL() |
|
314 { |
|
315 iState = EMsgLogsAddingEventType; |
|
316 if (!IsActive() ) |
|
317 { |
|
318 iLogEventType = CLogEventType::NewL(); |
|
319 iLogEventType->SetUid( KLogMmsEventTypeUid ); |
|
320 iLogEventType->SetDescription( KMmsLogEventTypeName ); |
|
321 iLogEventType->SetLoggingEnabled( ETrue ); |
|
322 iLogClient->AddEventType( *iLogEventType, iStatus ); |
|
323 SetActive(); |
|
324 } |
|
325 } |
|
326 |
|
327 // --------------------------------------------------------- |
|
328 // CMsgLogsObserver::AddDummyEvent1L |
|
329 // |
|
330 // --------------------------------------------------------- |
|
331 // |
|
332 void CMsgLogsObserver::AddDummyEvent1L() |
|
333 { |
|
334 iState = EMsgLogsAddingDummyEvent1; |
|
335 if (!IsActive()) |
|
336 { |
|
337 iDummyLogEvent1 = CLogEvent::NewL(); |
|
338 iDummyLogEvent1->SetEventType( KLogMmsEventTypeUid ); |
|
339 iDummyLogEvent1->SetStatus( iDelivered ); |
|
340 iLogClient->AddEvent( *iDummyLogEvent1, iStatus ); |
|
341 SetActive(); |
|
342 } |
|
343 } |
|
344 |
|
345 |
|
346 // --------------------------------------------------------- |
|
347 // CMsgLogsObserver::AddDummyEvent2L |
|
348 // |
|
349 // --------------------------------------------------------- |
|
350 // |
|
351 void CMsgLogsObserver::AddDummyEvent2L() |
|
352 { |
|
353 iState = EMsgLogsAddingDummyEvent2; |
|
354 if (!IsActive()) |
|
355 { |
|
356 iDummyLogEvent2 = CLogEvent::NewL(); |
|
357 iDummyLogEvent2->SetEventType( KLogMmsEventTypeUid ); |
|
358 iDummyLogEvent2->SetStatus( KLogsMsgReadText ); |
|
359 iLogClient->AddEvent( *iDummyLogEvent2, iStatus ); |
|
360 SetActive(); |
|
361 } |
|
362 } |
|
363 |
|
364 // --------------------------------------------------------- |
|
365 // CMsgLogsObserver::DeleteDummyEvent1 |
|
366 // |
|
367 // --------------------------------------------------------- |
|
368 // |
|
369 void CMsgLogsObserver::DeleteDummyEvent1() |
|
370 { |
|
371 iState = EMsgLogsDeletingDummyEvent1; |
|
372 if (!IsActive() && iDummyLogEvent1 ) |
|
373 { |
|
374 TLogId dummyId = iDummyLogEvent1->Id(); |
|
375 iLogClient->DeleteEvent( dummyId, iStatus ); |
|
376 SetActive(); |
|
377 } |
|
378 else |
|
379 { |
|
380 iState = EMsgLogsIdle; |
|
381 CompleteSelf(); |
|
382 } |
|
383 } |
|
384 |
|
385 // --------------------------------------------------------- |
|
386 // CMsgLogsObserver::DeleteDummyEvent2 |
|
387 // |
|
388 // --------------------------------------------------------- |
|
389 // |
|
390 void CMsgLogsObserver::DeleteDummyEvent2() |
|
391 { |
|
392 iState = EMsgLogsDeletingDummyEvent2; |
|
393 if (!IsActive() && iDummyLogEvent2 ) |
|
394 { |
|
395 TLogId dummyId = iDummyLogEvent2->Id(); |
|
396 iLogClient->DeleteEvent( dummyId, iStatus ); |
|
397 SetActive(); |
|
398 } |
|
399 else |
|
400 { |
|
401 iState = EMsgLogsIdle; |
|
402 CompleteSelf(); |
|
403 } |
|
404 } |
|
405 |
|
406 void CMsgLogsObserver::CompleteSelf() |
|
407 { |
|
408 // If no events complete self to get to RunL() |
|
409 TRequestStatus* status = &iStatus; |
|
410 iStatus = KRequestPending; |
|
411 SetActive(); |
|
412 User::RequestComplete( status, KErrNone ); |
|
413 } |
|
414 |
|
415 // ================= OTHER EXPORTED FUNCTIONS ============== |
|
416 |
|
417 // End of File |