Skip to content

Commit 838c71e

Browse files
authored
Controller Icons are only displayed once per controller. (#2822)
* Controller Icons are only displayed once per controller. * Review feedback
1 parent 2453889 commit 838c71e

File tree

2 files changed

+81
-3
lines changed

2 files changed

+81
-3
lines changed

MobiFlight/Controllers/ControllerBindingService.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public List<ControllerBinding> AnalyzeProjectBindings(Project project)
3434
results.ForEach(b =>
3535
{
3636
// Only add if not already present (first occurrence wins)
37-
if (!allResults.Any(existing => existing.OriginalController == b.OriginalController))
37+
if (!allResults.Any(existing => existing.OriginalController.AreEqual(b.OriginalController)))
3838
{
3939
allResults.Add(b);
4040
}
@@ -66,7 +66,7 @@ public virtual List<ControllerBinding> PerformAutoBinding(Project project)
6666

6767
foreach (var binding in results)
6868
{
69-
var bindingExists = allResults.FirstOrDefault(b => b.OriginalController == binding.OriginalController);
69+
var bindingExists = allResults.FirstOrDefault(b => b.OriginalController.AreEqual(binding.OriginalController));
7070
// Only add if not already present (first occurrence wins)
7171
if (bindingExists != null) continue;
7272

@@ -76,7 +76,7 @@ public virtual List<ControllerBinding> PerformAutoBinding(Project project)
7676
// Update binding mappings for next config file
7777
foreach (var mapping in serialMappings)
7878
{
79-
if (appliedBindingMappings.FirstOrDefault(b => b.BoundController == mapping.BoundController) != null) continue;
79+
if (appliedBindingMappings.FirstOrDefault(b => b.BoundController.AreEqual(mapping.BoundController)) != null) continue;
8080

8181
appliedBindingMappings.Add(mapping);
8282
}

MobiFlightUnitTests/MobiFlight/Controllers/ControllerBindingServiceTests.cs

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,29 @@ public void AnalyzeProjectBindings_MultipleConfigFiles_AnalyzesAll()
468468
Assert.AreEqual(ControllerBindingStatus.AutoBind, binding2.Status);
469469
}
470470

471+
[TestMethod]
472+
public void AnalyzeProjectBindings_MultipleConfigFiles_WithSameController_AnalyzesAll()
473+
{
474+
// Arrange
475+
var project = new Project();
476+
project.ConfigFiles.Add(CreateConfigFileWithController("Board1/ SN-111"));
477+
project.ConfigFiles.Add(CreateConfigFileWithController("Board1/ SN-111"));
478+
479+
SetupConnectedControllers(new[]
480+
{
481+
("Board1", "SN-111"),
482+
("Board2", "SN-333")
483+
});
484+
485+
// Act
486+
var result = service.AnalyzeProjectBindings(project);
487+
488+
// Assert
489+
Assert.HasCount(1, result);
490+
var binding1 = result.Find(b => b.OriginalController.Equals(SerialNumber.CreateController("Board1/ SN-111")));
491+
Assert.AreEqual(ControllerBindingStatus.Match, binding1.Status);
492+
}
493+
471494
[TestMethod]
472495
public void PerformAutoBinding_MultipleConfigFiles_UpdatesAll()
473496
{
@@ -597,6 +620,48 @@ public void AnalyzeProjectBindings_MixedControllerTypes_AnalyzesAll()
597620

598621
#endregion
599622

623+
#region Test with multiple configFiles in project
624+
[TestMethod]
625+
public void AnalyzeProjectBindings_MultipleConfigFiles_SameController_AutoBind()
626+
{
627+
// Arrange
628+
var project = CreateProjectWithControllersAndMultipleConfigFiles(new[]
629+
{
630+
"X1-Pro/ SN-1111111111"
631+
});
632+
633+
SetupConnectedController("X1-Pro", "SN-9876543210");
634+
635+
// Act
636+
var result = service.AnalyzeProjectBindings(project);
637+
638+
// Assert
639+
Assert.HasCount(1, result, "There should only be one controller binding");
640+
var binding1 = result.Find(b => b.OriginalController.Equals(SerialNumber.CreateController("X1-Pro/ SN-1111111111")));
641+
Assert.AreEqual(ControllerBindingStatus.AutoBind, binding1.Status);
642+
}
643+
644+
[TestMethod]
645+
public void AnalyzeProjectBindings_MultipleConfigFiles_SameController_Missing()
646+
{
647+
// Arrange
648+
var project = CreateProjectWithControllersAndMultipleConfigFiles(new[]
649+
{
650+
"X1-Pro/ SN-1111111111"
651+
});
652+
653+
SetupConnectedController("Other Controller", "JS-9876543210");
654+
655+
// Act
656+
var result = service.AnalyzeProjectBindings(project);
657+
658+
// Assert
659+
Assert.HasCount(1, result, "There should only be one controller binding");
660+
var binding1 = result.Find(b => b.OriginalController.Equals(SerialNumber.CreateController("X1-Pro/ SN-1111111111")));
661+
Assert.AreEqual(ControllerBindingStatus.Missing, binding1.Status);
662+
}
663+
#endregion
664+
600665
#region Helper Methods
601666

602667
private Project CreateProjectWithController(string moduleSerial)
@@ -613,6 +678,19 @@ private Project CreateProjectWithControllers(string[] moduleSerials)
613678
return project;
614679
}
615680

681+
private Project CreateProjectWithControllersAndMultipleConfigFiles(string[] moduleSerials)
682+
{
683+
var project = new Project();
684+
var configFile = CreateConfigFileWithControllers(moduleSerials);
685+
project.ConfigFiles.Add(configFile);
686+
687+
configFile = CreateConfigFileWithControllers(moduleSerials);
688+
project.ConfigFiles.Add(configFile);
689+
690+
project.Sim = "msfs";
691+
return project;
692+
}
693+
616694
private ConfigFile CreateConfigFileWithController(string moduleSerial)
617695
{
618696
return CreateConfigFileWithControllers(new[] { moduleSerial });

0 commit comments

Comments
 (0)