module Manatee.Extension.PdfViewer.PdfBuffer where
import Control.Applicative
import Control.Concurrent.STM
import Control.Monad
import DBus.Client hiding (Signal)
import Data.ByteString.UTF8
import Data.Maybe
import Data.Typeable
import Graphics.UI.Gtk.Poppler.Document hiding (PageMode)
import Graphics.UI.Gtk.Poppler.Page
import Manatee.Core.Types
import Manatee.Extension.PdfViewer.PageMode
import Manatee.Toolkit.Gio.Gio
data PdfBuffer =
PdfBuffer {pdfBufferPath :: TVar String
,pdfBufferClient :: Client
,pdfBufferPageId :: PageId
,pdfBufferMode :: PageMode
,pdfBufferDocument :: Document
,pdfBufferNPages :: Int
,pdfBufferPageSize :: (Double, Double)
}
deriving Typeable
pdfBufferNew :: String -> Client -> PageId -> IO PdfBuffer
pdfBufferNew path client pageId = do
document <- liftM (fromMaybe (error $ "pdfBufferNew: error when open file " ++ filepath))
(documentNewFromFile ("file://" ++ filepath) Nothing)
nPages <- documentGetNPages document
size <- pageGetSize =<< documentGetPage document 0
PdfBuffer <$> newTVarIO path
<*> pure client
<*> pure pageId
<*> pure pdfMode
<*> pure document
<*> pure nPages
<*> pure size
where filepath = filepathGetDisplayName (fromString path)