-- Author: Andy Stewart -- Maintainer: Andy Stewart -- -- Copyright (C) 2010 Andy Stewart, all rights reserved. -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . {-# LANGUAGE DeriveDataTypeable #-} module Manatee.Extension.Browser.BrowserBuffer where import Control.Applicative import Control.Concurrent.STM import DBus.Client hiding (Signal) import Data.Typeable import Manatee.Core.DBus import Manatee.Core.Types import Manatee.Extension.Browser.PageMode import Manatee.Toolkit.Gtk.Concurrent data BrowserBuffer = BrowserBuffer {browserBufferUri :: TVar String ,browserBufferClient :: Client ,browserBufferPageId :: PageId ,browserBufferMode :: PageMode ,browserBufferBroadcastChannel :: TChan BrowserBufferSignal } deriving Typeable data BrowserBufferSignal = SyncUri String | SyncTitle String deriving (Show, Eq, Ord) -- | New browser buffer. browserBufferNew :: String -> [String] -> Client -> PageId -> CustomizeWrap -> IO BrowserBuffer browserBufferNew uri _ client pageId _ = do -- New buffer. buffer <- BrowserBuffer <$> newTVarIO uri <*> pure client <*> pure pageId <*> pure browserMode <*> (newTChanIO :: IO (TChan BrowserBufferSignal)) -- Listen broadcast channel. browserBufferListenChannel buffer return buffer -- | Listen broadcast channel. browserBufferListenChannel :: BrowserBuffer -> IO () browserBufferListenChannel BrowserBuffer {browserBufferClient = client ,browserBufferPageId = pageId ,browserBufferMode = mode ,browserBufferBroadcastChannel = channel } = listenBufferChannel channel $ \ signal -> case signal of SyncUri uri -> -- Synchronization url. mkDaemonSignal client SynchronizationPathName (SynchronizationPathNameArgs (pageModeName mode) pageId uri) SyncTitle title -> -- Synchronization tab title. mkDaemonSignal client ChangeTabName (ChangeTabNameArgs (pageModeName mode) pageId title)