163 // CThumbnailStore::CThumbnailStore() |
166 // CThumbnailStore::CThumbnailStore() |
164 // C++ default constructor can NOT contain any code, that might leave. |
167 // C++ default constructor can NOT contain any code, that might leave. |
165 // --------------------------------------------------------------------------- |
168 // --------------------------------------------------------------------------- |
166 // |
169 // |
167 CThumbnailStore::CThumbnailStore( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer ): |
170 CThumbnailStore::CThumbnailStore( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer ): |
168 iFs( aFs ), iDrive( aDrive ), iBatchItemCount(0), iImei(aImei), iServer(aServer) |
171 iFs( aFs ), iDrive( aDrive ), iBatchItemCount(0), iImei(aImei), iServer(aServer), iDiskFull(EFalse) |
169 { |
172 { |
170 // no implementation required |
173 // no implementation required |
171 } |
174 } |
172 |
175 |
173 |
176 |
2365 TN_DEBUG2( "CThumbnailStore::RemoveBlacklistedFlag() - main table, err=%d", err ); |
2374 TN_DEBUG2( "CThumbnailStore::RemoveBlacklistedFlag() - main table, err=%d", err ); |
2366 |
2375 |
2367 CleanupStack::PopAndDestroy( &stmt ); |
2376 CleanupStack::PopAndDestroy( &stmt ); |
2368 } |
2377 } |
2369 |
2378 |
|
2379 void CThumbnailStore::HandleDiskSpaceNotificationL( TBool aDiskFull ) |
|
2380 { |
|
2381 TN_DEBUG2( "CThumbnailStore::HandleDiskSpaceNotificationL() aDiskFull = %d", aDiskFull ); |
|
2382 iDiskFull = aDiskFull; |
|
2383 } |
|
2384 |
|
2385 |
|
2386 void CThumbnailStore::HandleDiskSpaceError(TInt aError ) |
|
2387 { |
|
2388 if (aError != KErrNone) |
|
2389 { |
|
2390 TN_DEBUG2( "CThumbnailStore::HandleDiskSpaceError() aError = %d", aError ); |
|
2391 } |
|
2392 } |
|
2393 |
|
2394 TBool CThumbnailStore::IsDiskFull() |
|
2395 { |
|
2396 return iDiskFull; |
|
2397 } |
|
2398 |
|
2399 CThumbnailStoreDiskSpaceNotifierAO* CThumbnailStoreDiskSpaceNotifierAO::NewL( |
|
2400 MThumbnailStoreDiskSpaceNotifierObserver& aObserver, TInt64 aThreshold, const TDesC& aFilename) |
|
2401 { |
|
2402 CThumbnailStoreDiskSpaceNotifierAO* self = |
|
2403 CThumbnailStoreDiskSpaceNotifierAO::NewLC( aObserver, aThreshold, aFilename); |
|
2404 CleanupStack::Pop( self ); |
|
2405 return self; |
|
2406 } |
|
2407 |
|
2408 CThumbnailStoreDiskSpaceNotifierAO* CThumbnailStoreDiskSpaceNotifierAO::NewLC( |
|
2409 MThumbnailStoreDiskSpaceNotifierObserver& aObserver, TInt64 aThreshold, const TDesC& aFilename) |
|
2410 { |
|
2411 TDriveNumber driveNumber = GetDriveNumberL( aFilename ); |
|
2412 |
|
2413 CThumbnailStoreDiskSpaceNotifierAO* self = |
|
2414 new ( ELeave ) CThumbnailStoreDiskSpaceNotifierAO( aObserver, aThreshold, driveNumber ); |
|
2415 CleanupStack::PushL( self ); |
|
2416 self->ConstructL(); |
|
2417 return self; |
|
2418 } |
|
2419 |
|
2420 TDriveNumber CThumbnailStoreDiskSpaceNotifierAO::GetDriveNumberL( const TDesC& aFilename ) |
|
2421 { |
|
2422 TN_DEBUG1( "CThumbnailStoreDiskSpaceNotifierAO::GetDriveNumberL()"); |
|
2423 TLex driveParser( aFilename ); |
|
2424 |
|
2425 TChar driveChar = driveParser.Get(); |
|
2426 |
|
2427 if( 0 == driveChar || TChar( ':' ) != driveParser.Peek() ) |
|
2428 { |
|
2429 TN_DEBUG1( "CThumbnailStoreDiskSpaceNotifierAO::GetDriveNumberL() KErrArgument"); |
|
2430 User::Leave( KErrArgument ); |
|
2431 } |
|
2432 |
|
2433 TInt driveNumber; |
|
2434 |
|
2435 RFs::CharToDrive( driveChar, driveNumber ); |
|
2436 |
|
2437 return (TDriveNumber)driveNumber; |
|
2438 } |
|
2439 |
|
2440 |
|
2441 CThumbnailStoreDiskSpaceNotifierAO::~CThumbnailStoreDiskSpaceNotifierAO() |
|
2442 { |
|
2443 TN_DEBUG1( "CThumbnailStoreDiskSpaceNotifierAO::~CThumbnailStoreDiskSpaceNotifierAO()"); |
|
2444 Cancel(); |
|
2445 |
|
2446 iFileServerSession.Close(); |
|
2447 } |
|
2448 |
|
2449 void CThumbnailStoreDiskSpaceNotifierAO::RunL() |
|
2450 { |
|
2451 TN_DEBUG1( "CThumbnailStoreDiskSpaceNotifierAO::RunL()"); |
|
2452 TVolumeInfo volumeInfo; |
|
2453 |
|
2454 if ( iState == CThumbnailStoreDiskSpaceNotifierAO::ENormal ) |
|
2455 { |
|
2456 TInt status = iStatus.Int(); |
|
2457 |
|
2458 switch( status ) |
|
2459 { |
|
2460 case KErrNone: |
|
2461 iFileServerSession.Volume( volumeInfo, iDrive ); |
|
2462 |
|
2463 // Check if free space is less than threshold level |
|
2464 if( volumeInfo.iFree < iThreshold ) |
|
2465 { |
|
2466 iDiskFull = ETrue; |
|
2467 iObserver.HandleDiskSpaceNotificationL( iDiskFull ); |
|
2468 iState = EIterate; |
|
2469 iIterationCount = 0; |
|
2470 SetActive(); |
|
2471 TRequestStatus* status = &iStatus; |
|
2472 User::RequestComplete( status, KErrNone ); |
|
2473 return; |
|
2474 } |
|
2475 else |
|
2476 { |
|
2477 iDiskFull = EFalse; |
|
2478 iObserver.HandleDiskSpaceNotificationL( iDiskFull ); |
|
2479 } |
|
2480 StartNotifier(); |
|
2481 break; |
|
2482 |
|
2483 case KErrArgument: |
|
2484 TN_DEBUG1( "CThumbnailStoreDiskSpaceNotifierAO::GetDriveNumberL() KErrArgument"); |
|
2485 User::Leave( status ); |
|
2486 break; |
|
2487 default: |
|
2488 break; |
|
2489 } |
|
2490 } |
|
2491 else if ( iState == CThumbnailStoreDiskSpaceNotifierAO::EIterate ) |
|
2492 { |
|
2493 const TInt KMaxIterations = 10; |
|
2494 |
|
2495 iFileServerSession.Volume( volumeInfo, iDrive ); |
|
2496 if ( volumeInfo.iFree < iThreshold ) |
|
2497 { |
|
2498 iObserver.HandleDiskSpaceNotificationL( iDiskFull ); |
|
2499 ++iIterationCount; |
|
2500 if ( iIterationCount < KMaxIterations ) |
|
2501 { |
|
2502 SetActive(); |
|
2503 TRequestStatus* status = &iStatus; |
|
2504 User::RequestComplete( status, KErrNone ); |
|
2505 return; |
|
2506 } |
|
2507 else |
|
2508 { |
|
2509 iFileServerSession.Volume( volumeInfo, iDrive ); |
|
2510 if ( volumeInfo.iFree >= iThreshold ) |
|
2511 { |
|
2512 iDiskFull = EFalse; |
|
2513 } |
|
2514 } |
|
2515 } |
|
2516 else |
|
2517 { |
|
2518 iDiskFull = EFalse; |
|
2519 } |
|
2520 iState = ENormal; |
|
2521 iIterationCount = 0; |
|
2522 StartNotifier(); |
|
2523 } |
|
2524 else |
|
2525 { |
|
2526 User::Leave( KErrGeneral ); |
|
2527 } |
|
2528 } |
|
2529 |
|
2530 TInt CThumbnailStoreDiskSpaceNotifierAO::RunError(TInt aError) |
|
2531 { |
|
2532 TN_DEBUG1( "CThumbnailStoreDiskSpaceNotifierAO::RunError()"); |
|
2533 iObserver.HandleDiskSpaceError( aError ); |
|
2534 |
|
2535 return KErrNone; |
|
2536 } |
|
2537 |
|
2538 void CThumbnailStoreDiskSpaceNotifierAO::DoCancel() |
|
2539 { |
|
2540 TN_DEBUG1( "CThumbnailStoreDiskSpaceNotifierAO::DoCancel()"); |
|
2541 if( IsActive() ) |
|
2542 { |
|
2543 iFileServerSession.NotifyDiskSpaceCancel(); |
|
2544 } |
|
2545 } |
|
2546 |
|
2547 CThumbnailStoreDiskSpaceNotifierAO::CThumbnailStoreDiskSpaceNotifierAO( |
|
2548 MThumbnailStoreDiskSpaceNotifierObserver& aObserver, TInt64 aThreshold, const TDriveNumber aDrive) |
|
2549 : CActive( CActive::EPriorityStandard ), |
|
2550 iObserver( aObserver ), iThreshold( aThreshold ), iDrive( aDrive ), iState( CThumbnailStoreDiskSpaceNotifierAO::ENormal ), iDiskFull( EFalse ) |
|
2551 { |
|
2552 TN_DEBUG1( "CThumbnailStoreDiskSpaceNotifierAO::CThumbnailStoreDiskSpaceNotifierAO()"); |
|
2553 CActiveScheduler::Add( this ); |
|
2554 } |
|
2555 |
|
2556 void CThumbnailStoreDiskSpaceNotifierAO::ConstructL() |
|
2557 { |
|
2558 TN_DEBUG1( "CThumbnailStoreDiskSpaceNotifierAO::ConstructL()"); |
|
2559 TInt KMessageSlotCount = 2; // slots for NotifyDiskSpace and NotifyDiskSpaceCancel |
|
2560 |
|
2561 User::LeaveIfError( iFileServerSession.Connect( KMessageSlotCount ) ); |
|
2562 |
|
2563 TVolumeInfo volumeInfo; |
|
2564 iFileServerSession.Volume( volumeInfo, iDrive ); |
|
2565 if ( volumeInfo.iFree < iThreshold ) |
|
2566 { |
|
2567 iDiskFull = ETrue; |
|
2568 } |
|
2569 |
|
2570 iObserver.HandleDiskSpaceNotificationL( iDiskFull ); |
|
2571 |
|
2572 StartNotifier(); |
|
2573 } |
|
2574 |
|
2575 void CThumbnailStoreDiskSpaceNotifierAO::StartNotifier() |
|
2576 { |
|
2577 TN_DEBUG2( "CThumbnailStoreDiskSpaceNotifierAO::StartNotifier() iDrive == %d", iDrive); |
|
2578 iFileServerSession.NotifyDiskSpace( iThreshold, iDrive, iStatus ); |
|
2579 |
|
2580 SetActive(); |
|
2581 } |
|
2582 |
|
2583 TBool CThumbnailStoreDiskSpaceNotifierAO::DiskFull() const |
|
2584 { |
|
2585 return iDiskFull; |
|
2586 } |
|
2587 |
2370 // End of file |
2588 // End of file |