private async Task ProcessChangesListAsync(CacheManifest manifest)
        {
            var changeList = await GoogleDriveChanges.List(manifest.StartToken).Send();

            foreach (var change in changeList.Changes)
            {
                if (!manifest.ContainsKey(change.FileId))
                {
                    continue;
                }

                var filePath = string.Concat(CacheDirPath, "/", manifest[change.FileId]);
                if (File.Exists(filePath))
                {
                    File.Delete(filePath);
                    LogMessage($"File '{filePath}' has been changed; cached version has been purged.");
                }
            }

            if (!string.IsNullOrWhiteSpace(changeList.NextPageToken))
            {
                manifest.StartToken = changeList.NextPageToken;
                await ProcessChangesListAsync(manifest);
            }

            IOUtils.WebGLSyncFs();
        }
    public IEnumerator Test999_ChangesList()
    {
        var request = GoogleDriveChanges.List(changesToken);

        yield return(request.Send());

        Assert.IsFalse(request.IsError);
        Assert.IsTrue(request.ResponseData.Changes != null && request.ResponseData.Changes.Count > 0);
        Assert.IsTrue(request.ResponseData.Changes.Exists(c => c.FileId == createdFileId));
        Assert.IsTrue(request.ResponseData.Changes.Exists(c => c.FileId == copiedFileId));
        Assert.IsTrue(request.ResponseData.Changes.Find(c => c.FileId == createdFileId).Removed);
        Assert.IsTrue(request.ResponseData.Changes.Find(c => c.FileId == createdFileId).Removed);
    }