2016-10-07 10 views
1

私は、リスト上のカードのソート、期日および/またはラベルに基づくカードの移動/コピー、定期的なリストのアーカイブなど、Trello Boardを管理するための小さなアプリケーションを作成していますラベルに基づいてレポートを生成するなど、私はサービスのためのインターフェイスを簡素化するためにManatee.Trelloライブラリの周りにファサードを組み込んでいます。Manatee.Trello Moving Cards

私はライブラリに慣れてきており、物事は比較的スムーズです。しかし、私は、CardクラスのListをList内またはList間で移動する拡張メソッドと、この拡張メソッドを繰り返し呼び出して、あるListから別のListにすべてのCardを移動する別のメソッドを書きました。

私の問題は、1枚のカードで7枚のダミーリストを実行するとエラーなしで完了しますが、少なくとも1枚のカードは実際には移動しません(3枚のカードが失敗した移動)。私は物事をあまりにも速く動かしているか、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

正常に動作するはずのもののように見えます。私はそれで遊ぶことができ、私は戻ってきます。あなたに私のサンプルソリューション(私のusername @ 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が使用する位置データは浮動小数点です。他の2枚のカードの間にカードを置くには、他のカードの平均をとるだけです。あなたの場合、(宛先リストが空の場合)、私は注文のインデクサー変数を送信することをお勧めします。宛先リストが空でない場合は、リスト内の他のカードに基づいて新しい位置を計算する必要があります(Trelloが使用する平均化方法による)。

最後に、私はあなたが持っている拡張コードが好きです。ライブラリに追加すると便利だと思われるアイデアがある場合は、GitHubリポジトリをフォークしてプルリクエストを作成してください。

+0

一方、質問を投稿した後、私はあなたの図書館のソースコードを覗き込んで、私の問題がその位置であるかもしれないと考え始めました。 Trelloでカードを動かすときにドロップダウンで "1"を選択するようになるたびに1に設定すると仮定していたので、常にカードを一番上に置いていました。あなたの説明は非常に役に立ち、私はどちらかについて知りませんでした。私はドアを出て行っていますが、私はできるだけ早くこれらのことを試してみましょう。 – bubbleking

+0

実際には、 'TrelloProcessor.Flush()'を使用せず、私に問題を与えたPositionクラスをよく理解していないという組み合わせでした。私は潜在的にレポに貢献することに興味があるでしょう。私が今注目しているのは、実際には多くの異なる下位レベルのタスクである一般的な上位レベルの操作(例えば、リストのソート)を表すメソッドを提供することです。これらがあなたの図書館に価値をもたらしてくれると思うのであれば、私が思いついたことを分かち合うだけではありません。 – bubbleking

関連する問題