1
0
mirror of https://github.com/danog/MadelineProto.git synced 2024-11-30 09:58:59 +01:00

Use more consistent types for file functions

This commit is contained in:
Daniil Gentili 2023-09-02 15:31:12 +02:00
parent 529206f347
commit ae7cf4b9f0
Signed by: danog
GPG Key ID: 8C1BE3B34B230CA7
4 changed files with 60 additions and 53 deletions

View File

@ -665,20 +665,11 @@
<code>MTProtoToTd</code> <code>MTProtoToTd</code>
<code>MTProtoToTdcli</code> <code>MTProtoToTdcli</code>
<code>completePhoneLogin</code> <code>completePhoneLogin</code>
<code>downloadToCallable</code>
<code>downloadToDir</code>
<code>downloadToStream</code>
<code>end</code> <code>end</code>
<code>phoneLogin</code> <code>phoneLogin</code>
<code>requestSecretChat</code> <code>requestSecretChat</code>
<code>start</code> <code>start</code>
<code>tdToTdcli</code> <code>tdToTdcli</code>
<code>upload</code>
<code>uploadEncrypted</code>
<code>uploadFromCallable</code>
<code>uploadFromStream</code>
<code>uploadFromTgfile</code>
<code>uploadFromUrl</code>
</MissingReturnType> </MissingReturnType>
<PossiblyInvalidPropertyAssignmentValue> <PossiblyInvalidPropertyAssignmentValue>
<code><![CDATA[$this->account ??= new \danog\MadelineProto\Namespace\AbstractAPI('account')]]></code> <code><![CDATA[$this->account ??= new \danog\MadelineProto\Namespace\AbstractAPI('account')]]></code>
@ -1336,17 +1327,15 @@
<DocblockTypeContradiction> <DocblockTypeContradiction>
<code><![CDATA[$fingerprint !== $messageMedia['key_fingerprint']]]></code> <code><![CDATA[$fingerprint !== $messageMedia['key_fingerprint']]]></code>
</DocblockTypeContradiction> </DocblockTypeContradiction>
<InvalidNullableReturnType>
<code>array</code>
</InvalidNullableReturnType>
<MissingParamType> <MissingParamType>
<code>$data</code> <code>$data</code>
<code>$media</code> <code>$media</code>
</MissingParamType> </MissingParamType>
<MissingReturnType> <MissingReturnType>
<code>downloadToCallable</code>
<code>downloadToDir</code>
<code>genAllFile</code> <code>genAllFile</code>
<code>uploadFromCallable</code>
<code>uploadFromTgfile</code>
<code>uploadFromUrl</code>
</MissingReturnType> </MissingReturnType>
<PossiblyInvalidArrayOffset> <PossiblyInvalidArrayOffset>
<code><![CDATA[$this->read[$offset]]]></code> <code><![CDATA[$this->read[$offset]]]></code>
@ -1412,12 +1401,6 @@
<code>static function (int $offset, int $size) use ($stream, $seekable, $lock) {</code> <code>static function (int $offset, int $size) use ($stream, $seekable, $lock) {</code>
<code>static function (string $payload, int $offset) use ($stream, $seekable, $lock) {</code> <code>static function (string $payload, int $offset) use ($stream, $seekable, $lock) {</code>
</MissingClosureReturnType> </MissingClosureReturnType>
<MissingReturnType>
<code>downloadToStream</code>
<code>upload</code>
<code>uploadEncrypted</code>
<code>uploadFromStream</code>
</MissingReturnType>
<PossiblyInvalidArgument> <PossiblyInvalidArgument>
<code>$file</code> <code>$file</code>
<code>$file</code> <code>$file</code>
@ -1426,9 +1409,6 @@
<code>$body</code> <code>$body</code>
<code>$size</code> <code>$size</code>
</PossiblyNullArgument> </PossiblyNullArgument>
<PossiblyUndefinedArrayOffset>
<code><![CDATA[$_SERVER['REQUEST_METHOD']]]></code>
</PossiblyUndefinedArrayOffset>
<PossiblyUndefinedMethod> <PossiblyUndefinedMethod>
<code>seek</code> <code>seek</code>
<code>seek</code> <code>seek</code>
@ -1485,9 +1465,6 @@
</RedundantCastGivenDocblockType> </RedundantCastGivenDocblockType>
</file> </file>
<file src="src/MTProtoTools/PeerHandler.php"> <file src="src/MTProtoTools/PeerHandler.php">
<InvalidArgument>
<code><![CDATA[self::isSupergroupOrChannel($peer) && $this->getInfo($peer, \danog\MadelineProto\API::INFO_TYPE_CONSTRUCTOR)['forum']]]></code>
</InvalidArgument>
<InvalidArrayOffset> <InvalidArrayOffset>
<code><![CDATA[$this->getInfo($peer, \danog\MadelineProto\API::INFO_TYPE_CONSTRUCTOR)['forum']]]></code> <code><![CDATA[$this->getInfo($peer, \danog\MadelineProto\API::INFO_TYPE_CONSTRUCTOR)['forum']]]></code>
</InvalidArrayOffset> </InvalidArrayOffset>

View File

@ -423,9 +423,9 @@ abstract class InternalDoc
* @param int $end Offset where to stop downloading (inclusive) * @param int $end Offset where to stop downloading (inclusive)
* @param int $part_size Size of each chunk * @param int $part_size Size of each chunk
*/ */
public function downloadToCallable(mixed $messageMedia, callable $callable, ?callable $cb = null, bool $seekable = true, int $offset = 0, int $end = -1, ?int $part_size = null) public function downloadToCallable(mixed $messageMedia, callable $callable, ?callable $cb = null, bool $seekable = true, int $offset = 0, int $end = -1, ?int $part_size = null): void
{ {
return $this->wrapper->getAPI()->downloadToCallable($messageMedia, $callable, $cb, $seekable, $offset, $end, $part_size); $this->wrapper->getAPI()->downloadToCallable($messageMedia, $callable, $cb, $seekable, $offset, $end, $part_size);
} }
/** /**
* Download file to directory. * Download file to directory.
@ -433,8 +433,10 @@ abstract class InternalDoc
* @param mixed $messageMedia File to download * @param mixed $messageMedia File to download
* @param string|FileCallbackInterface $dir Directory where to download the file * @param string|FileCallbackInterface $dir Directory where to download the file
* @param callable $cb Callback * @param callable $cb Callback
*
* @return non-empty-string Downloaded file name
*/ */
public function downloadToDir(mixed $messageMedia, \danog\MadelineProto\FileCallbackInterface|string $dir, ?callable $cb = null) public function downloadToDir(mixed $messageMedia, \danog\MadelineProto\FileCallbackInterface|string $dir, ?callable $cb = null): string
{ {
return $this->wrapper->getAPI()->downloadToDir($messageMedia, $dir, $cb); return $this->wrapper->getAPI()->downloadToDir($messageMedia, $dir, $cb);
} }
@ -444,8 +446,10 @@ abstract class InternalDoc
* @param mixed $messageMedia File to download * @param mixed $messageMedia File to download
* @param string|FileCallbackInterface $file Downloaded file path * @param string|FileCallbackInterface $file Downloaded file path
* @param callable $cb Callback * @param callable $cb Callback
*
* @return non-empty-string Downloaded file name
*/ */
public function downloadToFile(mixed $messageMedia, \danog\MadelineProto\FileCallbackInterface|string $file, ?callable $cb = null): string|false public function downloadToFile(mixed $messageMedia, \danog\MadelineProto\FileCallbackInterface|string $file, ?callable $cb = null): string
{ {
return $this->wrapper->getAPI()->downloadToFile($messageMedia, $file, $cb); return $this->wrapper->getAPI()->downloadToFile($messageMedia, $file, $cb);
} }
@ -486,9 +490,9 @@ abstract class InternalDoc
* @param int $offset Offset where to start downloading * @param int $offset Offset where to start downloading
* @param int $end Offset where to end download * @param int $end Offset where to end download
*/ */
public function downloadToStream(mixed $messageMedia, mixed $stream, ?callable $cb = null, int $offset = 0, int $end = -1) public function downloadToStream(mixed $messageMedia, mixed $stream, ?callable $cb = null, int $offset = 0, int $end = -1): void
{ {
return $this->wrapper->getAPI()->downloadToStream($messageMedia, $stream, $cb, $offset, $end); $this->wrapper->getAPI()->downloadToStream($messageMedia, $stream, $cb, $offset, $end);
} }
/** /**
* Asynchronously write to stdout/browser. * Asynchronously write to stdout/browser.
@ -1948,8 +1952,10 @@ abstract class InternalDoc
* @param string $fileName File name * @param string $fileName File name
* @param callable $cb Callback * @param callable $cb Callback
* @param boolean $encrypted Whether to encrypt file for secret chats * @param boolean $encrypted Whether to encrypt file for secret chats
*
* @return array InputFile constructor
*/ */
public function upload($file, string $fileName = '', ?callable $cb = null, bool $encrypted = false) public function upload($file, string $fileName = '', ?callable $cb = null, bool $encrypted = false): array
{ {
return $this->wrapper->getAPI()->upload($file, $fileName, $cb, $encrypted); return $this->wrapper->getAPI()->upload($file, $fileName, $cb, $encrypted);
} }
@ -1959,8 +1965,10 @@ abstract class InternalDoc
* @param FileCallbackInterface|string|array $file File, URL or Telegram file to upload * @param FileCallbackInterface|string|array $file File, URL or Telegram file to upload
* @param string $fileName File name * @param string $fileName File name
* @param callable $cb Callback * @param callable $cb Callback
*
* @return array InputFile constructor
*/ */
public function uploadEncrypted(\danog\MadelineProto\FileCallbackInterface|array|string $file, string $fileName = '', ?callable $cb = null) public function uploadEncrypted(\danog\MadelineProto\FileCallbackInterface|array|string $file, string $fileName = '', ?callable $cb = null): array
{ {
return $this->wrapper->getAPI()->uploadEncrypted($file, $fileName, $cb); return $this->wrapper->getAPI()->uploadEncrypted($file, $fileName, $cb);
} }
@ -1977,8 +1985,10 @@ abstract class InternalDoc
* @param callable $cb Callback * @param callable $cb Callback
* @param boolean $seekable Whether chunks can be fetched out of order * @param boolean $seekable Whether chunks can be fetched out of order
* @param boolean $encrypted Whether to encrypt file for secret chats * @param boolean $encrypted Whether to encrypt file for secret chats
*
* @return array InputFile constructor
*/ */
public function uploadFromCallable(callable $callable, int $size = 0, string $mime = 'application/octet-stream', string $fileName = '', ?callable $cb = null, bool $seekable = true, bool $encrypted = false) public function uploadFromCallable(callable $callable, int $size = 0, string $mime = 'application/octet-stream', string $fileName = '', ?callable $cb = null, bool $seekable = true, bool $encrypted = false): array
{ {
return $this->wrapper->getAPI()->uploadFromCallable($callable, $size, $mime, $fileName, $cb, $seekable, $encrypted); return $this->wrapper->getAPI()->uploadFromCallable($callable, $size, $mime, $fileName, $cb, $seekable, $encrypted);
} }
@ -1991,8 +2001,10 @@ abstract class InternalDoc
* @param string $fileName File name * @param string $fileName File name
* @param callable $cb Callback * @param callable $cb Callback
* @param boolean $encrypted Whether to encrypt file for secret chats * @param boolean $encrypted Whether to encrypt file for secret chats
*
* @return array InputFile constructor
*/ */
public function uploadFromStream(mixed $stream, int $size = 0, string $mime = 'application/octet-stream', string $fileName = '', ?callable $cb = null, bool $encrypted = false) public function uploadFromStream(mixed $stream, int $size = 0, string $mime = 'application/octet-stream', string $fileName = '', ?callable $cb = null, bool $encrypted = false): array
{ {
return $this->wrapper->getAPI()->uploadFromStream($stream, $size, $mime, $fileName, $cb, $encrypted); return $this->wrapper->getAPI()->uploadFromStream($stream, $size, $mime, $fileName, $cb, $encrypted);
} }
@ -2002,8 +2014,10 @@ abstract class InternalDoc
* @param mixed $media Telegram file * @param mixed $media Telegram file
* @param callable $cb Callback * @param callable $cb Callback
* @param boolean $encrypted Whether to encrypt file for secret chats * @param boolean $encrypted Whether to encrypt file for secret chats
*
* @return array InputFile constructor
*/ */
public function uploadFromTgfile(mixed $media, ?callable $cb = null, bool $encrypted = false) public function uploadFromTgfile(mixed $media, ?callable $cb = null, bool $encrypted = false): array
{ {
return $this->wrapper->getAPI()->uploadFromTgfile($media, $cb, $encrypted); return $this->wrapper->getAPI()->uploadFromTgfile($media, $cb, $encrypted);
} }
@ -2015,8 +2029,9 @@ abstract class InternalDoc
* @param string $fileName File name * @param string $fileName File name
* @param callable $cb Callback * @param callable $cb Callback
* @param boolean $encrypted Whether to encrypt file for secret chats * @param boolean $encrypted Whether to encrypt file for secret chats
* @return array InputFile constructor
*/ */
public function uploadFromUrl(\danog\MadelineProto\FileCallbackInterface|string $url, int $size = 0, string $fileName = '', ?callable $cb = null, bool $encrypted = false) public function uploadFromUrl(\danog\MadelineProto\FileCallbackInterface|string $url, int $size = 0, string $fileName = '', ?callable $cb = null, bool $encrypted = false): array
{ {
return $this->wrapper->getAPI()->uploadFromUrl($url, $size, $fileName, $cb, $encrypted); return $this->wrapper->getAPI()->uploadFromUrl($url, $size, $fileName, $cb, $encrypted);
} }

View File

@ -67,8 +67,9 @@ trait Files
* @param string $fileName File name * @param string $fileName File name
* @param callable $cb Callback * @param callable $cb Callback
* @param boolean $encrypted Whether to encrypt file for secret chats * @param boolean $encrypted Whether to encrypt file for secret chats
* @return array InputFile constructor
*/ */
public function uploadFromUrl(string|FileCallbackInterface $url, int $size = 0, string $fileName = '', ?callable $cb = null, bool $encrypted = false) public function uploadFromUrl(string|FileCallbackInterface $url, int $size = 0, string $fileName = '', ?callable $cb = null, bool $encrypted = false): array
{ {
if (\is_object($url) && $url instanceof FileCallbackInterface) { if (\is_object($url) && $url instanceof FileCallbackInterface) {
$cb = $url; $cb = $url;
@ -99,8 +100,10 @@ trait Files
* @param callable $cb Callback * @param callable $cb Callback
* @param boolean $seekable Whether chunks can be fetched out of order * @param boolean $seekable Whether chunks can be fetched out of order
* @param boolean $encrypted Whether to encrypt file for secret chats * @param boolean $encrypted Whether to encrypt file for secret chats
*
* @return array InputFile constructor
*/ */
public function uploadFromCallable(callable $callable, int $size = 0, string $mime = 'application/octet-stream', string $fileName = '', ?callable $cb = null, bool $seekable = true, bool $encrypted = false) public function uploadFromCallable(callable $callable, int $size = 0, string $mime = 'application/octet-stream', string $fileName = '', ?callable $cb = null, bool $seekable = true, bool $encrypted = false): array
{ {
if (\is_object($callable) && $callable instanceof FileCallbackInterface) { if (\is_object($callable) && $callable instanceof FileCallbackInterface) {
$cb = $callable; $cb = $callable;
@ -262,8 +265,10 @@ trait Files
* @param mixed $media Telegram file * @param mixed $media Telegram file
* @param callable $cb Callback * @param callable $cb Callback
* @param boolean $encrypted Whether to encrypt file for secret chats * @param boolean $encrypted Whether to encrypt file for secret chats
*
* @return array InputFile constructor
*/ */
public function uploadFromTgfile(mixed $media, ?callable $cb = null, bool $encrypted = false) public function uploadFromTgfile(mixed $media, ?callable $cb = null, bool $encrypted = false): array
{ {
if (\is_object($media) && $media instanceof FileCallbackInterface) { if (\is_object($media) && $media instanceof FileCallbackInterface) {
$cb = $media; $cb = $media;
@ -815,8 +820,10 @@ trait Files
* @param mixed $messageMedia File to download * @param mixed $messageMedia File to download
* @param string|FileCallbackInterface $dir Directory where to download the file * @param string|FileCallbackInterface $dir Directory where to download the file
* @param callable $cb Callback * @param callable $cb Callback
*
* @return non-empty-string Downloaded file name
*/ */
public function downloadToDir(mixed $messageMedia, string|FileCallbackInterface $dir, ?callable $cb = null) public function downloadToDir(mixed $messageMedia, string|FileCallbackInterface $dir, ?callable $cb = null): string
{ {
if (\is_object($dir) && $dir instanceof FileCallbackInterface) { if (\is_object($dir) && $dir instanceof FileCallbackInterface) {
$cb = $dir; $cb = $dir;
@ -831,8 +838,10 @@ trait Files
* @param mixed $messageMedia File to download * @param mixed $messageMedia File to download
* @param string|FileCallbackInterface $file Downloaded file path * @param string|FileCallbackInterface $file Downloaded file path
* @param callable $cb Callback * @param callable $cb Callback
*
* @return non-empty-string Downloaded file name
*/ */
public function downloadToFile(mixed $messageMedia, string|FileCallbackInterface $file, ?callable $cb = null): false|string public function downloadToFile(mixed $messageMedia, string|FileCallbackInterface $file, ?callable $cb = null): string
{ {
if (\is_object($file) && $file instanceof FileCallbackInterface) { if (\is_object($file) && $file instanceof FileCallbackInterface) {
$cb = $file; $cb = $file;
@ -843,6 +852,7 @@ trait Files
\touch($file); \touch($file);
} }
$file = \realpath($file); $file = \realpath($file);
Assert::notEmpty($file);
$messageMedia = ($this->getDownloadInfo($messageMedia)); $messageMedia = ($this->getDownloadInfo($messageMedia));
$size = getSize($file); $size = getSize($file);
$stream = openFile($file, 'cb'); $stream = openFile($file, 'cb');
@ -874,7 +884,7 @@ trait Files
* @param int $end Offset where to stop downloading (inclusive) * @param int $end Offset where to stop downloading (inclusive)
* @param int $part_size Size of each chunk * @param int $part_size Size of each chunk
*/ */
public function downloadToCallable(mixed $messageMedia, callable $callable, ?callable $cb = null, bool $seekable = true, int $offset = 0, int $end = -1, ?int $part_size = null) public function downloadToCallable(mixed $messageMedia, callable $callable, ?callable $cb = null, bool $seekable = true, int $offset = 0, int $end = -1, ?int $part_size = null): void
{ {
$messageMedia = ($this->getDownloadInfo($messageMedia)); $messageMedia = ($this->getDownloadInfo($messageMedia));
if (\is_object($callable) && $callable instanceof FileCallbackInterface) { if (\is_object($callable) && $callable instanceof FileCallbackInterface) {
@ -919,7 +929,7 @@ trait Files
} }
if ($offset === $end) { if ($offset === $end) {
$cb(100.0, 0.0, 0); $cb(100.0, 0.0, 0);
return true; return;
} }
$params = []; $params = [];
$start_at = $offset % $part_size; $start_at = $offset % $part_size;
@ -939,7 +949,7 @@ trait Files
} }
if (!$params) { if (!$params) {
$cb(100, 0, 0); $cb(100, 0, 0);
return true; return;
} }
$count = \count($params); $count = \count($params);
$time = 0.0; $time = 0.0;
@ -958,7 +968,7 @@ trait Files
if ($initParam['part_end_at'] - $initParam['part_start_at'] !== $size) { if ($initParam['part_end_at'] - $initParam['part_start_at'] !== $size) {
// Premature end for undefined length files // Premature end for undefined length files
$origCb(100, 0, 0); $origCb(100, 0, 0);
return true; return;
} }
$parallel_chunks = $seekable ? $parallel_chunks : 1; $parallel_chunks = $seekable ? $parallel_chunks : 1;
if ($params) { if ($params) {
@ -1002,7 +1012,6 @@ trait Files
if (!isset($messageMedia['size'])) { if (!isset($messageMedia['size'])) {
$origCb(100.0, $time, $speed); $origCb(100.0, $time, $speed);
} }
return true;
} }
/** /**
* Download file part. * Download file part.

View File

@ -157,7 +157,7 @@ trait FilesLogic
* @param int $offset Offset where to start downloading * @param int $offset Offset where to start downloading
* @param int $end Offset where to end download * @param int $end Offset where to end download
*/ */
public function downloadToStream(mixed $messageMedia, mixed $stream, ?callable $cb = null, int $offset = 0, int $end = -1) public function downloadToStream(mixed $messageMedia, mixed $stream, ?callable $cb = null, int $offset = 0, int $end = -1): void
{ {
$messageMedia = $this->getDownloadInfo($messageMedia); $messageMedia = $this->getDownloadInfo($messageMedia);
if (\is_object($stream) && $stream instanceof FileCallbackInterface) { if (\is_object($stream) && $stream instanceof FileCallbackInterface) {
@ -195,7 +195,7 @@ trait FilesLogic
} }
return \strlen($payload); return \strlen($payload);
}; };
return $this->downloadToCallable($messageMedia, $callable, $cb, $seekable, $offset, $end); $this->downloadToCallable($messageMedia, $callable, $cb, $seekable, $offset, $end);
} }
/** /**
@ -252,8 +252,10 @@ trait FilesLogic
* @param FileCallbackInterface|string|array $file File, URL or Telegram file to upload * @param FileCallbackInterface|string|array $file File, URL or Telegram file to upload
* @param string $fileName File name * @param string $fileName File name
* @param callable $cb Callback * @param callable $cb Callback
*
* @return array InputFile constructor
*/ */
public function uploadEncrypted(FileCallbackInterface|string|array $file, string $fileName = '', ?callable $cb = null) public function uploadEncrypted(FileCallbackInterface|string|array $file, string $fileName = '', ?callable $cb = null): array
{ {
return $this->upload($file, $fileName, $cb, true); return $this->upload($file, $fileName, $cb, true);
} }
@ -265,8 +267,10 @@ trait FilesLogic
* @param string $fileName File name * @param string $fileName File name
* @param callable $cb Callback * @param callable $cb Callback
* @param boolean $encrypted Whether to encrypt file for secret chats * @param boolean $encrypted Whether to encrypt file for secret chats
*
* @return array InputFile constructor
*/ */
public function upload($file, string $fileName = '', ?callable $cb = null, bool $encrypted = false) public function upload($file, string $fileName = '', ?callable $cb = null, bool $encrypted = false): array
{ {
if (\is_object($file) && $file instanceof FileCallbackInterface) { if (\is_object($file) && $file instanceof FileCallbackInterface) {
$cb = $file; $cb = $file;
@ -328,8 +332,10 @@ trait FilesLogic
* @param string $fileName File name * @param string $fileName File name
* @param callable $cb Callback * @param callable $cb Callback
* @param boolean $encrypted Whether to encrypt file for secret chats * @param boolean $encrypted Whether to encrypt file for secret chats
*
* @return array InputFile constructor
*/ */
public function uploadFromStream(mixed $stream, int $size = 0, string $mime = 'application/octet-stream', string $fileName = '', ?callable $cb = null, bool $encrypted = false) public function uploadFromStream(mixed $stream, int $size = 0, string $mime = 'application/octet-stream', string $fileName = '', ?callable $cb = null, bool $encrypted = false): array
{ {
if (\is_object($stream) && $stream instanceof FileCallbackInterface) { if (\is_object($stream) && $stream instanceof FileCallbackInterface) {
$cb = $stream; $cb = $stream;