filemanager/src/filemanager/src/components/fmdrivedetailstype.cpp
branchRCL_3
changeset 38 491b3ed49290
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/src/filemanager/src/components/fmdrivedetailstype.cpp	Tue Aug 31 15:06:05 2010 +0300
@@ -0,0 +1,225 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ * 
+ * Contributors:
+ *     
+ * 
+ * Description:
+ *      The source file of the drive details type
+ */
+
+#include "fmdrivedetailstype.h"
+#include "fmfiletyperecognizer.h"
+#include "fmutils.h"
+
+#include <QDir>
+#include <QFileInfo>
+#include <QStringList>
+
+int FmDriveDetailsContent::querySizeofContent( const QString &driveName,
+        QList<FmDriveDetailsSize*> &detailsSizeList, volatile bool *isStopped )
+{      
+    int err = FmErrNone;
+    detailsSizeList.clear();
+    err = getDataSizeByTraversePath( driveName, detailsSizeList, isStopped );
+    if( err != FmErrNone ) {
+        return err;
+    }
+    
+    QStringList dataPathList;
+    dataPathList.append( QString( FmViewDetail_Contacts ) );    
+    FmDriveDetailsDataGroup driveDetailsDataGroup( FmDriveDetailsSize::ETypeContacts, dataPathList );
+    
+    err = getDataSizeByAbsolutePath(driveName, driveDetailsDataGroup, detailsSizeList, isStopped);
+    if( err != FmErrNone ) {
+        return err;
+    }
+    
+    return FmErrNone;
+}
+int FmDriveDetailsContent::getDataSizeByTraversePath( const QString &driveName,
+            QList<FmDriveDetailsSize*> &detailsSizeList, volatile bool *isStopped )
+{
+    qint64 imageSize( 0 );
+    qint64 soundSize( 0 );
+    qint64 midpJavaSize( 0 );
+    qint64 nativeAppsSize( 0 );
+    qint64 videoSize( 0 );
+    qint64 documentsSize( 0 );
+   
+    FmFileTypeRecognizer fileTypeRecognizer;
+    
+    QList<QDir> dirs;
+    dirs.append( QDir( driveName ) );
+    
+    // traverse the whole drive
+    while (!dirs.isEmpty()) {
+        QDir::Filters filter = QDir::NoDotAndDotDot | QDir::AllEntries;
+        // do not summarize system and hidden files, these size will go into others category
+        // if( isSysHiddenIncluded ) {
+        // filter = filter | QDir::Hidden | QDir::System;
+        // }
+
+        QFileInfoList infoList = dirs.first().entryInfoList( filter );
+        for ( QFileInfoList::const_iterator it = infoList.begin(); it != infoList.end(); ++it ) {
+            if ( *isStopped ){
+                return FmErrCancel;
+            }
+            
+            if ( it->isFile() ) {
+            FmFileTypeRecognizer::FileType fileType = 
+                    fileTypeRecognizer.getType( it->absoluteFilePath() );
+            switch ( fileType )
+                {
+                case FmFileTypeRecognizer::FileTypeImage:
+                    imageSize += it->size();
+                    break;
+                case FmFileTypeRecognizer::FileTypeTone:
+                    soundSize += it->size();
+                    break;
+                case FmFileTypeRecognizer::FileTypeJava:
+                    midpJavaSize += it->size();
+                    break;
+                case FmFileTypeRecognizer::FileTypeSisx:
+                    nativeAppsSize += it->size();
+                    break;
+                case FmFileTypeRecognizer::FileTypeVideo:
+                    videoSize += it->size();
+                    break;
+                case FmFileTypeRecognizer::FileTypeText:
+                    documentsSize += it->size();
+                    break;
+                default:
+                    // do not need handle other type 
+                    break;
+                }
+            }
+            else if ( it->isDir() ) {
+                dirs.append( QDir( it->absoluteFilePath() ) );
+            } 
+        }
+        dirs.removeFirst();
+    }
+       
+    // store result to detailsSizeList.
+    detailsSizeList.append( new FmDriveDetailsSize( FmDriveDetailsSize::ETypeImages, imageSize ) ) ;
+    detailsSizeList.append( new FmDriveDetailsSize( FmDriveDetailsSize::ETypeSoundFiles, soundSize ) );
+    detailsSizeList.append( new FmDriveDetailsSize( FmDriveDetailsSize::ETypeMidpJava, midpJavaSize ) );
+    detailsSizeList.append( new FmDriveDetailsSize( FmDriveDetailsSize::ETypeNativeApps, nativeAppsSize ) );
+    detailsSizeList.append( new FmDriveDetailsSize( FmDriveDetailsSize::ETypeVideos, videoSize ) );
+    detailsSizeList.append( new FmDriveDetailsSize( FmDriveDetailsSize::ETypeDocuments, documentsSize ) );
+    return FmErrNone;
+}
+
+int FmDriveDetailsContent::getDataSizeByAbsolutePath( const QString &driveName,
+        const FmDriveDetailsDataGroup &dataGroup,
+            QList<FmDriveDetailsSize*> &detailsSizeList, volatile bool *isStopped )
+{
+    quint64 totalSize = 0;
+    QStringList typeFilter = dataGroup.pathList();
+    
+    for( QStringList::const_iterator it = typeFilter.begin(); 
+           it!= typeFilter.end(); ++it ) {
+        if ( *isStopped ){
+            return FmErrCancel;
+        }        
+        QString driver(FmUtils::removePathSplash(FmUtils::getDriveNameFromPath(driveName)));
+        QFileInfo fileInfo(QString(driver + (*it)));
+        if (fileInfo.exists()) {
+            totalSize += fileInfo.size();
+        }
+    }
+ 
+    detailsSizeList.append( new FmDriveDetailsSize( dataGroup.dataType(), totalSize ) );
+    return FmErrNone;
+}
+
+int FmFolderDetails::queryDetailOfContentList( const QStringList folderPathList,int &numofFolders, 
+                                    int &numofFiles, quint64 &totalSize,
+                                    volatile bool *isStopped, bool isSysHiddenIncluded )
+{
+    numofFolders = 0;
+    numofFiles = 0;
+    totalSize = 0;
+
+    int tempNumofFolders = 0;
+    int tempNumofFiles = 0;
+    quint64 tempSize = 0;
+
+    int ret = FmErrNone;
+
+    foreach( const QString& folderPath, folderPathList ) {
+        QFileInfo fileInfo( folderPath );
+        if( fileInfo.isDir() ){
+            int tempNumofSubFolders = 0;
+            ret = getNumofSubfolders( folderPath, tempNumofSubFolders,
+                tempNumofFiles, tempSize, isStopped, isSysHiddenIncluded );
+            tempNumofFolders = tempNumofSubFolders + 1; // add itself to folder count;
+        } else if( fileInfo.isFile() ) {
+            tempNumofFiles = 1;
+            tempSize = fileInfo.size();
+            ret = FmErrNone;
+        } else {
+            ret = FmErrIsNotFileOrFolder;
+        }
+        if( ret != FmErrNone ) {
+            return ret;
+        }
+        numofFolders+= tempNumofFolders;
+        numofFiles  += tempNumofFiles;
+        totalSize   += tempSize;
+
+        tempNumofFolders = 0;
+        tempNumofFiles      = 0;
+        tempSize    = 0;
+    }
+
+    return ret;
+}
+
+int FmFolderDetails::getNumofSubfolders( const QString &folderPath, int &numofSubFolders, 
+                                          int &numofFiles, quint64 &sizeofFolder,
+                                          volatile bool *isStopped, bool isSysHiddenIncluded )
+{
+    numofSubFolders = 0;
+    numofFiles = 0;
+    sizeofFolder = 0;
+
+    QList<QDir> dirs;
+    dirs.append( QDir( folderPath ) );
+    
+    while (!dirs.isEmpty()) {
+        QDir::Filters filter = QDir::NoDotAndDotDot | QDir::AllEntries;
+        if( isSysHiddenIncluded ) {
+            filter = filter | QDir::Hidden | QDir::System;
+        }
+
+        QFileInfoList infoList = dirs.first().entryInfoList( filter );
+        for ( QFileInfoList::const_iterator it = infoList.begin(); it != infoList.end(); ++it ) {
+            if ( *isStopped ){
+                return FmErrCancel;
+            }
+            
+            if ( it->isFile() ) {
+                ++numofFiles;
+                sizeofFolder += it->size();
+            }
+            else if ( it->isDir() ) {
+                ++numofSubFolders;
+                dirs.append( QDir( it->absoluteFilePath() ) );
+            } 
+        }
+        
+        dirs.removeFirst();
+    }
+    
+    return FmErrNone;
+}