packages feed

hbro-0.7.0.0: Hbro/Extra/History.hs

module Hbro.Extra.History where

-- {{{ Imports
--import Hbro.Core
--import Hbro.Types
import Hbro.Util

--import Control.Monad.Reader

import Data.List
import qualified Data.Text as T
import qualified Data.Text.IO as T
import Data.Time

import System.Locale
-- }}} 


-- |
add :: FilePath -> String -> String -> IO ()
add historyFile uri title = do
    now        <- getCurrentTime
    let time    = formatTime defaultTimeLocale "%Y-%m-%d %H:%M:%S" now
    appendFile historyFile $ time ++ " " ++ uri ++ " " ++ title ++ "\n"

-- |
select :: FilePath -> [String] -> IO (Maybe String)
select historyFile dmenuOptions  = do
    file <- T.readFile historyFile

    let file' = T.unlines . nub $ map reformat (sort . T.lines $ file)

    selection <- dmenu dmenuOptions file'
    case selection of
        ""    -> return Nothing
        entry -> return $ Just ((head . words) entry)

reformat :: T.Text -> T.Text
reformat line = 
  let
        _date:_time:uri:title = T.words line 
  in 
        T.unwords $ [uri] ++ title