module Manatee.Plugin.Anything.AnythingBufferHistory where
import DBus.Client hiding (Signal)
import DBus.Message
import DBus.Types
import Data.Maybe
import Manatee.Core.DBus
import Manatee.Core.Types
import Manatee.Plugin.Anything.Anything
import Manatee.Plugin.Anything.Types
import Network.URI
instance AnythingCandidate BufferHistory where
candidateCommandName _ = ""
candidateFilterName a = bPath ++ " " ++ bMode
where bMode = bufferHistoryMode a
bPath = bufferHistoryPath a
candidateCompletionName a _ = bufferHistoryPath a
candidateExpandName a _ = return $ bufferHistoryPath a
anythingBufferHistory :: Anything
anythingBufferHistory =
Anything {anythingColumnTitle = ["BufferHistory", "Mode"]
,anythingColumnFun = anythingBufferHistoryColumnFun
,anythingSearch = AnythingSearch anythingBufferHistorySearch
,anythingFilterRule = anythingFuzzyFilterRule False
,anythingCompletionRule = id
,anythingInputDepend = False
,anythingCommandFun = anythingBufferHistoryCommandFun
,anythingCalculateDelay = 0
}
anythingBufferHistorySearch :: AnythingInput -> Client -> IO [BufferHistory]
anythingBufferHistorySearch _ client = do
reply <- callDaemonMethod client "GetBufferHistory" []
case reply of
Left err -> do
putStrLn $ "anythingBufferHistorySearch : Call remote function 'GetBufferList' failed."
++ "\n Reason : " ++ show err
return []
Right methodReturn -> do
let variants = messageBody methodReturn
return $ if null variants
then []
else
let list = fromMaybe [] (fromVariant (head variants) :: Maybe [BufferHistory])
in filter (not . isURI . bufferHistoryPath) list
anythingBufferHistoryColumnFun :: [AnythingColumnFun]
anythingBufferHistoryColumnFun =
[bufferHistoryPath . anythingCandidateUnpack
,bufferHistoryMode . anythingCandidateUnpack]
anythingBufferHistoryCommandFun :: AnythingCommandFun
anythingBufferHistoryCommandFun _ wrap _ = do
let pageType = bufferHistoryType $ anythingCandidateUnpack wrap
pagePath = bufferHistoryPath $ anythingCandidateUnpack wrap
return [("Open buffer", anythingBufferHistoryOpenBuffer pageType pagePath)]
anythingBufferHistoryOpenBuffer :: PageType -> String -> Client -> IO ()
anythingBufferHistoryOpenBuffer pageType pagePath client =
mkDaemonSignal client NewTab (NewTabArgs pageType pagePath)