move update progress logic into its own class