private HudLayoutInfo GetHudLayoutInfo(List <HudSavedLayout> layouts, HudViewType hudViewType) { var masterLayout = layouts.FirstOrDefault(); if (masterLayout == null) { return(null); } var tableDescription = GetTableDescription(masterLayout.LayoutId); var sameDefault = defaultLayouts.FirstOrDefault( l => l.TableType == tableDescription.TableType && l.HudViewType == hudViewType); if (settingsService.GetSettings().GeneralSettings.HudViewMode != (int)hudViewType && hudViewType != HudViewType.Plain) { return(null); } var filteredLayouts = hudViewType == HudViewType.Plain ? layouts.Where( l => GetTableDescription(l.LayoutId).PokerSite != EnumPokerSites.Ignition && GetTableDescription(l.LayoutId).PokerSite != EnumPokerSites.Bodog) .ToList() : layouts.Where( l => GetTableDescription(l.LayoutId).PokerSite == EnumPokerSites.Ignition || GetTableDescription(l.LayoutId).PokerSite == EnumPokerSites.Bodog) .ToList(); if (filteredLayouts.Count == 0) { return(null); } var newLayout = new HudLayoutInfo(); newLayout.TableType = tableDescription.TableType; newLayout.HudBumperStickerTypes = masterLayout.HudBumperStickerTypes.Select(s => s.Clone()).ToList(); newLayout.HudPlayerTypes = masterLayout.HudPlayerTypes.Select(p => p.Clone()).ToList(); newLayout.HudStats = masterLayout.HudStats.Select(s => { var statInfoBreak = s as StatInfoBreak; if (statInfoBreak != null) { return(statInfoBreak.Clone()); } return(s.Clone()); }).ToList(); newLayout.IsDefault = false; newLayout.HudViewType = hudViewType; newLayout.UiPositionsInfo = sameDefault?.UiPositionsInfo.Select(p => p.Clone()).ToList(); newLayout.Name = masterLayout.Name; foreach (var hudSavedLayout in filteredLayouts) { var newPositionInfo = new HudPositionsInfo(); newPositionInfo.GameType = GetTableDescription(hudSavedLayout.LayoutId).GameType; newPositionInfo.PokerSite = GetTableDescription(hudSavedLayout.LayoutId).PokerSite; newPositionInfo.HudPositions = hudSavedLayout.HudPositions.Where( p => p.HudType == (hudViewType == HudViewType.Plain ? HudType.Plain : HudType.Default)) .Select( p => new HudPositionInfo { Position = new Point(p.Position.X, p.Position.Y), Seat = p.Seat }) .ToList(); if (newPositionInfo.HudPositions.Any()) { newLayout.HudPositionsInfo.Add(newPositionInfo); } } if (sameDefault != null) { foreach (var defaultPosInfo in sameDefault.HudPositionsInfo) { if ( newLayout.HudPositionsInfo.Any( p => p.GameType == defaultPosInfo.GameType && p.PokerSite == defaultPosInfo.PokerSite)) { continue; } newLayout.HudPositionsInfo.Add(defaultPosInfo.Clone()); } } if (HudObjectsComparer.AreEquals(newLayout, sameDefault)) { return(null); } if (HudObjectsComparer.AreEqualsExceptPositions(newLayout, sameDefault)) { sameDefault.HudPositionsInfo = newLayout.HudPositionsInfo.Select(p => p.Clone()).ToList(); return(sameDefault); } return(newLayout.HudPositionsInfo.Any() ? newLayout : null); }
public override void Up() { try { LogProvider.Log.Info("Preparing migration #14"); defaultLayouts = GetDefaultLayouts(); var oldLayouts = LoadOldLayouts(Path.Combine(StringFormatter.GetAppDataFolderPath(), "Layouts.xml")); if (oldLayouts == null) { return; } while (oldLayouts.Layouts.Count > 0) { var currentLayout = oldLayouts.Layouts[0]; var tableDescription = hashTable.FirstOrDefault(h => h.Hash == currentLayout.LayoutId); if (tableDescription == null) { oldLayouts.Layouts.RemoveAt(0); continue; } var grouppedLayouts = oldLayouts.Layouts.Where( l => GetTableDescription(l.LayoutId).TableType == tableDescription?.TableType && l.HudStats.Any() && HudObjectsComparer.AreEquals( l.HudBumperStickerTypes, currentLayout.HudBumperStickerTypes) && HudObjectsComparer.AreEquals(l.HudPlayerTypes, currentLayout.HudPlayerTypes) && HudObjectsComparer.AreEquals(l.HudStats, currentLayout.HudStats)).ToList(); foreach (var hudViewType in Enum.GetValues(typeof(HudViewType)).OfType <HudViewType>()) { var newLayout = GetHudLayoutInfo(grouppedLayouts, hudViewType); if (newLayout == null) { continue; } if (!newLayout.IsDefault) { var i = 1; string hudTypeName = string.Empty; if (hudViewType != HudViewType.Plain) { hudTypeName = $" {hudViewType}"; } string tableTypeName = string.Empty; if (!newLayout.Name.Contains(CommonResourceManager.Instance.GetEnumResource(tableDescription.TableType))) { tableTypeName = $" {CommonResourceManager.Instance.GetEnumResource(tableDescription.TableType)}"; } var layoutName = $"{newLayout.Name}{tableTypeName}{hudTypeName}"; while (hudLayoutsService.HudLayoutMappings.Mappings.Any(f => f.Name == layoutName)) { layoutName = $"{newLayout.Name}{tableTypeName}{hudTypeName} {i}"; i++; } newLayout.Name = layoutName; } else { var def = defaultLayouts.FirstOrDefault(l => l.Name == newLayout.Name); if (def != null) { defaultLayouts[defaultLayouts.IndexOf(def)] = newLayout; } } var layoutFileName = Save(newLayout); foreach (var selected in grouppedLayouts) { var table = hashTable.FirstOrDefault(h => h.Hash == selected.LayoutId); if (table == null) { continue; } var mapping = new HudLayoutMapping { FileName = Path.GetFileName(layoutFileName), GameType = table.GameType, TableType = table.TableType, PokerSite = table.PokerSite, IsDefault = false, IsSelected = selected.IsDefault, Name = newLayout.Name, HudViewType = newLayout.HudViewType }; if (mapping.IsSelected && hudLayoutsService.HudLayoutMappings.Mappings.Any( m => m.IsSelected && m.PokerSite == table.PokerSite && m.TableType == table.TableType && m.GameType == table.GameType)) { mapping.IsSelected = false; } hudLayoutsService.HudLayoutMappings.Mappings.Add(mapping); } } oldLayouts.Layouts.RemoveAll( l => GetTableDescription(l.LayoutId).TableType == tableDescription.TableType && HudObjectsComparer.AreEquals(l.HudBumperStickerTypes, currentLayout.HudBumperStickerTypes) && HudObjectsComparer.AreEquals(l.HudPlayerTypes, currentLayout.HudPlayerTypes) && HudObjectsComparer.AreEquals(l.HudStats, currentLayout.HudStats)); } hudLayoutsService.SaveLayoutMappings(); LogProvider.Log.Info("Migration #14 executed."); } catch (Exception e) { LogProvider.Log.Error(this, $"Migration #14 failed.", e); } }