Fix bugs
This commit is contained in:
		
							parent
							
								
									91a25b6bd6
								
							
						
					
					
						commit
						2765fd36e3
					
				
							
								
								
									
										35
									
								
								streamtg.py
								
								
								
								
							
							
						
						
									
										35
									
								
								streamtg.py
								
								
								
								
							| 
						 | 
				
			
			@ -66,17 +66,23 @@ async def handler(request):
 | 
			
		|||
        return web.Response(status=400, text='At least one of the messages does not exist')
 | 
			
		||||
    if any(True for i in messages if not i.media):
 | 
			
		||||
        return web.Response(status=400, text='At least one of the messages do not contain media')
 | 
			
		||||
    http_range = request.http_range
 | 
			
		||||
    offset = http_range.start or 0
 | 
			
		||||
    end = http_range.stop
 | 
			
		||||
    max_size = 0
 | 
			
		||||
    for i in messages:
 | 
			
		||||
        max_size += _get_file_info(i).size
 | 
			
		||||
    if end is None:
 | 
			
		||||
        end = max_size
 | 
			
		||||
    elif end > max_size:
 | 
			
		||||
        return web.Response(status=416, text='Range end size is bigger than file sizes', headers={'Content-Range': f'bytes */{max_size}'})
 | 
			
		||||
    length = end - offset
 | 
			
		||||
    http_range = request.http_range
 | 
			
		||||
    offset = http_range.start or 0
 | 
			
		||||
    if offset < 0:
 | 
			
		||||
        end = offset
 | 
			
		||||
        offset = max_size - offset
 | 
			
		||||
    else:
 | 
			
		||||
        end = http_range.stop
 | 
			
		||||
        if end is None:
 | 
			
		||||
            end = max_size
 | 
			
		||||
        elif end > max_size:
 | 
			
		||||
            return web.Response(status=416, text='Range end size is bigger than file sizes', headers={'Content-Range': f'bytes */{max_size}'})
 | 
			
		||||
        else:
 | 
			
		||||
            end -= 1
 | 
			
		||||
    length = end - offset + 1
 | 
			
		||||
 | 
			
		||||
    async def download():
 | 
			
		||||
        tmp_offset = offset
 | 
			
		||||
| 
						 | 
				
			
			@ -88,23 +94,18 @@ async def handler(request):
 | 
			
		|||
            if tmp_offset > size:
 | 
			
		||||
                tmp_offset -= size
 | 
			
		||||
                continue
 | 
			
		||||
            stream = client._iter_download(i, offset=tmp_offset, request_size=131072, msg_data=(chat_id, i.id))
 | 
			
		||||
            if isinstance(stream, _GenericDownloadIter):
 | 
			
		||||
                __load_next_chunk = stream._load_next_chunk
 | 
			
		||||
                def _load_next_chunk(mask=131071):
 | 
			
		||||
                    return __load_next_chunk(mask=mask)
 | 
			
		||||
                stream._load_next_chunk = _load_next_chunk
 | 
			
		||||
            async for chunk in stream:
 | 
			
		||||
            async for chunk in client._iter_download(i, offset=tmp_offset, msg_data=(chat_id, i.id)):
 | 
			
		||||
                yield chunk[:tmp_length]
 | 
			
		||||
                tmp_length -= len(chunk)
 | 
			
		||||
                if tmp_length < 1:
 | 
			
		||||
                    break
 | 
			
		||||
            tmp_offset = 0
 | 
			
		||||
 | 
			
		||||
    return web.Response(status=206 if (end - offset != max_size) else 200,
 | 
			
		||||
    return web.Response(status=206 if (length != max_size) else 200,
 | 
			
		||||
        body=download(),
 | 
			
		||||
        headers={
 | 
			
		||||
            'Content-Range': f'bytes {offset}-{end}/{max_size}',
 | 
			
		||||
            'Content-Length': str(end - offset),
 | 
			
		||||
            'Content-Length': str(length),
 | 
			
		||||
            'Accept-Ranges': 'bytes'
 | 
			
		||||
        }
 | 
			
		||||
    )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue