Exemplo n.º 1
0
        private void CheckForMissedCardMoves(BoardMapping mapping)
        {
            // if we have local storage, we have saved board versions and we have one for this board
            long boardId = mapping.Identity.LeanKit;

            if (AppSettings != null &&
                AppSettings.BoardVersions != null &&
                AppSettings.BoardVersions.Any() &&
                AppSettings.BoardVersions.ContainsKey(boardId))
            {
                var version = AppSettings.BoardVersions[boardId];
                Log.Debug(string.Format("Checking for any cards moved to mapped lanes on board [{0}] since service last ran, version [{1}].", boardId, version));
                try
                {
                    var events = LeanKit.GetBoardHistorySince(boardId, (int)version);
                    var board  = LeanKit.GetBoard(boardId);
                    if (board != null && events != null)
                    {
                        foreach (var ev in events)
                        {
                            // check for created cards
                            if (ev.EventType == "CardCreation")
                            {
                                var card = LeanKit.GetCard(board.Id, ev.CardId);
                                if (card != null && string.IsNullOrEmpty(card.ExternalCardID))
                                {
                                    try
                                    {
                                        CreateNewItem(card.ToCard(), mapping);
                                    }
                                    catch (Exception e)
                                    {
                                        Log.Error("Exception for CreateNewItem: " + e.Message);
                                    }
                                }
                            }
                            // only look for moved cards
                            else if (ev.ToLaneId != 0)
                            {
                                var lane = board.GetLaneById(ev.ToLaneId);
                                if (lane != null)
                                {
                                    if (lane.Id.HasValue && mapping.LaneToStatesMap.Any() && mapping.LaneToStatesMap.ContainsKey(lane.Id.Value))
                                    {
                                        if (mapping.LaneToStatesMap[lane.Id.Value] != null && mapping.LaneToStatesMap[lane.Id.Value].Count > 0)
                                        {
                                            // board.GetCard() only seems to get cards in active lanes
                                            // using LeanKitApi.GetCard() instead because it will get
                                            // cards in archive lanes
                                            var card = LeanKit.GetCard(board.Id, ev.CardId);
                                            if (card != null && !string.IsNullOrEmpty(card.ExternalCardID))
                                            {
                                                try {
                                                    UpdateStateOfExternalItem(card.ToCard(), mapping.LaneToStatesMap[lane.Id.Value], mapping);
                                                } catch (Exception e) {
                                                    Log.Error("Exception for UpdateStateOfExternalItem: " + e.Message);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        UpdateBoardVersion(board.Id, board.Version);
                    }
                }
                catch (Exception ex)
                {
                    Log.Error(string.Format("An error occured: {0} - {1} - {2}", ex.GetType(), ex.Message, ex.StackTrace));
                }
            }
        }