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