add progress callback for download