add complete and progress callback