filemanager/src/filemanager/src/components/fmdrivedetailstype.cpp
changeset 46 d58987eac7e8
parent 37 15bc28c9dd51
--- a/filemanager/src/filemanager/src/components/fmdrivedetailstype.cpp	Tue Aug 24 10:24:14 2010 +0800
+++ b/filemanager/src/filemanager/src/components/fmdrivedetailstype.cpp	Wed Sep 29 10:37:03 2010 +0800
@@ -36,13 +36,21 @@
     
     QStringList dataPathList;
     dataPathList.append( QString( FmViewDetail_Contacts ) );    
-    FmDriveDetailsDataGroup driveDetailsDataGroup( FmDriveDetailsSize::ETypeContacts, dataPathList );
+    FmDriveDetailsDataGroup driveDetailsDataGroupForContacts( FmDriveDetailsSize::ETypeContacts, dataPathList );
     
-    err = getDataSizeByAbsolutePath(driveName, driveDetailsDataGroup, detailsSizeList, isStopped);
+    err = getDataSizeByAbsolutePath(driveName, driveDetailsDataGroupForContacts, detailsSizeList, isStopped);
     if( err != FmErrNone ) {
         return err;
     }
     
+    dataPathList.clear();
+    dataPathList.append( QString( FmViewDetail_Messages ) );    
+    FmDriveDetailsDataGroup driveDetailsDataGroupForMessage( FmDriveDetailsSize::ETypeMessages, dataPathList );
+    
+    err = getDataSizeByAbsolutePath(driveName, driveDetailsDataGroupForMessage, detailsSizeList, isStopped);
+    if( err != FmErrNone ) {
+        return err;
+    }
     return FmErrNone;
 }
 int FmDriveDetailsContent::getDataSizeByTraversePath( const QString &driveName,
@@ -134,7 +142,30 @@
         QString driver(FmUtils::removePathSplash(FmUtils::getDriveNameFromPath(driveName)));
         QFileInfo fileInfo(QString(driver + (*it)));
         if (fileInfo.exists()) {
-            totalSize += fileInfo.size();
+            if (fileInfo.isFile()) {
+                totalSize += fileInfo.size();    
+            } else if (fileInfo.isDir()) {
+                QList<QDir> dirs;
+                dirs.append(QDir(fileInfo.absolutePath()));
+                // traverse the whole path
+                while (!dirs.isEmpty()) {
+                    QDir::Filters filter = QDir::NoDotAndDotDot | QDir::AllEntries;
+                    QFileInfoList infoList = dirs.first().entryInfoList( filter );
+                    for ( QFileInfoList::const_iterator it = infoList.begin(); it != infoList.end(); ++it ) {
+                        if ( *isStopped ){
+                            return FmErrCancel;
+                        }                        
+                        if ( it->isFile() ) {
+                            totalSize += it->size();  
+                        }
+                        else if ( it->isDir() ) {
+                            dirs.append( QDir( it->absoluteFilePath() ) );
+                        } 
+                    }
+                    dirs.removeFirst();
+                }
+            }
+            
         }
     }