From 9ac8e477c0fda6aed3878a4cf165257f00e1bf83 Mon Sep 17 00:00:00 2001 From: Ian Clelland Date: Fri, 7 Feb 2014 10:06:15 -0500 Subject: [PATCH] CB-5959: Android, iOS: Return size with Entry.getMetadata() method --- src/android/FileUtils.java | 13 ++----------- src/ios/CDVLocalFilesystem.m | 4 +++- www/Entry.js | 4 ++-- www/Metadata.js | 13 +++++++++++-- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/android/FileUtils.java b/src/android/FileUtils.java index 23496caa7..6acc101fa 100644 --- a/src/android/FileUtils.java +++ b/src/android/FileUtils.java @@ -314,23 +314,14 @@ public void run() throws IOException, JSONException { } },callbackContext); } - else if (action.equals("getMetadata")) { - final String fname=args.getString(0); - threadhelper( new FileOp( ){ - public void run() throws FileNotFoundException, JSONException, MalformedURLException { - JSONObject obj = getFileMetadata(fname); - callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, obj.getLong("lastModifiedDate"))); - } - }, callbackContext); - } - else if (action.equals("getFileMetadata")) { + else if (action.equals("getMetadata") || action.equals("getFileMetadata")) { final String fname=args.getString(0); threadhelper( new FileOp( ){ public void run() throws FileNotFoundException, JSONException, MalformedURLException { JSONObject obj = getFileMetadata(fname); callbackContext.success(obj); } - },callbackContext); + }, callbackContext); } else if (action.equals("getParent")) { final String fname=args.getString(0); diff --git a/src/ios/CDVLocalFilesystem.m b/src/ios/CDVLocalFilesystem.m index f16470ff3..f80d1fa79 100644 --- a/src/ios/CDVLocalFilesystem.m +++ b/src/ios/CDVLocalFilesystem.m @@ -257,9 +257,11 @@ - (void)getMetadataForURL:(CDVFilesystemURL *)url callback:(void (^)(CDVPluginRe NSDictionary* fileAttribs = [fileMgr attributesOfItemAtPath:[self filesystemPathForURL:url] error:&error]; if (fileAttribs) { + // Ensure that directories (and other non-regular files) report size of 0 + unsigned long long size = ([fileAttribs fileType] == NSFileTypeRegular ? [fileAttribs fileSize] : 0); NSDate* modDate = [fileAttribs fileModificationDate]; if (modDate) { - result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDouble:[modDate timeIntervalSince1970] * 1000]; + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:@{@"modificationTime": @([modDate timeIntervalSince1970] * 1000), @"size": @(size)}]; } } else { // didn't get fileAttribs diff --git a/www/Entry.js b/www/Entry.js index 223e2bcc7..6f6ad61dd 100644 --- a/www/Entry.js +++ b/www/Entry.js @@ -59,8 +59,8 @@ function Entry(isFile, isDirectory, name, fullPath, fileSystem) { */ Entry.prototype.getMetadata = function(successCallback, errorCallback) { argscheck.checkArgs('FF', 'Entry.getMetadata', arguments); - var success = successCallback && function(lastModified) { - var metadata = new Metadata(lastModified); + var success = successCallback && function(entryMetadata) { + var metadata = new Metadata(entryMetadata); successCallback(metadata); }; var fail = errorCallback && function(code) { diff --git a/www/Metadata.js b/www/Metadata.js index bee26bda6..dadae7e29 100644 --- a/www/Metadata.js +++ b/www/Metadata.js @@ -24,8 +24,17 @@ * * {Date} modificationTime (readonly) */ -var Metadata = function(time) { - this.modificationTime = (typeof time != 'undefined'?new Date(time):null); +var Metadata = function(metadata) { + if (typeof metadata == "object") { + this.modificationTime = new Date(metadata.modificationTime); + this.size = +(metadata.size); + } else if (typeof metadata == "undefined") { + this.modificationTime = null; + this.size = null; + } else { + /* Backwards compatiblity with platforms that only return a timestamp */ + this.modificationTime = new Date(metadata); + } }; module.exports = Metadata;