@@ -21,6 +21,7 @@ package org.hamster.dropbox
2121
2222 import org.hamster.dropbox.models.AccountInfo ;
2323 import org.hamster.dropbox.models.DropboxFile ;
24+ import org.hamster.dropbox.models.SharesInfo ;
2425 import org.hamster.dropbox.utils.OAuthHelper ;
2526
2627 import ru.inspirit.net.MultipartURLLoader ;
@@ -51,6 +52,16 @@ package org.hamster.dropbox
5152 [Event (name="getFileFault" , type="org.hamster.dropbox.DropboxEvent" )]
5253 [Event (name="metadataResult" , type="org.hamster.dropbox.DropboxEvent" )]
5354 [Event (name="metadataFault" , type="org.hamster.dropbox.DropboxEvent" )]
55+ [Event (name="revisionResult" , type="org.hamster.dropbox.DropboxEvent" )]
56+ [Event (name="revisionFault" , type="org.hamster.dropbox.DropboxEvent" )]
57+ [Event (name="restoreResult" , type="org.hamster.dropbox.DropboxEvent" )]
58+ [Event (name="restoreFault" , type="org.hamster.dropbox.DropboxEvent" )]
59+ [Event (name="searchResult" , type="org.hamster.dropbox.DropboxEvent" )]
60+ [Event (name="searchFault" , type="org.hamster.dropbox.DropboxEvent" )]
61+ [Event (name="sharesResult" , type="org.hamster.dropbox.DropboxEvent" )]
62+ [Event (name="sharesFault" , type="org.hamster.dropbox.DropboxEvent" )]
63+ [Event (name="mediaResult" , type="org.hamster.dropbox.DropboxEvent" )]
64+ [Event (name="mediaFault" , type="org.hamster.dropbox.DropboxEvent" )]
5465
5566 /**
5667 * Dropbox client class, in order to use, you should build an instance of
@@ -82,6 +93,8 @@ package org.hamster.dropbox
8293 protected static const ACCESS_TOKEN : String = 'access_token' ;
8394 protected static const ACCOUNT_INFO : String = 'account_info' ;
8495 protected static const DROPBOX_FILE : String = 'dropbox_file' ;
96+ protected static const DROPBOX_FILE_LIST : String = 'dropbox_file_list' ;
97+ protected static const SHARES_INFO : String = 'shares_info' ;
8598
8699 /**
87100 * xperiments UPDATE
@@ -381,20 +394,34 @@ package org.hamster.dropbox
381394 * @param hash pass a hash value to perform better performance
382395 * @param list if query a directory, true to show sub list.
383396 * @param root, optional, default is "dropbox" 2011/01/22
397+ * @param include_deleted optional, added in v1
398+ * @param rev optional, added in v1
399+ * @param locale optional, added in v1
384400 * @return urlLoader
385401 */
386402 public function metadata (path :String ,
387- fileLimit :int , hash :String , list :Boolean ,
388- root :String = DropboxConfig.DROPBOX ):URLLoader
403+ fileLimit :int ,
404+ hash :String ,
405+ list :Boolean ,
406+ include_deleted :Boolean = false ,
407+ rev :String = "" ,
408+ locale :String = "" ,
409+ root :String = DropboxConfig.DROPBOX ):URLLoader
389410 {
390411 var params: Object = {
391412 "file_limit" : fileLimit,
392413 "hash" : hash,
393414 "list" : list
394415 };
395416
417+ // added in v1
418+ if (include_deleted == true )
419+ buildOptionalParameters(params, 'include_deleted' , include_deleted);
420+ buildOptionalParameters(params, 'rev' , rev);
421+ buildOptionalParameters(params, 'locale' , locale );
422+
396423 var urlRequest: URLRequest = buildURLRequest(
397- config. server, " /metadata/" + root + '/' + buildFilePath(path), params);
424+ config. server, ' /metadata/' + root + '/' + buildFilePath(path), params);
398425 return this . load (urlRequest, DropboxEvent. METADATA_RESULT ,
399426 DropboxEvent. METADATA_FAULT , DROPBOX_FILE );
400427 }
@@ -451,17 +478,29 @@ package org.hamster.dropbox
451478 * @param fileName
452479 * @param data
453480 * @param root, optional, default is "dropbox" 2011/01/22
481+ * @param locale optional added in v1
482+ * @param overwrite optional added in v1
483+ * @param parent_rev optional added in v1
454484 * @return multipartURLLoader
455485 */
456486 public function putFile (filePath :String ,
457487 fileName :String ,
458488 data :ByteArray ,
489+ locale :String = "" ,
490+ overwrite :Boolean = true ,
491+ parent_rev :String = "" ,
459492 root :String = DropboxConfig.DROPBOX ):MultipartURLLoader
460493 {
461494 var url : String = this . buildFullURL(config. contentServer, '/files/' + root + '/' + buildFilePath(filePath));
462495 var params: Object = {
463496 "file" : fileName
464497 };
498+
499+ //added in version 1
500+ buildOptionalParameters(params, 'locale' , locale );
501+ params. overwrite = overwrite. toString ();
502+ buildOptionalParameters(params, 'parent_rev' , parent_rev);
503+
465504 var urlReqHeader: URLRequestHeader = OAuthHelper. buildURLRequestHeader(url , params,
466505 config. consumerKey, config. consumerSecret,
467506 config. accessTokenKey, config. accessTokenSecret, URLRequestMethod . POST );
@@ -475,6 +514,117 @@ package org.hamster.dropbox
475514 return m;
476515 }
477516
517+ /**
518+ * added in v1, get revisions of a file.
519+ * https://api.dropbox.com/1/revisions/<root >/<path >
520+ *
521+ * @param filePathWithName
522+ * @root optional, default is dropbox.
523+ */
524+ public function revisions (filePathWithName :String ,
525+ root :String = DropboxConfig.DROPBOX ):URLLoader
526+ {
527+ var urlRequest: URLRequest = buildURLRequest(
528+ config. server, '/revisions/' + root + '/' + buildFilePath(filePathWithName), null );
529+ return this . load (urlRequest, DropboxEvent. REVISION_RESULT ,
530+ DropboxEvent. REVISION_FAULT , DROPBOX_FILE_LIST , URLLoaderDataFormat . TEXT );
531+ }
532+
533+ /**
534+ * added in v1, restore file by rev.
535+ * https://api.dropbox.com/1/restore/<root >/<path >
536+ *
537+ * @param filePathWithName
538+ * @param rev revision to restore
539+ * @locale optional
540+ * @root optional, default is dropbox.
541+ *
542+ */
543+ public function restore (filePathWithName :String ,
544+ rev :String ,
545+ locale :String = "" ,
546+ root :String = DropboxConfig.DROPBOX ):URLLoader
547+ {
548+ var params: Object = {
549+ rev : rev
550+ };
551+
552+ buildOptionalParameters(params, 'locale' , locale );
553+
554+ var urlRequest: URLRequest = buildURLRequest(
555+ config. server, '/restore/' + root + '/' + buildFilePath(filePathWithName), params, URLRequestMethod . POST );
556+ return this . load (urlRequest, DropboxEvent. RESTORE_RESULT ,
557+ DropboxEvent. RESTORE_FAULT , DROPBOX_FILE , URLLoaderDataFormat . TEXT );
558+ }
559+
560+ /**
561+ * added in v1, search by query.
562+ * https://api.dropbox.com/1/search/<root >/<path >
563+ *
564+ * @param filePathWithName
565+ * @param rev revision to restore
566+ * @locale optional
567+ * @root optional, default is dropbox.
568+ *
569+ */
570+ public function search (filePath :String ,
571+ query :String ,
572+ file_limit :int = 1000 ,
573+ include_deleted :Boolean = false ,
574+ root :String = DropboxConfig.DROPBOX ):URLLoader
575+ {
576+ var params: Object = {
577+ query : query
578+ };
579+
580+ buildOptionalParameters(params, 'file_limit' , file_limit);
581+ buildOptionalParameters(params, 'include_deleted' , include_deleted);
582+
583+ var urlRequest: URLRequest = buildURLRequest(
584+ config. server, '/search/' + root + '/' + buildFilePath(filePath), params, URLRequestMethod . POST );
585+ return this . load (urlRequest, DropboxEvent. SEARCH_RESULT ,
586+ DropboxEvent. SEARCH_FAULT , DROPBOX_FILE_LIST , URLLoaderDataFormat . TEXT );
587+ }
588+
589+ /**
590+ *
591+ * https://api.dropbox.com/1/shares/<root >/<path >
592+ *
593+ * @param filePathWithName
594+ * @root optional, default is dropbox.
595+ */
596+ public function shares (filePathWithName :String ,
597+ root :String = DropboxConfig.DROPBOX ):URLLoader
598+ {
599+ var urlRequest: URLRequest = buildURLRequest(
600+ config. server, '/shares/' + root + '/' + buildFilePath(filePathWithName), null );
601+ return this . load (urlRequest, DropboxEvent. SHARES_RESULT ,
602+ DropboxEvent. SHARES_FAULT , SHARES_INFO , URLLoaderDataFormat . TEXT );
603+ }
604+
605+ /**
606+ *
607+ * https://api.dropbox.com/1/media/<root >/<path >
608+ *
609+ * @param filePathWithName
610+ * @root optional, default is dropbox.
611+ */
612+ public function media (filePathWithName :String ,
613+ locale :String = "" ,
614+ root :String = DropboxConfig.DROPBOX ):URLLoader
615+ {
616+ var params: Object ;
617+ if (locale != null && locale != "" ) {
618+ params = new Object ();
619+ buildOptionalParameters(params, 'locale' , locale );
620+ }
621+
622+ var urlRequest: URLRequest = buildURLRequest(
623+ config. server, '/media/' + root + '/' + buildFilePath(filePathWithName), params, URLRequestMethod . POST );
624+ return this . load (urlRequest, DropboxEvent. MEDIA_RESULT ,
625+ DropboxEvent. MEDIA_FAULT , SHARES_INFO , URLLoaderDataFormat . TEXT );
626+ }
627+
478628 /**
479629 * Build a OAuth URL request.
480630 *
@@ -565,6 +715,19 @@ package org.hamster.dropbox
565715 var dropboxFile: DropboxFile = new DropboxFile();
566716 dropboxFile. decode (JSON . decode (urlLoader. data ));
567717 resultObject = dropboxFile;
718+ } else if (urlLoader. resultType == DROPBOX_FILE_LIST ) {
719+ var array: Array = new Array ();
720+ var resultArray:* = JSON . decode (urlLoader. data );
721+ for each (var ro: Object in resultArray) {
722+ var df: DropboxFile = new DropboxFile();
723+ df. decode (ro);
724+ array. push (df);
725+ }
726+ resultObject = array;
727+ } else if (urlLoader. resultType == SHARES_INFO ) {
728+ var sharesInfo: SharesInfo = new SharesInfo();
729+ sharesInfo. decode (JSON . decode (urlLoader. data ));
730+ resultObject = sharesInfo;
568731 } else {
569732 resultObject = urlLoader. data ;
570733 }
@@ -685,12 +848,22 @@ package org.hamster.dropbox
685848 */
686849 private static function buildFilePath (filePath :String ):String
687850 {
851+ if (filePath. indexOf ('/' ) < 0 ) {
852+ return filePath;
853+ }
688854 var filePaths: Array = filePath. split ('/' );
689855 for (var i: int = 0 ; i < filePaths. length ; i++ ) {
690856 filePaths[ i] = encodeURIComponent (filePaths[ i] );
691857 }
692858 return filePaths. join ('/' );
693859 }
860+
861+ private static function buildOptionalParameters (paramTarget :Object , paramName :String , paramValue :* ):void
862+ {
863+ if (paramName != null && paramName != "" && paramValue != null && paramValue != "" ) {
864+ paramTarget[ paramName] = paramValue. toString ();
865+ }
866+ }
694867 }
695868}
696869
@@ -711,6 +884,7 @@ internal class DropboxURLLoader extends URLLoader
711884 * REQUEST_TOKEN & ACCESS_TOKEN : set to DropboxConfig when type is requestToken & accessToken.
712885 * ACCOUNT_INFO : return an AccountInfo object
713886 * DROPBOX_FILE : return an DropboxFile object
887+ * DROPBOX_FILE_LIST : return an array of DropboxFile object
714888 * others : return response string.
715889 */
716890 public var resultType: String ;
0 commit comments