17 #include <e32property.h> |
17 #include <e32property.h> |
18 |
18 |
19 #include "harvesterclient.h" |
19 #include "harvesterclient.h" |
20 #include "harvestercommon.h" |
20 #include "harvestercommon.h" |
21 #include "harvesterrequestqueue.h" |
21 #include "harvesterrequestqueue.h" |
|
22 #include "harvesternotificationqueue.h" |
22 #include "harvestereventobserverao.h" |
23 #include "harvestereventobserverao.h" |
23 #include "harvesterlog.h" |
24 #include "harvesterlog.h" |
24 #include "harvesterclientao.h" |
25 #include "harvesterclientao.h" |
25 #include "harvestersessionwatcher.h" |
26 #include "harvestersessionwatcher.h" |
26 #include "mdsutils.h" |
27 #include "mdsutils.h" |
52 EXPORT_C RHarvesterClient::RHarvesterClient() : RSessionBase() |
53 EXPORT_C RHarvesterClient::RHarvesterClient() : RSessionBase() |
53 { |
54 { |
54 WRITELOG( "RHarvesterClient::RHarvesterClient() - Constructor" ); |
55 WRITELOG( "RHarvesterClient::RHarvesterClient() - Constructor" ); |
55 OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_RHARVESTERCLIENT, "RHarvesterClient::RHarvesterClient" ); |
56 OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_RHARVESTERCLIENT, "RHarvesterClient::RHarvesterClient" ); |
56 |
57 |
57 iHarvesterClientAO = NULL; |
|
58 iObserver = NULL; |
58 iObserver = NULL; |
59 iHEO = NULL; |
59 iHEO = NULL; |
60 iRequestQueue = NULL; |
60 iRequestQueue = NULL; |
|
61 iNotificationQueue = NULL; |
61 } |
62 } |
62 |
63 |
63 // ---------------------------------------------------------------------------------------- |
64 // ---------------------------------------------------------------------------------------- |
64 // Connect |
65 // Connect |
65 // ---------------------------------------------------------------------------------------- |
66 // ---------------------------------------------------------------------------------------- |
66 // |
67 // |
67 EXPORT_C TInt RHarvesterClient::Connect() |
68 EXPORT_C TInt RHarvesterClient::Connect() |
68 { |
69 { |
69 WRITELOG( "RHarvesterClient::Connect()" ); |
70 WRITELOG( "RHarvesterClient::Connect()" ); |
70 OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_CONNECT, "RHarvesterClient::Connect" ); |
71 OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_CONNECT, "RHarvesterClient::Connect" ); |
71 |
|
72 |
72 |
73 RProperty property; |
73 RProperty property; |
74 const TInt error( property.Attach( KHarvesterPSShutdown, KShutdown, EOwnerThread ) ); |
74 const TInt error( property.Attach( KHarvesterPSShutdown, KShutdown, EOwnerThread ) ); |
75 TInt value = 0; |
75 TInt value = 0; |
76 property.Get( value ); |
76 property.Get( value ); |
79 if ( error != KErrNone || value > KErrNone ) |
79 if ( error != KErrNone || value > KErrNone ) |
80 { |
80 { |
81 return KErrLocked; |
81 return KErrLocked; |
82 } |
82 } |
83 |
83 |
84 if( iHarvesterClientAO ) |
84 if( iRequestQueue ) |
85 { |
85 { |
86 return KErrAlreadyExists; |
86 return KErrAlreadyExists; |
87 } |
87 } |
88 |
88 |
89 TRAPD( err, iHarvesterClientAO = CHarvesterClientAO::NewL(*this) ); |
|
90 if ( err != KErrNone ) |
|
91 { |
|
92 WRITELOG( "RHarvesterClient::RHarvesterClient() - Couldn't create active object" ); |
|
93 return err; |
|
94 } |
|
95 |
|
96 // request processor |
89 // request processor |
97 TRAP( err, iRequestQueue = CHarvesterRequestQueue::NewL() ) |
90 TRAPD( err, iRequestQueue = CHarvesterRequestQueue::NewL() ) |
98 { |
91 { |
99 if ( err != KErrNone ) |
92 if ( err != KErrNone ) |
100 { |
93 { |
101 WRITELOG( "RHarvesterClient::RHarvesterClient() - Couldn't create harvester request queue" ); |
94 WRITELOG( "RHarvesterClient::RHarvesterClient() - Couldn't create harvester request queue" ); |
102 delete iHarvesterClientAO; |
95 return err; |
103 iHarvesterClientAO = NULL; |
96 } |
|
97 } |
|
98 |
|
99 // request processor |
|
100 TRAP( err, iNotificationQueue = CHarvesterNotificationQueue::NewL() ) |
|
101 { |
|
102 if ( err != KErrNone ) |
|
103 { |
|
104 WRITELOG( "RHarvesterClient::RHarvesterClient() - Couldn't create harvester notification queue" ); |
|
105 delete iRequestQueue; |
|
106 iRequestQueue = NULL; |
104 return err; |
107 return err; |
105 } |
108 } |
106 } |
109 } |
107 |
110 |
108 err = ::StartServer(); |
111 err = ::StartServer(); |
112 WRITELOG( "RHarvesterClient::Connect() - creating session" ); |
115 WRITELOG( "RHarvesterClient::Connect() - creating session" ); |
113 err = CreateSession( KHarvesterServerName, Version(), KDefaultMessageSlots ); |
116 err = CreateSession( KHarvesterServerName, Version(), KDefaultMessageSlots ); |
114 } |
117 } |
115 else |
118 else |
116 { |
119 { |
117 delete iHarvesterClientAO; |
|
118 iHarvesterClientAO = NULL; |
|
119 delete iRequestQueue; |
120 delete iRequestQueue; |
120 iRequestQueue = NULL; |
121 iRequestQueue = NULL; |
|
122 delete iNotificationQueue; |
|
123 iNotificationQueue = NULL; |
121 } |
124 } |
122 |
125 |
123 #ifdef _DEBUG |
126 #ifdef _DEBUG |
124 if ( err != KErrNone ) |
127 if ( err != KErrNone ) |
125 { |
128 { |
183 delete iSessionWatcher; |
186 delete iSessionWatcher; |
184 iSessionWatcher = NULL; |
187 iSessionWatcher = NULL; |
185 |
188 |
186 // cancels Harvest Complete request if it exist at server |
189 // cancels Harvest Complete request if it exist at server |
187 UnregisterHarvestComplete(); |
190 UnregisterHarvestComplete(); |
|
191 delete iNotificationQueue; |
|
192 iNotificationQueue = NULL; |
188 |
193 |
189 WRITELOG( "RHarvesterClient::Close() - UnregisterHarvest done" ); |
194 WRITELOG( "RHarvesterClient::Close() - UnregisterHarvest done" ); |
190 |
195 |
191 if( iRequestQueue && iRequestQueue->RequestsPending() ) |
196 if( iRequestQueue && iRequestQueue->RequestsPending() ) |
192 { |
197 { |
215 EXPORT_C void RHarvesterClient::SetObserver( MHarvestObserver* aObserver ) |
217 EXPORT_C void RHarvesterClient::SetObserver( MHarvestObserver* aObserver ) |
216 { |
218 { |
217 WRITELOG( "RHarvesterClient::SetObserver()" ); |
219 WRITELOG( "RHarvesterClient::SetObserver()" ); |
218 OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_SETOBSERVER, "RHarvesterClient::SetObserver" ); |
220 OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_SETOBSERVER, "RHarvesterClient::SetObserver" ); |
219 |
221 |
220 if ( iHarvesterClientAO ) |
|
221 { |
|
222 iHarvesterClientAO->SetObserver( aObserver ); |
|
223 } |
|
224 iObserver = aObserver; |
222 iObserver = aObserver; |
|
223 iNotificationQueue->SetObserver( iObserver ); |
225 } |
224 } |
226 |
225 |
227 // ---------------------------------------------------------------------------------------- |
226 // ---------------------------------------------------------------------------------------- |
228 // RemoveObserver |
227 // RemoveObserver |
229 // ---------------------------------------------------------------------------------------- |
228 // ---------------------------------------------------------------------------------------- |
231 EXPORT_C void RHarvesterClient::RemoveObserver( MHarvestObserver* aObserver ) |
230 EXPORT_C void RHarvesterClient::RemoveObserver( MHarvestObserver* aObserver ) |
232 { |
231 { |
233 WRITELOG( "RHarvesterClient::RemoveObserver()" ); |
232 WRITELOG( "RHarvesterClient::RemoveObserver()" ); |
234 OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_REMOVEOBSERVER, "RHarvesterClient::RemoveObserver" ); |
233 OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_REMOVEOBSERVER, "RHarvesterClient::RemoveObserver" ); |
235 |
234 |
236 if ( iHarvesterClientAO ) |
|
237 { |
|
238 iHarvesterClientAO->RemoveObserver( aObserver ); |
|
239 } |
|
240 |
|
241 if ( aObserver == iObserver ) |
235 if ( aObserver == iObserver ) |
242 { |
236 { |
243 if ( iObserver ) |
237 WRITELOG( "RHarvesterClient::RemoveObserver() - deleting observer" ); |
244 { |
238 iObserver = NULL; |
245 WRITELOG( "CHarvesterClientAO::RemoveObserver() - deleting observer" ); |
239 iNotificationQueue->SetObserver( iObserver ); |
246 iObserver = NULL; |
|
247 } |
|
248 } |
240 } |
249 } |
241 } |
250 |
242 |
251 // ---------------------------------------------------------------------------------------- |
243 // ---------------------------------------------------------------------------------------- |
252 // AddHarvesterEventObserver |
244 // AddHarvesterEventObserver |
298 EXPORT_C void RHarvesterClient::HarvestFile( const TDesC& aURI, RArray<TItemId>& aAlbumIds, TBool aAddLocation ) |
290 EXPORT_C void RHarvesterClient::HarvestFile( const TDesC& aURI, RArray<TItemId>& aAlbumIds, TBool aAddLocation ) |
299 { |
291 { |
300 WRITELOG1( "RHarvesterClient::HarvestFile() - file %S", &aURI ); |
292 WRITELOG1( "RHarvesterClient::HarvestFile() - file %S", &aURI ); |
301 OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_HARVESTFILE, "RHarvesterClient::HarvestFile" ); |
293 OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_HARVESTFILE, "RHarvesterClient::HarvestFile" ); |
302 |
294 |
303 |
|
304 HBufC8* paramBuf = NULL; |
295 HBufC8* paramBuf = NULL; |
305 TRAPD( err, paramBuf = SerializeArrayL( aAlbumIds ) ); |
296 TRAPD( err, paramBuf = SerializeArrayL( aAlbumIds ) ); |
306 if ( err ) |
297 if ( err ) |
307 { |
298 { |
308 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot create serialized array, error: %d", err ); |
299 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot create serialized array, error: %d", err ); |
312 } |
303 } |
313 return; |
304 return; |
314 } |
305 } |
315 |
306 |
316 CHarvesterRequestActive* harvestFileActive( NULL ); |
307 CHarvesterRequestActive* harvestFileActive( NULL ); |
317 TRAP( err, harvestFileActive = CHarvesterRequestActive::NewL( *this, iObserver, (TInt)EHarvestFile, aURI, |
308 TRAP( err, harvestFileActive = CHarvesterRequestActive::NewL( *this, (TInt)EHarvestFile, aURI, |
318 paramBuf, aAddLocation, iRequestQueue ) ); |
309 paramBuf, aAddLocation, iRequestQueue ) ); |
319 if( err ) |
310 if( err ) |
320 { |
311 { |
321 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot create harvesting request, error: %d", err ); |
312 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot create harvesting request, error: %d", err ); |
322 if( iObserver ) |
313 if( iObserver ) |
333 if( err && iObserver) |
324 if( err && iObserver) |
334 { |
325 { |
335 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy ); |
326 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy ); |
336 iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrServerBusy ); |
327 iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrServerBusy ); |
337 delete harvestFileActive; |
328 delete harvestFileActive; |
|
329 harvestFileActive = NULL; |
338 } |
330 } |
339 else if( err ) |
331 else if( err ) |
340 { |
332 { |
341 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy ); |
333 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy ); |
342 delete harvestFileActive; |
334 delete harvestFileActive; |
|
335 harvestFileActive = NULL; |
343 } |
336 } |
344 else |
337 else |
345 { |
338 { |
346 WRITELOG( "RHarvesterClient::HarvestFile() - harvesting request added to queue" ); |
339 WRITELOG( "RHarvesterClient::HarvestFile() - harvesting request added to queue" ); |
347 iRequestQueue->Process(); |
340 iRequestQueue->Process(); |
350 else if( iObserver ) |
343 else if( iObserver ) |
351 { |
344 { |
352 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected ); |
345 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected ); |
353 iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrDisconnected ); |
346 iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrDisconnected ); |
354 delete harvestFileActive; |
347 delete harvestFileActive; |
|
348 harvestFileActive = NULL; |
355 } |
349 } |
356 else |
350 else |
357 { |
351 { |
358 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected ); |
352 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected ); |
359 delete harvestFileActive; |
353 delete harvestFileActive; |
|
354 harvestFileActive = NULL; |
360 } |
355 } |
361 WRITELOG( "RHarvesterClient::HarvestFile() - end" ); |
356 WRITELOG( "RHarvesterClient::HarvestFile() - end" ); |
362 } |
357 } |
363 |
358 |
364 // ---------------------------------------------------------------------------------------- |
359 // ---------------------------------------------------------------------------------------- |
385 } |
380 } |
386 return; |
381 return; |
387 } |
382 } |
388 |
383 |
389 CHarvesterRequestActive* harvestFileActive( NULL ); |
384 CHarvesterRequestActive* harvestFileActive( NULL ); |
390 TRAP( err, harvestFileActive = CHarvesterRequestActive::NewL( *this, iObserver, (TInt)EHarvestFile, aURI, |
385 TRAP( err, harvestFileActive = CHarvesterRequestActive::NewL( *this, (TInt)EHarvestFile, aURI, |
391 paramBuf, aAddLocation, iRequestQueue ) ); |
386 paramBuf, aAddLocation, iRequestQueue ) ); |
392 if( err ) |
387 if( err ) |
393 { |
388 { |
394 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot create harvesting request, error: %d", err ); |
389 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot create harvesting request, error: %d", err ); |
395 if( iObserver ) |
390 if( iObserver ) |
406 if( err && iObserver) |
401 if( err && iObserver) |
407 { |
402 { |
408 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy ); |
403 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy ); |
409 iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrServerBusy ); |
404 iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrServerBusy ); |
410 delete harvestFileActive; |
405 delete harvestFileActive; |
|
406 harvestFileActive = NULL; |
411 } |
407 } |
412 else if( err ) |
408 else if( err ) |
413 { |
409 { |
414 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy ); |
410 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy ); |
415 delete harvestFileActive; |
411 delete harvestFileActive; |
|
412 harvestFileActive = NULL; |
416 } |
413 } |
417 else |
414 else |
418 { |
415 { |
419 iRequestQueue->Process(); |
416 iRequestQueue->Process(); |
420 } |
417 } |
422 else if( iObserver ) |
419 else if( iObserver ) |
423 { |
420 { |
424 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected ); |
421 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected ); |
425 iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrDisconnected ); |
422 iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrDisconnected ); |
426 delete harvestFileActive; |
423 delete harvestFileActive; |
|
424 harvestFileActive = NULL; |
427 } |
425 } |
428 else |
426 else |
429 { |
427 { |
430 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected ); |
428 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected ); |
431 delete harvestFileActive; |
429 delete harvestFileActive; |
|
430 harvestFileActive = NULL; |
432 } |
431 } |
433 } |
432 } |
434 |
433 |
435 // ---------------------------------------------------------------------------------------- |
434 // ---------------------------------------------------------------------------------------- |
436 // AddSessionObserver |
435 // AddSessionObserver |
486 if( !iHandle ) |
484 if( !iHandle ) |
487 { |
485 { |
488 return; |
486 return; |
489 } |
487 } |
490 |
488 |
491 Send( EUnregisterHarvestComplete ); |
489 SendReceive( EUnregisterHarvestComplete ); |
492 } |
490 } |
493 |
491 |
494 // ---------------------------------------------------------------------------------------- |
492 // ---------------------------------------------------------------------------------------- |
495 // HarvestFile |
493 // HarvestFile |
496 // ---------------------------------------------------------------------------------------- |
494 // ---------------------------------------------------------------------------------------- |
497 // |
495 // |
498 void RHarvesterClient::HarvestFile( TInt& aService, TIpcArgs& aArgs, TRequestStatus& aStatus ) |
496 void RHarvesterClient::HarvestFile( TInt& aService, TIpcArgs& aArgs, TRequestStatus& aStatus, TDesC& aUri ) |
499 { |
497 { |
500 // send to server harvesting complete observer |
498 // send to server harvesting complete observer |
501 iHarvesterClientAO->Active(); |
499 if( iObserver ) |
|
500 { |
|
501 CHarvesterClientAO* harvestNotificationRequest( NULL ); |
|
502 TRAPD( err, harvestNotificationRequest = CHarvesterClientAO::NewL(*this, iNotificationQueue ) ); |
|
503 if( err ) |
|
504 { |
|
505 WRITELOG1( "RHarvesterClient::HarvestFile() - cannot issue harvesting notitification request, error: %d", err ); |
|
506 iObserver->HarvestingComplete( const_cast<TDesC&>(aUri), KErrCompletion ); |
|
507 delete harvestNotificationRequest; |
|
508 harvestNotificationRequest = NULL; |
|
509 } |
|
510 else |
|
511 { |
|
512 TRAP( err, iNotificationQueue->AddRequestL( harvestNotificationRequest ) ); |
|
513 if( err ) |
|
514 { |
|
515 iObserver->HarvestingComplete( const_cast<TDesC&>(aUri), KErrCompletion ); |
|
516 delete harvestNotificationRequest; |
|
517 harvestNotificationRequest = NULL; |
|
518 } |
|
519 else |
|
520 { |
|
521 harvestNotificationRequest->SetObserver( iObserver ); |
|
522 harvestNotificationRequest->Active( aUri ); |
|
523 } |
|
524 } |
|
525 } |
502 SendReceive( aService, aArgs, aStatus ); |
526 SendReceive( aService, aArgs, aStatus ); |
503 } |
527 } |
504 |
528 |
505 // ---------------------------------------------------------------------------------------- |
529 // ---------------------------------------------------------------------------------------- |
506 // ForceHarvestFile |
530 // ForceHarvestFile |
507 // ---------------------------------------------------------------------------------------- |
531 // ---------------------------------------------------------------------------------------- |
508 // |
532 // |
509 void RHarvesterClient::ForceHarvestFile( TInt& aService, TIpcArgs& aArgs ) |
533 void RHarvesterClient::ForceHarvestFile( TInt& aService, TIpcArgs& aArgs ) |
510 { |
534 { |
511 // send to server harvesting complete observer |
|
512 iHarvesterClientAO->Active(); |
|
513 SendReceive( aService, aArgs ); |
535 SendReceive( aService, aArgs ); |
514 } |
536 } |
515 |
537 |
516 // ---------------------------------------------------------------------------------------- |
538 // ---------------------------------------------------------------------------------------- |
517 // Version |
539 // Version |