more generic
This commit is contained in:
		
					parent
					
						
							
								0842e99637
							
						
					
				
			
			
				commit
				
					
						c21a9fe04a
					
				
			
		
					 2 changed files with 12 additions and 11 deletions
				
			
		| 
						 | 
					@ -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)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue