private void ReportProgress(int percentage, IndexingProgress.State status, string message)
{
int eta;
IndexingProgress ip = new IndexingProgress();
ip.IndexingState = status;
ip.Message = message;
// a naive ETA formula: ETA = ElapsedMinutes * 100 / percentDone - Elapsed
if (percentage > 0)
{
elapsed = (DateTime.Now.Subtract(startTime));
eta = (int)(elapsed.TotalMinutes * 100 / percentage - elapsed.TotalMinutes);
if (eta <= 0)
{
ip.ETA = Properties.Resources.FinishingSoon;
}
else
{
TimeSpan remaining = TimeSpan.FromMinutes(eta + 1);
ip.ETA = String.Format(Properties.Resources.FinishingInHours, (int)remaining.TotalHours, remaining.Minutes);
}
}
else
{
ip.ETA = "n/a";
}
OnProgressChanged(new ProgressChangedEventArgs(percentage, ip));
}