Вести базу MD5 и SHA1 хешей для всех файлов, при добавлении нового файла высчитываем для него эти хеши и смотрим по базе, нет ли у нас файла. у которого оба хеша совпали, если есть - значит такой файл уже загружен и можно его повторно не загружать.
К примеру можно использовать таймер, после указания времени во сколько разбудить мы высчитываем через сколько данный таймер должен сработать и запускаем его. Как только таймер сработал - будим человека.