summaryrefslogtreecommitdiff
path: root/Assistant/Threads/TransferWatcher.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Assistant/Threads/TransferWatcher.hs')
-rw-r--r--Assistant/Threads/TransferWatcher.hs20
1 files changed, 20 insertions, 0 deletions
diff --git a/Assistant/Threads/TransferWatcher.hs b/Assistant/Threads/TransferWatcher.hs
index ce0708a91..d4ff9176e 100644
--- a/Assistant/Threads/TransferWatcher.hs
+++ b/Assistant/Threads/TransferWatcher.hs
@@ -30,6 +30,7 @@ transferWatcherThread st dstatus transferqueue = thread $ do
let hooks = mkWatchHooks
{ addHook = hook onAdd
, delHook = hook onDel
+ , modifyHook = hook onModify
, errHook = hook onErr
}
void $ watchDir dir (const False) hooks id
@@ -71,6 +72,25 @@ onAdd st dstatus _ file _ = case parseTransferFile file of
{ transferRemote = r }
sameuuid t r = Remote.uuid r == transferUUID t
+{- Called when a transfer information file is updated.
+ -
+ - The only thing that should change in the transfer info is the
+ - bytesComplete, so that's the only thing updated in the DaemonStatus. -}
+onModify :: Handler
+onModify _ dstatus _ file _ = do
+ case parseTransferFile file of
+ Nothing -> noop
+ Just t -> go t =<< readTransferInfoFile Nothing file
+ where
+ go _ Nothing = noop
+ go t (Just newinfo) = alterTransferInfo dstatus t $ \info ->
+ info { bytesComplete = bytesComplete newinfo }
+
+{- This thread can only watch transfer sizes when the DirWatcher supports
+ - tracking modificatons to files. -}
+watchesTransferSize :: Bool
+watchesTransferSize = modifyTracked
+
{- Called when a transfer information file is removed. -}
onDel :: Handler
onDel st dstatus transferqueue file _ = case parseTransferFile file of