summaryrefslogtreecommitdiffhomepage
path: root/Storage.hs
diff options
context:
space:
mode:
authorJoey Hess <joeyh@joeyh.name>2016-09-14 14:29:58 -0400
committerJoey Hess <joeyh@joeyh.name>2016-09-14 14:30:48 -0400
commitf8231ade9124faa3e7b517d2a7e76085ac84b562 (patch)
tree6745e0fc8fe2fc8866ab4837b8d2bc3c88f09c3f /Storage.hs
parent0a3eb9be07a7514f5544384bc914f22ea88c24a8 (diff)
downloadkeysafe-f8231ade9124faa3e7b517d2a7e76085ac84b562.tar.gz
Warn when --uploadqueued fails to upload to servers.
Diffstat (limited to 'Storage.hs')
-rw-r--r--Storage.hs16
1 files changed, 13 insertions, 3 deletions
diff --git a/Storage.hs b/Storage.hs
index b8aace7..2e35972 100644
--- a/Storage.hs
+++ b/Storage.hs
@@ -12,6 +12,7 @@ import Storage.Local
import Storage.Network
import Servers
import Data.Maybe
+import Data.List
import System.FilePath
import Control.Monad
import qualified Data.Set as S
@@ -109,9 +110,18 @@ retrieveShares (StorageLocations locs) sis updateprogress = do
-- all of them.
go (unusedlocs++[loc]) usedlocs' rest shares'
-uploadQueued :: Maybe LocalStorageDirectory -> IO ()
+-- | Returns descriptions of any failures.
+uploadQueued :: Maybe LocalStorageDirectory -> IO [String]
uploadQueued d = do
StorageLocations locs <- allStorageLocations d
- forM_ locs $ \loc -> case uploadQueue loc of
- Nothing -> return ()
+ results <- forM locs $ \loc -> case uploadQueue loc of
+ Nothing -> return []
Just q -> moveShares q loc
+ return $ processresults (concat results) []
+ where
+ processresults [] c = nub c
+ processresults (StoreSuccess:rs) c = processresults rs c
+ processresults (StoreFailure e:rs) c = processresults rs (e:c)
+ processresults (StoreAlreadyExists:rs) c =
+ processresults rs ("Unable to upload a share to a server due to a name conflict.":c)
+