make the NetWatcher always rescan networked remotes every 30 minutes

There are multiple reasons to do this:

* The local network may be up solid, but a route to a networked remote
  is having trouble. Any transfers to it that fail should be retried.
* Someone might have wicd running, but like to bring up new networks
  by hand too. This way, it'll eventually notice them.
This commit is contained in:
Joey Hess 2012-08-23 16:13:43 -04:00
parent 37b960d3b0
commit 4a4f8064ae

View file

@ -21,6 +21,7 @@ import Remote.List
import qualified Types.Remote as Remote import qualified Types.Remote as Remote
import qualified Control.Exception as E import qualified Control.Exception as E
import Control.Concurrent
#if WITH_DBUS #if WITH_DBUS
import Utility.DBus import Utility.DBus
@ -35,12 +36,17 @@ thisThread :: ThreadName
thisThread = "NetWatcher" thisThread = "NetWatcher"
netWatcherThread :: ThreadState -> DaemonStatusHandle -> ScanRemoteMap -> IO () netWatcherThread :: ThreadState -> DaemonStatusHandle -> ScanRemoteMap -> IO ()
netWatcherThread st handle scanremotes = netWatcherThread st dstatus scanremotes = do
#if WITH_DBUS #if WITH_DBUS
dbusThread st handle scanremotes void $ forkIO $ dbusThread st dstatus scanremotes
#else
pollingThread st handle scanremotes
#endif #endif
{- This is a fallback for when dbus cannot be used to detect
- network connection changes, but it also ensures that
- any networked remotes that may have not been routable for a
- while (despite the local network staying up), are synced with
- periodically. -}
runEvery (Seconds 3600) $
handleConnection st dstatus scanremotes
#if WITH_DBUS #if WITH_DBUS
@ -54,14 +60,10 @@ dbusThread st dstatus scanremotes = E.catch (go =<< connectSystem) onerr
, do , do
runThreadState st $ runThreadState st $
warning "No known network monitor available through dbus; falling back to polling" warning "No known network monitor available through dbus; falling back to polling"
pollinstead
) )
onerr :: E.SomeException -> IO () onerr :: E.SomeException -> IO ()
onerr e = do onerr e = runThreadState st $
runThreadState st $ warning $ "Failed to use dbus; falling back to polling (" ++ show e ++ ")"
warning $ "Failed to use dbus; falling back to polling (" ++ show e ++ ")"
pollinstead
pollinstead = pollingThread st dstatus scanremotes
handle = do handle = do
debug thisThread ["detected network connection"] debug thisThread ["detected network connection"]
handleConnection st dstatus scanremotes handleConnection st dstatus scanremotes
@ -118,10 +120,6 @@ listenWicdConnections client callback =
#endif #endif
pollingThread :: ThreadState -> DaemonStatusHandle -> ScanRemoteMap -> IO ()
pollingThread st dstatus scanremotes = runEvery (Seconds 3600) $
handleConnection st dstatus scanremotes
handleConnection :: ThreadState -> DaemonStatusHandle -> ScanRemoteMap -> IO () handleConnection :: ThreadState -> DaemonStatusHandle -> ScanRemoteMap -> IO ()
handleConnection st dstatus scanremotes = do handleConnection st dstatus scanremotes = do
reconnectRemotes thisThread st dstatus scanremotes =<< reconnectRemotes thisThread st dstatus scanremotes =<<