Skip to content

Commit 25e3e88

Browse files
committed
Highlight drivers with anomalously newer dates in UI
1 parent 077a242 commit 25e3e88

1 file changed

Lines changed: 35 additions & 3 deletions

File tree

Rapr/DSEForm.cs

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ public partial class DSEForm : Form
3333
private Color savedBackColor;
3434
private Color savedForeColor;
3535

36+
private HashSet<DriverStoreEntry> driversWithNewerDate = new HashSet<DriverStoreEntry>();
37+
3638
private static readonly IUpdateManager UpdateManager = new UpdateManager();
3739

3840
private static readonly ICollection<CultureInfo> SupportedLanguage = DSEFormHelper.GetSupportedLanguage();
@@ -336,6 +338,7 @@ private async Task PopulateUIWithDriverStoreEntries()
336338
this.ShowStatus(Status.Normal, Language.Message_Scanning_Driver_Store);
337339
this.lstDriverStoreEntries.EmptyListMsg = Language.Message_Scanning_Driver_Store;
338340
this.lstDriverStoreEntries.ClearObjects();
341+
this.driversWithNewerDate.Clear();
339342

340343
var driverStoreEntries = await Task.Run(() => this.driverStore.EnumeratePackages()).ConfigureAwait(true);
341344
this.lstDriverStoreEntries.SetObjects(driverStoreEntries);
@@ -804,18 +807,39 @@ private void CtxMenuSelectOldDrivers_Click(object sender, EventArgs e)
804807
queryEntries = queryEntries.Where(entry => entry.BootCritical != true);
805808
}
806809

807-
var oldDriversToSelect = queryEntries
810+
var driverGroups = queryEntries
808811
.Where(entry => entry.DriverInfName != "ntprint.inf")
809812
.GroupBy(entry => new { entry.DriverClass, entry.DriverExtensionId, entry.DriverPkgProvider, entry.DriverInfName })
810-
.SelectMany(drivers => drivers
813+
.Select(drivers => drivers
811814
.GroupBy(entry => new { entry.DriverVersion, entry.DriverDate })
812815
.OrderByDescending(g => g.Key.DriverVersion)
813816
.ThenByDescending(g => g.Key.DriverDate)
817+
.ToList())
818+
.Where(groups => groups.Count > 1)
819+
.ToList();
820+
821+
var oldDriversToSelect = driverGroups
822+
.SelectMany(groups => groups
814823
.Skip(1)
815824
.Where(g => g.All(entry => string.IsNullOrEmpty(entry.DeviceName)))
816825
.SelectMany(g => g))
817826
.ToArray();
818827

828+
// Find old drivers whose date is newer than the newest version's date.
829+
this.driversWithNewerDate.Clear();
830+
831+
foreach (var groups in driverGroups)
832+
{
833+
var newestDate = groups[0].Key.DriverDate;
834+
835+
foreach (var entry in groups.Skip(1)
836+
.Where(g => g.Key.DriverDate > newestDate && g.All(e => string.IsNullOrEmpty(e.DeviceName)))
837+
.SelectMany(g => g))
838+
{
839+
this.driversWithNewerDate.Add(entry);
840+
}
841+
}
842+
819843
if (oldDriversToSelect.Length == 0)
820844
{
821845
this.ShowStatus(Status.Warning, Language.Message_No_Old_Drivers_Found);
@@ -1093,14 +1117,22 @@ private async void ChooseDriverStoreToolStripMenuItem_Click(object sender, Event
10931117

10941118
private void LstDriverStoreEntries_FormatCell(object sender, BrightIdeasSoftware.FormatCellEventArgs e)
10951119
{
1120+
DriverStoreEntry entry = (DriverStoreEntry)e.Model;
1121+
10961122
if (e.ColumnIndex == this.deviceNameColumn.Index)
10971123
{
1098-
DriverStoreEntry entry = (DriverStoreEntry)e.Model;
10991124
if (entry.DevicePresent == false)
11001125
{
11011126
e.SubItem.ForeColor = Color.Gray;
11021127
}
11031128
}
1129+
else if (e.ColumnIndex == this.driverDateColumn.Index)
1130+
{
1131+
if (this.driversWithNewerDate.Contains(entry))
1132+
{
1133+
e.SubItem.ForeColor = Color.OrangeRed;
1134+
}
1135+
}
11041136
}
11051137

11061138
private void LstDriverStoreEntries_FormatRow(object sender, BrightIdeasSoftware.FormatRowEventArgs e)

0 commit comments

Comments
 (0)