$class * @return bool * @since 9.0.0 * @psalm-assert-if-true T $this */ public function instanceOfStorage(string $class); /** * A custom storage implementation can return an url for direct download of a give file. * * For now the returned array can hold the parameter url - in future more attributes might follow. * * @return array|false * @since 9.0.0 */ public function getDirectDownload(string $path); /** * @return void * @throws InvalidPathException * @since 9.0.0 */ public function verifyPath(string $path, string $fileName); /** * @return bool * @since 9.0.0 */ public function copyFromStorage(IStorage $sourceStorage, string $sourceInternalPath, string $targetInternalPath); /** * @return bool * @since 9.0.0 */ public function moveFromStorage(IStorage $sourceStorage, string $sourceInternalPath, string $targetInternalPath); /** * Test a storage for availability * * @since 9.0.0 * @return bool */ public function test(); /** * @since 9.0.0 * @return array [ available, last_checked ] */ public function getAvailability(); /** * @since 9.0.0 * @return void */ public function setAvailability(bool $isAvailable); /** * @since 12.0.0 * @since 31.0.0 moved from Storage to IStorage * @return bool */ public function needsPartFile(); /** * @return string|false * @since 9.0.0 */ public function getOwner(string $path); /** * @return ICache * @since 9.0.0 */ public function getCache(string $path = '', ?IStorage $storage = null); /** * @return IPropagator * @since 9.0.0 */ public function getPropagator(); /** * @return IScanner * @since 9.0.0 */ public function getScanner(); /** * @return IUpdater * @since 9.0.0 */ public function getUpdater(); /** * @return IWatcher * @since 9.0.0 */ public function getWatcher(); /** * Allow setting the storage owner * * This can be used for storages that do not have a dedicated owner, where we want to * pass the user that we setup the mountpoint for along to the storage layer * * @param ?string $user Owner user id * @return void * @since 30.0.0 */ public function setOwner(?string $user): void; }