public static string ToLastRunString(this Project project, bool includeBuildDuration = false)
{
if (project != null && !project.Builds.IsEmpty())
{
var build = project.Builds.First();
var status = build.Status.First();
DateTime started;
DateTime finished;
DateTime.TryParse(build.Started, out started);
DateTime.TryParse(build.Finished, out finished);
BuildStatus buildStatus;
Enum.TryParse(status, true, out buildStatus);
switch (buildStatus)
{
case BuildStatus.Failed:
case BuildStatus.Success:
{
if ((DateTime.TryParse(build.Started, out started) && started != DateTime.MinValue) &&
(DateTime.TryParse(build.Finished, out finished) && finished != DateTime.MinValue) &&
started < finished)
{
var runDuration = finished.Subtract(started);
var lastRunStringWithBuildDuration = string.Format("{0} in {1} min {2} sec", started.PrettyDate(), runDuration.Minutes, runDuration.Seconds);
var lastRunString = started.PrettyDate();
return includeBuildDuration ? lastRunStringWithBuildDuration : lastRunString;
}
return started.PrettyDate();
}
case BuildStatus.Cancelled:
{
return string.Format("Cancelled {0}", finished.PrettyDate());
}
case BuildStatus.Queued:
{
return string.Format("Queued {0}", build.Created.GetHumanizedRunningFromTime());
}
case BuildStatus.Running:
{
return string.Format("Running {0}", build.Started.GetHumanizedRunningFromTime());
}
}
return "???";
}
return string.Empty;
}