1 {-# LANGUAGE OverloadedStrings, TypeFamilies #-}
    2 module Model.Transcode.Types
    3   ( Transcode(..)
    4   , TranscodePID
    5   , TranscodeArgs
    6   , transcodeAsset
    7   , transcodeOrig
    8   , transcodeId
    9   -- TODO: don't re-export from Transcode
   10   , makeTranscodeRow
   11   , makeTranscode
   12   , makeOrigTranscode
   13   ) where
   14 
   15 import qualified Data.ByteString as BS
   16 import Data.Maybe (fromMaybe)
   17 
   18 import Model.Kind
   19 import Model.Id.Types
   20 import Model.Time
   21 import Model.Segment
   22 import Model.Asset.Types
   23 import Model.AssetRevision.Types
   24 import Model.Party.Types
   25 import Model.Permission.Types
   26 import Model.Volume.Types
   27 
   28 type TranscodePID = Int32
   29 type TranscodeArgs = [String]
   30 
   31 type instance IdType Transcode = Int32
   32 
   33 data Transcode = Transcode
   34   { transcodeRevision :: !AssetRevision
   35   , transcodeOwner :: SiteAuth
   36   , transcodeSegment :: Segment
   37   , transcodeOptions :: TranscodeArgs
   38   , transcodeStart :: Maybe Timestamp
   39   , transcodeProcess :: Maybe TranscodePID
   40   , transcodeLog :: Maybe BS.ByteString
   41   }
   42 
   43 transcodeAsset :: Transcode -> Asset
   44 transcodeAsset = revisionAsset . transcodeRevision
   45 
   46 transcodeOrig :: Transcode -> Asset
   47 transcodeOrig = revisionOrig . transcodeRevision
   48 
   49 transcodeId :: Transcode -> Id Transcode
   50 transcodeId = Id . unId . assetId . assetRow . transcodeAsset
   51 
   52 instance Kinded Transcode where
   53   kindOf _ = "transcode"
   54 
   55 makeTranscodeRow :: Segment -> [Maybe String] -> Maybe Timestamp -> Maybe Int32 -> Maybe BS.ByteString -> SiteAuth -> AssetRevision -> Transcode
   56 makeTranscodeRow s f t p l u a =
   57   Transcode a u s (map (fromMaybe (error "NULL transcode options")) f) t p l
   58 
   59 makeOrigTranscode :: (AssetRevision -> Transcode) -> AssetRow -> Asset -> Transcode
   60 makeOrigTranscode f a o = f $ AssetRevision (Asset a $ assetVolume o) o
   61 
   62 makeTranscode :: (Asset -> Transcode) -> AssetRow -> (VolumeRolePolicy -> Volume) -> Transcode
   63 makeTranscode t o vp = t $ Asset o $ vp RoleAdmin