Ignore hidden files.
Use async methods. Also, holy cow this code is hideous.