From 68363880a0a1abe4edab005031c3c050c6ff589c Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 24 Apr 2013 13:04:46 -0400 Subject: show one alert when bulk adding files Turns out that a lot of the time spent in a bulk add was just updating the add alert to rotate through each file that was added. Showing one alert makes for a significant speedup. Also, when the webapp is open, this makes it take quite a lot less cpu during bulk adds. Also, it lets the user know when a bulk add happened, which is sorta nice.. --- Assistant/Threads/Committer.hs | 47 ++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 16 deletions(-) (limited to 'Assistant/Threads/Committer.hs') diff --git a/Assistant/Threads/Committer.hs b/Assistant/Threads/Committer.hs index 04f94143b..8fe48bfb7 100644 --- a/Assistant/Threads/Committer.hs +++ b/Assistant/Threads/Committer.hs @@ -231,9 +231,10 @@ handleAdds delayadd cs = returnWhen (null incomplete) $ do refillChanges postponed returnWhen (null toadd) $ do - added <- catMaybes <$> if direct - then adddirect toadd - else forM toadd add + added <- addaction toadd $ + catMaybes <$> if direct + then adddirect toadd + else forM toadd add if DirWatcher.eventsCoalesce || null added || direct then return $ added ++ otherchanges else do @@ -256,19 +257,13 @@ handleAdds delayadd cs = returnWhen (null incomplete) $ do | otherwise = a add :: Change -> Assistant (Maybe Change) - add change@(InProcessAddChange { keySource = ks }) = - alertWhile' (addFileAlert $ keyFilename ks) $ - liftM ret $ catchMaybeIO <~> do - sanitycheck ks $ do - key <- liftAnnex $ do - showStart "add" $ keyFilename ks - Command.Add.ingest $ Just ks - maybe (failedingest change) (done change $ keyFilename ks) key - where - {- Add errors tend to be transient and will be automatically - - dealt with, so don't pass to the alert code. -} - ret (Just j@(Just _)) = (True, j) - ret _ = (True, Nothing) + add change@(InProcessAddChange { keySource = ks }) = + catchDefaultIO Nothing <~> do + sanitycheck ks $ do + key <- liftAnnex $ do + showStart "add" $ keyFilename ks + Command.Add.ingest $ Just ks + maybe (failedingest change) (done change $ keyFilename ks) key add _ = return Nothing {- In direct mode, avoid overhead of re-injesting a renamed @@ -336,6 +331,26 @@ handleAdds delayadd cs = returnWhen (null incomplete) $ do void $ liftIO $ tryIO $ removeFile $ contentLocation keysource return Nothing + {- Shown an alert while performing an action to add a file or + - files. When only one file is added, its name is shown + - in the alert. When it's a batch add, the number of files added + - is shown. + - + - Add errors tend to be transient and will be + - automatically dealt with, so the alert is always told + - the add succeeded. + -} + addaction [] a = a + addaction toadd a = alertWhile' (addFileAlert msg) $ + (,) + <$> pure True + <*> a + where + msg = case toadd of + (InProcessAddChange { keySource = ks }:[]) -> + keyFilename ks + _ -> show (length toadd) ++ " files" + {- Files can Either be Right to be added now, - or are unsafe, and must be Left for later. - -- cgit v1.2.3