more generic

This commit is contained in:
Joey Hess 2012-08-29 15:56:47 -04:00
parent 0842e99637
commit c21a9fe04a
2 changed files with 12 additions and 11 deletions

View file

@ -15,7 +15,7 @@ module Assistant.TransferQueue (
queueTransferAt, queueTransferAt,
queueTransferWhenSmall, queueTransferWhenSmall,
getNextTransfer, getNextTransfer,
dequeueTransfer, dequeueTransfers,
) where ) where
import Common.Annex import Common.Annex
@ -140,20 +140,20 @@ getNextTransfer q dstatus acceptable = atomically $ do
return $ Just r return $ Just r
else return Nothing else return Nothing
{- Removes a transfer (as well as any equivilant transfers) from the queue, {- Removes transfers matching a condition from the queue, and returns the
- and returns True if anything was removed. -} - removed transfers. -}
dequeueTransfer :: TransferQueue -> DaemonStatusHandle -> Transfer -> IO Bool dequeueTransfers :: TransferQueue -> DaemonStatusHandle -> (Transfer -> Bool) -> IO [(Transfer, TransferInfo)]
dequeueTransfer q dstatus t = do dequeueTransfers q dstatus c = do
ok <- atomically $ do removed <- atomically $ do
(removed, ls) <- partition (equivilantTransfer t . fst) (removed, ls) <- partition (c . fst)
<$> readTVar (queuelist q) <$> readTVar (queuelist q)
void $ writeTVar (queuesize q) (length ls) void $ writeTVar (queuesize q) (length ls)
void $ writeTVar (queuelist q) ls void $ writeTVar (queuelist q) ls
drain drain
forM_ ls $ unGetTChan (queue q) forM_ ls $ unGetTChan (queue q)
return $ not $ null removed return removed
when ok $ unless (null removed) $
notifyTransfer dstatus notifyTransfer dstatus
return ok return removed
where where
drain = maybe noop (const drain) =<< tryReadTChan (queue q) drain = maybe noop (const drain) =<< tryReadTChan (queue q)

View file

@ -175,7 +175,8 @@ cancelTransfer pause t = do
liftIO $ do liftIO $ do
unless pause $ unless pause $
{- remove queued transfer -} {- remove queued transfer -}
void $ dequeueTransfer (transferQueue webapp) dstatus t void $ dequeueTransfers (transferQueue webapp) dstatus $
equivilantTransfer t
{- stop running transfer -} {- stop running transfer -}
maybe noop (stop dstatus) (M.lookup t m) maybe noop (stop dstatus) (M.lookup t m)
where where