packages feed

hbro-0.7.0.0: Hbro/Extra/BookmarksQueue.hs

module Hbro.Extra.BookmarksQueue where

-- {{{ Imports
--import Hbro.Types

import Data.List
import qualified Data.Text as T
import qualified Data.Text.IO as T
-- }}}


-- | Add current URI to the end of the queue.
--append :: String -> IO ()
--append bookmarksFile uri = do
--    configHome  <- getEnv "XDG_CONFIG_HOME"
--    appendFile (configHome ++ "/hbro/queue") (uri ++ "\n")

-- | Add current URI to the beginning of the queue.
push :: String -> String -> IO ()
push bookmarksFile uri = do
    file        <- catch (T.readFile bookmarksFile) (\_error -> return T.empty)

    if (file == T.empty)
      then return ()
      else do
        let fileLines = T.lines file
        let file' = T.unlines . nub $ (T.pack uri):fileLines
        
        T.writeFile bookmarksFile file'
        
        return ()

-- | Return the first URI from the queue, while removing it.
popFront :: String -> IO String
popFront bookmarksFile = do
    file        <- catch (T.readFile bookmarksFile) (\_error -> return T.empty)

    if file == T.empty
        then return ""
        else do
            let fileLines = T.lines file
            let file' = T.unlines . tail . nub $ fileLines
        
            T.writeFile (bookmarksFile ++ ".old") file
            T.writeFile bookmarksFile file'

            return $ T.unpack (head fileLines)

-- | Return the last URI from the queue, while removing it.
popBack :: String -> IO String
popBack bookmarksFile = do
    file        <- catch (T.readFile bookmarksFile) (\_error -> return T.empty)

    if file == T.empty
        then return ""
        else do
            let fileLines = T.lines file
            let file' = T.unlines . reverse . tail . reverse. nub $ fileLines
        
            T.writeFile (bookmarksFile ++ ".old") file
            T.writeFile bookmarksFile file'

            return $ T.unpack (head $ reverse fileLines)

-- | Return a random URI from the queue, while removing it.
-- popRandom :: Browser -> IO String
-- popRandom browser = do
--     configHome  <- getEnv "XDG_CONFIG_HOME"
--     file        <- catch (T.readFile $ configHome ++ "/hbro/queue") (\e -> return T.empty)

--     if file == T.empty
--         then return ""
--         else do
--             let fileLines = T.lines file
--             let file' = T.unlines . reverse . tail . reverse. nub $ fileLines
--         
--             T.writeFile (configHome ++ "/hbro/queue.old") file
--             T.writeFile (configHome ++ "/hbro/queue") file'

--             return $ T.unpack (head $ reverse fileLines)