refactor(Streamer): inject `IDateTimeZone` as constructor arg

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
pull/54487/head
Ferdinand Thiessen 2025-08-14 10:01:33 +07:00
parent 13467cbdbc
commit 3e61569ea2
No known key found for this signature in database
GPG Key ID: 45FAE7268762B400
5 changed files with 16 additions and 4 deletions

@ -20,6 +20,7 @@ use OCP\Files\Folder;
use OCP\Files\IFilenameValidator;
use OCP\Files\Mount\IMountManager;
use OCP\IConfig;
use OCP\IDateTimeZone;
use OCP\IDBConnection;
use OCP\IL10N;
use OCP\IPreview;
@ -79,6 +80,7 @@ class ServerFactory {
$objectTree,
$this->logger,
$this->eventDispatcher,
\OCP\Server::get(IDateTimeZone::class),
));
// Some WebDAV clients do require Class 2 WebDAV support (locking), since

@ -15,6 +15,7 @@ use OCP\Files\Events\BeforeZipCreatedEvent;
use OCP\Files\File as NcFile;
use OCP\Files\Folder as NcFolder;
use OCP\Files\Node as NcNode;
use OCP\IDateTimeZone;
use Psr\Log\LoggerInterface;
use Sabre\DAV\Server;
use Sabre\DAV\ServerPlugin;
@ -41,6 +42,7 @@ class ZipFolderPlugin extends ServerPlugin {
private Tree $tree,
private LoggerInterface $logger,
private IEventDispatcher $eventDispatcher,
private IDateTimeZone $timezoneFactory,
) {
}
@ -163,7 +165,7 @@ class ZipFolderPlugin extends ServerPlugin {
// Full folder is loaded to rename the archive to the folder name
$archiveName = $folder->getName();
}
$streamer = new Streamer($tarRequest, -1, count($content));
$streamer = new Streamer($tarRequest, -1, count($content), $this->timezoneFactory);
$streamer->sendHeaders($archiveName);
// For full folder downloads we also add the folder itself to the archive
if (empty($files)) {

@ -75,6 +75,7 @@ use OCP\FilesMetadata\IFilesMetadataManager;
use OCP\IAppConfig;
use OCP\ICacheFactory;
use OCP\IConfig;
use OCP\IDateTimeZone;
use OCP\IPreview;
use OCP\IRequest;
use OCP\IUserSession;
@ -230,6 +231,7 @@ class Server {
$this->server->tree,
$logger,
$eventDispatcher,
\OCP\Server::get(IDateTimeZone::class),
));
$this->server->addPlugin(\OCP\Server::get(PaginatePlugin::class));

@ -41,7 +41,12 @@ class Streamer {
* @param int $numberOfFiles The number of files (and directories) that will
* be included in the streamed file
*/
public function __construct(IRequest|bool $preferTar, int|float $size, int $numberOfFiles) {
public function __construct(
IRequest|bool $preferTar,
int|float $size,
int $numberOfFiles,
private IDateTimeZone $timezoneFactory,
) {
if ($preferTar instanceof IRequest) {
$preferTar = self::isUserAgentPreferTar($preferTar);
}
@ -197,7 +202,7 @@ class Streamer {
if ($this->streamerInstance instanceof ZipStreamer) {
// Zip does not support any timezone information
// while tar is interpreted as Unix time the Zip time is interpreted as local time of the user...
$zone = \OCP\Server::get(IDateTimeZone::class)->getTimeZone($timestamp);
$zone = $this->timezoneFactory->getTimeZone($timestamp);
$timestamp += $zone->getOffset(new \DateTimeImmutable('@' . (string)$timestamp));
}
return $timestamp;

@ -9,6 +9,7 @@ namespace OCP\AppFramework\Http;
use OC\Streamer;
use OCP\AppFramework\Http;
use OCP\IDateTimeZone;
use OCP\IRequest;
/**
@ -65,7 +66,7 @@ class ZipResponse extends Response implements ICallbackResponse {
$size += $resource['size'];
}
$zip = new Streamer($this->request, $size, $files);
$zip = new Streamer($this->request, $size, $files, \OCP\Server::get(IDateTimeZone::class));
$zip->sendHeaders($this->name);
foreach ($this->resources as $resource) {