harvesterplugins/file/src/cfolderrenamedharvester.cpp
changeset 2 208a4ba3894c
parent 0 ccd0fd43f247
child 26 367228f82b66
equal deleted inserted replaced
0:ccd0fd43f247 2:208a4ba3894c
    24 // For Logging
    24 // For Logging
    25 #include "harvesterserverlogger.h"
    25 #include "harvesterserverlogger.h"
    26 
    26 
    27 #include "cfileplugin.h"
    27 #include "cfileplugin.h"
    28 #include "cfolderrenamedharvester.h"
    28 #include "cfolderrenamedharvester.h"
       
    29 #include "OstTraceDefinitions.h"
       
    30 #ifdef OST_TRACE_COMPILER_IN_USE
       
    31 #include "cfolderrenamedharvesterTraces.h"
       
    32 #endif
       
    33 
    29 
    34 
    30 // CONSTANTS
    35 // CONSTANTS
    31 _LIT( KFileMask, "*.*" );
    36 _LIT( KFileMask, "*.*" );
    32 const TInt KItemsPerRun = 1;
    37 const TInt KItemsPerRun = 1;
    33 
    38 
       
    39 
    34 namespace {
    40 namespace {
    35 
    41 
    36 void AppendBackslash( TDes& aDirectory )
    42 void AppendBackslash( TDes& aDirectory )
    37     {
    43     {    
       
    44     const TInt lastChar = aDirectory.Length() - 1;
    38     const TChar KBackslashChar( '\\' );
    45     const TChar KBackslashChar( '\\' );
    39     const TInt lastChar = aDirectory.Length() - 1;
       
    40 
    46 
    41     // If it is directory which not contain backslash. 
    47     // If it is directory which not contain backslash. 
    42     if ( KBackslashChar != aDirectory[lastChar] )
    48     if ( KBackslashChar != aDirectory[lastChar] )
    43        {
    49        {
    44        aDirectory.Append( KBackslashChar );
    50        aDirectory.Append( KBackslashChar );
    45        }
    51        }
    46     }
    52     }
    47 
    53 
       
    54 void RemoveBackslash( TDes& aDirectory )
       
    55     {
       
    56     const TInt lastChar = aDirectory.Length() - 1;
       
    57     const TChar KBackslashChar( '\\' );
       
    58     
       
    59     //If directory contains slash at the end
       
    60     if ( KBackslashChar == aDirectory[lastChar] )
       
    61         {
       
    62         TPtrC temppath( aDirectory.Left( lastChar ) );
       
    63         aDirectory.Zero();
       
    64         aDirectory.Append(temppath);
       
    65         }
       
    66     
       
    67     }
       
    68 
    48 } // namespace
    69 } // namespace
    49 
    70 
    50 // ============================ MEMBER FUNCTIONS ===============================
    71 // ============================ MEMBER FUNCTIONS ===============================
    51 
    72 
    52 
    73 
   147 CFolderRenamedHarvester::CFolderRenamedHarvester(  CFilePlugin& aFilePlugin, RFs& aFs  ) 
   168 CFolderRenamedHarvester::CFolderRenamedHarvester(  CFilePlugin& aFilePlugin, RFs& aFs  ) 
   148   : CActive( CActive::EPriorityIdle ),
   169   : CActive( CActive::EPriorityIdle ),
   149     iFilePlugin( aFilePlugin ),
   170     iFilePlugin( aFilePlugin ),
   150     iFs( aFs )
   171     iFs( aFs )
   151     {
   172     {
       
   173     OstTraceFunctionEntry0( CFOLDERRENAMEDHARVESTER_CFOLDERRENAMEDHARVESTER_ENTRY );
   152     CPIXLOGSTRING("ENTER CFolderRenamedHarvester::CFolderRenamedHarvester");
   174     CPIXLOGSTRING("ENTER CFolderRenamedHarvester::CFolderRenamedHarvester");
   153     CActiveScheduler::Add( this );
   175     CActiveScheduler::Add( this );
   154     CPIXLOGSTRING("END CFolderRenamedHarvester::CFolderRenamedHarvester");
   176     CPIXLOGSTRING("END CFolderRenamedHarvester::CFolderRenamedHarvester");
       
   177     OstTraceFunctionExit0( CFOLDERRENAMEDHARVESTER_CFOLDERRENAMEDHARVESTER_EXIT );
   155     }
   178     }
   156 
   179 
   157 
   180 
   158 // ---------------------------------------------------------------------------
   181 // ---------------------------------------------------------------------------
   159 // CFolderRenamedHarvester::ConstructL
   182 // CFolderRenamedHarvester::ConstructL
   169 // ---------------------------------------------------------------------------
   192 // ---------------------------------------------------------------------------
   170 //
   193 //
   171 TBool CFolderRenamedHarvester::StartL( const TFileName& aOldDirectoryName, 
   194 TBool CFolderRenamedHarvester::StartL( const TFileName& aOldDirectoryName, 
   172 									   const TFileName& aNewDirectoryName )
   195 									   const TFileName& aNewDirectoryName )
   173     {
   196     {
       
   197     OstTraceFunctionEntry0( CFOLDERRENAMEDHARVESTER_STARTL_ENTRY );
   174     CPIXLOGSTRING("ENTER CFolderRenamedHarvester::Start");
   198     CPIXLOGSTRING("ENTER CFolderRenamedHarvester::Start");
   175 
   199 
   176     // Append trailing backslash if required
   200     // Append trailing backslash if required
   177     TFileName oldName ( aOldDirectoryName );
   201     TFileName oldName ( aOldDirectoryName );
   178     AppendBackslash( oldName );
   202     AppendBackslash( oldName );
   182     CFolderRenamedItem *renameItem = CFolderRenamedItem::NewL( oldName, newName );
   206     CFolderRenamedItem *renameItem = CFolderRenamedItem::NewL( oldName, newName );
   183     iRenamedFolders.AppendL( renameItem );
   207     iRenamedFolders.AppendL( renameItem );
   184 
   208 
   185 	SetNextRequest( EFolderRenamedIdleState );
   209 	SetNextRequest( EFolderRenamedIdleState );
   186     CPIXLOGSTRING("END CFolderRenamedHarvester::Start");
   210     CPIXLOGSTRING("END CFolderRenamedHarvester::Start");
       
   211     OstTraceFunctionExit0( CFOLDERRENAMEDHARVESTER_STARTL_EXIT );
   187     return ETrue;
   212     return ETrue;
   188     }
   213     }
   189 
   214 
   190 // ---------------------------------------------------------------------------
   215 // ---------------------------------------------------------------------------
   191 // CFolderRenamedHarvester::GetNextFolderL
   216 // CFolderRenamedHarvester::GetNextFolderL
   192 // ---------------------------------------------------------------------------
   217 // ---------------------------------------------------------------------------
   193 //		
   218 //		
   194 void CFolderRenamedHarvester::GetNextFolderL()
   219 void CFolderRenamedHarvester::GetNextFolderL()
   195     {
   220     {
       
   221     OstTraceFunctionEntry0( CFOLDERRENAMEDHARVESTER_GETNEXTFOLDERL_ENTRY );
   196     CPIXLOGSTRING("ENTER CFolderRenamedHarvester::GetNextFolderL");   
   222     CPIXLOGSTRING("ENTER CFolderRenamedHarvester::GetNextFolderL");   
   197 
   223 
   198     delete iDir;
   224     delete iDir;
   199     iDir = NULL;
   225     iDir = NULL;
   200     // Documentation: CDirScan::NextL() The caller of this function 
   226     // Documentation: CDirScan::NextL() The caller of this function 
   201     // is responsible for deleting iDir after the function has returned.
   227     // is responsible for deleting iDir after the function has returned.
   202     iDirscan->NextL(iDir); 
   228     iDirscan->NextL(iDir); 
   203 
   229 
   204     if( iDir )
   230     if( iDir )
   205         {
   231         {
       
   232         OstTrace0( TRACE_NORMAL, CFOLDERRENAMEDHARVESTER_GETNEXTFOLDERL, "CFolderRenamedHarvester::GetNextFolderL - IF EHarvesterGetFileId" );
   206         CPIXLOGSTRING("CFolderRenamedHarvester::GetNextFolderL - IF EHarvesterGetFileId"); 
   233         CPIXLOGSTRING("CFolderRenamedHarvester::GetNextFolderL - IF EHarvesterGetFileId"); 
   207         SetNextRequest( EFolderRenamedGetFileId );
   234         SetNextRequest( EFolderRenamedGetFileId );
   208         }
   235         }
   209     else
   236     else
   210         {
   237         {
       
   238         OstTrace0( TRACE_NORMAL, DUP1_CFOLDERRENAMEDHARVESTER_GETNEXTFOLDERL, "CFolderRenamedHarvester::GetNextFolderL - IF EHarvesterIdle" );
   211         CPIXLOGSTRING("CFolderRenamedHarvester::GetNextFolderL - IF EHarvesterIdle");
   239         CPIXLOGSTRING("CFolderRenamedHarvester::GetNextFolderL - IF EHarvesterIdle");
   212 
   240         HandleFolderRenameL();
   213         // finished folder rename, delete the folder from the array.
   241         // finished folder rename, delete the folder from the array.
   214         CFolderRenamedItem *item = iRenamedFolders[0];
   242         CFolderRenamedItem *item = iRenamedFolders[0];
   215         iRenamedFolders.Remove(0);
   243         iRenamedFolders.Remove(0);
   216         delete item;
   244         delete item;
   217 
   245 
   218         SetNextRequest( EFolderRenamedIdleState );
   246         SetNextRequest( EFolderRenamedIdleState );
   219         }
   247         }
   220     CPIXLOGSTRING("END CFolderRenamedHarvester::GetNextFolderL");
   248     CPIXLOGSTRING("END CFolderRenamedHarvester::GetNextFolderL");
       
   249     OstTraceFunctionExit0( CFOLDERRENAMEDHARVESTER_GETNEXTFOLDERL_EXIT );
   221     }
   250     }
   222 
   251 
   223 // ---------------------------------------------------------------------------
   252 // ---------------------------------------------------------------------------
   224 // CFolderRenamedHarvester::GetFileIdL
   253 // CFolderRenamedHarvester::GetFileIdL
   225 // 
   254 // 
   226 // ---------------------------------------------------------------------------
   255 // ---------------------------------------------------------------------------
   227 //		    
   256 //		    
   228 void CFolderRenamedHarvester::GetFileIdL()
   257 void CFolderRenamedHarvester::GetFileIdL()
   229     {
   258     {
       
   259     OstTraceFunctionEntry0( CFOLDERRENAMEDHARVESTER_GETFILEIDL_ENTRY );
   230     CPIXLOGSTRING("ENTER CFolderRenamedHarvester::GetFileId");
   260     CPIXLOGSTRING("ENTER CFolderRenamedHarvester::GetFileId");
   231 
   261 
   232     if( iCurrentIndex == 0 )
   262     if( iCurrentIndex == 0 )
   233         {
   263         {
   234         TParse parse;
   264         TParse parse;
   249         while( ( iCurrentIndex < count ) && ( iStepNumber < KItemsPerRun ) )
   279         while( ( iCurrentIndex < count ) && ( iStepNumber < KItemsPerRun ) )
   250             {
   280             {
   251             TEntry entry = (*iDir)[iCurrentIndex];
   281             TEntry entry = (*iDir)[iCurrentIndex];
   252             // Check if entry is a hidden or system file
   282             // Check if entry is a hidden or system file
   253             // if true -> continue until find something to index or have checked whole directory
   283             // if true -> continue until find something to index or have checked whole directory
   254             if( !entry.IsHidden() && !entry.IsSystem() && !entry.IsDir() )
   284             if( !entry.IsHidden() && !entry.IsSystem() )
   255                 {
   285                 {
   256                 TParse fileParser;
   286                 TParse fileParser;
   257                 fileParser.Set( iDirscan->FullPath(), &(*iDir)[iCurrentIndex].iName, NULL );
   287                 fileParser.Set( iDirscan->FullPath(), &(*iDir)[iCurrentIndex].iName, NULL );
   258 
   288 
   259                 TPtrC fileNamePtr = fileParser.FullName();
   289                 TPtrC fileNamePtr = fileParser.FullName();
   260                 TPtrC leaf( fileNamePtr.Right( fileNamePtr.Length() - iNewFolderName.Length() ) );
   290                 TPtrC leaf( fileNamePtr.Right( fileNamePtr.Length() - iNewFolderName.Length() ) );
   261                 TFileName oldFileName( iOldFolderName );
   291                 TFileName oldFileName( iOldFolderName );
   262                 oldFileName.Append( leaf );
   292                 oldFileName.Append( leaf );
   263 
   293                 if(entry.IsDir())
   264                 iFilePlugin.CreateFileIndexItemL( oldFileName, ECPixRemoveAction );
   294                     {
   265                 iFilePlugin.CreateFileIndexItemL( fileParser.FullName(), ECPixAddAction );
   295                     iFilePlugin.CreateFolderFileIndexItemL( oldFileName, ECPixRemoveAction );
       
   296                     iFilePlugin.CreateFolderFileIndexItemL( fileParser.FullName(), ECPixAddAction );                
       
   297                     }  
       
   298                 else
       
   299                     {
       
   300                     iFilePlugin.CreateContentIndexItemL( oldFileName, ECPixRemoveAction );
       
   301                     iFilePlugin.CreateFolderFileIndexItemL( oldFileName, ECPixRemoveAction, false );
       
   302                 
       
   303                     iFilePlugin.CreateContentIndexItemL( fileParser.FullName(), ECPixAddAction );
       
   304                     iFilePlugin.CreateFolderFileIndexItemL( fileParser.FullName(), ECPixAddAction, false );
       
   305                     }                
   266                 // TODO: If this is not TRAPPED, state machine breaks 
   306                 // TODO: If this is not TRAPPED, state machine breaks 
   267                 iStepNumber++;
   307                 iStepNumber++;
   268                 }
   308                 }            
   269             iCurrentIndex++;
   309             iCurrentIndex++;
   270             }
   310             }
   271             
   311             
   272         iStepNumber = 0;
   312         iStepNumber = 0;
   273         
   313         
   284     else
   324     else
   285         {
   325         {
   286         SetNextRequest( EFolderRenamedStartHarvest );
   326         SetNextRequest( EFolderRenamedStartHarvest );
   287         }
   327         }
   288     CPIXLOGSTRING("END CFolderRenamedHarvester::GetFileId"); 
   328     CPIXLOGSTRING("END CFolderRenamedHarvester::GetFileId"); 
       
   329     OstTraceFunctionExit0( CFOLDERRENAMEDHARVESTER_GETFILEIDL_EXIT );
   289     }			
   330     }			
   290 
   331 
   291       
   332       
   292 // -----------------------------------------------------------------------------
   333 // -----------------------------------------------------------------------------
   293 // CFolderRenamedHarvester::DoCancel
   334 // CFolderRenamedHarvester::DoCancel
   294 // -----------------------------------------------------------------------------
   335 // -----------------------------------------------------------------------------
   295 //   
   336 //   
   296 void CFolderRenamedHarvester::DoCancel()
   337 void CFolderRenamedHarvester::DoCancel()
   297 	{
   338 	{
       
   339 	OstTrace0( TRACE_NORMAL, CFOLDERRENAMEDHARVESTER_DOCANCEL, "CFolderRenamedHarvester::DoCancel" );
   298 	CPIXLOGSTRING("CFolderRenamedHarvester::DoCancel");
   340 	CPIXLOGSTRING("CFolderRenamedHarvester::DoCancel");
   299 	}
   341 	}
   300 
   342 
   301 // -----------------------------------------------------------------------------
   343 // -----------------------------------------------------------------------------
   302 // CFolderRenamedHarvester::RunL
   344 // CFolderRenamedHarvester::RunL
   303 // -----------------------------------------------------------------------------
   345 // -----------------------------------------------------------------------------
   304 //   
   346 //   
   305 void CFolderRenamedHarvester::RunL()
   347 void CFolderRenamedHarvester::RunL()
   306     {
   348     {
       
   349     OstTraceFunctionEntry0( CFOLDERRENAMEDHARVESTER_RUNL_ENTRY );
   307     CPIXLOGSTRING("ENTER CFolderRenamedHarvester::RunL");
   350     CPIXLOGSTRING("ENTER CFolderRenamedHarvester::RunL");
   308      // Simple Round-Robin scheduling.
   351      // Simple Round-Robin scheduling.
   309     Deque();
   352     Deque();
   310     CActiveScheduler::Add( this );
   353     CActiveScheduler::Add( this );
   311 
   354 
   313         {
   356         {
   314 		case EFolderRenamedIdleState:
   357 		case EFolderRenamedIdleState:
   315 			{
   358 			{
   316 			if ( iRenamedFolders.Count() == 0 )
   359 			if ( iRenamedFolders.Count() == 0 )
   317 				{
   360 				{
       
   361 				OstTraceFunctionExit0( CFOLDERRENAMEDHARVESTER_RUNL_EXIT );
   318 				return; // Nothing to do.
   362 				return; // Nothing to do.
   319 				}
   363 				}
   320 
   364 
   321 			// Some rename folder action to perform
   365 			// Some rename folder action to perform
   322 			iOldFolderName.Copy( iRenamedFolders[0]->OldName() );
   366 			iOldFolderName.Copy( iRenamedFolders[0]->OldName() );
   340 			}
   384 			}
   341 		default:
   385 		default:
   342 			break;
   386 			break;
   343         }
   387         }
   344     CPIXLOGSTRING("END CFolderRenamedHarvester::RunL");
   388     CPIXLOGSTRING("END CFolderRenamedHarvester::RunL");
       
   389     OstTraceFunctionExit0( DUP1_CFOLDERRENAMEDHARVESTER_RUNL_EXIT );
   345     }
   390     }
   346 
   391 
   347 // -----------------------------------------------------------------------------
   392 // -----------------------------------------------------------------------------
   348 // CFolderRenamedHarvester::RunError
   393 // CFolderRenamedHarvester::RunError
   349 // -----------------------------------------------------------------------------
   394 // -----------------------------------------------------------------------------
   350 //   
   395 //   
   351 TInt CFolderRenamedHarvester::RunError(TInt aError)
   396 TInt CFolderRenamedHarvester::RunError(TInt aError)
   352 	{
   397 	{
       
   398     OstTrace1( TRACE_NORMAL, CFOLDERRENAMEDHARVESTER_RUNERROR, "CFolderRenamedHarvester::RunError;aError=%d", aError );
   353     CPIXLOGSTRING2("CFolderRenamedHarvester::RunError - aError: %d", aError );
   399     CPIXLOGSTRING2("CFolderRenamedHarvester::RunError - aError: %d", aError );
   354     iRenamedFolders.ResetAndDestroy();
   400     iRenamedFolders.ResetAndDestroy();
   355 	iHarvestState = EFolderRenamedIdleState;
   401 	iHarvestState = EFolderRenamedIdleState;
   356 	return KErrNone;
   402 	return KErrNone;
   357 	}
   403 	}
   361 // SetNextRequest
   407 // SetNextRequest
   362 // ---------------------------------------------------------------------------
   408 // ---------------------------------------------------------------------------
   363 //
   409 //
   364 void CFolderRenamedHarvester::SetNextRequest( TFileHarvesterState aState )
   410 void CFolderRenamedHarvester::SetNextRequest( TFileHarvesterState aState )
   365     {
   411     {
       
   412     OstTrace0( TRACE_NORMAL, CFOLDERRENAMEDHARVESTER_SETNEXTREQUEST, "CFolderRenamedHarvester::SetNextRequest" );
   366     CPIXLOGSTRING("CFolderRenamedHarvester::SetNextRequest");
   413     CPIXLOGSTRING("CFolderRenamedHarvester::SetNextRequest");
   367     if ( !IsActive() )
   414     if ( !IsActive() )
   368         {
   415         {
   369         iHarvestState = aState;
   416         iHarvestState = aState;
   370         SetActive();
   417         SetActive();
   371         TRequestStatus* status = &iStatus;
   418         TRequestStatus* status = &iStatus;
   372         User::RequestComplete( status, KErrNone );
   419         User::RequestComplete( status, KErrNone );
   373         }
   420         }
   374     }
   421     }
   375 
   422 
   376 
   423 void CFolderRenamedHarvester::HandleFolderRenameL()
       
   424     {
       
   425     RemoveBackslash(iOldFolderName);
       
   426     iFilePlugin.CreateFolderFileIndexItemL( iOldFolderName, ECPixRemoveAction );
       
   427     RemoveBackslash(iNewFolderName);
       
   428     iFilePlugin.CreateFolderFileIndexItemL( iNewFolderName, ECPixAddAction );
       
   429     }
   377 // End of File
   430 // End of File