fix resume button
Change alterTransferInfo to not merge in old values, including transferPaused.
This commit is contained in:
parent
c59ba80b5b
commit
93037580b6
3 changed files with 23 additions and 17 deletions
|
@ -194,12 +194,19 @@ adjustTransfersSTM dstatus a = do
|
||||||
{- Alters a transfer's info, if the transfer is in the map. -}
|
{- Alters a transfer's info, if the transfer is in the map. -}
|
||||||
alterTransferInfo :: DaemonStatusHandle -> Transfer -> TransferInfo -> IO ()
|
alterTransferInfo :: DaemonStatusHandle -> Transfer -> TransferInfo -> IO ()
|
||||||
alterTransferInfo dstatus t info = updateTransferInfo' dstatus $
|
alterTransferInfo dstatus t info = updateTransferInfo' dstatus $
|
||||||
M.adjust (mergeTransferInfo info) t
|
M.adjust (const info) t
|
||||||
|
|
||||||
{- Updates a transfer's info. Adds the transfer to the map if necessary. -}
|
{- Updates a transfer's info. Adds the transfer to the map if necessary,
|
||||||
|
- or if already present, updates it while preserving the old transferTid
|
||||||
|
- and transferPaused values, which are not written to disk. -}
|
||||||
updateTransferInfo :: DaemonStatusHandle -> Transfer -> TransferInfo -> IO ()
|
updateTransferInfo :: DaemonStatusHandle -> Transfer -> TransferInfo -> IO ()
|
||||||
updateTransferInfo dstatus t info = updateTransferInfo' dstatus $
|
updateTransferInfo dstatus t info = updateTransferInfo' dstatus $
|
||||||
M.insertWith' mergeTransferInfo t info
|
M.insertWith' merge t info
|
||||||
|
where
|
||||||
|
merge new old = new
|
||||||
|
{ transferTid = maybe (transferTid new) Just (transferTid old)
|
||||||
|
, transferPaused = transferPaused new || transferPaused old
|
||||||
|
}
|
||||||
|
|
||||||
updateTransferInfo' :: DaemonStatusHandle -> (TransferMap -> TransferMap) -> IO ()
|
updateTransferInfo' :: DaemonStatusHandle -> (TransferMap -> TransferMap) -> IO ()
|
||||||
updateTransferInfo' dstatus a =
|
updateTransferInfo' dstatus a =
|
||||||
|
|
|
@ -45,6 +45,7 @@ transfersDisplay warnNoScript = do
|
||||||
queued <- liftIO $ getTransferQueue $ transferQueue webapp
|
queued <- liftIO $ getTransferQueue $ transferQueue webapp
|
||||||
let ident = "transfers"
|
let ident = "transfers"
|
||||||
autoUpdate ident NotifierTransfersR (10 :: Int) (10 :: Int)
|
autoUpdate ident NotifierTransfersR (10 :: Int) (10 :: Int)
|
||||||
|
liftIO $ print ("current", current)
|
||||||
let transfers = simplifyTransfers $ current ++ queued
|
let transfers = simplifyTransfers $ current ++ queued
|
||||||
if null transfers
|
if null transfers
|
||||||
then ifM (lift $ showIntro <$> getWebAppState)
|
then ifM (lift $ showIntro <$> getWebAppState)
|
||||||
|
@ -188,7 +189,7 @@ cancelTransfer pause t = do
|
||||||
maybe noop killproc $ transferPid info
|
maybe noop killproc $ transferPid info
|
||||||
if pause
|
if pause
|
||||||
then void $
|
then void $
|
||||||
updateTransferInfo dstatus t $ info
|
alterTransferInfo dstatus t $ info
|
||||||
{ transferPaused = True }
|
{ transferPaused = True }
|
||||||
else void $
|
else void $
|
||||||
removeTransfer dstatus t
|
removeTransfer dstatus t
|
||||||
|
@ -207,19 +208,25 @@ cancelTransfer pause t = do
|
||||||
startTransfer :: Transfer -> Handler ()
|
startTransfer :: Transfer -> Handler ()
|
||||||
startTransfer t = do
|
startTransfer t = do
|
||||||
m <- getCurrentTransfers
|
m <- getCurrentTransfers
|
||||||
maybe noop resume (M.lookup t m)
|
maybe noop go (M.lookup t m)
|
||||||
-- TODO: handle starting a queued transfer
|
-- TODO: handle starting a queued transfer
|
||||||
where
|
where
|
||||||
resume info = maybe (start info) signalthread $ transferTid info
|
go info = maybe (start info) (resume info) $ transferTid info
|
||||||
signalthread tid = liftIO $ throwTo tid ResumeTransfer
|
resume info tid = do
|
||||||
|
webapp <- getYesod
|
||||||
|
let dstatus = daemonStatus webapp
|
||||||
|
liftIO $ do
|
||||||
|
alterTransferInfo dstatus t $ info
|
||||||
|
{ transferPaused = False }
|
||||||
|
throwTo tid ResumeTransfer
|
||||||
start info = do
|
start info = do
|
||||||
webapp <- getYesod
|
webapp <- getYesod
|
||||||
let dstatus = daemonStatus webapp
|
let dstatus = daemonStatus webapp
|
||||||
let slots = transferSlots webapp
|
let slots = transferSlots webapp
|
||||||
{- This transfer was being run by another process,
|
{- This transfer was being run by another process,
|
||||||
- forget that old pid, and start a new one. -}
|
- forget that old pid, and start a new one. -}
|
||||||
liftIO $ updateTransferInfo dstatus t $ info
|
liftIO $ alterTransferInfo dstatus t $ info
|
||||||
{ transferPid = Nothing }
|
{ transferPid = Nothing, transferPaused = False }
|
||||||
liftIO $ inImmediateTransferSlot dstatus slots $ do
|
liftIO $ inImmediateTransferSlot dstatus slots $ do
|
||||||
program <- readProgramFile
|
program <- readProgramFile
|
||||||
let a = Transferrer.doTransfer dstatus t info program
|
let a = Transferrer.doTransfer dstatus t info program
|
||||||
|
|
|
@ -214,14 +214,6 @@ readTransferInfo mpid s =
|
||||||
(bits, filebits) = splitAt 1 $ lines s
|
(bits, filebits) = splitAt 1 $ lines s
|
||||||
filename = join "\n" filebits
|
filename = join "\n" filebits
|
||||||
|
|
||||||
{- Preserves the old transferTid and transferPaused values,
|
|
||||||
- which are not written to disk. -}
|
|
||||||
mergeTransferInfo :: TransferInfo -> TransferInfo -> TransferInfo
|
|
||||||
mergeTransferInfo new old = new
|
|
||||||
{ transferTid = maybe (transferTid new) Just (transferTid old)
|
|
||||||
, transferPaused = transferPaused new || transferPaused old
|
|
||||||
}
|
|
||||||
|
|
||||||
parsePOSIXTime :: String -> Maybe POSIXTime
|
parsePOSIXTime :: String -> Maybe POSIXTime
|
||||||
parsePOSIXTime s = utcTimeToPOSIXSeconds
|
parsePOSIXTime s = utcTimeToPOSIXSeconds
|
||||||
<$> parseTime defaultTimeLocale "%s%Qs" s
|
<$> parseTime defaultTimeLocale "%s%Qs" s
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue