module Network.Syncthing.Get
(
ping
, apiKey
, config
, insync
, connections
, discovery
, errors
, sysStatus
, upgrade
, version
, browse
, completion
, file
, ignores
, need
, dbStatus
, devices
, folders
, deviceId
, lang
, report
) where
import Control.Applicative ((<$>))
import Control.Monad ((>=>))
import qualified Data.Map as M
import Data.Maybe (catMaybes)
import Data.Text (Text, pack)
import Network.Syncthing.Internal.Error
import Network.Syncthing.Internal.Monad
import Network.Syncthing.Internal.Request
import Network.Syncthing.Internal.Types
ping :: MonadSync m => SyncM m Text
ping = getPing <$> query getRequest { path = "/rest/system/ping" }
config :: MonadSync m => SyncM m Config
config = query getRequest { path = "/rest/system/config" }
apiKey :: MonadSync m => SyncM m (Maybe Text)
apiKey = getApiKey . getGuiConfig <$> config
completion :: MonadSync m => Device -> FolderName -> SyncM m Int
completion device folder =
getCompletion <$> query getRequest { path = "/rest/db/completion"
, params = [ ("device", device)
, ("folder", folder) ]
}
connections :: MonadSync m => SyncM m Connections
connections = query getRequest { path = "/rest/system/connections" }
file :: MonadSync m => FolderName -> Path -> SyncM m DBFile
file folder filename = query getRequest { path = "/rest/db/file"
, params = [ ("folder", folder)
, ("file", filename) ]
}
deviceId :: MonadSync m => Device -> SyncM m Device
deviceId = deviceId' >=> either (liftLeft . InvalidDeviceId) liftRight
where
deviceId' :: MonadSync m => Device -> SyncM m (Either DeviceError Device)
deviceId' device = query getRequest { path = "/rest/svc/deviceid"
, params = [("id", device)]
}
devices :: MonadSync m => SyncM m (M.Map Device DeviceInfo)
devices = query getRequest { path = "/rest/stats/device" }
discovery :: MonadSync m => SyncM m (M.Map Device [CacheEntry])
discovery = query getRequest { path = "/rest/system/discovery" }
errors :: MonadSync m => SyncM m [Error]
errors = getErrors <$> query getRequest { path = "/rest/system/error" }
ignores :: MonadSync m => FolderName -> SyncM m Ignore
ignores folder = query getRequest { path = "/rest/db/ignores"
, params = [("folder", folder)]
}
dbStatus :: MonadSync m => FolderName -> SyncM m Model
dbStatus folder = query getRequest { path = "/rest/db/status"
, params = [("folder", folder)]
}
need :: MonadSync m => FolderName -> SyncM m Need
need folder = query getRequest { path = "/rest/db/need"
, params = [("folder", folder)]
}
report :: MonadSync m => SyncM m UsageReport
report = query getRequest { path = "/rest/svc/report" }
insync :: MonadSync m => SyncM m Bool
insync = getSync <$> query getRequest { path = "/rest/system/config/insync" }
sysStatus :: MonadSync m => SyncM m System
sysStatus = query getRequest { path = "/rest/system/status" }
browse :: MonadSync m
=> FolderName
-> Maybe Path
-> Maybe Int
-> SyncM m (Maybe DirTree)
browse folder prefix levels =
queryMaybe getRequest { path = "/rest/db/browse"
, params = [("folder", folder)] ++ optionals
}
where
optionals = catMaybes [("prefix",) <$> prefix, ("levels",) <$> levelsText]
levelsText = pack . show <$> levels
upgrade :: MonadSync m => SyncM m Upgrade
upgrade = query getRequest { path = "/rest/system/upgrade" }
version :: MonadSync m => SyncM m Version
version = query getRequest { path = "/rest/system/version" }
lang :: MonadSync m => SyncM m [Text]
lang = query getRequest { path = "/rest/svc/lang" }
folders :: MonadSync m => SyncM m (M.Map FolderName FolderInfo)
folders = query getRequest { path = "/rest/stats/folder" }