packages feed

mushu-0.1.0: app/UI/Types.hs

{-# LANGUAGE TemplateHaskell #-}

module UI.Types
( AppState(..)
, ViewType(..)
-- , LibraryColumn(..)
, MPDEvent(..)
, UIName(..)
-- , LibraryMode(..)
, activeView
, playlistStateL
, helpActive
, filterStateL
, libraryStateL
-- , library
-- , libraryArtists
-- , libraryAlbums
-- , librarySongs
-- , libraryActiveColumn
-- , libraryMode
-- , filteredLibrary
, notificationState
, status
) where

import ClassyPrelude

import qualified Brick.Widgets.List as L
-- import Library

import UI.Widgets.Filter
import UI.Widgets.Notification
import UI.Widgets.Library
import UI.Widgets.Playlist

-- import Data.Map.Strict (Map(..))

import Lens.Micro.Platform (makeLenses)
-- import qualified Graphics.Vty as V

import qualified Network.MPD as M

data ViewType = PlaylistView | LibraryView

instance Show ViewType where
  show PlaylistView = "Playlist"
  show LibraryView = "Library"

-- data LibraryColumn = ArtistsColumn | AlbumsColumn | SongsColumn deriving (Show, Eq)
-- data LibraryMode = ArtistsAlbumsSongsMode | AlbumsSongsMode | SongsMode deriving (Show, Eq)

data AppState n = AppState
  { _playlistStateL :: PlaylistState n
  , _filterStateL :: FilterState n
  , _activeView :: ViewType
  , _libraryStateL :: LibraryState n
  -- , _library :: Library
  -- , _filteredLibrary :: Library
  -- , _libraryArtists :: L.List n Text
  -- , _libraryAlbums :: L.List n Text
  -- , _librarySongs :: L.List n Text
  -- , _libraryActiveColumn :: LibraryColumn
  -- , _libraryMode :: LibraryMode
  , _status :: M.Status
  , _helpActive :: Bool
  , _notificationState :: NotificationState
  }

data UIName = UIName Text deriving (Show, Eq, Ord)

data MPDEvent = MPDPlaylistEvent
  | MPDDatabaseEvent
  | MPDStatusEvent
  | MPDUnknownEvent deriving (Show)

instance IsString UIName where
  fromString s = UIName (pack s)

makeLenses ''AppState