--- /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;
+}