实施"加载更多"使用threads.list()结合' q' =更旧/更新

时间:2014-11-04 06:28:19

标签: gmail-api

首次注册时,我正在为ID为INBOX的标签中的最后50个主题执行完全同步。

我应该如何实施"加载更多"功能,用户可以说我想获取接下来的50个线程。据我所知,有两种可能的方法:

  1. 从初始完全同步缓存nextPageToken并使用该缓存加载下一个50(maxResults = 50)
  2. q参数与oldernewer一起使用 - 这适用于日期,但我无法找到这是否适用于绝对时间。
  3. 它们都不适用于我的用例,在这个用例中,我特别想让接下来的50个线程更旧,或者所有线程都比这个时间点更新。

    我想这样做,因为如果我按标签获取线程,并且在我的数据模型标签和线程中有多对多的关系,我将在不同的标签中有日期间隔。

    这是一个例子:我进入一个有2009年消息的标签,我拿到它们。他们也在收件箱中,所以如果我去那里,我会看到2014年10月以及2009年9月突然发送的电子邮件。我的解决方案是每当我加载更多或初始完全同步以确保从最旧的线程获取新邮件的线程没有日期差距。 另外为了节省带宽,是否可以在请求中包含我已经拥有的线程ID,以便不在响应中返回?

1 个答案:

答案 0 :(得分:0)

我认为你不需要过度复杂化。如果您不进行任何更新,更旧或特定的排序,则按日期desc排序。对于页面,我创建了一个简单的数组来保存所有页面标记。非常简单并且运行良好(AngularJS示例):

/*
 * Get next page
 */
$scope.fetchNextPage = function() {

    if ($scope.nextPageToken) {
        $scope.page++;
        $scope.pageTokenArray[$scope.page] = $scope.nextPageToken;
        $scope.targetPage = $scope.pageTokenArray[$scope.page];

        $scope.fetch(false);

        // As we have a next page, always allow
        // to go back
        $scope.lastBtnDisabled = false;
    }
};

/*
 * Get previous page
 */
$scope.fetchLastPage = function() {
    if ($scope.page > 0) {
        $scope.page--;
        $scope.targetPage = $scope.pageTokenArray[$scope.page];
        $scope.fetch(false);

        // When page is 0 now, disable last page
        // button
        if ($scope.page == 0) {
            $scope.lastBtnDisabled = true;
        } else {
            $scope.lastBtnDisabled = false;
        }
    }
};