module Data.Rtorrent.StateFile.Types where
import Control.Lens (makeLenses)
import Data.BEncode
import Data.ByteString.UTF8 (ByteString)
import Data.Typeable (Typeable)
type StateMod = StateFile → StateFile
newtype ByteStringUtf8 = BS8 { _bs8 ∷ ByteString }
deriving (Show, Eq, Read, Typeable)
instance BEncode ByteStringUtf8 where
fromBEncode = fmap BS8 . fromBEncode
toBEncode (BS8 s) = toBEncode s
data CustomSeeding = CustomSeeding
{ _addTime ∷ Maybe ByteStringUtf8
, _seedingTime ∷ ByteStringUtf8
} deriving (Show, Read, Eq, Typeable)
instance BEncode CustomSeeding where
fromBEncode = fromDict $ CustomSeeding
<$>? "addtime"
<*>! "seedingtime"
toBEncode CustomSeeding {..} = toDict $
"addtime" .=? _addTime
.: "seedingtime" .=! _seedingTime
.: endDict
data StateFile = StateFile
{ _chokeHeuristicsDownLeech ∷ ByteStringUtf8
, _chokeHeuristicsDownSeed ∷ ByteStringUtf8
, _chokeHeuristicsUpLeech ∷ ByteStringUtf8
, _chokeHeuristicsUpSeed ∷ ByteStringUtf8
, _chunksDone ∷ Int
, _chunksWanted ∷ Int
, _complete ∷ Int
, _connectionLeech ∷ ByteStringUtf8
, _connectionSeed ∷ ByteStringUtf8
, _custom ∷ Maybe CustomSeeding
, _custom1 ∷ ByteStringUtf8
, _custom2 ∷ ByteStringUtf8
, _custom3 ∷ ByteStringUtf8
, _custom4 ∷ ByteStringUtf8
, _custom5 ∷ ByteStringUtf8
, _directory ∷ ByteStringUtf8
, _hashing ∷ Int
, _ignoreCommands ∷ Int
, _key ∷ Int
, _loadedFile ∷ ByteStringUtf8
, _priority ∷ Int
, _state ∷ Int
, _stateChanged ∷ Int
, _stateCounter ∷ Int
, _throttleName ∷ ByteStringUtf8
, _tiedToFile ∷ ByteStringUtf8
, _timestampFinished ∷ Int
, _timestampStarted ∷ Int
, _totalUploaded ∷ Int
, _views ∷ [ByteStringUtf8]
} deriving (Show, Read, Eq, Typeable)
instance BEncode StateFile where
fromBEncode = fromDict $ StateFile
<$>! "choke_heuristics.down.leech"
<*>! "choke_heuristics.down.seed"
<*>! "choke_heuristics.up.leech"
<*>! "choke_heuristics.up.seed"
<*>! "chunks_done"
<*>! "chunks_wanted"
<*>! "complete"
<*>! "connection_leech"
<*>! "connection_seed"
<*>? "custom"
<*>! "custom1"
<*>! "custom2"
<*>! "custom3"
<*>! "custom4"
<*>! "custom5"
<*>! "directory"
<*>! "hashing"
<*>! "ignore_commands"
<*>! "key"
<*>! "loaded_file"
<*>! "priority"
<*>! "state"
<*>! "state_changed"
<*>! "state_counter"
<*>! "throttle_name"
<*>! "tied_to_file"
<*>! "timestamp.finished"
<*>! "timestamp.started"
<*>! "total_uploaded"
<*>! "views"
toBEncode StateFile {..} = toDict $
"choke_heuristics.down.leech" .=! _chokeHeuristicsDownLeech
.: "choke_heuristics.down.seed" .=! _chokeHeuristicsDownSeed
.: "choke_heuristics.up.leech" .=! _chokeHeuristicsUpLeech
.: "choke_heuristics.up.seed" .=! _chokeHeuristicsUpSeed
.: "chunks_done" .=! _chunksDone
.: "chunks_wanted" .=! _chunksWanted
.: "complete" .=! _complete
.: "connection_leech" .=! _connectionLeech
.: "connection_seed" .=! _connectionSeed
.: "custom" .=? _custom
.: "custom1" .=! _custom1
.: "custom2" .=! _custom2
.: "custom3" .=! _custom3
.: "custom4" .=! _custom4
.: "custom5" .=! _custom5
.: "directory" .=! _directory
.: "hashing" .=! _hashing
.: "ignore_commands" .=! _ignoreCommands
.: "key" .=! _key
.: "loaded_file" .=! _loadedFile
.: "priority" .=! _priority
.: "state" .=! _state
.: "state_changed" .=! _stateChanged
.: "state_counter" .=! _stateCounter
.: "throttle_name" .=! _throttleName
.: "tied_to_file" .=! _tiedToFile
.: "timestamp.finished" .=! _timestampFinished
.: "timestamp.started" .=! _timestampStarted
.: "total_uploaded" .=! _totalUploaded
.: "views" .=! _views
.: endDict
makeLenses ''ByteStringUtf8
makeLenses ''CustomSeeding
makeLenses ''StateFile