diff options
author | Joey Hess <joey@kitenet.net> | 2013-04-24 13:04:46 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-04-24 13:04:46 -0400 |
commit | 68363880a0a1abe4edab005031c3c050c6ff589c (patch) | |
tree | 4ef3a7a7b008c6c1590117099c98927ee19aeea3 /Assistant/Threads | |
parent | 1b38f6aced8bb739c33fc410dd6b171aebd1fcd5 (diff) |
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..
Diffstat (limited to 'Assistant/Threads')
-rw-r--r-- | Assistant/Threads/Committer.hs | 47 |
1 files changed, 31 insertions, 16 deletions
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. - |