Глобальный курсор в Dropbox API v2
Я использую конечную точку dropbox /delta для отслеживания изменений внутри Dropbox. Точнее, следующий фрагмент кода позволяет мне рекурсивно отслеживать изменения в "/superfolder" (я использую здесь DbxClientV1):
List<String> listOfResults = new ArrayList<String>();
String path = "/superfolder";
String cursor = null;
while (true) {
DbxDelta<DbxEntry> deltaWithPathPrefix = client.getDeltaWithPathPrefix(cursor, path);
cursor = deltaWithPathPrefix.cursor;
if (deltaWithPathPrefix.reset) {
System.out.println("Reset!");
}
for (DbxDelta.Entry entry : deltaWithPathPrefix.entries) {
if (entry.metadata == null) {
System.out.println("Deleted: " + entry.lcPath);
listOfResults.add(entry.lcPath);
} else {
System.out.println("Added or modified: " + entry.lcPath);
}
}
if (!deltaWithPathPrefix.hasMore) {
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(MainSearchV1.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Теперь я перешел на клиент DbxClientV2. Для отслеживания изменений в Dropbox я использую client.files.listFolder() в следующей форме:
TreeMap<String, Metadata> children = new TreeMap<String, Metadata>();
Files.ListFolderResult result;
String cursor = null;
while (true) {
if (cursor == null) {
result = client.files.listFolder("/superfolder");
} else {
result = client.files.listFolderContinue(cursor);
}
cursor = result.cursor;
for (Metadata md : result.entries) {
if (md instanceof DeletedMetadata) {
children.remove(md.pathLower);
System.out.println("Deleted: " + md.pathLower);
} else {
children.put(md.pathLower, md);
System.out.println("State: " + md.pathLower);
System.out.println(md.toString());
}
}
if (!result.hasMore) {
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
}
}
}
К сожалению, я обнаружил, что могу отслеживать только изменения только в папке "superfolder". Есть ли способ получить "глобальный курсор", который рекурсивно отслеживает изменения в Dropbox API v2?
1 ответ
Java SDK использует шаблон компоновщика для почти всех вызовов с несколькими необязательными аргументами. Если я правильно понимаю ваш вопрос, я думаю, что вы ищете это:
result = client.files.listFolderBuilder("/superfolder")
.recursive(true)
.start();
РЕДАКТИРОВАТЬ: Вы спросили о "глобальный" курсор. Я думаю, что вы на самом деле имели в виду рекурсивный, но если вы действительно имели в виду глобальный, вы можете передать пустую строку (""
) как путь для представления корня.