1 {-# LANGUAGE OverloadedStrings, RecordWildCards, TemplateHaskell, QuasiQuotes, DataKinds #-}
    2 module Databrary.Model.Transcode
    3   ( module Databrary.Model.Transcode.Types
    4   , defaultTranscodeOptions
    5   , transcodeAuth
    6   , lookupTranscode
    7   , lookupActiveTranscodes
    8   , addTranscode
    9   , updateTranscode
   10   , findTranscode
   11   , findMatchingTranscode
   12   , checkAlreadyTranscoded
   13   ) where
   14 
   15 -- import Database.PostgreSQL.Typed (pgSQL)
   16 --import Database.PostgreSQL.Typed.Query
   17 import Database.PostgreSQL.Typed.Types
   18 -- import qualified Data.ByteString
   19 -- import Data.ByteString (ByteString)
   20 import qualified Data.ByteString as BS
   21 import qualified Data.ByteString.Builder as BSB
   22 import qualified Data.ByteString.Lazy as BSL
   23 import Data.Maybe (fromMaybe)
   24 import Data.Monoid ((<>))
   25 import qualified Data.String
   26 -- import Database.PostgreSQL.Typed.Query (pgSQL)
   27 
   28 import Databrary.Has
   29 import Databrary.Service.DB
   30 import Databrary.Service.Types
   31 import Databrary.Service.Crypto
   32 import Databrary.Store.Types
   33 import Databrary.Store.AV
   34 import Databrary.Store.Probe
   35 -- import Databrary.Model.SQL
   36 import Databrary.Model.Audit
   37 import Databrary.Model.Id
   38 import Databrary.Model.Party
   39 import Databrary.Model.Party.SQL
   40 import Databrary.Model.Permission.Types
   41 import Databrary.Model.Segment
   42 import Databrary.Model.Volume.Types
   43 import Databrary.Model.Format
   44 import Databrary.Model.Asset
   45 import Databrary.Model.Asset.SQL
   46 import Databrary.Model.AssetRevision.Types
   47 import Databrary.Model.Transcode.Types
   48 import Databrary.Model.Volume.SQL
   49 
   50 defaultTranscodeOptions :: TranscodeArgs
   51 defaultTranscodeOptions = ["-vf", "pad=iw+mod(iw\\,2):ih+mod(ih\\,2)"]
   52 
   53 transcodeAuth :: Transcode -> Secret -> BS.ByteString
   54 transcodeAuth t = signature $ BSL.toStrict $ BSB.toLazyByteString
   55   $ maybe id ((<>) . BSB.byteString) (assetSHA1 $ assetRow $ transcodeOrig t)
   56   $ BSB.int32LE (unId $ transcodeId t)
   57 
   58 lookupTranscode :: MonadDB c m => Id Transcode -> m (Maybe Transcode)
   59 lookupTranscode a = do
   60     -- dbQuery1 $(selectQuery selectTranscode "WHERE transcode.asset = ${a}")
   61     let _tenv_a9v0o = unknownPGTypeEnv
   62     mRow <-
   63       (dbQuery1
   64         (mapQuery2
   65           ((\ _p_a9v0p ->
   66                            (BS.concat
   67                               [Data.String.fromString
   68                                  "SELECT transcode.segment,transcode.options,transcode.start,transcode.process,transcode.log,party.id,party.name,party.prename,party.orcid,party.affiliation,party.url,account.email,account.password,authorize_view.site,authorize_view.member,asset.id,asset.format,asset.release,asset.duration,asset.name,asset.sha1,asset.size,orig.id,orig.format,orig.release,orig.duration,orig.name,orig.sha1,orig.size,volume.id,volume.name,volume.body,volume.alias,volume.doi,volume_creation(volume.id) FROM transcode JOIN party JOIN account USING (id) LEFT JOIN authorize_view ON account.id = authorize_view.child AND authorize_view.parent = 0 ON transcode.owner = party.id JOIN asset ON transcode.asset = asset.id JOIN asset AS orig ON transcode.orig = orig.id JOIN volume ON asset.volume = volume.id AND orig.volume = volume.id WHERE transcode.asset = ",
   69                                Database.PostgreSQL.Typed.Types.pgEscapeParameter
   70                                  _tenv_a9v0o
   71                                  (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
   72                                     Database.PostgreSQL.Typed.Types.PGTypeName "integer")
   73                                  _p_a9v0p]))
   74             a)
   75                (\ 
   76                   [_csegment_a9v0q,
   77                    _coptions_a9v0r,
   78                    _cstart_a9v0s,
   79                    _cprocess_a9v0t,
   80                    _clog_a9v0u,
   81                    _cid_a9v0v,
   82                    _cname_a9v0w,
   83                    _cprename_a9v0x,
   84                    _corcid_a9v0y,
   85                    _caffiliation_a9v0z,
   86                    _curl_a9v0A,
   87                    _cemail_a9v0B,
   88                    _cpassword_a9v0C,
   89                    _csite_a9v0D,
   90                    _cmember_a9v0E,
   91                    _cid_a9v0F,
   92                    _cformat_a9v0G,
   93                    _crelease_a9v0H,
   94                    _cduration_a9v0I,
   95                    _cname_a9v0J,
   96                    _csha1_a9v0K,
   97                    _csize_a9v0L,
   98                    _cid_a9v0M,
   99                    _cformat_a9v0N,
  100                    _crelease_a9v0O,
  101                    _cduration_a9v0P,
  102                    _cname_a9v0Q,
  103                    _csha1_a9v0R,
  104                    _csize_a9v0S,
  105                    _cid_a9v0T,
  106                    _cname_a9v0U,
  107                    _cbody_a9v0V,
  108                    _calias_a9v0W,
  109                    _cdoi_a9v0X,
  110                    _cvolume_creation_a9v0Y]
  111                   -> (Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  112                         _tenv_a9v0o
  113                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  114                            Database.PostgreSQL.Typed.Types.PGTypeName "segment")
  115                         _csegment_a9v0q, 
  116                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  117                         _tenv_a9v0o
  118                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  119                            Database.PostgreSQL.Typed.Types.PGTypeName "text[]")
  120                         _coptions_a9v0r, 
  121                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  122                         _tenv_a9v0o
  123                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  124                            Database.PostgreSQL.Typed.Types.PGTypeName "timestamp with time zone")
  125                         _cstart_a9v0s, 
  126                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  127                         _tenv_a9v0o
  128                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  129                            Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  130                         _cprocess_a9v0t, 
  131                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  132                         _tenv_a9v0o
  133                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  134                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
  135                         _clog_a9v0u, 
  136                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  137                         _tenv_a9v0o
  138                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  139                            Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  140                         _cid_a9v0v, 
  141                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  142                         _tenv_a9v0o
  143                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  144                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
  145                         _cname_a9v0w, 
  146                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  147                         _tenv_a9v0o
  148                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  149                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
  150                         _cprename_a9v0x, 
  151                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  152                         _tenv_a9v0o
  153                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  154                            Database.PostgreSQL.Typed.Types.PGTypeName "bpchar")
  155                         _corcid_a9v0y, 
  156                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  157                         _tenv_a9v0o
  158                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  159                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
  160                         _caffiliation_a9v0z, 
  161                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  162                         _tenv_a9v0o
  163                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  164                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
  165                         _curl_a9v0A, 
  166                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  167                         _tenv_a9v0o
  168                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  169                            Database.PostgreSQL.Typed.Types.PGTypeName "character varying")
  170                         _cemail_a9v0B, 
  171                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  172                         _tenv_a9v0o
  173                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  174                            Database.PostgreSQL.Typed.Types.PGTypeName "character varying")
  175                         _cpassword_a9v0C, 
  176                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  177                         _tenv_a9v0o
  178                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  179                            Database.PostgreSQL.Typed.Types.PGTypeName "permission")
  180                         _csite_a9v0D, 
  181                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  182                         _tenv_a9v0o
  183                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  184                            Database.PostgreSQL.Typed.Types.PGTypeName "permission")
  185                         _cmember_a9v0E, 
  186                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  187                         _tenv_a9v0o
  188                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  189                            Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  190                         _cid_a9v0F, 
  191                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  192                         _tenv_a9v0o
  193                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  194                            Database.PostgreSQL.Typed.Types.PGTypeName "smallint")
  195                         _cformat_a9v0G, 
  196                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  197                         _tenv_a9v0o
  198                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  199                            Database.PostgreSQL.Typed.Types.PGTypeName "release")
  200                         _crelease_a9v0H, 
  201                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  202                         _tenv_a9v0o
  203                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  204                            Database.PostgreSQL.Typed.Types.PGTypeName "interval")
  205                         _cduration_a9v0I, 
  206                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  207                         _tenv_a9v0o
  208                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  209                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
  210                         _cname_a9v0J, 
  211                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  212                         _tenv_a9v0o
  213                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  214                            Database.PostgreSQL.Typed.Types.PGTypeName "bytea")
  215                         _csha1_a9v0K, 
  216                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  217                         _tenv_a9v0o
  218                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  219                            Database.PostgreSQL.Typed.Types.PGTypeName "bigint")
  220                         _csize_a9v0L, 
  221                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  222                         _tenv_a9v0o
  223                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  224                            Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  225                         _cid_a9v0M, 
  226                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  227                         _tenv_a9v0o
  228                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  229                            Database.PostgreSQL.Typed.Types.PGTypeName "smallint")
  230                         _cformat_a9v0N, 
  231                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  232                         _tenv_a9v0o
  233                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  234                            Database.PostgreSQL.Typed.Types.PGTypeName "release")
  235                         _crelease_a9v0O, 
  236                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  237                         _tenv_a9v0o
  238                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  239                            Database.PostgreSQL.Typed.Types.PGTypeName "interval")
  240                         _cduration_a9v0P, 
  241                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  242                         _tenv_a9v0o
  243                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  244                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
  245                         _cname_a9v0Q, 
  246                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  247                         _tenv_a9v0o
  248                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  249                            Database.PostgreSQL.Typed.Types.PGTypeName "bytea")
  250                         _csha1_a9v0R, 
  251                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  252                         _tenv_a9v0o
  253                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  254                            Database.PostgreSQL.Typed.Types.PGTypeName "bigint")
  255                         _csize_a9v0S, 
  256                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  257                         _tenv_a9v0o
  258                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  259                            Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  260                         _cid_a9v0T, 
  261                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  262                         _tenv_a9v0o
  263                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  264                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
  265                         _cname_a9v0U, 
  266                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  267                         _tenv_a9v0o
  268                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  269                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
  270                         _cbody_a9v0V, 
  271                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  272                         _tenv_a9v0o
  273                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  274                            Database.PostgreSQL.Typed.Types.PGTypeName "character varying")
  275                         _calias_a9v0W, 
  276                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  277                         _tenv_a9v0o
  278                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  279                            Database.PostgreSQL.Typed.Types.PGTypeName "character varying")
  280                         _cdoi_a9v0X, 
  281                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  282                         _tenv_a9v0o
  283                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  284                            Database.PostgreSQL.Typed.Types.PGTypeName "timestamp with time zone")
  285                         _cvolume_creation_a9v0Y))))
  286     pure
  287      (fmap
  288       (\ (vsegment_a9uZh, voptions_a9uZi, vstart_a9uZj, vprocess_a9uZk,
  289           vlog_a9uZl, vid_a9uZm, vname_a9uZn, vprename_a9uZo, vorcid_a9uZp,
  290           vaffiliation_a9uZq, vurl_a9uZr, vemail_a9uZs, vpassword_a9uZt,
  291           vsite_a9uZu, vmember_a9uZv, vid_a9uZw, vformat_a9uZx,
  292           vrelease_a9uZy, vduration_a9uZz, vname_a9uZA, vc_a9uZB,
  293           vsize_a9uZC, vid_a9uZD, vformat_a9uZE, vrelease_a9uZF,
  294           vduration_a9uZG, vname_a9uZH, vc_a9uZI, vsize_a9uZJ, vid_a9uZK,
  295           vname_a9uZL, vbody_a9uZM, valias_a9uZN, vdoi_a9uZO, vc_a9uZP)
  296          -> makeTranscode
  297               (makeOrigTranscode
  298                  (($)
  299                     (makeTranscodeRow
  300                        vsegment_a9uZh
  301                        voptions_a9uZi
  302                        vstart_a9uZj
  303                        vprocess_a9uZk
  304                        vlog_a9uZl)
  305                     (Databrary.Model.Party.SQL.makeSiteAuth
  306                        (Databrary.Model.Party.SQL.makeUserAccount
  307                           (Databrary.Model.Party.SQL.makeAccount
  308                              (PartyRow
  309                                 vid_a9uZm
  310                                 vname_a9uZn
  311                                 vprename_a9uZo
  312                                 vorcid_a9uZp
  313                                 vaffiliation_a9uZq
  314                                 vurl_a9uZr)
  315                              (Account vemail_a9uZs)))
  316                        vpassword_a9uZt
  317                        (do { cm_a9uZQ <- vsite_a9uZu;
  318                              cm_a9uZR <- vmember_a9uZv;
  319                              Just
  320                                (Databrary.Model.Permission.Types.Access cm_a9uZQ cm_a9uZR) })))
  321                  (Databrary.Model.Asset.SQL.makeAssetRow
  322                     vid_a9uZw
  323                     vformat_a9uZx
  324                     vrelease_a9uZy
  325                     vduration_a9uZz
  326                     vname_a9uZA
  327                     vc_a9uZB
  328                     vsize_a9uZC))
  329               (Databrary.Model.Asset.SQL.makeAssetRow
  330                  vid_a9uZD
  331                  vformat_a9uZE
  332                  vrelease_a9uZF
  333                  vduration_a9uZG
  334                  vname_a9uZH
  335                  vc_a9uZI
  336                  vsize_a9uZJ)
  337               (Databrary.Model.Volume.SQL.setCreation
  338                  (VolumeRow
  339                     vid_a9uZK vname_a9uZL vbody_a9uZM valias_a9uZN vdoi_a9uZO)
  340                  vc_a9uZP
  341                  []))
  342       mRow)
  343 
  344 lookupActiveTranscodes :: MonadDB c m => m [Transcode]
  345 lookupActiveTranscodes = do
  346   -- dbQuery $(selectQuery selectTranscode "WHERE asset.size IS NULL ORDER BY transcode.asset")
  347     let _tenv_a9v38 = unknownPGTypeEnv
  348     rows <-
  349       dbQuery
  350         (mapQuery2
  351                       (BS.concat
  352                          [Data.String.fromString
  353                             "SELECT transcode.segment,transcode.options,transcode.start,transcode.process,transcode.log,party.id,party.name,party.prename,party.orcid,party.affiliation,party.url,account.email,account.password,authorize_view.site,authorize_view.member,asset.id,asset.format,asset.release,asset.duration,asset.name,asset.sha1,asset.size,orig.id,orig.format,orig.release,orig.duration,orig.name,orig.sha1,orig.size,volume.id,volume.name,volume.body,volume.alias,volume.doi,volume_creation(volume.id) FROM transcode JOIN party JOIN account USING (id) LEFT JOIN authorize_view ON account.id = authorize_view.child AND authorize_view.parent = 0 ON transcode.owner = party.id JOIN asset ON transcode.asset = asset.id JOIN asset AS orig ON transcode.orig = orig.id JOIN volume ON asset.volume = volume.id AND orig.volume = volume.id WHERE asset.size IS NULL ORDER BY transcode.asset"])
  354               (\
  355                  [_csegment_a9v39,
  356                   _coptions_a9v3a,
  357                   _cstart_a9v3b,
  358                   _cprocess_a9v3c,
  359                   _clog_a9v3d,
  360                   _cid_a9v3e,
  361                   _cname_a9v3f,
  362                   _cprename_a9v3g,
  363                   _corcid_a9v3h,
  364                   _caffiliation_a9v3i,
  365                   _curl_a9v3j,
  366                   _cemail_a9v3k,
  367                   _cpassword_a9v3l,
  368                   _csite_a9v3m,
  369                   _cmember_a9v3n,
  370                   _cid_a9v3o,
  371                   _cformat_a9v3p,
  372                   _crelease_a9v3q,
  373                   _cduration_a9v3r,
  374                   _cname_a9v3s,
  375                   _csha1_a9v3t,
  376                   _csize_a9v3u,
  377                   _cid_a9v3v,
  378                   _cformat_a9v3w,
  379                   _crelease_a9v3x,
  380                   _cduration_a9v3y,
  381                   _cname_a9v3z,
  382                   _csha1_a9v3A,
  383                   _csize_a9v3B,
  384                   _cid_a9v3C,
  385                   _cname_a9v3D,
  386                   _cbody_a9v3E,
  387                   _calias_a9v3F,
  388                   _cdoi_a9v3G,
  389                   _cvolume_creation_a9v3H]
  390                  -> (Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  391                        _tenv_a9v38
  392                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  393                           Database.PostgreSQL.Typed.Types.PGTypeName "segment")
  394                        _csegment_a9v39, 
  395                      Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  396                        _tenv_a9v38
  397                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  398                           Database.PostgreSQL.Typed.Types.PGTypeName "text[]")
  399                        _coptions_a9v3a, 
  400                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  401                        _tenv_a9v38
  402                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  403                           Database.PostgreSQL.Typed.Types.PGTypeName "timestamp with time zone")
  404                        _cstart_a9v3b, 
  405                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  406                        _tenv_a9v38
  407                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  408                           Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  409                        _cprocess_a9v3c, 
  410                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  411                        _tenv_a9v38
  412                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  413                           Database.PostgreSQL.Typed.Types.PGTypeName "text")
  414                        _clog_a9v3d, 
  415                      Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  416                        _tenv_a9v38
  417                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  418                           Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  419                        _cid_a9v3e, 
  420                      Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  421                        _tenv_a9v38
  422                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  423                           Database.PostgreSQL.Typed.Types.PGTypeName "text")
  424                        _cname_a9v3f, 
  425                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  426                        _tenv_a9v38
  427                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  428                           Database.PostgreSQL.Typed.Types.PGTypeName "text")
  429                        _cprename_a9v3g, 
  430                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  431                        _tenv_a9v38
  432                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  433                           Database.PostgreSQL.Typed.Types.PGTypeName "bpchar")
  434                        _corcid_a9v3h, 
  435                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  436                        _tenv_a9v38
  437                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  438                           Database.PostgreSQL.Typed.Types.PGTypeName "text")
  439                        _caffiliation_a9v3i, 
  440                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  441                        _tenv_a9v38
  442                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  443                           Database.PostgreSQL.Typed.Types.PGTypeName "text")
  444                        _curl_a9v3j, 
  445                      Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  446                        _tenv_a9v38
  447                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  448                           Database.PostgreSQL.Typed.Types.PGTypeName "character varying")
  449                        _cemail_a9v3k, 
  450                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  451                        _tenv_a9v38
  452                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  453                           Database.PostgreSQL.Typed.Types.PGTypeName "character varying")
  454                        _cpassword_a9v3l, 
  455                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  456                        _tenv_a9v38
  457                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  458                           Database.PostgreSQL.Typed.Types.PGTypeName "permission")
  459                        _csite_a9v3m, 
  460                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  461                        _tenv_a9v38
  462                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  463                           Database.PostgreSQL.Typed.Types.PGTypeName "permission")
  464                        _cmember_a9v3n, 
  465                      Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  466                        _tenv_a9v38
  467                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  468                           Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  469                        _cid_a9v3o, 
  470                      Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  471                        _tenv_a9v38
  472                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  473                           Database.PostgreSQL.Typed.Types.PGTypeName "smallint")
  474                        _cformat_a9v3p, 
  475                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  476                        _tenv_a9v38
  477                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  478                           Database.PostgreSQL.Typed.Types.PGTypeName "release")
  479                        _crelease_a9v3q, 
  480                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  481                        _tenv_a9v38
  482                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  483                           Database.PostgreSQL.Typed.Types.PGTypeName "interval")
  484                        _cduration_a9v3r, 
  485                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  486                        _tenv_a9v38
  487                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  488                           Database.PostgreSQL.Typed.Types.PGTypeName "text")
  489                        _cname_a9v3s, 
  490                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  491                        _tenv_a9v38
  492                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  493                           Database.PostgreSQL.Typed.Types.PGTypeName "bytea")
  494                        _csha1_a9v3t, 
  495                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  496                        _tenv_a9v38
  497                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  498                           Database.PostgreSQL.Typed.Types.PGTypeName "bigint")
  499                        _csize_a9v3u, 
  500                      Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  501                        _tenv_a9v38
  502                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  503                           Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  504                        _cid_a9v3v, 
  505                      Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  506                        _tenv_a9v38
  507                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  508                           Database.PostgreSQL.Typed.Types.PGTypeName "smallint")
  509                        _cformat_a9v3w, 
  510                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  511                        _tenv_a9v38
  512                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  513                           Database.PostgreSQL.Typed.Types.PGTypeName "release")
  514                        _crelease_a9v3x, 
  515                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  516                        _tenv_a9v38
  517                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  518                           Database.PostgreSQL.Typed.Types.PGTypeName "interval")
  519                        _cduration_a9v3y, 
  520                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  521                        _tenv_a9v38
  522                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  523                           Database.PostgreSQL.Typed.Types.PGTypeName "text")
  524                        _cname_a9v3z, 
  525                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  526                        _tenv_a9v38
  527                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  528                           Database.PostgreSQL.Typed.Types.PGTypeName "bytea")
  529                        _csha1_a9v3A, 
  530                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  531                        _tenv_a9v38
  532                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  533                           Database.PostgreSQL.Typed.Types.PGTypeName "bigint")
  534                        _csize_a9v3B, 
  535                      Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  536                        _tenv_a9v38
  537                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  538                           Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  539                        _cid_a9v3C, 
  540                      Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  541                        _tenv_a9v38
  542                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  543                           Database.PostgreSQL.Typed.Types.PGTypeName "text")
  544                        _cname_a9v3D, 
  545                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  546                        _tenv_a9v38
  547                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  548                           Database.PostgreSQL.Typed.Types.PGTypeName "text")
  549                        _cbody_a9v3E, 
  550                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  551                        _tenv_a9v38
  552                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  553                           Database.PostgreSQL.Typed.Types.PGTypeName "character varying")
  554                        _calias_a9v3F, 
  555                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  556                        _tenv_a9v38
  557                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  558                           Database.PostgreSQL.Typed.Types.PGTypeName "character varying")
  559                        _cdoi_a9v3G, 
  560                      Database.PostgreSQL.Typed.Types.pgDecodeColumn
  561                        _tenv_a9v38
  562                        (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  563                           Database.PostgreSQL.Typed.Types.PGTypeName "timestamp with time zone")
  564                        _cvolume_creation_a9v3H)))
  565     pure
  566      (fmap
  567       (\ (vsegment_a9v1L, voptions_a9v1M, vstart_a9v1N, vprocess_a9v1O,
  568           vlog_a9v1P, vid_a9v1Q, vname_a9v1R, vprename_a9v1S, vorcid_a9v1T,
  569           vaffiliation_a9v1U, vurl_a9v1V, vemail_a9v1W, vpassword_a9v1X,
  570           vsite_a9v1Y, vmember_a9v1Z, vid_a9v20, vformat_a9v21,
  571           vrelease_a9v22, vduration_a9v23, vname_a9v24, vc_a9v25,
  572           vsize_a9v26, vid_a9v27, vformat_a9v28, vrelease_a9v29,
  573           vduration_a9v2a, vname_a9v2b, vc_a9v2c, vsize_a9v2d, vid_a9v2e,
  574           vname_a9v2f, vbody_a9v2g, valias_a9v2h, vdoi_a9v2i, vc_a9v2j)
  575          -> makeTranscode
  576               (makeOrigTranscode
  577                  (($)
  578                     (makeTranscodeRow
  579                        vsegment_a9v1L
  580                        voptions_a9v1M
  581                        vstart_a9v1N
  582                        vprocess_a9v1O
  583                        vlog_a9v1P)
  584                     (Databrary.Model.Party.SQL.makeSiteAuth
  585                        (Databrary.Model.Party.SQL.makeUserAccount
  586                           (Databrary.Model.Party.SQL.makeAccount
  587                              (PartyRow
  588                                 vid_a9v1Q
  589                                 vname_a9v1R
  590                                 vprename_a9v1S
  591                                 vorcid_a9v1T
  592                                 vaffiliation_a9v1U
  593                                 vurl_a9v1V)
  594                              (Account vemail_a9v1W)))
  595                        vpassword_a9v1X
  596                        (do { cm_a9v2k <- vsite_a9v1Y;
  597                              cm_a9v2l <- vmember_a9v1Z;
  598                              Just
  599                                (Databrary.Model.Permission.Types.Access cm_a9v2k cm_a9v2l) })))
  600                  (Databrary.Model.Asset.SQL.makeAssetRow
  601                     vid_a9v20
  602                     vformat_a9v21
  603                     vrelease_a9v22
  604                     vduration_a9v23
  605                     vname_a9v24
  606                     vc_a9v25
  607                     vsize_a9v26))
  608               (Databrary.Model.Asset.SQL.makeAssetRow
  609                  vid_a9v27
  610                  vformat_a9v28
  611                  vrelease_a9v29
  612                  vduration_a9v2a
  613                  vname_a9v2b
  614                  vc_a9v2c
  615                  vsize_a9v2d)
  616               (Databrary.Model.Volume.SQL.setCreation
  617                  (VolumeRow
  618                     vid_a9v2e vname_a9v2f vbody_a9v2g valias_a9v2h vdoi_a9v2i)
  619                  vc_a9v2j
  620                  []))
  621       rows)
  622 
  623 minAppend :: Ord a => Maybe a -> Maybe a -> Maybe a
  624 minAppend (Just x) (Just y) = Just $ min x y
  625 minAppend Nothing x = x
  626 minAppend x Nothing = x
  627 
  628 addTranscode :: (MonadHas SiteAuth c m, MonadAudit c m, MonadStorage c m) => Asset -> Segment -> TranscodeArgs -> Probe -> m Transcode
  629 addTranscode orig seg@(Segment rng) opts (ProbeAV _ fmt av) = do
  630   own <- peek
  631   a <- addAsset orig
  632     { assetRow = (assetRow orig)
  633       {assetFormat = fmt
  634       , assetDuration = dur
  635       , assetSHA1 = Nothing
  636       , assetSize = Nothing
  637       }
  638     } Nothing
  639   let _tenv_a9v5h = unknownPGTypeEnv
  640   dbExecute1' -- [pgSQL|INSERT INTO transcode (asset, owner, orig, segment, options) VALUES (${assetId $ assetRow a}, ${partyId $ partyRow $ accountParty $ siteAccount own}, ${assetId $ assetRow orig}, ${seg}, ${map Just opts})|]
  641     (mapQuery2
  642         ((\ _p_a9v5i _p_a9v5j _p_a9v5k _p_a9v5l _p_a9v5m ->
  643                     (BS.concat
  644                        [Data.String.fromString
  645                           "INSERT INTO transcode (asset, owner, orig, segment, options) VALUES (",
  646                         Database.PostgreSQL.Typed.Types.pgEscapeParameter
  647                           _tenv_a9v5h
  648                           (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  649                              Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  650                           _p_a9v5i,
  651                         Data.String.fromString ", ",
  652                         Database.PostgreSQL.Typed.Types.pgEscapeParameter
  653                           _tenv_a9v5h
  654                           (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  655                              Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  656                           _p_a9v5j,
  657                         Data.String.fromString ", ",
  658                         Database.PostgreSQL.Typed.Types.pgEscapeParameter
  659                           _tenv_a9v5h
  660                           (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  661                              Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  662                           _p_a9v5k,
  663                         Data.String.fromString ", ",
  664                         Database.PostgreSQL.Typed.Types.pgEscapeParameter
  665                           _tenv_a9v5h
  666                           (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  667                              Database.PostgreSQL.Typed.Types.PGTypeName "segment")
  668                           _p_a9v5l,
  669                         Data.String.fromString ", ",
  670                         Database.PostgreSQL.Typed.Types.pgEscapeParameter
  671                           _tenv_a9v5h
  672                           (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  673                              Database.PostgreSQL.Typed.Types.PGTypeName "text[]")
  674                           _p_a9v5m,
  675                         Data.String.fromString ")"]))
  676            (assetId $ assetRow a)
  677            (partyId $ partyRow $ accountParty $ siteAccount own)
  678            (assetId $ assetRow orig)
  679            seg
  680            (map Just opts))
  681           (\[] -> ()))
  682   let _tenv_a9v7a = unknownPGTypeEnv
  683   _ <- dbExecute1 -- [pgSQL|UPDATE slot_asset SET asset = ${assetId $ assetRow a}, segment = segment(lower(segment) + ${fromMaybe 0 $ lowerBound rng}, COALESCE(lower(segment) + ${upperBound rng}, upper(segment))) WHERE asset = ${assetId $ assetRow orig}|]
  684     (mapQuery2
  685        ((\ _p_a9v7b _p_a9v7c _p_a9v7d _p_a9v7e ->
  686                        (BS.concat
  687                           [Data.String.fromString "UPDATE slot_asset SET asset = ",
  688                            Database.PostgreSQL.Typed.Types.pgEscapeParameter
  689                              _tenv_a9v7a
  690                              (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  691                                 Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  692                              _p_a9v7b,
  693                            Data.String.fromString ", segment = segment(lower(segment) + ",
  694                            Database.PostgreSQL.Typed.Types.pgEscapeParameter
  695                              _tenv_a9v7a
  696                              (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  697                                 Database.PostgreSQL.Typed.Types.PGTypeName "interval")
  698                              _p_a9v7c,
  699                            Data.String.fromString ", COALESCE(lower(segment) + ",
  700                            Database.PostgreSQL.Typed.Types.pgEscapeParameter
  701                              _tenv_a9v7a
  702                              (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  703                                 Database.PostgreSQL.Typed.Types.PGTypeName "interval")
  704                              _p_a9v7d,
  705                            Data.String.fromString ", upper(segment))) WHERE asset = ",
  706                            Database.PostgreSQL.Typed.Types.pgEscapeParameter
  707                              _tenv_a9v7a
  708                              (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  709                                 Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  710                              _p_a9v7e]))
  711          (assetId $ assetRow a)
  712          ((fromMaybe 0) $ lowerBound rng)
  713          (upperBound rng)
  714          (assetId $ assetRow orig))
  715             (\[] -> ()))
  716   return Transcode
  717     { transcodeRevision = AssetRevision
  718       { revisionAsset = a
  719       , revisionOrig = orig
  720       }
  721     , transcodeOwner = own
  722     , transcodeSegment = seg
  723     , transcodeOptions = opts
  724     , transcodeStart = Nothing 
  725     , transcodeProcess = Nothing
  726     , transcodeLog = Nothing
  727     }
  728   where
  729   dur = maybe id (flip (-) . max 0) (lowerBound rng) <$>
  730     minAppend (avProbeLength av) (upperBound rng)
  731 addTranscode _ _ _ _ = fail "addTranscode: invalid probe type"
  732 
  733 updateTranscode :: MonadDB c m => Transcode -> Maybe TranscodePID -> Maybe String -> m Transcode
  734 updateTranscode tc pid logs = do
  735   let _tenv_a9v7W = unknownPGTypeEnv
  736   r <- dbQuery1 -- [pgSQL|UPDATE transcode SET process = ${pid}, log = COALESCE(COALESCE(log || E'\n', '') || ${logs}, log) WHERE asset = ${assetId $ assetRow $ transcodeAsset tc} AND COALESCE(process, 0) = ${fromMaybe 0 $ transcodeProcess tc} RETURNING log|]
  737     (mapQuery2
  738       ((\ _p_a9v7X _p_a9v7Y _p_a9v7Z _p_a9v80 ->
  739                     (BS.concat
  740                        [Data.String.fromString "UPDATE transcode SET process = ",
  741                         Database.PostgreSQL.Typed.Types.pgEscapeParameter
  742                           _tenv_a9v7W
  743                           (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  744                              Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  745                           _p_a9v7X,
  746                         Data.String.fromString
  747                           ", log = COALESCE(COALESCE(log || E'\\n', '') || ",
  748                         Database.PostgreSQL.Typed.Types.pgEscapeParameter
  749                           _tenv_a9v7W
  750                           (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  751                              Database.PostgreSQL.Typed.Types.PGTypeName "text")
  752                           _p_a9v7Y,
  753                         Data.String.fromString ", log) WHERE asset = ",
  754                         Database.PostgreSQL.Typed.Types.pgEscapeParameter
  755                           _tenv_a9v7W
  756                           (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  757                              Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  758                           _p_a9v7Z,
  759                         Data.String.fromString " AND COALESCE(process, 0) = ",
  760                         Database.PostgreSQL.Typed.Types.pgEscapeParameter
  761                           _tenv_a9v7W
  762                           (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  763                              Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  764                           _p_a9v80,
  765                         Data.String.fromString " RETURNING log"]))
  766         pid
  767         logs
  768         (assetId $ assetRow $ transcodeAsset tc)
  769         ((fromMaybe 0) $ transcodeProcess tc))
  770             (\[_clog_a9v81]
  771                -> (Database.PostgreSQL.Typed.Types.pgDecodeColumn
  772                      _tenv_a9v7W
  773                      (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  774                         Database.PostgreSQL.Typed.Types.PGTypeName "text")
  775                      _clog_a9v81)))
  776   return $ maybe tc (\l -> tc
  777     { transcodeProcess = pid
  778     , transcodeLog = l
  779     }) r
  780 
  781 findTranscode :: MonadDB c m => Asset -> Segment -> TranscodeArgs -> m (Maybe Transcode)
  782 findTranscode orig seg opts = do
  783   -- dbQuery1 $ ($ orig) <$> $(selectQuery selectOrigTranscode "WHERE transcode.orig = ${assetId $ assetRow orig} AND transcode.segment = ${seg} AND transcode.options = ${map Just opts} AND asset.volume = ${volumeId $ volumeRow $ assetVolume orig} LIMIT 1")
  784   let _tenv_a9v93 = unknownPGTypeEnv
  785   mRow <- dbQuery1
  786     (mapQuery2
  787       ((\ _p_a9v94 _p_a9v97 _p_a9v99 _p_a9v9a ->
  788                        (BS.concat
  789                           [Data.String.fromString
  790                              "SELECT transcode.segment,transcode.options,transcode.start,transcode.process,transcode.log,party.id,party.name,party.prename,party.orcid,party.affiliation,party.url,account.email,account.password,authorize_view.site,authorize_view.member,asset.id,asset.format,asset.release,asset.duration,asset.name,asset.sha1,asset.size FROM transcode JOIN party JOIN account USING (id) LEFT JOIN authorize_view ON account.id = authorize_view.child AND authorize_view.parent = 0 ON transcode.owner = party.id JOIN asset ON transcode.asset = asset.id WHERE transcode.orig = ",
  791                            Database.PostgreSQL.Typed.Types.pgEscapeParameter
  792                              _tenv_a9v93
  793                              (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  794                                 Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  795                              _p_a9v94,
  796                            Data.String.fromString " AND transcode.segment = ",
  797                            Database.PostgreSQL.Typed.Types.pgEscapeParameter
  798                              _tenv_a9v93
  799                              (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  800                                 Database.PostgreSQL.Typed.Types.PGTypeName "segment")
  801                              _p_a9v97,
  802                            Data.String.fromString " AND transcode.options = ",
  803                            Database.PostgreSQL.Typed.Types.pgEscapeParameter
  804                              _tenv_a9v93
  805                              (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  806                                 Database.PostgreSQL.Typed.Types.PGTypeName "text[]")
  807                              _p_a9v99,
  808                            Data.String.fromString " AND asset.volume = ",
  809                            Database.PostgreSQL.Typed.Types.pgEscapeParameter
  810                              _tenv_a9v93
  811                              (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  812                                 Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  813                              _p_a9v9a,
  814                            Data.String.fromString " LIMIT 1"]))
  815          (assetId $ assetRow orig)
  816          seg
  817          (map Just opts)
  818          (volumeId $ volumeRow $ assetVolume orig))
  819                (\ 
  820                   [_csegment_a9v9b,
  821                    _coptions_a9v9c,
  822                    _cstart_a9v9d,
  823                    _cprocess_a9v9e,
  824                    _clog_a9v9f,
  825                    _cid_a9v9g,
  826                    _cname_a9v9h,
  827                    _cprename_a9v9i,
  828                    _corcid_a9v9j,
  829                    _caffiliation_a9v9k,
  830                    _curl_a9v9l,
  831                    _cemail_a9v9m,
  832                    _cpassword_a9v9n,
  833                    _csite_a9v9o,
  834                    _cmember_a9v9p,
  835                    _cid_a9v9q,
  836                    _cformat_a9v9r,
  837                    _crelease_a9v9s,
  838                    _cduration_a9v9t,
  839                    _cname_a9v9u,
  840                    _csha1_a9v9v,
  841                    _csize_a9v9w]
  842                   -> (Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  843                         _tenv_a9v93
  844                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  845                            Database.PostgreSQL.Typed.Types.PGTypeName "segment")
  846                         _csegment_a9v9b, 
  847                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  848                         _tenv_a9v93
  849                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  850                            Database.PostgreSQL.Typed.Types.PGTypeName "text[]")
  851                         _coptions_a9v9c, 
  852                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  853                         _tenv_a9v93
  854                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  855                            Database.PostgreSQL.Typed.Types.PGTypeName "timestamp with time zone")
  856                         _cstart_a9v9d, 
  857                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  858                         _tenv_a9v93
  859                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  860                            Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  861                         _cprocess_a9v9e, 
  862                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  863                         _tenv_a9v93
  864                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  865                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
  866                         _clog_a9v9f, 
  867                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  868                         _tenv_a9v93
  869                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  870                            Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  871                         _cid_a9v9g, 
  872                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  873                         _tenv_a9v93
  874                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  875                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
  876                         _cname_a9v9h, 
  877                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  878                         _tenv_a9v93
  879                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  880                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
  881                         _cprename_a9v9i, 
  882                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  883                         _tenv_a9v93
  884                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  885                            Database.PostgreSQL.Typed.Types.PGTypeName "bpchar")
  886                         _corcid_a9v9j, 
  887                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  888                         _tenv_a9v93
  889                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  890                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
  891                         _caffiliation_a9v9k, 
  892                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  893                         _tenv_a9v93
  894                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  895                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
  896                         _curl_a9v9l, 
  897                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  898                         _tenv_a9v93
  899                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  900                            Database.PostgreSQL.Typed.Types.PGTypeName "character varying")
  901                         _cemail_a9v9m, 
  902                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  903                         _tenv_a9v93
  904                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  905                            Database.PostgreSQL.Typed.Types.PGTypeName "character varying")
  906                         _cpassword_a9v9n, 
  907                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  908                         _tenv_a9v93
  909                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  910                            Database.PostgreSQL.Typed.Types.PGTypeName "permission")
  911                         _csite_a9v9o, 
  912                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  913                         _tenv_a9v93
  914                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  915                            Database.PostgreSQL.Typed.Types.PGTypeName "permission")
  916                         _cmember_a9v9p, 
  917                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  918                         _tenv_a9v93
  919                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  920                            Database.PostgreSQL.Typed.Types.PGTypeName "integer")
  921                         _cid_a9v9q, 
  922                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
  923                         _tenv_a9v93
  924                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  925                            Database.PostgreSQL.Typed.Types.PGTypeName "smallint")
  926                         _cformat_a9v9r, 
  927                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  928                         _tenv_a9v93
  929                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  930                            Database.PostgreSQL.Typed.Types.PGTypeName "release")
  931                         _crelease_a9v9s, 
  932                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  933                         _tenv_a9v93
  934                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  935                            Database.PostgreSQL.Typed.Types.PGTypeName "interval")
  936                         _cduration_a9v9t, 
  937                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  938                         _tenv_a9v93
  939                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  940                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
  941                         _cname_a9v9u, 
  942                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  943                         _tenv_a9v93
  944                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  945                            Database.PostgreSQL.Typed.Types.PGTypeName "bytea")
  946                         _csha1_a9v9v, 
  947                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
  948                         _tenv_a9v93
  949                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
  950                            Database.PostgreSQL.Typed.Types.PGTypeName "bigint")
  951                         _csize_a9v9w)))
  952   pure
  953    (fmap (\mk -> mk orig)
  954     (fmap
  955       (\ (vsegment_a9v8b, voptions_a9v8c, vstart_a9v8d, vprocess_a9v8e,
  956           vlog_a9v8f, vid_a9v8g, vname_a9v8h, vprename_a9v8i, vorcid_a9v8j,
  957           vaffiliation_a9v8k, vurl_a9v8l, vemail_a9v8m, vpassword_a9v8n,
  958           vsite_a9v8o, vmember_a9v8p, vid_a9v8q, vformat_a9v8r,
  959           vrelease_a9v8s, vduration_a9v8t, vname_a9v8u, vc_a9v8v,
  960           vsize_a9v8w)
  961          -> makeOrigTranscode
  962               (($)
  963                  (makeTranscodeRow
  964                     vsegment_a9v8b
  965                     voptions_a9v8c
  966                     vstart_a9v8d
  967                     vprocess_a9v8e
  968                     vlog_a9v8f)
  969                  (Databrary.Model.Party.SQL.makeSiteAuth
  970                     (Databrary.Model.Party.SQL.makeUserAccount
  971                        (Databrary.Model.Party.SQL.makeAccount
  972                           (PartyRow
  973                              vid_a9v8g
  974                              vname_a9v8h
  975                              vprename_a9v8i
  976                              vorcid_a9v8j
  977                              vaffiliation_a9v8k
  978                              vurl_a9v8l)
  979                           (Account vemail_a9v8m)))
  980                     vpassword_a9v8n
  981                     (do { cm_a9v8A <- vsite_a9v8o;
  982                           cm_a9v8B <- vmember_a9v8p;
  983                           Just
  984                             (Databrary.Model.Permission.Types.Access cm_a9v8A cm_a9v8B) })))
  985               (Databrary.Model.Asset.SQL.makeAssetRow
  986                  vid_a9v8q
  987                  vformat_a9v8r
  988                  vrelease_a9v8s
  989                  vduration_a9v8t
  990                  vname_a9v8u
  991                  vc_a9v8v
  992                  vsize_a9v8w))
  993       mRow))
  994 
  995 findMatchingTranscode :: MonadDB c m => Transcode -> m (Maybe Transcode)
  996 findMatchingTranscode t@Transcode{..} = do
  997   let _tenv_a9vgl = unknownPGTypeEnv
  998   mRow <- dbQuery1 -- .(selectQuery selectTranscode "WHERE orig.sha1 = ${assetSHA1 $ assetRow $ transcodeOrig t} AND transcode.segment = ${transcodeSegment} AND transcode.options = ${map Just transcodeOptions} AND asset.id < ${assetId $ assetRow $ transcodeAsset t} ORDER BY asset.id LIMIT 1")
  999     (mapQuery2
 1000       ((\ _p_a9vgm _p_a9vgn _p_a9vgo _p_a9vgp ->
 1001                        (BS.concat
 1002                           [Data.String.fromString
 1003                              "SELECT transcode.segment,transcode.options,transcode.start,transcode.process,transcode.log,party.id,party.name,party.prename,party.orcid,party.affiliation,party.url,account.email,account.password,authorize_view.site,authorize_view.member,asset.id,asset.format,asset.release,asset.duration,asset.name,asset.sha1,asset.size,orig.id,orig.format,orig.release,orig.duration,orig.name,orig.sha1,orig.size,volume.id,volume.name,volume.body,volume.alias,volume.doi,volume_creation(volume.id) FROM transcode JOIN party JOIN account USING (id) LEFT JOIN authorize_view ON account.id = authorize_view.child AND authorize_view.parent = 0 ON transcode.owner = party.id JOIN asset ON transcode.asset = asset.id JOIN asset AS orig ON transcode.orig = orig.id JOIN volume ON asset.volume = volume.id AND orig.volume = volume.id WHERE orig.sha1 = ",
 1004                            Database.PostgreSQL.Typed.Types.pgEscapeParameter
 1005                              _tenv_a9vgl
 1006                              (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1007                                 Database.PostgreSQL.Typed.Types.PGTypeName "bytea")
 1008                              _p_a9vgm,
 1009                            Data.String.fromString " AND transcode.segment = ",
 1010                            Database.PostgreSQL.Typed.Types.pgEscapeParameter
 1011                              _tenv_a9vgl
 1012                              (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1013                                 Database.PostgreSQL.Typed.Types.PGTypeName "segment")
 1014                              _p_a9vgn,
 1015                            Data.String.fromString " AND transcode.options = ",
 1016                            Database.PostgreSQL.Typed.Types.pgEscapeParameter
 1017                              _tenv_a9vgl
 1018                              (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1019                                 Database.PostgreSQL.Typed.Types.PGTypeName "text[]")
 1020                              _p_a9vgo,
 1021                            Data.String.fromString " AND asset.id < ",
 1022                            Database.PostgreSQL.Typed.Types.pgEscapeParameter
 1023                              _tenv_a9vgl
 1024                              (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1025                                 Database.PostgreSQL.Typed.Types.PGTypeName "integer")
 1026                              _p_a9vgp,
 1027                            Data.String.fromString " ORDER BY asset.id LIMIT 1"]))
 1028          (assetSHA1 $ assetRow $ transcodeOrig t)
 1029          transcodeSegment
 1030          (map Just transcodeOptions)
 1031          (assetId $ assetRow $ transcodeAsset t))
 1032                (\ 
 1033                   [_csegment_a9vgq,
 1034                    _coptions_a9vgr,
 1035                    _cstart_a9vgs,
 1036                    _cprocess_a9vgt,
 1037                    _clog_a9vgu,
 1038                    _cid_a9vgv,
 1039                    _cname_a9vgw,
 1040                    _cprename_a9vgx,
 1041                    _corcid_a9vgy,
 1042                    _caffiliation_a9vgz,
 1043                    _curl_a9vgA,
 1044                    _cemail_a9vgB,
 1045                    _cpassword_a9vgC,
 1046                    _csite_a9vgD,
 1047                    _cmember_a9vgE,
 1048                    _cid_a9vgF,
 1049                    _cformat_a9vgG,
 1050                    _crelease_a9vgH,
 1051                    _cduration_a9vgI,
 1052                    _cname_a9vgJ,
 1053                    _csha1_a9vgK,
 1054                    _csize_a9vgL,
 1055                    _cid_a9vgM,
 1056                    _cformat_a9vgN,
 1057                    _crelease_a9vgO,
 1058                    _cduration_a9vgP,
 1059                    _cname_a9vgQ,
 1060                    _csha1_a9vgR,
 1061                    _csize_a9vgS,
 1062                    _cid_a9vgT,
 1063                    _cname_a9vgU,
 1064                    _cbody_a9vgV,
 1065                    _calias_a9vgW,
 1066                    _cdoi_a9vgX,
 1067                    _cvolume_creation_a9vgY]
 1068                   -> (Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
 1069                         _tenv_a9vgl
 1070                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1071                            Database.PostgreSQL.Typed.Types.PGTypeName "segment")
 1072                         _csegment_a9vgq, 
 1073                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
 1074                         _tenv_a9vgl
 1075                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1076                            Database.PostgreSQL.Typed.Types.PGTypeName "text[]")
 1077                         _coptions_a9vgr, 
 1078                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1079                         _tenv_a9vgl
 1080                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1081                            Database.PostgreSQL.Typed.Types.PGTypeName "timestamp with time zone")
 1082                         _cstart_a9vgs, 
 1083                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1084                         _tenv_a9vgl
 1085                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1086                            Database.PostgreSQL.Typed.Types.PGTypeName "integer")
 1087                         _cprocess_a9vgt, 
 1088                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1089                         _tenv_a9vgl
 1090                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1091                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
 1092                         _clog_a9vgu, 
 1093                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
 1094                         _tenv_a9vgl
 1095                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1096                            Database.PostgreSQL.Typed.Types.PGTypeName "integer")
 1097                         _cid_a9vgv, 
 1098                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
 1099                         _tenv_a9vgl
 1100                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1101                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
 1102                         _cname_a9vgw, 
 1103                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1104                         _tenv_a9vgl
 1105                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1106                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
 1107                         _cprename_a9vgx, 
 1108                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1109                         _tenv_a9vgl
 1110                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1111                            Database.PostgreSQL.Typed.Types.PGTypeName "bpchar")
 1112                         _corcid_a9vgy, 
 1113                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1114                         _tenv_a9vgl
 1115                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1116                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
 1117                         _caffiliation_a9vgz, 
 1118                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1119                         _tenv_a9vgl
 1120                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1121                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
 1122                         _curl_a9vgA, 
 1123                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
 1124                         _tenv_a9vgl
 1125                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1126                            Database.PostgreSQL.Typed.Types.PGTypeName "character varying")
 1127                         _cemail_a9vgB, 
 1128                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1129                         _tenv_a9vgl
 1130                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1131                            Database.PostgreSQL.Typed.Types.PGTypeName "character varying")
 1132                         _cpassword_a9vgC, 
 1133                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1134                         _tenv_a9vgl
 1135                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1136                            Database.PostgreSQL.Typed.Types.PGTypeName "permission")
 1137                         _csite_a9vgD, 
 1138                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1139                         _tenv_a9vgl
 1140                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1141                            Database.PostgreSQL.Typed.Types.PGTypeName "permission")
 1142                         _cmember_a9vgE, 
 1143                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
 1144                         _tenv_a9vgl
 1145                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1146                            Database.PostgreSQL.Typed.Types.PGTypeName "integer")
 1147                         _cid_a9vgF, 
 1148                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
 1149                         _tenv_a9vgl
 1150                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1151                            Database.PostgreSQL.Typed.Types.PGTypeName "smallint")
 1152                         _cformat_a9vgG, 
 1153                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1154                         _tenv_a9vgl
 1155                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1156                            Database.PostgreSQL.Typed.Types.PGTypeName "release")
 1157                         _crelease_a9vgH, 
 1158                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1159                         _tenv_a9vgl
 1160                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1161                            Database.PostgreSQL.Typed.Types.PGTypeName "interval")
 1162                         _cduration_a9vgI, 
 1163                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1164                         _tenv_a9vgl
 1165                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1166                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
 1167                         _cname_a9vgJ, 
 1168                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1169                         _tenv_a9vgl
 1170                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1171                            Database.PostgreSQL.Typed.Types.PGTypeName "bytea")
 1172                         _csha1_a9vgK, 
 1173                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1174                         _tenv_a9vgl
 1175                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1176                            Database.PostgreSQL.Typed.Types.PGTypeName "bigint")
 1177                         _csize_a9vgL, 
 1178                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
 1179                         _tenv_a9vgl
 1180                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1181                            Database.PostgreSQL.Typed.Types.PGTypeName "integer")
 1182                         _cid_a9vgM, 
 1183                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
 1184                         _tenv_a9vgl
 1185                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1186                            Database.PostgreSQL.Typed.Types.PGTypeName "smallint")
 1187                         _cformat_a9vgN, 
 1188                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1189                         _tenv_a9vgl
 1190                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1191                            Database.PostgreSQL.Typed.Types.PGTypeName "release")
 1192                         _crelease_a9vgO, 
 1193                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1194                         _tenv_a9vgl
 1195                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1196                            Database.PostgreSQL.Typed.Types.PGTypeName "interval")
 1197                         _cduration_a9vgP, 
 1198                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1199                         _tenv_a9vgl
 1200                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1201                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
 1202                         _cname_a9vgQ, 
 1203                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1204                         _tenv_a9vgl
 1205                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1206                            Database.PostgreSQL.Typed.Types.PGTypeName "bytea")
 1207                         _csha1_a9vgR, 
 1208                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1209                         _tenv_a9vgl
 1210                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1211                            Database.PostgreSQL.Typed.Types.PGTypeName "bigint")
 1212                         _csize_a9vgS, 
 1213                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
 1214                         _tenv_a9vgl
 1215                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1216                            Database.PostgreSQL.Typed.Types.PGTypeName "integer")
 1217                         _cid_a9vgT, 
 1218                       Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull
 1219                         _tenv_a9vgl
 1220                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1221                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
 1222                         _cname_a9vgU, 
 1223                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1224                         _tenv_a9vgl
 1225                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1226                            Database.PostgreSQL.Typed.Types.PGTypeName "text")
 1227                         _cbody_a9vgV, 
 1228                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1229                         _tenv_a9vgl
 1230                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1231                            Database.PostgreSQL.Typed.Types.PGTypeName "character varying")
 1232                         _calias_a9vgW, 
 1233                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1234                         _tenv_a9vgl
 1235                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1236                            Database.PostgreSQL.Typed.Types.PGTypeName "character varying")
 1237                         _cdoi_a9vgX, 
 1238                       Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1239                         _tenv_a9vgl
 1240                         (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1241                            Database.PostgreSQL.Typed.Types.PGTypeName "timestamp with time zone")
 1242                         _cvolume_creation_a9vgY)))
 1243   pure
 1244     (fmap
 1245       (\ (vsegment_a9vaq, voptions_a9var, vstart_a9vas, vprocess_a9vat,
 1246           vlog_a9vau, vid_a9vav, vname_a9vaw, vprename_a9vax, vorcid_a9vay,
 1247           vaffiliation_a9vaz, vurl_a9vaA, vemail_a9vaB, vpassword_a9vaC,
 1248           vsite_a9vaD, vmember_a9vaE, vid_a9vaF, vformat_a9vaG,
 1249           vrelease_a9vaH, vduration_a9vaI, vname_a9vaJ, vc_a9vaK,
 1250           vsize_a9vaL, vid_a9vaM, vformat_a9vaN, vrelease_a9vaO,
 1251           vduration_a9vaP, vname_a9vaQ, vc_a9vaR, vsize_a9vaS, vid_a9vaT,
 1252           vname_a9vaU, vbody_a9vaV, valias_a9vaW, vdoi_a9vaX, vc_a9vaY)
 1253          -> makeTranscode
 1254               (makeOrigTranscode
 1255                  (($)
 1256                     (makeTranscodeRow
 1257                        vsegment_a9vaq
 1258                        voptions_a9var
 1259                        vstart_a9vas
 1260                        vprocess_a9vat
 1261                        vlog_a9vau)
 1262                     (Databrary.Model.Party.SQL.makeSiteAuth
 1263                        (Databrary.Model.Party.SQL.makeUserAccount
 1264                           (Databrary.Model.Party.SQL.makeAccount
 1265                              (PartyRow
 1266                                 vid_a9vav
 1267                                 vname_a9vaw
 1268                                 vprename_a9vax
 1269                                 vorcid_a9vay
 1270                                 vaffiliation_a9vaz
 1271                                 vurl_a9vaA)
 1272                              (Account vemail_a9vaB)))
 1273                        vpassword_a9vaC
 1274                        (do { cm_a9vaZ <- vsite_a9vaD;
 1275                              cm_a9vb0 <- vmember_a9vaE;
 1276                              Just
 1277                                (Databrary.Model.Permission.Types.Access cm_a9vaZ cm_a9vb0) })))
 1278                  (Databrary.Model.Asset.SQL.makeAssetRow
 1279                     vid_a9vaF
 1280                     vformat_a9vaG
 1281                     vrelease_a9vaH
 1282                     vduration_a9vaI
 1283                     vname_a9vaJ
 1284                     vc_a9vaK
 1285                     vsize_a9vaL))
 1286               (Databrary.Model.Asset.SQL.makeAssetRow
 1287                  vid_a9vaM
 1288                  vformat_a9vaN
 1289                  vrelease_a9vaO
 1290                  vduration_a9vaP
 1291                  vname_a9vaQ
 1292                  vc_a9vaR
 1293                  vsize_a9vaS)
 1294               (Databrary.Model.Volume.SQL.setCreation
 1295                  (VolumeRow
 1296                     vid_a9vaT vname_a9vaU vbody_a9vaV valias_a9vaW vdoi_a9vaX)
 1297                  vc_a9vaY
 1298                  []))
 1299       mRow)
 1300 
 1301 checkAlreadyTranscoded :: MonadDB c m => Asset -> Probe -> m Bool
 1302 checkAlreadyTranscoded Asset{ assetRow = AssetRow { assetFormat = fmt, assetSHA1 = Just sha1 } } ProbeAV{ probeTranscode = tfmt, probeAV = av }
 1303   | fmt == tfmt && avProbeCheckFormat fmt av = do
 1304     let _tenv_a9vmk = unknownPGTypeEnv
 1305     (Just (Just (1 :: Int32)) ==) <$> dbQuery1 -- [pgSQL|SELECT 1 FROM asset WHERE asset.sha1 = ${sha1} AND asset.format = ${formatId fmt} AND asset.duration IS NOT NULL LIMIT 1|]
 1306       (mapQuery2
 1307         ((\ _p_a9vml _p_a9vmm ->
 1308                     (BS.concat
 1309                        [Data.String.fromString "SELECT 1 FROM asset WHERE asset.sha1 = ",
 1310                         Database.PostgreSQL.Typed.Types.pgEscapeParameter
 1311                           _tenv_a9vmk
 1312                           (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1313                              Database.PostgreSQL.Typed.Types.PGTypeName "bytea")
 1314                           _p_a9vml,
 1315                         Data.String.fromString " AND asset.format = ",
 1316                         Database.PostgreSQL.Typed.Types.pgEscapeParameter
 1317                           _tenv_a9vmk
 1318                           (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1319                              Database.PostgreSQL.Typed.Types.PGTypeName "smallint")
 1320                           _p_a9vmm,
 1321                         Data.String.fromString " AND asset.duration IS NOT NULL LIMIT 1"]))
 1322           sha1 (formatId fmt))
 1323         (\[_ccolumn_a9vmn]
 1324                -> (Database.PostgreSQL.Typed.Types.pgDecodeColumn
 1325                      _tenv_a9vmk
 1326                      (Database.PostgreSQL.Typed.Types.PGTypeProxy ::
 1327                         Database.PostgreSQL.Typed.Types.PGTypeName "integer")
 1328                      _ccolumn_a9vmn)))
 1329 checkAlreadyTranscoded _ _ = return False