client: refactor progress