hbro-0.6.8: 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
import Graphics.UI.Gtk.WebKit.WebView
import System.Environment
-- }}}
-- | Add current URI to the end of the queue.
append :: Browser -> IO ()
append browser = do
uri <- webViewGetUri (mWebView $ mGUI browser)
configHome <- getEnv "XDG_CONFIG_HOME"
case uri of
Just u -> appendFile (configHome ++ "/hbro/queue") (u ++ "\n")
_ -> return ()
-- | Add current URI to the beginning of the queue.
push :: Browser -> IO ()
push browser = do
uri <- webViewGetUri (mWebView $ mGUI browser)
configHome <- getEnv "XDG_CONFIG_HOME"
file <- catch (T.readFile $ configHome ++ "/hbro/queue") (\_error -> return T.empty)
case uri of
Just u ->
if (file == T.empty)
then return ()
else do
let fileLines = T.lines file
let file' = T.unlines . nub $ (T.pack u):fileLines
T.writeFile (configHome ++ "/hbro/queue") file'
return ()
_ -> return ()
-- | Return the first URI from the queue, while removing it.
popFront :: IO String
popFront = do
configHome <- getEnv "XDG_CONFIG_HOME"
file <- catch (T.readFile $ configHome ++ "/hbro/queue") (\_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 (configHome ++ "/hbro/queue.old") file
T.writeFile (configHome ++ "/hbro/queue") file'
return $ T.unpack (head fileLines)
-- | Return the last URI from the queue, while removing it.
popBack :: IO String
popBack = do
configHome <- getEnv "XDG_CONFIG_HOME"
file <- catch (T.readFile $ configHome ++ "/hbro/queue") (\_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 (configHome ++ "/hbro/queue.old") file
T.writeFile (configHome ++ "/hbro/queue") 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)