module Codec.EBook.Types (
Book(..),
BookItem(..),
Metadata(..),
emptyBook,
addItem2Book,
bookFiles,
chapterItems,
str2bstr
)
where
import qualified Data.ByteString.Lazy as B
import qualified Data.ByteString.Lazy.Char8 as U
import Control.Arrow ((&&&))
data Book = Book {
bookID :: String,
bookTitle :: String,
bookAuthor :: String,
bookLang :: String,
bookItems :: [BookItem]
} deriving (Show, Eq, Ord)
data BookItem = BookItem {
itemID :: String,
itemFileName :: FilePath,
itemContent :: B.ByteString,
itemMediaType :: String,
itemMetadata :: Maybe Metadata
} deriving (Show, Eq, Ord)
data Metadata = ChapterMetadata {
chapterTitle :: String
} deriving (Show, Eq, Ord)
str2bstr :: String -> B.ByteString
str2bstr = U.pack
emptyBook :: Book
emptyBook = Book "NO ID" "NO TITLE" "NO AUTHOR" "en" []
bookFiles :: Book -> [(FilePath, B.ByteString)]
bookFiles = map (itemFileName &&& itemContent) . bookItems
chapterItems :: [BookItem] -> [BookItem]
chapterItems = filter isChapter
where
isChapter (BookItem _ _ _ _ Nothing ) = False
isChapter _ = True
addItem2Book :: Book -> BookItem -> Book
addItem2Book book item = book { bookItems = newItems }
where
newItems = bookItems book ++ [item]