Глобальный курсор в 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();

РЕДАКТИРОВАТЬ: Вы спросили о "глобальный" курсор. Я думаю, что вы на самом деле имели в виду рекурсивный, но если вы действительно имели в виду глобальный, вы можете передать пустую строку ("") как путь для представления корня.

Другие вопросы по тегам