182 { |
174 { |
183 MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d, removing database", openError); |
175 MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d, removing database", openError); |
184 CleanupStack::PopAndDestroy( dB ); |
176 CleanupStack::PopAndDestroy( dB ); |
185 } |
177 } |
186 } |
178 } |
187 else if( check == KErrNone ) |
179 else |
188 { |
180 { |
189 TRAPD(openError, GetDatabaseL(static_cast<TDriveNumber>(driveNum)).OpenL() ); |
181 CMPXHarvesterDB* dB = iDatabases[index]; |
|
182 TRAPD(openError, rtn |= dB->OpenL() ); //lint !e665 |
190 if(openError != KErrNone) |
183 if(openError != KErrNone) |
191 { |
184 { |
192 MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d, removing database", openError); |
185 MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d, removing database", openError); |
193 TRAP_IGNORE( RemoveDatabaseL(static_cast<TDriveNumber>(driveNum))); |
186 iDatabases.Remove ( index ); |
|
187 delete dB; |
194 } |
188 } |
195 } |
189 } |
196 } |
190 } |
197 } |
191 } |
198 #else |
|
199 TInt check(KErrNone); |
|
200 TRAP( check, GetDatabaseL(EDriveC) ); |
|
201 if( check == KErrNotFound ) |
|
202 { |
|
203 CMPXHarvesterDB* dB = CMPXHarvesterDB::NewL( EDriveC, iFs ); |
|
204 CleanupStack::PushL( dB ); |
|
205 iDatabases.AppendL( dB ); |
|
206 CleanupStack::Pop( dB ); |
|
207 TRAP_IGNORE( rtn = dB->OpenL() ); //lint !e665 |
|
208 } |
|
209 else if( check == KErrNone ) |
|
210 { |
|
211 TRAPD(openError, GetDatabaseL(EDriveC).OpenL() ); |
|
212 if(openError != KErrNone) |
|
213 { |
|
214 TRAP_IGNORE( RemoveDatabaseL(EDriveC)); |
|
215 } |
|
216 } |
|
217 TRAP( check, GetDatabaseL(EDriveE) ); //lint !e961 |
|
218 if( check == KErrNotFound ) |
|
219 { |
|
220 CMPXHarvesterDB* dB = CMPXHarvesterDB::NewL( EDriveE, iFs ); |
|
221 CleanupStack::PushL( dB ); |
|
222 TRAPD(openError, rtn |= dB->OpenL() ); //lint !e665 |
|
223 if(openError == KErrNone) |
|
224 { |
|
225 iDatabases.AppendL( dB ); |
|
226 CleanupStack::Pop( dB ); |
|
227 } |
|
228 else |
|
229 { |
|
230 CleanupStack::PopAndDestroy( dB ); |
|
231 } |
|
232 } |
|
233 else if( check == KErrNone ) |
|
234 { |
|
235 TRAPD(openError,GetDatabaseL(EDriveE).OpenL() ); |
|
236 if(openError != KErrNone) |
|
237 { |
|
238 TRAP_IGNORE( RemoveDatabaseL(EDriveE)); |
|
239 } |
|
240 } |
|
241 #endif // RD_MULTIPLE_DRIVE |
|
242 |
|
243 MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenAllDatabasesL --->"); //lint !e961 |
192 MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenAllDatabasesL --->"); //lint !e961 |
244 return rtn; |
193 return rtn; |
245 } |
194 } |
246 |
195 |
247 // --------------------------------------------------------------------------- |
196 // --------------------------------------------------------------------------- |
248 // CMPXHarvesterDatabaseManager::OpenDatabaseL |
197 // CMPXHarvesterDatabaseManager::OpenDatabaseL |
249 // --------------------------------------------------------------------------- |
198 // --------------------------------------------------------------------------- |
250 // |
199 // |
251 void CMPXHarvesterDatabaseManager::OpenDatabaseL( TDriveNumber aDrive ) |
200 void CMPXHarvesterDatabaseManager::OpenDatabaseL( TDriveNumber aDrive ) |
252 { |
201 { |
253 MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenDatabaseL <---"); |
202 MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenDatabaseL %d <---", aDrive); |
254 |
203 |
255 // Re-open a specific database |
204 if ( ! IsLocalDrive( aDrive ) ) |
256 // |
205 { |
257 if (!IsRemoteDrive(aDrive)) |
206 MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenDatabaseL drive not available -->"); |
258 { |
207 return; |
259 TInt count( iDatabases.Count() ); |
208 } |
260 for( TInt i=0; i<count; ++i ) |
209 |
261 { |
210 CMPXHarvesterDB * db = NULL; |
262 CMPXHarvesterDB* db = (CMPXHarvesterDB*) iDatabases[i]; |
211 TInt index = FindDatabaseIndex ( aDrive ); |
263 if( db->GetDbDrive() == aDrive ) |
212 if ( index == KErrNotFound ) |
264 { |
213 { |
265 db->OpenL(); |
214 db = CMPXHarvesterDB::NewL( aDrive, iFs ); |
266 break; |
215 CleanupStack::PushL( db ); |
267 } |
216 iDatabases.AppendL( db ); |
268 } |
217 CleanupStack::Pop( db ); |
|
218 } |
|
219 else |
|
220 { |
|
221 db = iDatabases[index]; |
|
222 } |
|
223 |
|
224 // TRAPD(openError, rtn |= dB->OpenL() ); //lint !e665 |
|
225 TRAPD( openError, db->OpenL() ); |
|
226 if( openError != KErrNone ) |
|
227 { |
|
228 MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d", openError); |
|
229 iDatabases.Remove(index); |
|
230 delete db; |
269 } |
231 } |
270 MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenDatabaseL --->"); |
232 MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenDatabaseL --->"); |
271 } |
233 } |
272 |
234 |
273 // --------------------------------------------------------------------------- |
235 // --------------------------------------------------------------------------- |
274 // CMPXHarvesterDatabaseManager::CloseAllDatabase |
236 // CMPXHarvesterDatabaseManager::CloseAllDatabases |
275 // --------------------------------------------------------------------------- |
237 // --------------------------------------------------------------------------- |
276 // |
238 // |
277 void CMPXHarvesterDatabaseManager::CloseAllDatabase() |
239 void CMPXHarvesterDatabaseManager::CloseAllDatabases() |
278 { |
240 { |
279 // Close all databases for shutdown |
241 // Close all databases for shutdown |
280 iDatabases.ResetAndDestroy(); |
242 iDatabases.ResetAndDestroy(); |
281 } |
243 } |
282 |
244 |
|
245 |
|
246 // --------------------------------------------------------------------------- |
|
247 // CMPXHarvesterDatabaseManager::CloseMassStorageDatabases |
|
248 // --------------------------------------------------------------------------- |
|
249 // |
|
250 void CMPXHarvesterDatabaseManager::CloseMassStorageDatabases() |
|
251 { |
|
252 MPX_FUNC("CMPXHarvesterDatabaseManager::CloseMassStorageDatabases"); |
|
253 for (TInt i = 0; i < iDatabases.Count();) |
|
254 { |
|
255 CMPXHarvesterDB * db =iDatabases [i]; |
|
256 TDriveNumber drive = db->GetDbDrive(); |
|
257 if ( drive != EDriveC ) |
|
258 { |
|
259 MPX_DEBUG2("CMPXHarvesterDatabaseManager::CloseMassStorageDatabases closing DB on drive %d", drive); |
|
260 db->Close(); |
|
261 #ifdef __RAMDISK_PERF_ENABLE |
|
262 if( iRAMDiskPerfEnabled && db->IsUseRamDrive() ) |
|
263 { |
|
264 MPX_DEBUG1("CMPXHarvesterDatabaseManager::CloseDatabase DB is on RAM"); |
|
265 db->SetRamDriveInfo( iRAMDrive, EFalse ); |
|
266 TInt err = DoCopyDBFromRam (drive); |
|
267 if ( err ) |
|
268 { |
|
269 MPX_DEBUG2("CMPXHarvesterDatabaseManager::CloseDatabase DB copy error=%d", err); |
|
270 RemoveDummyFile( drive ); |
|
271 } |
|
272 } |
|
273 #endif |
|
274 delete db; |
|
275 iDatabases.Remove(i); |
|
276 } |
|
277 else |
|
278 { |
|
279 ++i; |
|
280 } |
|
281 } |
|
282 } |
|
283 |
283 // --------------------------------------------------------------------------- |
284 // --------------------------------------------------------------------------- |
284 // CMPXHarvesterDatabaseManager::CloseDatabase |
285 // CMPXHarvesterDatabaseManager::CloseDatabase |
285 // --------------------------------------------------------------------------- |
286 // --------------------------------------------------------------------------- |
286 // |
287 // |
287 void CMPXHarvesterDatabaseManager::CloseDatabase( TDriveNumber aDrive ) |
288 void CMPXHarvesterDatabaseManager::CloseDatabase( TDriveNumber aDrive ) |
288 { |
289 { |
289 if (!IsRemoteDrive(aDrive)) |
290 MPX_DEBUG2("-->CMPXHarvesterDatabaseManager::CloseDatabase drive %d", aDrive ); |
290 { |
291 TInt index = FindDatabaseIndex( aDrive ); |
291 MPX_DEBUG2("CMPXHarvesterDatabaseManager::CloseDatabase drive %d <---", aDrive ); |
292 if ( index != KErrNotFound ) |
292 TInt count = iDatabases.Count(); |
293 { |
293 for ( TInt i=0; i<count; ++i) |
294 CMPXHarvesterDB * db =iDatabases[index]; |
294 { |
295 db->Close(); |
295 CMPXHarvesterDB* db = (CMPXHarvesterDB*) iDatabases[i]; |
|
296 if ( db->GetDbDrive() == aDrive) |
|
297 { |
|
298 db->Close(); |
|
299 #ifdef __RAMDISK_PERF_ENABLE |
296 #ifdef __RAMDISK_PERF_ENABLE |
300 if( iRAMDiskPerfEnabled && db->IsUseRamDrive() ) |
297 if( iRAMDiskPerfEnabled && db->IsUseRamDrive() ) |
301 { |
298 { |
302 MPX_DEBUG1("CMPXHarvesterDatabaseManager::CloseDatabase DB is on RAM"); |
299 MPX_DEBUG1("CMPXHarvesterDatabaseManager::CloseDatabase DB is on RAM"); |
303 db->SetRamDriveInfo( iRAMDrive, EFalse ); |
300 db->SetRamDriveInfo( iRAMDrive, EFalse ); |
304 TRAPD( err, DoCopyDBFromRamL(aDrive) ); |
301 TInt err = DoCopyDBFromRam(aDrive); |
305 if ( err ) |
302 if ( err ) |
306 { |
303 { |
307 MPX_DEBUG2("CMPXHarvesterDatabaseManager::CloseDatabase DB copy error=%d", err); |
304 MPX_DEBUG2("CMPXHarvesterDatabaseManager::CloseDatabase DB copy error=%d", err); |
308 RemoveDummyFile(i); |
305 RemoveDummyFile( aDrive ); |
309 } |
306 } |
310 } |
307 } |
311 #endif |
308 #endif |
312 break; |
309 delete db; |
313 } |
310 iDatabases.Remove(index); |
314 } |
311 } |
315 } |
312 MPX_DEBUG1("<--CMPXHarvesterDatabaseManager::CloseDatabase"); |
316 MPX_DEBUG1("CMPXHarvesterDatabaseManager::CloseDatabase --->"); |
313 } |
317 } |
314 |
318 |
315 // --------------------------------------------------------------------------- |
319 // --------------------------------------------------------------------------- |
316 // CMPXHarvesterDatabaseManager::DropDatabase |
320 // CMPXHarvesterDatabaseManager::GetDatabase |
317 // --------------------------------------------------------------------------- |
321 // --------------------------------------------------------------------------- |
318 // |
322 // |
319 void CMPXHarvesterDatabaseManager::DropDatabase( TDriveNumber aDrive ) |
323 CMPXHarvesterDB& CMPXHarvesterDatabaseManager::GetDatabaseL( TDriveNumber aDrive ) |
320 { |
324 { |
321 MPX_DEBUG2("CMPXHarvesterDatabaseManager::DropDatabase drive %d <---", aDrive ); |
325 CMPXHarvesterDB* db( NULL ); |
322 TInt index = FindDatabaseIndex( aDrive ); |
326 |
323 if ( index != KErrNotFound ) |
327 // Find the database |
324 { |
|
325 CMPXHarvesterDB * db =iDatabases[index]; |
|
326 #ifdef __RAMDISK_PERF_ENABLE |
|
327 if( iRAMDiskPerfEnabled && db->IsUseRamDrive() ) |
|
328 { |
|
329 MPX_DEBUG1("CMPXHarvesterDatabaseManager::DropDatabase DB is on RAM"); |
|
330 db->Close(); |
|
331 // delete db on ram drive. |
|
332 TFileName src = GenerateHarvesterDbName( TDriveUnit(aDrive), ETrue ); |
|
333 BaflUtils::DeleteFile(iFs, src); |
|
334 } |
|
335 #endif |
|
336 delete db; |
|
337 iDatabases.Remove(index); |
|
338 } |
|
339 MPX_DEBUG1("CMPXHarvesterDatabaseManager::DropDatabase --->"); |
|
340 } |
|
341 // --------------------------------------------------------------------------- |
|
342 // CMPXHarvesterDatabaseManager::FindDatabaseIndex |
|
343 // --------------------------------------------------------------------------- |
|
344 // |
|
345 TInt CMPXHarvesterDatabaseManager::FindDatabaseIndex ( TDriveNumber aDrive ) |
|
346 { |
328 TInt count = iDatabases.Count(); |
347 TInt count = iDatabases.Count(); |
329 for( TInt i=0; i<count; ++i ) |
348 for( TInt i=0; i<count; ++i ) |
330 { |
349 { |
331 CMPXHarvesterDB* tmp = (CMPXHarvesterDB*) iDatabases[i]; |
350 CMPXHarvesterDB* db = (CMPXHarvesterDB*) iDatabases[i]; |
332 if( tmp->GetDbDrive() == aDrive ) |
351 if( db->GetDbDrive() == aDrive ) |
333 { |
352 { |
334 db = tmp; |
353 MPX_DEBUG3("CMPXHarvesterDatabaseManager::FindDatabaseIndex drive=%d returns index %d ", aDrive, i); |
335 break; |
354 return i; |
336 } |
355 } |
337 } |
356 } |
338 |
357 MPX_DEBUG2("CMPXHarvesterDatabaseManager::FindDatabaseIndex drive=%d returns KErrNotFound", aDrive); |
339 // Not found, so we leave |
358 return KErrNotFound; |
340 if( db == NULL ) |
359 } |
341 { |
360 |
342 User::Leave( KErrNotFound ); |
361 // --------------------------------------------------------------------------- |
343 } |
362 // CMPXHarvesterDatabaseManager::DataaseIsOpen |
344 return *db; |
363 // --------------------------------------------------------------------------- |
345 } |
364 // |
346 |
365 TBool CMPXHarvesterDatabaseManager::DatabaseIsOpen( TDriveNumber aDrive ) |
347 // --------------------------------------------------------------------------- |
366 { |
348 // CMPXHarvesterDatabaseManager::RemoveDatabase |
367 return FindDatabaseIndex( aDrive ) != KErrNotFound; |
349 // --------------------------------------------------------------------------- |
368 } |
350 // |
369 |
351 void CMPXHarvesterDatabaseManager::RemoveDatabaseL( TDriveNumber aDrive ) |
370 // --------------------------------------------------------------------------- |
352 { |
371 // CMPXHarvesterDatabaseManager::GetDatabase |
353 |
372 // --------------------------------------------------------------------------- |
354 TBool bFound(EFalse); |
373 // |
355 // Find the database |
374 CMPXHarvesterDB& CMPXHarvesterDatabaseManager::GetDatabaseL( TDriveNumber aDrive ) |
356 TInt count = iDatabases.Count(); |
375 { |
357 for(TInt index=0; index<count; ++index ) |
376 TInt index = FindDatabaseIndex( aDrive ); |
358 { |
377 User::LeaveIfError (index); // Not found, so we leave |
359 if((iDatabases[index]!=NULL) && ( iDatabases[index]->GetDbDrive() == aDrive )) |
378 return *iDatabases[index]; |
360 { |
|
361 bFound = ETrue; |
|
362 delete iDatabases[index]; |
|
363 iDatabases.Remove(index); |
|
364 break; |
|
365 } |
|
366 } |
|
367 |
|
368 // Not found, so we leave |
|
369 if( !bFound ) |
|
370 { |
|
371 User::Leave( KErrNotFound ); |
|
372 } |
|
373 } |
379 } |
374 |
380 |
375 // --------------------------------------------------------------------------- |
381 // --------------------------------------------------------------------------- |
376 // CMPXHarvesterDatabaseManager::Count |
382 // CMPXHarvesterDatabaseManager::Count |
377 // --------------------------------------------------------------------------- |
383 // --------------------------------------------------------------------------- |
653 User::LeaveIfError( leaveError ); |
681 User::LeaveIfError( leaveError ); |
654 } |
682 } |
655 } |
683 } |
656 |
684 |
657 // --------------------------------------------------------------------------- |
685 // --------------------------------------------------------------------------- |
658 // CMPXHarvesterDatabaseManager::DoCopyDBFromRamL |
686 // CMPXHarvesterDatabaseManager::DoCopyDBFromRam |
659 // --------------------------------------------------------------------------- |
687 // --------------------------------------------------------------------------- |
660 // |
688 // |
661 void CMPXHarvesterDatabaseManager::DoCopyDBFromRamL(TDriveUnit aDriveUnit) |
689 TInt CMPXHarvesterDatabaseManager::DoCopyDBFromRam(TDriveUnit aDriveUnit) |
662 { |
690 { |
663 MPX_FUNC("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL"); |
691 MPX_FUNC("CMPXHarvesterDatabaseManager::DoCopyDBFromRam"); |
664 TFileName dst; |
692 TFileName dst; |
665 TFileName src; |
693 TFileName src; |
666 TInt err = KErrNone; |
694 TInt err = KErrNone; |
667 |
695 |
668 dst = GenerateHarvesterDbName( aDriveUnit ); |
696 dst = GenerateHarvesterDbName( aDriveUnit ); |
669 src = GenerateHarvesterDbName( aDriveUnit, ETrue ); |
697 src = GenerateHarvesterDbName( aDriveUnit, ETrue ); |
670 MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL from %S to %S", &src, &dst ); |
698 MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRam from %S to %S", &src, &dst ); |
671 |
699 |
672 TFileName dummyDbFileName = GenerateDummyDbName( aDriveUnit ); |
700 TFileName dummyDbFileName = GenerateDummyDbName( aDriveUnit ); |
673 |
701 |
674 //Copy Db from RAM to replace dummy file |
702 //Copy Db from RAM to replace dummy file |
675 err = BaflUtils::CopyFile(iFs, src, dummyDbFileName); |
703 err = BaflUtils::CopyFile(iFs, src, dummyDbFileName); |
676 MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL database copied from ram drive err=%d.", err); |
704 MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoCopyDBFromRam database copied from ram drive err=%d.", err); |
677 |
705 |
678 // delete db on ram drive. |
706 // delete db on ram drive. |
679 TInt delErr = BaflUtils::DeleteFile(iFs, src); |
707 TInt delErr = BaflUtils::DeleteFile(iFs, src); |
680 MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL db on ram drive deleted file=%S, err=%d", &src, delErr); |
708 MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRam db on ram drive deleted file=%S, err=%d", &src, delErr); |
681 |
709 |
682 // Make sure we del db from ram drive before leaving. |
710 // Make sure we del db from ram drive before returning. |
683 User::LeaveIfError( err ); |
711 if (err != KErrNone) |
684 |
712 { |
685 // Delete existing DB on drive |
713 return err; |
686 delErr = BaflUtils::DeleteFile(iFs, dst); |
714 } |
687 MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL destination file deleted err=%d", delErr); |
715 |
688 |
716 err = iFs.Replace(dummyDbFileName, dst); |
689 // rename dummy file to real db name |
717 MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoCopyDBFromRam dummy file replaced, err=%d.", err); |
690 User::LeaveIfError( BaflUtils::RenameFile(iFs, dummyDbFileName, dst) ); |
718 return err; |
691 MPX_DEBUG1("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL dummy file renamed."); |
|
692 } |
719 } |
693 |
720 |
694 // --------------------------------------------------------------------------- |
721 // --------------------------------------------------------------------------- |
695 // CMPXHarvesterDatabaseManager::GetRAMDiskPath |
722 // CMPXHarvesterDatabaseManager::GetRAMDiskPath |
696 // --------------------------------------------------------------------------- |
723 // --------------------------------------------------------------------------- |