--- a/filemanager/src/filemanager/src/components/fmdrivedetailstype.cpp Mon May 03 12:24:39 2010 +0300
+++ b/filemanager/src/filemanager/src/components/fmdrivedetailstype.cpp Tue Aug 24 10:24:14 2010 +0800
@@ -17,158 +17,128 @@
*/
#include "fmdrivedetailstype.h"
+#include "fmfiletyperecognizer.h"
#include "fmutils.h"
#include <QDir>
#include <QFileInfo>
#include <QStringList>
-QList<FmDriveDetailsDataGroup*> FmDriveDetailsContent::queryDetailsContent()
-{
- QStringList typeFilters;
- QList< FmDriveDetailsDataGroup* > dataGroupList;
- typeFilters.append( QString( "*.bmp" ) );
- typeFilters.append( QString( "*.gif" ) );
- typeFilters.append( QString( "*.jpe" ) );
- typeFilters.append( QString( "*.jpeg" ) );
- typeFilters.append( QString( "*.jpg" ) );
- typeFilters.append( QString( "*.ota" ) );
- typeFilters.append( QString( "*.png" ) );
- typeFilters.append( QString( "*.tif" ) );
- typeFilters.append( QString( "*.tiff" ) );
- typeFilters.append( QString( "*.wbmp" ) );
- typeFilters.append( QString( "*.wmf" ) );
- typeFilters.append( QString( "*.jp2" ) );
- typeFilters.append( QString( "*.jpg2" ) );
- typeFilters.append( QString( "*.jp3" ) );
- typeFilters.append( QString( "*.ico" ) );
- typeFilters.append( QString( "*.vcf" ) );
-
- dataGroupList.append( new FmDriveDetailsDataGroup( FmDriveDetailsDataGroup::EGroupImages, typeFilters ));
+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;
+ }
- typeFilters.clear();
- typeFilters.append( QString( "*.aac" ) );
- typeFilters.append( QString( "*.amr" ) );
- typeFilters.append( QString( "*.au" ) );
- typeFilters.append( QString( "*.awb" ) );
- typeFilters.append( QString( "*.mid" ) );
- typeFilters.append( QString( "*.mp3" ) );
- typeFilters.append( QString( "*.ra" ) );
- typeFilters.append( QString( "*.rmf" ) );
- typeFilters.append( QString( "*.rng" ) );
- typeFilters.append( QString( "*.snd" ) );
- typeFilters.append( QString( "*.wav" ) );
- typeFilters.append( QString( "*.wve" ) );
- typeFilters.append( QString( "*.wma" ) );
- typeFilters.append( QString( "*.m4a" ) );
- typeFilters.append( QString( "*.ott" ) );
- typeFilters.append( QString( "*.mxmf" ) );
+ 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;
+ // }
- dataGroupList.append( new FmDriveDetailsDataGroup( FmDriveDetailsDataGroup::EGroupSoundFiles, typeFilters ));
-
- typeFilters.clear();
- typeFilters.append( QString( "*.jad" ) );
- typeFilters.append( QString( "*.jar" ) );
-
- dataGroupList.append( new FmDriveDetailsDataGroup( FmDriveDetailsDataGroup::EGroupMidpJava, typeFilters ));
-
- typeFilters.clear();
- typeFilters.append( QString( "*.sis" ) );
- typeFilters.append( QString( "*.sisx" ) );
-
- dataGroupList.append( new FmDriveDetailsDataGroup( FmDriveDetailsDataGroup::EGroupNativeApps, typeFilters ));
-
- typeFilters.clear();
- typeFilters.append( QString( "*.3gp" ) );
- typeFilters.append( QString( "*.mp4" ) );
- typeFilters.append( QString( "*.nim" ) );
- typeFilters.append( QString( "*.rm" ) );
- typeFilters.append( QString( "*.rv" ) );
- typeFilters.append( QString( "*.wmv" ) );
- typeFilters.append( QString( "*.3g2" ) );
-
- dataGroupList.append( new FmDriveDetailsDataGroup( FmDriveDetailsDataGroup::EGroupVideos, typeFilters ));
-
- typeFilters.clear();
- typeFilters.append( QString( "*.doc" ) );
- typeFilters.append( QString( "*.pdf" ) );
- typeFilters.append( QString( "*.pps" ) );
- typeFilters.append( QString( "*.ppt" ) );
- typeFilters.append( QString( "*.txt" ) );
- typeFilters.append( QString( "*.xls" ) );
-
- dataGroupList.append( new FmDriveDetailsDataGroup( FmDriveDetailsDataGroup::EGroupDocuments, typeFilters ));
-
- typeFilters.clear();
- typeFilters.append( QString( "*.vcs" ) );
-
- dataGroupList.append( new FmDriveDetailsDataGroup( FmDriveDetailsDataGroup::EGroupCalendar, typeFilters ));
-
- return dataGroupList;
-
+ 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::querySizeofContent( const QString &driveName,
- QList<FmDriveDetailsSize*> &detailsSizeList, volatile bool *isStopped )
-{
+int FmDriveDetailsContent::getDataSizeByAbsolutePath( const QString &driveName,
+ const FmDriveDetailsDataGroup &dataGroup,
+ QList<FmDriveDetailsSize*> &detailsSizeList, volatile bool *isStopped )
+{
quint64 totalSize = 0;
-
- QString path;
- path.clear();
+ QStringList typeFilter = dataGroup.pathList();
- if( FmUtils::isDriveC( driveName )){
- path = QString( "c:\\Data\\" );
- }
- else{
- path = driveName;
- }
-
- QList< FmDriveDetailsDataGroup* > dataGroupList = queryDetailsContent();
-
- QStringList typeFilter;
- detailsSizeList.clear();
- QDir dir( path );
-
- for( QList< FmDriveDetailsDataGroup* >::iterator it = dataGroupList.begin();
- it!= dataGroupList.end(); ++it ){
+ 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();
}
- totalSize = 0;
- typeFilter = ( *it )->typeFilters();
-
- QList<QDir> dirs;
- dirs.append( QDir( path ) );
-
- while (!dirs.isEmpty()) {
- QFileInfoList infoList = dirs.first().entryInfoList( QDir::NoDotAndDotDot | QDir::AllEntries );
- QFileInfoList filterInforList = dirs.first().entryInfoList( typeFilter, QDir::NoDotAndDotDot | QDir::Files );
-
- for ( QFileInfoList::Iterator it = filterInforList.begin(); it != filterInforList.end(); ++it ) {
- if ( *isStopped ){
- return FmErrCancel;
- }
-
- if ( it->isFile() ) {
- totalSize += it->size();
- }
- }
-
- for ( QFileInfoList::Iterator it = infoList.begin(); it != infoList.end(); ++it ) {
- if ( *isStopped ){
- return FmErrCancel;
- }
-
- if ( it->isDir() ) {
- dirs.append( QDir( it->absoluteFilePath() ) );
- }
- }
-
- dirs.removeFirst();
- }
-
- detailsSizeList.append( new FmDriveDetailsSize( ( *it )->dataGroups(), totalSize ) );
}
+
+ detailsSizeList.append( new FmDriveDetailsSize( dataGroup.dataType(), totalSize ) );
return FmErrNone;
}
@@ -233,7 +203,7 @@
}
QFileInfoList infoList = dirs.first().entryInfoList( filter );
- for ( QFileInfoList::Iterator it = infoList.begin(); it != infoList.end(); ++it ) {
+ for ( QFileInfoList::const_iterator it = infoList.begin(); it != infoList.end(); ++it ) {
if ( *isStopped ){
return FmErrCancel;
}