diff options
author | Joey Hess <joey@kitenet.net> | 2012-08-29 16:30:40 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2012-08-29 16:30:40 -0400 |
commit | 8d32d54320d148e965f26d87d33694d7e8df5171 (patch) | |
tree | 1d50736fe9cbc3fd3b519d089cf152e90a5e6298 /Assistant/WebApp/DashBoard.hs | |
parent | c21a9fe04a8848641a8d838a24d77cafe9af68e8 (diff) |
make start button work on queued transfers
When multiple downloads of a key are queued, it starts the first, but leaves the
other downloads in the queue. This ensures that we don't lose a queued
download if the one that got started failed.
Diffstat (limited to 'Assistant/WebApp/DashBoard.hs')
-rw-r--r-- | Assistant/WebApp/DashBoard.hs | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/Assistant/WebApp/DashBoard.hs b/Assistant/WebApp/DashBoard.hs index 10a6deb5f..ffe967111 100644 --- a/Assistant/WebApp/DashBoard.hs +++ b/Assistant/WebApp/DashBoard.hs @@ -209,8 +209,14 @@ cancelTransfer pause t = do startTransfer :: Transfer -> Handler () startTransfer t = do m <- getCurrentTransfers + webapp <- getYesod + let dstatus = daemonStatus webapp + let q = transferQueue webapp + {- resume a paused transfer -} maybe noop go (M.lookup t m) - -- TODO: handle starting a queued transfer + {- start a queued transfer -} + is <- liftIO $ map snd <$> getMatchingTransfers q dstatus (== t) + maybe noop start $ headMaybe is where go info = maybe (start info) (resume info) $ transferTid info resume info tid = do @@ -222,6 +228,7 @@ startTransfer t = do throwTo tid ResumeTransfer start info = do webapp <- getYesod + let st = fromJust $ threadState webapp let dstatus = daemonStatus webapp let slots = transferSlots webapp {- This transfer was being run by another process, @@ -230,8 +237,7 @@ startTransfer t = do { transferPid = Nothing, transferPaused = False } liftIO $ inImmediateTransferSlot dstatus slots $ do program <- readProgramFile - let a = Transferrer.doTransfer dstatus t info program - return $ Just (t, info, a) + Transferrer.startTransfer st dstatus program t info getCurrentTransfers :: Handler TransferMap getCurrentTransfers = currentTransfers |