Add progress calculations

This tends to crash a lot as it is.
Prevent unneeded updates to prevent infinite event loop
Handle done as 100% progress