IfNeeded takes the same values as Download plus a hash as a string
It will check if the file already exists, by comparing the hash
If the hash does not match, it will attempt to download the file
Once downloaded it will attempt to verify the hash again