Google Drive Javascript API:检测驱动器更改 - 仅返回更改

时间:2013-09-03 21:10:08

标签: javascript google-drive-api

我尝试检测用户驱动器上的更改以更新列表中的内容但是当我请求更改时,我会收到驱动器上的所有条目。

解释我为什么要这样做: 当用户打开两个选项卡时,这是一个方便的功能,一个用于谷歌驱动器环境,另一个用于使用该驱动器的应用程序(不需要重新加载应用程序以查看在驱动器环境中进行的内容更改)。

我按照此处列出的指南:https://developers.google.com/drive/v2/reference/changes/list

奇怪的是我需要一个largestChangeId+1,但我怎么知道这个值呢?我不知道maximumChangeId并将其设置为null。无论我用这个值做什么,我都会得到所有的内容。

我制作了以下代码:

o.getCloudFileUpdates = function(fCallback, sFolderId )
{
  var oDefQ = {q:'trashed=false '+(typeof sFolderId == 'string'?('and "'+sFolderId+'" in parents'):''), largestChangeId:null, orderby:'title', maxResults:1000},      
      fGetFiles = function(request, result) 
      {
        request.execute(function(resp) 
        {
            //$d(resp); 
            if( resp.items instanceof Array )   
            {
              result = result.concat(resp.items);
              if( resp.nextPageToken ) 
              { // Get next page and 'break' this function 
                 return fGetFiles(gapi.client.drive.changes.list($j.extend(oDefQ,{'pageToken':resp.nextPageToken})), result); 
              } 
            }

            if( result.length )
            {
              result.sort(function(a,b) 
              {
                if (a.title < b.title)
                 { return -1; }
                if (a.title > b.title)
                 { return 1; }
                return 0;
              });

              fCallback(result);
              return;
            }
            fCallback(false);
        });
      };

  try {
    fGetFiles(gapi.client.drive.changes.list(oDefQ), []);
  } catch(e) { fCallback(false); return false; }
  return true;
};

如何在不知道largestChangeId的情况下获取最新的更改?

1 个答案:

答案 0 :(得分:1)

第一次通话时从零开始。响应中是当前最大的更改ID,您需要在下一个请求中存储和使用它。在您的代码中,它将实现为“resp.largestChangeId”。