11//------------------------------------------------------------------------------
22// <copyright company="LeanKit Inc.">
33// Copyright (c) LeanKit Inc. All rights reserved.
4- // </copyright>
4+ // </copyright>
55//------------------------------------------------------------------------------
66
77using System ;
@@ -72,7 +72,7 @@ public void StartWatching(bool includeTaskboards)
7272 private void InitBoard ( )
7373 {
7474 //setup the loop intervals
75- //Probably need to do this on a different thread
75+ //Probably need to do this on a different thread
7676 do
7777 {
7878 try
@@ -123,7 +123,7 @@ private CheckForUpdatesLoopResult SetupCheckForUpdatesLoop()
123123 {
124124 const int pulse = 1000 ;
125125 var pollingInterval = ( long ) _integrationSettings . CheckForUpdatesIntervalSeconds * 1000 ;
126-
126+
127127 var stopWatch = new System . Diagnostics . Stopwatch ( ) ;
128128 stopWatch . Start ( ) ;
129129
@@ -301,7 +301,6 @@ private CheckForUpdatesLoopResult SetupCheckForUpdatesLoop()
301301 {
302302 OnClientError ( new ClientErrorEventArgs { Exception = ex , Message = "Error checking for board events." } ) ;
303303 }
304-
305304 } while ( ShouldContinue ) ;
306305
307306 stopWatch . Stop ( ) ;
@@ -533,8 +532,12 @@ private CardUpdateEvent CreateCardUpdateEvent(BoardHistoryEvent boardEvent, IEnu
533532 if ( originalCard == null )
534533 return null ;
535534
536- var updatedCard =
537- affectedLanes . FindContainedCard ( boardEvent . ToLaneId , boardEvent . CardId ) ;
535+ var lanes = affectedLanes . ToList ( ) ;
536+
537+ var updatedCard = ( lanes . ContainsCard ( boardEvent . CardId ) )
538+ ? lanes . FindContainedCard ( boardEvent . ToLaneId , boardEvent . CardId )
539+ : GetCard ( boardEvent . CardId , true ) ;
540+
538541 return new CardUpdateEvent ( boardEvent . EventDateTime , originalCard , updatedCard ) ;
539542 }
540543 catch ( ItemNotFoundException ex )
@@ -566,34 +569,39 @@ private static EventType GetEventType(string eventType)
566569
567570 public virtual Card GetCard ( long cardId )
568571 {
569- Card card ;
570- _boardLock . EnterReadLock ( ) ;
571- try
572- {
573- card = _board . GetCardById ( cardId ) ;
574- }
575- finally
572+ return GetCard ( cardId , false ) ;
573+ }
574+
575+ public virtual Card GetCard ( long cardId , bool bypassCache )
576+ {
577+ Card card = null ;
578+ if ( ! bypassCache )
576579 {
577- _boardLock . ExitReadLock ( ) ;
580+ _boardLock . EnterReadLock ( ) ;
581+ try
582+ {
583+ card = _board . GetCardById ( cardId ) ;
584+ }
585+ finally
586+ {
587+ _boardLock . ExitReadLock ( ) ;
588+ }
578589 }
579590
591+ if ( card != null ) return card ;
592+
580593 // try getting card directly from the api
581- if ( card == null )
582- {
583- var c = _api . GetCard ( _boardId , cardId ) ;
584- card = ( c != null ) ? c . ToCard ( ) : null ;
585- }
594+ var c = _api . GetCard ( _boardId , cardId ) ;
595+ card = ( c != null ) ? c . ToCard ( ) : null ;
596+ if ( card != null ) return card ;
586597
587598 //try to find in archive, suppose it is not loaded
588- if ( card == null )
589- {
590- var archive = _api . GetArchiveCards ( _boardId ) ;
591- var firstOrDefault = ( archive != null ) ? archive . FirstOrDefault ( x => x . Id == cardId ) : null ;
592- if ( firstOrDefault != null ) card = firstOrDefault . ToCard ( ) ;
593- //TODO: need to load the archive
594- //Also, could be possible that the card is part of the cards older than 90 days
595- //In that case we my need to do a search too.
596- }
599+ var archive = _api . GetArchiveCards ( _boardId ) ;
600+ var firstOrDefault = ( archive != null ) ? archive . FirstOrDefault ( x => x . Id == cardId ) : null ;
601+ if ( firstOrDefault != null ) card = firstOrDefault . ToCard ( ) ;
602+ //TODO: need to load the archive
603+ //Also, could be possible that the card is part of the cards older than 90 days
604+ //In that case we my need to do a search too.
597605
598606 if ( card == null ) throw new ItemNotFoundException ( ) ;
599607
@@ -826,7 +834,7 @@ public void AddTask(Card task, long cardId, string wipOverrideReason)
826834 // //ApplyBoardChanges(results.BoardVersion, new[] {results.Lane});
827835 //} finally {
828836 // _boardLock.ExitWriteLock();
829- //}
837+ //}
830838 }
831839
832840 public void UpdateTask ( Card task , long cardId )
@@ -853,7 +861,7 @@ public void UpdateTask(Card task, long cardId, string wipOverrideReason)
853861 // }
854862 // finally {
855863 // _boardLock.ExitWriteLock();
856- // }
864+ // }
857865 }
858866
859867 public void DeleteTask ( long taskId , long cardId )
@@ -864,7 +872,7 @@ public void DeleteTask(long taskId, long cardId)
864872
865873 public void MoveTask ( long taskId , long cardId , long toLaneId , int position )
866874 {
867- MoveTask ( taskId , cardId , toLaneId , position , string . Empty ) ;
875+ MoveTask ( taskId , cardId , toLaneId , position , string . Empty ) ;
868876 }
869877
870878 public void MoveTask ( long taskId , long cardId , long toLaneId , int position , string wipOverrideReason )
@@ -901,7 +909,8 @@ public DrillThroughStatistics GetDrillThroughStatistics(long boardId, long cardI
901909 #region obsolete
902910
903911 [ Obsolete ( "Creating taskboards is no longer supported" , true ) ]
904- public void CreateTaskboard ( long cardId , TaskboardTemplateType templateType , long cardContextId ) {
912+ public void CreateTaskboard ( long cardId , TaskboardTemplateType templateType , long cardContextId )
913+ {
905914 //_boardLock.EnterUpgradeableReadLock();
906915 //try
907916 //{
@@ -931,7 +940,8 @@ public void CreateTaskboard(long cardId, TaskboardTemplateType templateType, lon
931940 }
932941
933942 [ Obsolete ( "Deleting taskboards is no longer supported" , true ) ]
934- public void DeleteTaskboard ( long cardId , long taskboardId ) {
943+ public void DeleteTaskboard ( long cardId , long taskboardId )
944+ {
935945 //_boardLock.EnterUpgradeableReadLock();
936946 //try
937947 //{
@@ -962,12 +972,14 @@ public void DeleteTaskboard(long cardId, long taskboardId) {
962972 }
963973
964974 [ Obsolete ( "Use AddTask instead" ) ]
965- public void AddTaskboardCard ( Card card , long taskboardId ) {
975+ public void AddTaskboardCard ( Card card , long taskboardId )
976+ {
966977 AddTaskboardCard ( card , taskboardId , string . Empty ) ;
967978 }
968979
969980 [ Obsolete ( "Use AddTask instead" ) ]
970- public void AddTaskboardCard ( Card card , long taskboardId , string wipOverrideReason ) {
981+ public void AddTaskboardCard ( Card card , long taskboardId , string wipOverrideReason )
982+ {
971983 //var results = string.IsNullOrEmpty(wipOverrideReason)
972984 // ? _api.AddTaskboardCard(_boardId, taskboardId, card)
973985 // : _api.AddTaskboardCard(_boardId, taskboardId, card, wipOverrideReason);
@@ -982,12 +994,14 @@ public void AddTaskboardCard(Card card, long taskboardId, string wipOverrideReas
982994 }
983995
984996 [ Obsolete ( "Use UpdateTask instead" ) ]
985- public void UpdateTaskboardCard ( Card card , long taskboardId ) {
997+ public void UpdateTaskboardCard ( Card card , long taskboardId )
998+ {
986999 UpdateTaskboardCard ( card , taskboardId , string . Empty ) ;
9871000 }
9881001
9891002 [ Obsolete ( "Use UpdateTask instead" ) ]
990- public void UpdateTaskboardCard ( Card card , long taskboardId , string wipOverrideReason ) {
1003+ public void UpdateTaskboardCard ( Card card , long taskboardId , string wipOverrideReason )
1004+ {
9911005 //var results = string.IsNullOrEmpty(wipOverrideReason)
9921006 // ? _api.UpdateTaskboardCard(_boardId, taskboardId, card)
9931007 // : _api.UpdateTaskboardCard(_boardId, taskboardId, card, wipOverrideReason);
@@ -1008,7 +1022,8 @@ public void UpdateTaskboardCard(Card card, long taskboardId, string wipOverrideR
10081022 }
10091023
10101024 [ Obsolete ( "Use DeleteTask instead" ) ]
1011- public void DeleteTaskboardCard ( long cardId , long taskboardId ) {
1025+ public void DeleteTaskboardCard ( long cardId , long taskboardId )
1026+ {
10121027 throw new NotImplementedException ( ) ;
10131028 }
10141029
@@ -1028,4 +1043,4 @@ public void MoveTaskboardCard(long cardId, long taskboardId, long toLaneId, int
10281043
10291044 #endregion
10301045 }
1031- }
1046+ }
0 commit comments