public int Compare(object x, object y)
{
var objX = x as DownloadViewModel;
var objY = y as DownloadViewModel;
if (objX == null)
throw new ArgumentException("DownloadAgeComparer can only sort non null objects of type DownloadViewModel", "x");
if (objY == null)
throw new ArgumentException("DownloadAgeComparer can only sort non null objects of type DownloadViewModel", "y");
// downloads that are now waiting in queue have lower priority (for ordering) than currently downloading one
if (objX.Downloaded == DateTime.MinValue && objY.Downloaded == DateTime.MinValue)
{
if (objX.ProgressValue > 0 && objY.ProgressValue == 0)
return -1;
if (objX.ProgressValue == 0 && objY.ProgressValue > 0)
return 1;
// if both are downloading let's say that they are equal
return 0;
}
if (objX.Downloaded == objY.Downloaded)
return 0;
if (objX.Downloaded == DateTime.MinValue)
return -1;
if (objY.Downloaded == DateTime.MinValue)
return 1;
if (objX.Downloaded < objY.Downloaded)
return 1;
return -1;
}