1 {-# LANGUAGE OverloadedStrings, TypeFamilies #-} 2 module Databrary.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 Databrary.Model.Kind 19 import Databrary.Model.Id.Types 20 import Databrary.Model.Time 21 import Databrary.Model.Segment 22 import Databrary.Model.Asset.Types 23 import Databrary.Model.AssetRevision.Types 24 import Databrary.Model.Party.Types 25 import Databrary.Model.Permission.Types 26 import Databrary.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