public Task AddOrUpdateScreen(IInternalScreen internalScreen) { var predicateScreen = new Predicate <IInternalScreen>((screen) => screen.Id == internalScreen.Id); var internalScreenFound = InternalScreens.Find(predicateScreen); if (internalScreenFound != null) { UpdateScreen(internalScreenFound, internalScreen); } else { InternalScreens.Add(internalScreen); InternalScreensById[internalScreen.Id] = internalScreen; } return(Task.CompletedTask); }
public Task ChangeOrder(IEnumerable <IScreen> screens) { var screensToOrder = screens .Select(screen => screen as IInternalScreen) .Where(screen => screen != null) .Where(screen => InternalScreensById.ContainsKey(screen.Id)) ; var screensToOrderIds = new HashSet <string>(screensToOrder.Select(screen => screen.Id)); var remainingScreens = InternalScreens.Where(screen => !screensToOrderIds.Contains(screen.Id)); int index = 0; foreach (var screen in screensToOrder.Concat(remainingScreens)) { (InternalScreensById[screen.Id] as IModifiableScreen).Index = index; index++; } return(Task.CompletedTask); }