2015-12-10 3 views
1

Я использую конечную точку Dropbox/Delta для отслеживания изменений внутри Dropbox. Точнее, следующий фрагмент кода позволяет мне отслеживать изменения в «/ superfolder» рекурсивно (я использую здесь DbxClientV1):Глобальный курсор в Dropbox API v2

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 клиента. Для того, чтобы отслеживать изменения на раздаточном я использую 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) { 
      } 
     } 
    } 

Regretably, я обнаружил, что я могу только отслеживать изменения только из папки «superfolder». Есть ли способ получить «глобальный курсор», который рекурсивно отслеживает изменения в Dropbox API v2?

ответ

0

Java SDK использует шаблон построения для почти всех вызовов с несколькими необязательными аргументами. Если я правильно понимаю ваш вопрос, я думаю, что вы ищете это:

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

EDIT: Вы спрашивали о «глобальном» курсором. I think вы на самом деле означали рекурсивный, но если вы действительно имели в виду глобальный, вы можете передать пустую строку ("") в качестве пути для представления корня.

+0

Это работает! Я не смог найти его в документации Dropbox API v2, но оказалось, что версия maven была обновлена ​​с «2.0-бета-1» до «2.0-бета-3», так как я последний раз ее проверял. благодаря – michal