【问题标题】:Global cursor in Dropbox API v2Dropbox API v2 中的全局光标
【发布时间】:2015-12-10 12:01:05
【问题描述】:

我使用 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) {
            }
        }
    }

很遗憾,我发现我只能跟踪“超级文件夹”文件夹的更改。 有没有办法在 Dropbox API v2 中获取递归跟踪更改的“全局光标”?

【问题讨论】:

    标签: java cursor dropbox delta


    【解决方案1】:

    Java SDK 对几乎所有带有多个可选参数的调用都使用构建器模式。如果我正确理解您的问题,我认为您正在寻找这个:

    result = client.files.listFolderBuilder("/superfolder")
                   .recursive(true)
                   .start();
    

    编辑:您询问了“全局”光标。我认为你实际上是指递归,但如果你真的是指全局,你可以传递一个空字符串 ("") 作为代表根的路径。

    【讨论】:

    • 它的工作!我在 Dropbox API v2 文档中找不到它,但事实证明,自从我上次检查以来,maven 版本已从“2.0-beta-1”升级到“2.0-beta-3”。谢谢
    猜你喜欢
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    相关资源
    最近更新 更多