sonarrradarrplexorganizrnginxdashboardlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboardmuximux
		
		
		
		
			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.
		
		
		
		
		
			
		
			
				
					
					
						
							121 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							121 lines
						
					
					
						
							2.7 KiB
						
					
					
				| <?php | |
| namespace GuzzleHttp\Psr7; | |
| 
 | |
| use Psr\Http\Message\StreamInterface; | |
| 
 | |
| /** | |
|  * Converts Guzzle streams into PHP stream resources. | |
|  */ | |
| class StreamWrapper | |
| { | |
|     /** @var resource */ | |
|     public $context; | |
| 
 | |
|     /** @var StreamInterface */ | |
|     private $stream; | |
| 
 | |
|     /** @var string r, r+, or w */ | |
|     private $mode; | |
| 
 | |
|     /** | |
|      * Returns a resource representing the stream. | |
|      * | |
|      * @param StreamInterface $stream The stream to get a resource for | |
|      * | |
|      * @return resource | |
|      * @throws \InvalidArgumentException if stream is not readable or writable | |
|      */ | |
|     public static function getResource(StreamInterface $stream) | |
|     { | |
|         self::register(); | |
| 
 | |
|         if ($stream->isReadable()) { | |
|             $mode = $stream->isWritable() ? 'r+' : 'r'; | |
|         } elseif ($stream->isWritable()) { | |
|             $mode = 'w'; | |
|         } else { | |
|             throw new \InvalidArgumentException('The stream must be readable, ' | |
|                 . 'writable, or both.'); | |
|         } | |
| 
 | |
|         return fopen('guzzle://stream', $mode, null, stream_context_create([ | |
|             'guzzle' => ['stream' => $stream] | |
|         ])); | |
|     } | |
| 
 | |
|     /** | |
|      * Registers the stream wrapper if needed | |
|      */ | |
|     public static function register() | |
|     { | |
|         if (!in_array('guzzle', stream_get_wrappers())) { | |
|             stream_wrapper_register('guzzle', __CLASS__); | |
|         } | |
|     } | |
| 
 | |
|     public function stream_open($path, $mode, $options, &$opened_path) | |
|     { | |
|         $options = stream_context_get_options($this->context); | |
| 
 | |
|         if (!isset($options['guzzle']['stream'])) { | |
|             return false; | |
|         } | |
| 
 | |
|         $this->mode = $mode; | |
|         $this->stream = $options['guzzle']['stream']; | |
| 
 | |
|         return true; | |
|     } | |
| 
 | |
|     public function stream_read($count) | |
|     { | |
|         return $this->stream->read($count); | |
|     } | |
| 
 | |
|     public function stream_write($data) | |
|     { | |
|         return (int) $this->stream->write($data); | |
|     } | |
| 
 | |
|     public function stream_tell() | |
|     { | |
|         return $this->stream->tell(); | |
|     } | |
| 
 | |
|     public function stream_eof() | |
|     { | |
|         return $this->stream->eof(); | |
|     } | |
| 
 | |
|     public function stream_seek($offset, $whence) | |
|     { | |
|         $this->stream->seek($offset, $whence); | |
| 
 | |
|         return true; | |
|     } | |
| 
 | |
|     public function stream_stat() | |
|     { | |
|         static $modeMap = [ | |
|             'r'  => 33060, | |
|             'r+' => 33206, | |
|             'w'  => 33188 | |
|         ]; | |
| 
 | |
|         return [ | |
|             'dev'     => 0, | |
|             'ino'     => 0, | |
|             'mode'    => $modeMap[$this->mode], | |
|             'nlink'   => 0, | |
|             'uid'     => 0, | |
|             'gid'     => 0, | |
|             'rdev'    => 0, | |
|             'size'    => $this->stream->getSize() ?: 0, | |
|             'atime'   => 0, | |
|             'mtime'   => 0, | |
|             'ctime'   => 0, | |
|             'blksize' => 0, | |
|             'blocks'  => 0 | |
|         ]; | |
|     } | |
| }
 | |
| 
 |