hum-0.1.0.0: src/Hum/Types.hs
-- |
module Hum.Types where
import Network.MPD as MPD
import qualified Brick.BChan as BC
import Brick.Types
import Brick.Widgets.Edit
import Brick.Widgets.List
data HState = HState
{ chan :: !(BC.BChan HumEvent)
, hview :: !View
, status :: !(Maybe MPD.Status)
, mode :: !Mode
, ex :: !ExState
, currentSong :: !(Maybe MPD.Song)
, queue :: !SongList
, library :: !LibraryState
, playlists :: !PlaylistsState
, extentMap :: !(Map Name (Maybe (Extent Name)))
, clipboard :: !Clipboard
, focus :: !Focus
, editable :: !Bool
, prompts :: !Prompts
, helpScreen :: !Int --HACK
}
-- deriving (Show) --, Eq)
data LibraryState = LibraryState
{ artists :: !(List Name MPD.Value)
, albums :: !(List Name MPD.Value)
, songs :: !(List Name Song)
}
data PlaylistsState = PlaylistsState
{ plList :: !(List Name PlaylistName)
, plSongs :: !SongList
}
data ExSubMode = Cmd | FSearch | BSearch
deriving (Show, Eq, Ord)
data ExState = ExState
{ exPrefix :: !ExSubMode
, exEditor :: !(Editor Text Name)
, searchDirection :: !Bool
, searchHistory :: ![Text]
, cmdHistory :: ![Text]
}
data Prompts = Prompts
{ currentPrompt :: !PromptType
, promptTitle :: Text
, plSelectPrompt :: !(List Name (Maybe PlaylistName))
, textPrompt :: !(Editor Text Name)
, exitPrompt :: HState -> EventM Name HState
}
data PromptType = PlSelectPrompt | YNPrompt | TextPrompt
deriving (Show,Eq)
data Clipboard = Clipboard { clSongs :: !SongList
, clPlName :: !(Maybe PlaylistName)}
data Mode = NormalMode | ExMode | PromptMode
deriving (Show,Eq)
type SongList = List Name (Song, Highlight)
type HumEvent = Either Tick (Response [Subsystem])
data Name = NowPlaying | ClSongs
| Queue | QueueList
| Library | ArtistsList | LibraryLeft | AlbumsList | LibraryMid | SongsList | LibraryRight
| PlaylistList | PlaylistLeft | PlaylistSongs | PlaylistRight
| ExEditor
| TextPromptEditor
deriving (Show, Eq, Ord)
data FocQueue = FocQueue
deriving (Show, Eq, Ord)
data FocLib = FocArtists | FocAlbums | FocSongs
deriving(Show,Eq,Ord,Enum)
data FocPlay = FocPlaylists | FocPSongs
deriving(Show,Eq,Ord,Enum)
data Focus = Focus
{ focQueue :: FocQueue
, focLib :: FocLib
, focPlay :: FocPlay
, focEx :: Bool
}
deriving (Show, Eq, Ord)
data View = QueueView | LibraryView | PlaylistsView | HelpView
deriving (Show,Eq,Ord)
type Highlight = Bool
data Tick = Tick
suffixLenses ''HState
suffixLenses ''Focus
suffixLenses ''LibraryState
suffixLenses ''PlaylistsState
suffixLenses ''ExState
suffixLenses ''Prompts
suffixLenses ''Clipboard