2016-10-07 4 views
1

목록에 카드 정렬, 만기일 및/또는 레이블을 기반으로 한 카드 이동/복사, 정기적으로 목록 보관 처리와 같은 몇 가지 측면에서만 Trello 보드를 관리하는 작은 응용 프로그램을 작성하고 있습니다. 라벨을 기반으로 보고서를 생성하는 등의 작업을 수행했습니다. 따라서 Manatee.Trello 라이브러리를 둘러싼 외관을 정리하여 서비스 인터페이스를 간소화했습니다.Manatee.Trello Moving Cards

저는 도서관에 익숙해졌으며 모든 것이 비교적 원활했습니다. 그러나, Card 클래스에서 List 내에서 또는 그 사이에 카드를 이동하는 확장 메서드와이 확장 메서드를 반복적으로 호출하여 다른 List간에 모든 카드를 이동시키는 다른 메서드를 작성했습니다.

내 문제는 하나의 카드로 7 개의 카드가있는 몇 개의 더미 목록에서 코드를 실행하면 오류없이 완료되지만 적어도 한 장의 카드는 실제로 이동하지 않는다는 것입니다. 움직임). 너무 빠르게 움직이거나, TrelloConfiguration.ChangeSubmissionTime을 조정해야 할 필요가있을 때 이것이 무엇인지 알 수 없습니다. 나는 지연으로 놀아 보려고 노력했지만 도움이되지 않습니다.

public static void Move(this Card card, int position, List list = null) 
{ 
    if (list != null && list != card.List) 
    { 
     card.List = list; 
    } 

    card.Position = position; 
} 
+0

잘 작동해야하는 것처럼 보입니다. 내가 그걸 가지고 놀게하면 나는 돌아올거야. 예제 솔루션 (내 사용자 이름 @ yahoo)을 보내 주시면 도움이 될 것입니다. – gregsdennis

답변

1

내가 원하는 기능을 복제하는 테스트를 만들었습니다

public void MoveCardsBetweenLists(
    string originListName, 
    string destinationListName, 
    string originBoardName, 
    string destinationBoardName = null) 
{ 
    var fromBoard = GetBoard(originBoardName); // returns a Manatee.Trello.Board 

    var toBoard = destinationBoardName == null 
        || destinationBoardName.Equals(originBoardName, StringComparison.OrdinalIgnoreCase) 
         ? fromBoard 
         : GetBoard(destinationBoardName); 

    var fromList = GetListFromBoard(originListName, fromBoard); // returns a Manatee.Trello.List from the specified Board 
    var toList = GetListFromBoard(destinationListName, toBoard); 

    for (int i = 0; i < fromList.Cards.Count(); i++) 
    { 
     fromList.Cards[i].Move(1, toList); 
    } 
} 

여기 Manatee.Trello.Card 내 확장 방법 :

여기 내 전화 코드입니다. 기본적으로, 나는 내 보드에 7 장의 카드를 만들고 다른 목록으로 이동 한 다음 삭제합니다 (초기 상태 유지).

private static void Run(System.Action action) 
{ 
    var serializer = new ManateeSerializer(); 
    TrelloConfiguration.Serializer = serializer; 
    TrelloConfiguration.Deserializer = serializer; 
    TrelloConfiguration.JsonFactory = new ManateeFactory(); 
    TrelloConfiguration.RestClientProvider = new WebApiClientProvider(); 

    TrelloAuthorization.Default.AppKey = TrelloIds.AppKey; 
    TrelloAuthorization.Default.UserToken = TrelloIds.UserToken; 

    action(); 

    TrelloProcessor.Flush(); 
} 

#region http://stackoverflow.com/q/39926431/878701 

private static void Move(Card card, int position, List list = null) 
{ 
    if (list != null && list != card.List) 
    { 
     card.List = list; 
    } 

    card.Position = position; 
} 

[TestMethod] 
public void MovingCards() 
{ 
    Run(() => 
      { 
       var list = new List(TrelloIds.ListId); 
       var cards = new List<Card>(); 
       for (int i = 0; i < 10; i++) 
       { 
        cards.Add(list.Cards.Add("test card " + i)); 
       } 

       var otherList = list.Board.Lists.Last(); 

       for(var i = 0; i < cards.Count; i++) 
       { 
        Move(card, i, otherList); 
       } 

       foreach (var card in cards) 
       { 
        card.Delete(); 
       } 
      }); 
} 

#endregion 

빠른 질문 : 당신의 실행이 종료하기 전에 TrelloProcessor.Flush()를 호출하고 있습니까? 그렇지 않으면 응용 프로그램이 끝날 때 일부 변경 사항이 요청 프로세서 대기열에 남아있어 절대로 전송되지 않습니다. 자세한 내용은 내 wiki page on processing requests을 참조하십시오.

또한 각 이동의 위치로 1을 사용하고있는 것으로 나타났습니다. 이렇게하면 신뢰할 수없는 주문을 받게됩니다. Trello가 사용하는 위치 데이터는 부동 소수점입니다. 다른 두 카드 사이에 카드를 배치하려면 다른 카드의 평균값을 사용하면됩니다. 귀하의 경우 (대상 목록이 비어있는 경우) 주문에 대한 인덱서 변수를 보내주십시오. 대상 목록이 비어 있지 않으면 목록의 다른 카드를 기반으로 새로운 위치를 계산해야합니다 (Trello 평균법에 따라).

마지막으로, 내가 가진 확장 코드가 마음에 들어요. 라이브러리에 추가하는 것이 유용하다고 생각되는 아이디어가 있다면 GitHub 레포를 포크하고 끌어 오기 요청을 만드십시오.

+0

그동안 질문을 게시 한 후, 나는 도서관 소스 코드를 훑어 보았고 내 이슈가 그 위치와 관련 있다고 생각하기 시작했습니다. Trello에서 카드를 움직일 때 드롭 다운에서 "1"을 선택하는 것과 같이 매번 1로 설정하는 위치를 취한 것으로 가정 했으므로 항상 카드를 맨 위에 놓습니다. 귀하의 설명은 매우 도움이되며, 나는 플러시에 대해서도 몰랐습니다. 나는 문 밖으로 나가고 있지만 가능한 한 빨리 이러한 것들을 시도하고 그것이 어떻게 진행되는지/대답을 받아 들일 수 있음을 알려주겠다. – bubbleking

+0

실제로 'TrelloProcessor.Flush()'를 사용하지 않아서 문제를 일으킨 Position 클래스에 대한 이해가 부족합니다. 나는 repo에 기여하는 데 잠재적으로 관심이있을 것입니다. 지금 당장 집중하고있는 것은 실제 여러 가지 하위 수준의 여러 작업 인 일반적인 상위 수준 작업 (예 : 목록 정렬)을 나타내는 메서드를 제공하는 것입니다.이것들이 당신의 도서관에 가치를 더할 수 있다고 생각한다면, 나는 내가 생각한 것을 나누고 자합니다. – bubbleking

관련 문제