homescreenpluginsrv/hspsmanager/src/hspsinstallationhandler.cpp
branchRCL_3
changeset 23 ace62b58f4b2
parent 22 1b207dd38b72
child 25 9e077f9a342c
--- a/homescreenpluginsrv/hspsmanager/src/hspsinstallationhandler.cpp	Tue May 25 13:01:39 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/src/hspsinstallationhandler.cpp	Wed Jun 09 10:01:25 2010 +0300
@@ -520,28 +520,28 @@
 //
 void ChspsInstallationHandler::FinalizeParsingL()
     {               
-    // Check resources
+    // Add resources
     TFileName interfacePath( GetInterfacePath() );       
     if ( interfacePath.Length() )        
-       {
-       // If name of the DTD file was specified in the manifest
-       if ( iDtdFile )
-          { 
-          TParse pathParser;
-          pathParser.Set( iThemeFilePath, NULL, NULL );                               
-          pathParser.PopDir(); // pop locale specific folder
-          
-          // Find locale specific DTD file
-          AddHspsLocalesV2L( pathParser.FullName() );
-          }
-       
-       // Find Xuikon resources of each locale 
-       AddInterfaceResourcesV2L( interfacePath );
+        {
+        // If name of the DTD file was specified in the manifest
+        if ( iDtdFile )
+            { 
+            TParse pathParser;
+            pathParser.Set( iThemeFilePath, NULL, NULL );                               
+            pathParser.PopDir(); // pop locale specific folder
+            
+            // Find locale specific DTD file
+            AddLocalesL( pathParser.FullName(), ETrue );
+            }
+        
+        // Find Xuikon resources of each locale 
+        AddInterfaceResourcesV2L( interfacePath );
        }
     else
        {
        // Find DTD files and locale specific resources from subdirectories under the installation path
-       AddLocalesL( iThemeFilePath );                       
+       AddLocalesL( iThemeFilePath, EFalse );                       
        }       
           
    // Validate other input from the manifest
@@ -2198,126 +2198,6 @@
     }
 
 // -----------------------------------------------------------------------------
-// Finds locale specific subdirectories and DTD resources and appends those
-// into the resource array 
-// Should be executed prior to the CheckHeader method!
-// -----------------------------------------------------------------------------
-//
-void ChspsInstallationHandler::AddHspsLocalesV2L(
-        const TDesC& aPath )
-    {           
-    // Find all locale specific subfolders
-    TFindFile fileFinder( iFsSession );
-    _LIT( KFilter, "*" );
-    CDir* fileList( NULL );    
-    fileFinder.FindWildByDir( KFilter, aPath, fileList );
-    if ( fileList )
-        {
-        CleanupStack::PushL( fileList );
-        TFileName localePath;
-        for( TInt i = 0; i < fileList->Count(); i++ )       
-            {
-            const TEntry& entry = (*fileList)[i];                        
-            if ( entry.IsDir() )
-                {
-                TInt languageIndex = 0;
-                TLex lex( entry.iName );
-                TInt error = lex.Val( languageIndex );    
-                                
-                // See enumarations from e32lang.h
-                if( !error && languageIndex >= ELangTest )
-                    {
-                
-                    // Process only supported languages
-                    CArrayFixFlat<TInt>* languageCodes = NULL;
-                    hspsServerUtil::GetInstalledLanguagesL( languageCodes );
-                    CleanupStack::PushL( languageCodes );                    
-                    TBool isSupported = EFalse;
-                    for( TInt i=0; i<languageCodes->Count(); i++ )
-                        {
-                        if( languageCodes->At( i ) == languageIndex )
-                            {
-                            isSupported = ETrue;
-                            break;
-                            }
-                        }
-                    CleanupStack::PopAndDestroy( languageCodes );                                       
-                    if( !isSupported )
-                        {
-                        continue;
-                        }           
-                    
-                    // If we found the first language specification          
-                    if ( !iDefaultSpecificationSet )
-                        {
-                        // Assume this is the default language shown incase 
-                        // there is no locale for the active UI language
-                        iDefaultSpecification = (TLanguage)languageIndex;
-                        iDefaultSpecificationSet = ETrue;
-                        }
-                    
-                    // Setup a path to the subdirectory 
-                    localePath.Copy( aPath );
-                    localePath.Append( entry.iName );
-                    localePath.Append( KPathDelim );
-                    
-                    // Find localized resources 
-                    AddLocalizedResourcesDTDV2L( 
-                        localePath,
-                        (TLanguage)languageIndex );
-                    }                                       
-                }
-                        
-            }        
-        CleanupStack::PopAndDestroy( fileList );
-        fileList = NULL;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// Adds localized resources from the provided subdirectory
-// -----------------------------------------------------------------------------
-//
-void ChspsInstallationHandler::AddLocalizedResourcesDTDV2L(
-        const TDesC& aPath,
-        const TLanguage aLanguage )
-    {
-    // Append path with the default name of DTD files
-    const TInt len = aPath.Length() + iDtdFile->Des().Length();
-    HBufC* dtdPath = HBufC::NewLC( len );
-    dtdPath->Des().Copy( aPath );    
-    dtdPath->Des().Append( *iDtdFile );
-        
-    // Check whether the file exists
-    if( !BaflUtils::FileExists( iFsSession, *dtdPath ) )
-        {
-#ifdef HSPS_LOG_ACTIVE  
-        if( iLogBus )
-            {
-            iLogBus->LogText( _L( "ChspsInstallationHandler::AddLocalizedResourcesDTDV2L(): - DTD file was not found '%S'" ),
-                    &dtdPath );
-            }
-#endif            
-        iFileNotFound = ETrue;
-        iResult->iXuikonError = KErrDtdFileNotFound;
-        User::Leave( KErrNotFound );
-        }
-        
-    // Store locale specific DTD files into the resource array
-    TPtrC8 mediaType;
-    TPtrC8 tags;
-    AddResourceL(
-        *iResourceList,
-        *dtdPath,
-        aLanguage,
-        EResourceDTD,
-        mediaType,
-        tags );                                
-    
-    CleanupStack::PopAndDestroy( dtdPath );
-    }
-
-// -----------------------------------------------------------------------------
 // ChspsInstallationHandler::AddInterfaceResourcesV2L
 // -----------------------------------------------------------------------------
 //
@@ -2353,7 +2233,8 @@
 // -----------------------------------------------------------------------------
 //
 void ChspsInstallationHandler::AddLocalesL(
-        const TDesC& aPath )
+        const TDesC& aPath,
+        const TBool aProcessOnlyDTD )
     {
     // Retrieve phone supported language.
     CArrayFixFlat<TInt>* languageCodes = NULL;
@@ -2361,19 +2242,32 @@
     CleanupStack::PushL( languageCodes );     
     
     // Ensure that path contains '\' at the end.
-    TFileName xuikonPath;
-    xuikonPath.Copy( aPath );
-    if( xuikonPath.Length() > KPathDelim().Length() )
+    TFileName pathBase;
+    pathBase.Copy( aPath );
+    if( pathBase.Length() > KPathDelim().Length() )
         {
-        if( xuikonPath.Mid( xuikonPath.Length() -
-                            KPathDelim().Length()
-                            ).Compare( KPathDelim ) != 0 )
+        if( pathBase.Mid( pathBase.Length() -
+                          KPathDelim().Length()
+                         ).Compare( KPathDelim ) != 0 )
             {
-            xuikonPath.Append( KPathDelim );
+            pathBase.Append( KPathDelim );
             }
         }
             
-    _LIT( KFormatting, "%02d" );    
+    TParsePtrC driveParser( pathBase );
+    TInt driveEnum = KErrNotFound;
+    
+    if( !aProcessOnlyDTD )
+        {
+        if( driveParser.DrivePresent() && driveParser.Drive().Length() > 0 )
+            {
+            User::LeaveIfError(
+                    RFs::CharToDrive( ( driveParser.Drive() )[0],
+                            driveEnum ) );
+            }
+        }
+    
+    _LIT( KFormatNN, "%02d" );    
     TFileName localePath;
     
     for( TInt i = 0; i < languageCodes->Count(); i++ )
@@ -2383,8 +2277,15 @@
         // Construct locale path using two digit minium
         // width and zero as padding.
         
-        localePath.Copy( xuikonPath );
-        localePath.AppendFormat( KFormatting, languageCode );        
+        localePath.Copy( pathBase );
+        if( languageCode < 10 )
+            {
+            localePath.AppendFormat( KFormatNN, languageCode );
+            }
+        else
+            {
+            localePath.AppendNum( languageCode );
+            }
         localePath.Append( KPathDelim );
 
         // Check if folder for supported language exists.        
@@ -2395,10 +2296,10 @@
             exists = ETrue;
             }
         
-        // Support also one digit type folder naming.
+        // Support also one digit type folder naming possibly used by the imports.
         if( !exists && languageCode < 10 )
             {
-            localePath.Copy( xuikonPath );
+            localePath.Copy( pathBase );
             localePath.AppendNum( languageCode );        
             localePath.Append( KPathDelim );
             
@@ -2418,12 +2319,24 @@
                 iDefaultSpecification = (TLanguage)languageCode;
                 iDefaultSpecificationSet = ETrue;
                 }                                                            
-        
-        
-            // Find and add localized resources 
-            AddLocalizedResourcesL( 
-                    localePath,
-                    (TLanguage)languageCode );            
+                
+            // Add dtd file if existing.
+            AddDtdFileL( localePath, (TLanguage)languageCode );
+            
+            if( !aProcessOnlyDTD )
+                {
+                // Find localized files from the provided directory
+                RArray<TInt> driveArray;
+                CleanupClosePushL( driveArray );                
+                driveArray.Append( driveEnum );
+                
+                FindResourceFilesL( localePath,
+                                    EFalse,
+                                    driveArray,
+                                    NULL );
+                
+                CleanupStack::PopAndDestroy(); // driveArray
+                }
             }        
         }
     
@@ -2432,13 +2345,13 @@
     }
 
 // -----------------------------------------------------------------------------
-// Adds localized resources from the provided subdirectory
+// Adds localized dtd resources from the provided subdirectory
 // -----------------------------------------------------------------------------
 //
-void ChspsInstallationHandler::AddLocalizedResourcesL(
+void ChspsInstallationHandler::AddDtdFileL(
         const TDesC& aPath,
         const TLanguage aLanguage )
-    {
+    {    
     // If FileDTD was declared
     if ( iDtdFile && iDtdFile->Des().Length() )
         {    
@@ -2475,17 +2388,7 @@
             tagsPtr );
         
         CleanupStack::PopAndDestroy( dtdPath );
-        }
-    
-    // Find localized files from the provided directory
-    RArray<TInt> driveArray;
-    CleanupClosePushL( driveArray );   
-    driveArray.Append( EDriveE );
-    driveArray.Append( EDriveC );
-        
-    FindResourceFilesL( aPath, EFalse, driveArray, NULL );
-    
-    CleanupStack::PopAndDestroy(); // driveArray        
+        }          
     }
 
 // -----------------------------------------------------------------------------