/**
  * @Route("/folders/{folderId}", name="_folder")
  * @Template()
  *
  * @param Request $request
  * @param string  $folderId
  *
  * @return array|RedirectResponse
  */
 public function folderAction(Request $request, $folderId)
 {
     if ($folderId === $this->get('google_drive')->getRootFolderId()) {
         return $this->redirect($this->generateUrl('_files'), 301);
     }
     $optParams = new GoogleDriveListParameters();
     if ($request->query->has("pageToken")) {
         $optParams->setPageToken($request->get("pageToken"));
     }
     $result = $this->get('google_drive')->getFilesList(false, $optParams, $folderId);
     $result['pagination'] = $this->get('google_drive')->buildPagination($result['nextPageToken'], $optParams, $this->generateUrl('_folder', array('folderId' => $folderId)), null);
     $result['folder'] = $this->get('google_drive')->getFile($folderId);
     //$result['children'] = $this->get('google_drive')->getChildren($folderId);
     $result['folders'] = $this->get('google_drive')->getFolders($folderId);
     $result['total'] = count($result['list']);
     if ($request->query->has("pageToken") && !empty($result['nextPageToken']) && $request->query->get("pageToken") == $result['nextPageToken']) {
         $result['has_pagination'] = false;
     }
     return $result;
 }
 /**
  * @param bool $noFolder Do not return folder-related infos
  *
  * @return array
  *
  * @throws \Exception
  */
 protected function getFoundTypes($noFolder = true)
 {
     $nextToken = null;
     $loop = 0;
     $maxLoop = 10;
     $maxItemPerLoop = GoogleDriveListParameters::MAX_RESULTS;
     $optParams = new GoogleDriveListParameters();
     $optParams->setMaxResults($maxItemPerLoop);
     $optParams->setQuery(GoogleDriveListParameters::NO_TRASH);
     $items = array();
     do {
         $result = $this->service->files->listFiles($optParams->getArray());
         $items = array_merge($items, array_values($result->getItems()));
         //$items += $result->getItems();
         $nextToken = $result->getNextPageToken();
         $optParams->setPageToken($nextToken);
         $loop++;
         if ($maxLoop <= $loop) {
             // 10 * 1000 files is enough
             throw new \Exception(sprintf("Preventing too-many API calls : max %d loops occurred of %d items each time ", $loop, $optParams->getMaxResults()));
         }
     } while (!empty($nextToken));
     $types = array();
     foreach ($items as $item) {
         $types[$item->mimeType] = $item->mimeType;
         // trick do avoid duplicate entries
         if ($noFolder && $item->mimeType === self::FOLDER_MIMETYPE) {
             unset($types[$item->mimeType]);
         }
     }
     return array_values($types);
 }