Peer: function to calculate the total bytes downloaded so far
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Sat, 5 Sep 2015 17:11:47 +0000 (22:41 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Sat, 5 Sep 2015 17:11:47 +0000 (22:41 +0530)
src/FuncTorrent/Peer.hs

index 0b9ece75bc9cc88db2fc5783255ea5cc103fb436..9ca40f41efb7d4f774b0b53dc24caa6bd1bb7b79 100644 (file)
@@ -36,7 +36,7 @@ data PieceDlState = Pending
                   | Have
                   deriving (Show, Eq)
 
--- todo - map with index to a new data structure (peers who have that piece amd state)
+-- todo - map with index to a new data structure (peers who have that piece and state)
 data PieceData = PieceData { peers :: [Peer]        -- ^ list of peers who have this piece
                            , dlstate :: PieceDlState  -- ^ state of the piece from download perspective.
                            , hash  :: ByteString    -- ^ piece hash
@@ -106,6 +106,10 @@ pickPiece :: PieceMap -> Maybe Integer
 pickPiece =
   (fst `liftM`) . headMay . toList . filter (\v -> dlstate v == Pending)
 
+bytesDownloaded :: PieceMap -> Integer
+bytesDownloaded =
+  sum . (map (len . snd)) . toList . filter (\v -> dlstate v == Have)
+
 updatePieceAvailability :: PieceMap -> Peer -> [Integer] -> PieceMap
 updatePieceAvailability pieceStatus p pieceList =
   mapWithKey (\k pd -> if k `elem` pieceList