/** * @param string $backendId * @param string $privateUri * @param string $userId * @param ICalendar $usersCalendar * @return mixed */ public function scanCalendar($backendId, $privateUri, $userId, ICalendar &$usersCalendar = null) { $backend = $this->backends->find($backendId); if (!$backend instanceof IBackend) { $this->logger->debug('Backend \'' . $backendId . '\' not found'); return null; } $calendar = $this->getRemoteAndDeleteIfNecessary($backend, $privateUri, $userId); if (!$calendar) { return null; } $cachedCalendar = $this->getCached($backendId, $privateUri, $userId); if ($cachedCalendar) { if ($usersCalendar) { $calendar = $this->resetUnsupportedProperties($backend, $calendar, $usersCalendar); } else { $calendar = $this->resetUnsupportedProperties($backend, $calendar, $cachedCalendar); } $cachedCalendar->overwriteWith($calendar); $this->updateCache($cachedCalendar); } else { CalendarUtility::generateURI($calendar, function ($newUri) use($calendar) { return $this->cache->doesExist($newUri, $calendar->getUserId()); }, true); $calendar = $this->addToCache($calendar); if ($usersCalendar) { $usersCalendar->setId($calendar->getId()); } } }
/** * @param mixed $data * @param int $format * @return \OCA\Calendar\Db\Calendar * @throws CorruptDataException * @throws TemporarilyNotAvailableException * @throws \InvalidArgumentException */ public function createEntity($data, $format = self::FORMAT_PARAM) { if (!is_array($data) || empty($data)) { throw new CorruptDataException('CalendarFactory::createEntity() - Calendardata is empty'); } if (isset($data['backend'])) { if ($data['backend'] instanceof IBackend) { if (!$this->backends->inCollection($data['backend'])) { unset($data['backend']); } } else { $backend = $this->backends->find($data['backend']); if (!$backend instanceof IBackend) { throw new TemporarilyNotAvailableException('CalendarFactory::createEntity() - Calendardata references unknown backend'); } //replace backend-identifier with IBackend instance $data['backend'] = $backend; } } //replace timezone-identifier with ITimezone instance if (isset($data['timezone']) && isset($data['user_id'])) { try { $timezone = $this->timezones->find($data['timezone'], $data['user_id']); $row['timezone'] = $timezone; } catch (DoesNotExistException $ex) { unset($data['timezone']); } } //TODO - fix me unset($data['last_properties_update']); unset($data['last_object_update']); switch ($format) { case self::FORMAT_PARAM: return Calendar::fromParams($data); break; case self::FORMAT_ROW: return Calendar::fromRow($data); break; default: throw new \InvalidArgumentException('CalendarFactory::createEntity() - Unknown format given'); break; } }
/** * was a calendar updated? * @param string $backendId * @param string $privateUri * @param string $userId * @return boolean */ public function checkUpdate($backendId, $privateUri, $userId) { if ($this->watchPolicy === self::CHECK_ALWAYS || $this->watchPolicy === self::CHECK_ONCE && !$this->wasCalendarChecked($backendId, $privateUri, $userId)) { $backend = $this->backends->find($backendId); if (!$backend instanceof IBackend) { return false; } $cachedCalendar = $this->cache->findByPrivateUri($backendId, $privateUri, $userId); $this->setCheckedCalendar($backendId, $privateUri, $userId); $calendarAPI = $backend->getCalendarAPI(); if ($calendarAPI->hasUpdated($cachedCalendar)) { $objectScanner = $backend->getObjectScanner($cachedCalendar); $objectScanner->scan(); $this->scanner->scanCalendar($backendId, $privateUri, $userId); return true; } return false; } else { return false; } }