You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
nextcloud-server/lib/public/IPreview.php

115 lines
3.9 KiB

<?php
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
* SPDX-License-Identifier: AGPL-3.0-only
*/
namespace OCP;
use Closure;
use OCP\AppFramework\Attribute\Consumable;
use OCP\Files\File;
use OCP\Files\FileInfo;
use OCP\Files\NotFoundException;
use OCP\Files\SimpleFS\ISimpleFile;
use OCP\Preview\IProviderV2;
/**
* Public interface for discovering preview providers and generating file previews.
*
* ProviderClosure lazily resolves a preview provider and may return false if it
* cannot be loaded.
*
* @since 6.0.0
* @psalm-type ProviderClosure = Closure():(IProviderV2|false)
*/
#[Consumable(since: '6.0.0')]
interface IPreview {
/**
* Preview scaling mode that fills the requested dimensions.
*
* @since 11.0.0
*/
public const MODE_FILL = 'fill';
/**
* Preview scaling mode that covers the requested dimensions.
*
* @since 11.0.0
*/
public const MODE_COVER = 'cover';
/**
* Returns the registered preview providers grouped by supported mime-type regex.
*
* Each value is a list of closures that create preview providers when invoked,
* not a list of already instantiated provider objects.
*
* The provider list is built on demand and is empty when previews are disabled.
*
* @return array<string, list<ProviderClosure>> Map of mime-type regex to provider-creating closures
* @since 8.1.0
*/
public function getProviders(): array;
/**
* Does the manager have any providers
* @since 8.1.0
*/
public function hasProviders(): bool;
/**
* Returns a preview of a file
*
* The cache is searched first and if nothing usable was found then a preview is
* generated by one of the providers
*
* @param IPreview::MODE_* $mode
* @param string $mimeType To force a given mimetype for the file (files_versions needs this)
* @param bool $cacheResult Whether to cache the preview on the filesystem. Default to true. Can be useful to set to false to limit the amount of stored previews.
* @return ISimpleFile
* @throws NotFoundException
* @throws \InvalidArgumentException if the preview would be invalid (in case the original image is invalid)
* @since 11.0.0 - \InvalidArgumentException was added in 12.0.0
* @since 32.0.0 - getPreview($cacheResult) added the $cacheResult argument to the signature
*/
public function getPreview(File $file, int $width = -1, int $height = -1, bool $crop = false, string $mode = IPreview::MODE_FILL, ?string $mimeType = null, bool $cacheResult = true): ISimpleFile;
/**
* Returns whether any registered preview provider supports the given mime type.
*
* This checks the mime type against the providers' registered mime-type regexes.
* It does not guarantee that preview generation will succeed for a specific file.
*
* @param string $mimeType Mime type string to test, for example "image/png"
* @since 6.0.0
*/
public function isMimeSupported(string $mimeType = '*'): bool;
/**
* Returns whether a preview can currently be generated for the given file.
*
* This checks whether the effective mime type is supported, whether previews
* are allowed on the file's mount, and whether at least one matching provider is
* available for the file in the current environment.
*
* @param FileInfo $file
* @param string|null $mimeType Optional mime type override to use instead of $file->getMimeType()
* @since 8.0.0
* @since 32.0.0 - isAvailable($mimeType) added the $mimeType argument to the signature
*/
public function isAvailable(FileInfo $file, ?string $mimeType = null): bool;
/**
* Generates previews of a file
*
* @param array $specifications
* @return ISimpleFile the last preview that was generated
* @throws NotFoundException
* @throws \InvalidArgumentException if the preview would be invalid (in case the original image is invalid)
* @since 19.0.0
*/
public function generatePreviews(File $file, array $specifications, ?string $mimeType = null): ISimpleFile;
}