Return-Path: X-Original-To: apmail-incubator-callback-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-callback-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id A7D39C75B for ; Fri, 18 May 2012 06:10:51 +0000 (UTC) Received: (qmail 60211 invoked by uid 500); 18 May 2012 06:10:51 -0000 Delivered-To: apmail-incubator-callback-commits-archive@incubator.apache.org Received: (qmail 60039 invoked by uid 500); 18 May 2012 06:10:45 -0000 Mailing-List: contact callback-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: callback-dev@incubator.apache.org Delivered-To: mailing list callback-commits@incubator.apache.org Received: (qmail 60011 invoked by uid 99); 18 May 2012 06:10:44 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 18 May 2012 06:10:44 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 9322D1686B; Fri, 18 May 2012 06:10:44 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: longwei@apache.org To: callback-commits@incubator.apache.org X-Mailer: ASF-Git Admin Mailer Subject: qt commit: added move copy for file and directory, //TODO, have the right callback Message-Id: <20120518061044.9322D1686B@tyr.zones.apache.org> Date: Fri, 18 May 2012 06:10:44 +0000 (UTC) Updated Branches: refs/heads/master a1627a028 -> 98c6ab857 added move copy for file and directory, //TODO, have the right callback Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-qt/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-qt/commit/98c6ab85 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-qt/tree/98c6ab85 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-qt/diff/98c6ab85 Branch: refs/heads/master Commit: 98c6ab857571ff66e835fa1b3dfc2bdfa330967a Parents: a1627a0 Author: Longwei Su Authored: Fri May 18 02:09:34 2012 -0400 Committer: Longwei Su Committed: Fri May 18 02:09:34 2012 -0400 ---------------------------------------------------------------------- src/plugins/fileapi.cpp | 103 ++++++++++++++++++++++++++++++++---------- src/plugins/fileapi.h | 15 +++---- www/js/file.js | 34 +++++++++++--- 3 files changed, 113 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cordova-qt/blob/98c6ab85/src/plugins/fileapi.cpp ---------------------------------------------------------------------- diff --git a/src/plugins/fileapi.cpp b/src/plugins/fileapi.cpp index f6e1e7a..0fbe6d4 100644 --- a/src/plugins/fileapi.cpp +++ b/src/plugins/fileapi.cpp @@ -81,8 +81,6 @@ void FileAPI::requestFileSystem( int scId, int ecId, unsigned short p_type, unsi */ void FileAPI::resolveLocalFileSystemURL( int scId, int ecId, QString p_url ) { QUrl url = QUrl::fromUserInput( p_url ); - qDebug() << Q_FUNC_INFO << p_url; - // Check if we have a valid URL if( !url.isValid() ) { this->callback( ecId, "FileException.cast( FileException.ENCODING_ERR )" ); @@ -116,7 +114,6 @@ void FileAPI::resolveLocalFileSystemURL( int scId, int ecId, QString p_url ) { * DirectoryEntry.getFile - http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-getFile */ void FileAPI::getFile( int scId, int ecId, QString p_path, QVariantMap p_options ) { - qDebug() << Q_FUNC_INFO << p_path; //NOTE: colon is not safe in url, it is not a valid path in Win and Mac, simple disable it here. if(p_path.contains(":")){ this->callback( ecId, "FileException.cast( FileException.ENCODING_ERR )" ); @@ -181,7 +178,6 @@ void FileAPI::getFile( int scId, int ecId, QString p_path, QVariantMap p_options * DirectoryEntry.getDirectory - http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-getDirectory */ void FileAPI::getDirectory( int scId, int ecId, QString p_path, QVariantMap p_options ) { - qDebug() << Q_FUNC_INFO << p_path; //NOTE: colon is not safe in url, it is not a valid path in Win and Mac, simple disable it here. if(p_path.contains(":")){ this->callback( ecId, "FileException.cast( FileException.ENCODING_ERR )" ); @@ -249,8 +245,6 @@ void FileAPI::getDirectory( int scId, int ecId, QString p_path, QVariantMap p_op */ void FileAPI::removeRecursively( int scId, int ecId, QString p_path ) { QDir dir( p_path ); - qDebug() << Q_FUNC_INFO << p_path; - if( FileAPI::rmDir(dir) ) { this->callback( scId, "" ); return; @@ -266,7 +260,6 @@ void FileAPI::removeRecursively( int scId, int ecId, QString p_path ) { */ void FileAPI::file( int scId, int ecId, QString p_path ) { QFileInfo fileInfo(p_path); - qDebug() << Q_FUNC_INFO << p_path; if( !fileInfo.exists() ) { this->callback( ecId, "FileException.cast( FileException.NOT_FOUND_ERR )" ); @@ -283,9 +276,6 @@ void FileAPI::file( int scId, int ecId, QString p_path ) { */ void FileAPI::write( int scId, int ecId, QString p_path, unsigned long long p_position, QString p_data ) { QFile file( p_path ); - - qDebug() << Q_FUNC_INFO << p_path; - // Check if file exists if( !file.exists() ) { this->callback( ecId, "FileException.cast( FileException.NOT_FOUND_ERR ), 0, 0" ); @@ -332,8 +322,6 @@ void FileAPI::write( int scId, int ecId, QString p_path, unsigned long long p_po void FileAPI::truncate( int scId, int ecId, QString p_path, unsigned long long p_size ) { QFile file(p_path); - qDebug() << Q_FUNC_INFO << p_path; - // Check if file exists at all if( !file.exists() ) { this->callback( ecId, "FileException.cast( FileException.NOT_FOUND_ERR ), 0, 0" ); @@ -357,8 +345,6 @@ void FileAPI::truncate( int scId, int ecId, QString p_path, unsigned long long p void FileAPI::getParent( int scId, int ecId, QString p_path ) { QDir dir( p_path ); - qDebug() << Q_FUNC_INFO << p_path; - //can't cdup more than app's root QDir root = QDir::current(); QString absPath = root.absolutePath() + "/doc"; @@ -370,8 +356,6 @@ void FileAPI::getParent( int scId, int ecId, QString p_path ) { } } - - // Extract names and send back this->callback( scId, "DirectoryEntry.cast( '" + dir.dirName() + "', '" + dir.absolutePath() + "' )" ); return; @@ -382,8 +366,6 @@ void FileAPI::getParent( int scId, int ecId, QString p_path ) { */ void FileAPI::remove( int scId, int ecId, QString p_path ) { QFileInfo fileInfo(p_path); - - qDebug() << Q_FUNC_INFO << p_path; QDir root = QDir::current(); QString absPath = root.absolutePath() + "/doc"; // Check if entry exists at all @@ -421,7 +403,6 @@ void FileAPI::remove( int scId, int ecId, QString p_path ) { void FileAPI::getMetadata( int scId, int ecId, QString p_path ) { QFileInfo fileInfo( p_path ); - qDebug() << Q_FUNC_INFO << p_path; // Check if file exists if( !fileInfo.exists() ) { @@ -440,8 +421,6 @@ void FileAPI::getMetadata( int scId, int ecId, QString p_path ) { void FileAPI::readEntries( int scId, int ecId, QString p_path ) { QDir dir( p_path ); - qDebug() << Q_FUNC_INFO << p_path; - QString entriesList = ""; if( dir.exists() ) { @@ -473,7 +452,6 @@ void FileAPI::readEntries( int scId, int ecId, QString p_path ) { */ void FileAPI::readAsText( int scId, int ecId, QString p_path ) { QFile file( p_path ); - qDebug() << Q_FUNC_INFO << p_path; // Check if file exists at all if( !file.exists() ) { @@ -497,7 +475,6 @@ void FileAPI::readAsText( int scId, int ecId, QString p_path ) { void FileAPI::readAsDataURL( int scId, int ecId, QString p_path ) { QFile file( p_path ); QFileInfo fileInfo( p_path ); - qDebug() << Q_FUNC_INFO << p_path; if(p_path.startsWith("content:")){ this->callback( ecId, "FileException.cast( FileException.NOT_READABLE_ERR )" ); @@ -527,7 +504,6 @@ void FileAPI::readAsDataURL( int scId, int ecId, QString p_path ) { * Helper function for recursively removing a directory */ bool FileAPI::rmDir( QDir p_dir ) { - qDebug() << Q_FUNC_INFO << p_dir; QDir dir = QDir::current(); QString absPath = dir.absolutePath() + "/doc"; if ( p_dir == absPath){//can't remove root dir @@ -555,3 +531,82 @@ bool FileAPI::rmDir( QDir p_dir ) { } return result; } + +void FileAPI::copyFile(int scId, int ecId,const QString& sourceFile, const QString& destinationParentDir, const QString& newName) +{ + qDebug()<< Q_FUNC_INFO; + QString destinationFile; + if (newName.isEmpty()){ + QFileInfo fileInfo(sourceFile); + destinationFile = destinationParentDir + "/" + fileInfo.fileName(); + destinationFile = destinationParentDir + "/" + newName; + } else { + } + if(QFile::copy(sourceFile, destinationFile)){ + qDebug()<< Q_FUNC_INFO << "success"; + }; + this->callback( scId, "" ); +} + +void FileAPI::moveFile(int scId, int ecId,const QString& sourceFile, const QString& destinationParentDir, const QString& newName){ + qDebug()<< Q_FUNC_INFO; + copyFile(scId,ecId,sourceFile, destinationParentDir, newName); + remove(scId,ecId, sourceFile); + this->callback( scId, "" ); +} + +void FileAPI::copyDir(int scId, int ecId,const QString& sourceFolder, const QString& destinationParentDir, const QString& newName) +{ + qDebug()<< Q_FUNC_INFO; + QDir sourceDir(sourceFolder); + QString destFolder(destinationParentDir + "/" + newName); + if(newName.isEmpty()){ + destFolder = (destinationParentDir + "/" + sourceDir.dirName()); + } + qDebug() << "destFolder: "<callback( scId, "" ); +} + +void FileAPI::moveDir(int scId, int ecId,const QString& sourceDir, const QString& destinationParentDir, const QString& newName){ + qDebug()<< Q_FUNC_INFO; + copyDir(scId, ecId, sourceDir, destinationParentDir,newName); + removeRecursively(scId, ecId,sourceDir ); + this->callback( scId, "" ); +} + +//helper function to copy foler to new destination +bool FileAPI::copyFolder(const QString& sourceFolder, const QString& destFolder) +{ + qDebug()<< Q_FUNC_INFO; + QDir sourceDir(sourceFolder); + if(!sourceDir.exists()) + return false; + QDir destDir(destFolder); + if(!destDir.exists()) + { + destDir.mkdir(destFolder); + } + QStringList files = sourceDir.entryList(QDir::Files); + for(int i = 0; i< files.count(); i++) + { + QString srcName = sourceFolder + "/" + files[i]; + QString destName = destFolder + "/" + files[i]; + QFile::copy(srcName, destName); + } + files.clear(); + files = sourceDir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot); + for(int i = 0; i< files.count(); i++) + { + QString srcName = sourceFolder + "/" + files[i]; + QString destName = destFolder + "/" + files[i]; + copyFolder(srcName, destName); + } + return true; +} + http://git-wip-us.apache.org/repos/asf/incubator-cordova-qt/blob/98c6ab85/src/plugins/fileapi.h ---------------------------------------------------------------------- diff --git a/src/plugins/fileapi.h b/src/plugins/fileapi.h index 6870886..3dc5c83 100644 --- a/src/plugins/fileapi.h +++ b/src/plugins/fileapi.h @@ -46,17 +46,14 @@ public slots: void readEntries( int scId, int ecId, QString p_path ); void readAsDataURL( int scId, int ecId, QString p_path ); void readAsText( int scId, int ecId, QString p_path ); -// void copyTo(); -// void moveTo(); -// void canCopyMoveSrc(); -// void doCopyMove(); -// void getFileMetadata(); -// void readEntries(); -// void readFile(); -// void readAsText(); -// void readAsDataUrl(); + void copyFile(int scId, int ecId,const QString& sourceFile, const QString& destinationParentDir, const QString& newName); + void moveFile(int scId, int ecId,const QString& sourceFile, const QString& destinationParentDir, const QString& newName); + void copyDir(int scId, int ecId,const QString& sourceFolder, const QString& destFolder, const QString& newName); + void moveDir(int scId, int ecId,const QString& sourceFolder, const QString& destFolder, const QString& newName); + protected: static bool rmDir( QDir p_dir ); + static bool copyFolder(const QString& sourceFolder, const QString& destFolder); private: static FileAPI* m_fileAPI; http://git-wip-us.apache.org/repos/asf/incubator-cordova-qt/blob/98c6ab85/www/js/file.js ---------------------------------------------------------------------- diff --git a/www/js/file.js b/www/js/file.js index c5a2a5a..c2d508b 100644 --- a/www/js/file.js +++ b/www/js/file.js @@ -119,12 +119,16 @@ Entry.prototype.getMetadata = function( successCallback, errorCallback ) { Entry.prototype.setMetadata = function( successCallback, errorCallback ) { //Cordova.exec(successCallback, errorCallback, "com.cordova.File", "setMetadata", [this.fullPath]); } -Entry.prototype.moveTo = function( parent, newName, successCallback, errorCallback ) { - } -Entry.prototype.moveTo = function( parent, newName, successCallback, errorCallback ) { - } -Entry.prototype.copyTo = function( parent, newName, successCallback, errorCallback ) { - } +/** + * Copies or Move a file to a new location + * + * @param {Entry} parent the directory to which to copy the entry + * @param {DOMString} newName the new name of the entry, defaults to the current name + */ +//Entry.prototype.moveTo = function( parent, newName, successCallback, errorCallback ) { +// } +//Entry.prototype.copyTo = function( parent, newName, successCallback, errorCallback ) { +// } Entry.prototype.toURL = function( mimeType ) { return "file://" + this.fullPath; } @@ -352,6 +356,7 @@ FileReader.prototype.readAsArrayBuffer = function( file ) { } FileReader.prototype.readAsBinaryString = function( file ) { } + FileReader.prototype.readAsText = function( file ) { this.readyState = FileReader.EMPTY; this.result = null; @@ -442,6 +447,13 @@ FileEntry.prototype.file = function( successCallback, errorCallback ) { // Lets get the fileinfo Cordova.exec(successCallback, errorCallback, "com.cordova.File", "file", [this.fullPath]); } +FileEntry.prototype.copyTo = function(parent, newName, successCallback, errorCallback) { + Cordova.exec(successCallback, errorCallback, "com.cordova.File", "copyFile", [this.fullPath, parent, newName]); +}; + +FileEntry.prototype.moveTo = function(parent, newName, successCallback, errorCallback) { + Cordova.exec(successCallback, errorCallback, "com.cordova.File", "moveFile", [this.fullPath, parent, newName]); +}; /** * DirectoryReader interface @@ -507,6 +519,16 @@ DirectoryEntry.prototype.removeRecursively = function( successCallback, errorCal Cordova.exec(successCallback, errorCallback, "com.cordova.File", "removeRecursively", [this.fullPath]); } +DirectoryEntry.prototype.copyTo = function(parent, newName, successCallback, errorCallback) { + Cordova.exec(successCallback, errorCallback, "com.cordova.File", "copyDir", [this.fullPath, parent, newName]); +}; + +DirectoryEntry.prototype.moveTo = function(parent, newName, successCallback, errorCallback) { + Cordova.exec(successCallback, errorCallback, "com.cordova.File", "moveDir", [this.fullPath, parent, newName]); +}; + + + /** * FileSystem interface * http://www.w3.org/TR/file-system-api/#the-filesystem-interface