package downloader

import (
	
	

	

	
	
)

func ( *Downloader) ( context.Context,  *reader,  io.Writer) (tg.StorageFileTypeClass, error) {
	var  tg.StorageFileTypeClass

	 := tdsync.NewCancellableGroup()
	 := make(chan block, 1)

	 := func( tg.StorageFileTypeClass) {
		 = 
		close()
	}
	// Download loop
	.Go(func( context.Context) error {
		for {
			,  := .Next()
			if  != nil {
				return errors.Wrap(, "get file")
			}

			 := len(.data)
			if  < 1 {
				(.tag)
				return nil
			}

			select {
			case <-.Done():
				return .Err()
			case  <- :
			}

			if .last() {
				(.tag)
				return nil
			}
		}
	})

	// Write loop
	.Go(writeLoop(, ))

	return , .Wait()
}