public function addToCache($entry) { $newentry = $this->_cache->searchNodeId($entry->getId()); if ($newentry === false || !$newentry->hasItem()) { $this->_updated = true; $newentry = $this->_cache->createNode($entry->getId()); $newentry->setItem($entry); } /* Set Check if entry isn't a folder */ if ($entry->getMimeType() !== 'application/vnd.google-apps.folder') { $newentry->setChecked(true); } else { $newentry->setChecked(false); } /* If entry hasn't any parents, add it to root */ if (!$newentry->hasParents()) { $this->getRoot()->addChild($newentry); return $newentry; } /* Parent doesn't exists yet in our cache * We need to get this parents */ $getparents = array(); foreach ($entry->getParents() as $parent) { $parent_in_tree = $this->isCached($parent->getId(), false, false); if ($parent_in_tree === false) { $getparents[] = $parent->getId(); } } if (count($getparents) > 0) { $parents = $this->processor->getMultipleEntries($getparents); foreach ($parents as $parent) { $this->addToCache($parent); } } /* Add entry to all parents */ foreach ($entry->getParents() as $parent) { $parent_in_tree = $this->_cache->searchNodeId($parent->getId()); /* Parent does already exists in our cache */ if ($parent_in_tree !== false) { $newentry->setParent($parent_in_tree); } } return $newentry; }