Dropbox SDK for iOS 1.2がリリースされましたので新機能を調べてみました。
DBRestClientに差分Medatadaが取得できるメソッドloadDelta:が追加された
ある時点からの差分情報のみを取得できるようになるメソッドです。
- (void)loadDelta:(NSString *)cursor; - (void)restClient:(DBRestClient*)client loadedDeltaEntries:(NSArray *)entries reset:(BOOL)shouldReset cursor:(NSString *)cursor hasMore:(BOOL)hasMore; - (void)restClient:(DBRestClient*)client loadDeltaFailedWithError:(NSError *)error;
大雑把には次のように使うみたいです。
- 初回は
[restClient loadDelta:nil]
を呼ぶ - restClient:loadedDeltaEntries:reset:cursor:hasMore:がコールバックされる。
- 返された配列情報からメタデータを更新する(後述)。なお、初回は必ずresetがtrueになっており、このときは全てのファイルやフォルダがない状態からの構築だと思うこと。
- 次回以降は与えられたcursorを使ってloadDelta:を呼ぶ。ここで、もしhasMoreがtrueならすぐにloadDelta:してよい。(それ以外は5分後)
この配列に含まれるデータは、cursorで示された時点以降に、追加、削除、変更のあったファイルやフォルダについてのみです。変更のないものは含まれません。 配列の要素自体はDBDeltaEntryです。
@interface DBDeltaEntry : NSObject @property (nonatomic, readonly) NSString *lowercasePath; @property (nonatomic, readonly) DBMetadata *metadata; // 削除されているならnilになる @end
lowercasePathがDropbox上でのパスで、例えば/photos/how to use the photos folder.rtf
のような文字列です。
metadataは文字通りメタデータですが、nilか非nilかで意味が異なります。
- metadataがnilのときは、lowercasePathで示されたパスのファイルやフォルダは削除されたことを示す。
- metadataが非nilのときは、lowercasePathで示されたパスのファイルやフォルダが追加か変更したことを示す。loadMetadata:で得られるものと同じなので必要ならこのデータで上書きする。
はじめに見たときは便利そうに感じたのですが、ディレクトリの指定ができないのでFull Dropboxなアプリだと全メタデータを保持する羽目になるため、iOSアプリだとあまり実用的でない気がします。
App Folderなアプリに使うのなら便利かもしれません。
2つのDropboxアカウント間でのコピー用にDBRestClientにcreateCopyRef, copyRefが追加された
これを使うと、ローカルにダウンロードしてから、それをアップロードするという無駄をしなくて済むようです。
- (void)createCopyRef:(NSString *)path; - (void)copyFromRef:(NSString*)copyRef toPath:(NSString *)toPath; - (void)restClient:(DBRestClient*)client createdCopyRef:(NSString *)copyRef; - (void)restClient:(DBRestClient*)client createCopyRefFailedWithError:(NSError *)error;
createCopyRef:でファイルを指定すると、restClient:createdCopyRef:でcopyRefにz1X6ATl6aWtzOGq0xxxyyy
のような文字列が返されるので、
それをcopyFromRef:toPath:で指定してやるとよいみたいです。
DBRestClientDelegateのいくつかのメソッドでDBMetadataが返されるようになった。
例えば、ファイルコピーのときはコピー先の情報がすぐにわかるようになります。
- (void)restClient:(DBRestClient*)client copiedPath:(NSString *)fromPath to:(DBMetadata *)to;
その他
- DBMetadataにclientMtimeが追加された (表示用らしい)
@property (nonatomic, readonly) NSDate* clientMtime;
- Dropbox公式SDKのOS X版もリリースされています。
こんにちは、いつも勉強させて頂いています。
返信削除loadDeltaを用いて、差分を取得したいと考えています。
loadDeltaの用いる手順を詳しく教えて頂けないでしょうか。よろしくお願い致します。