diff options
author | Joey Hess <joey@kitenet.net> | 2012-10-30 14:34:48 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2012-10-30 14:34:48 -0400 |
commit | ca03b7fef80cf97e89cd785ec8393a27d5328d99 (patch) | |
tree | 2d28cd2db176911d2f2b49df6440e10e8eeeeccc /Assistant/Types/TransferSlots.hs | |
parent | dbf9ac41086ffb39296bd1d977cc1db844ff0b32 (diff) |
split remaining assistant types
Diffstat (limited to 'Assistant/Types/TransferSlots.hs')
-rw-r--r-- | Assistant/Types/TransferSlots.hs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/Assistant/Types/TransferSlots.hs b/Assistant/Types/TransferSlots.hs new file mode 100644 index 000000000..f8673fcfc --- /dev/null +++ b/Assistant/Types/TransferSlots.hs @@ -0,0 +1,40 @@ +{- git-annex assistant transfer slots + - + - Copyright 2012 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE DeriveDataTypeable #-} + +module Assistant.Types.TransferSlots where + +import Assistant.Types.DaemonStatus +import Logs.Transfer + +import qualified Control.Exception as E +import qualified Control.Concurrent.MSemN as MSemN +import Data.Typeable + +type TransferSlots = MSemN.MSemN Int + +{- A special exception that can be thrown to pause or resume a transfer, while + - keeping its slot in use. -} +data TransferException = PauseTransfer | ResumeTransfer + deriving (Show, Eq, Typeable) + +instance E.Exception TransferException + +type TransferSlotRunner = DaemonStatusHandle -> TransferSlots -> TransferGenerator -> IO () +type TransferGenerator = IO (Maybe (Transfer, TransferInfo, IO ())) + +{- Number of concurrent transfers allowed to be run from the assistant. + - + - Transfers launched by other means, including by remote assistants, + - do not currently take up slots. + -} +numSlots :: Int +numSlots = 1 + +newTransferSlots :: IO TransferSlots +newTransferSlots = MSemN.new numSlots |