Browse Source

Content CLI: refactor videos related logic

iorveth 4 years ago
parent
commit
c21a561f57

+ 24 - 1
cli/src/Types.ts

@@ -1,6 +1,6 @@
 import BN from 'bn.js'
 import { ElectionStage, Seat } from '@joystream/types/council'
-import { Option } from '@polkadot/types'
+import { Vec, Option} from '@polkadot/types';
 import { Codec } from '@polkadot/types/types'
 import { BlockNumber, Balance, AccountId } from '@polkadot/types/interfaces'
 import { DeriveBalancesAll } from '@polkadot/api-derive/types'
@@ -9,6 +9,9 @@ import { WorkerId, OpeningType } from '@joystream/types/working-group'
 import { Membership, MemberId } from '@joystream/types/members'
 import { Opening, StakingPolicy, ApplicationStageKeys } from '@joystream/types/hiring'
 import { Validator } from 'inquirer'
+import { NewAsset} from '@joystream/types/content'
+import { Bytes } from '@polkadot/types/primitive';
+import { VideoMetadata } from '@joystream/content-metadata-protobuf'
 
 // KeyringPair type extended with mandatory "meta.name"
 // It's used for accounts/keys management within CLI.
@@ -197,3 +200,23 @@ export type ApiMethodNamedArg = {
   value: ApiMethodArg
 }
 export type ApiMethodNamedArgs = ApiMethodNamedArg[]
+
+export type VideoUpdateParametersInput = {
+  assets: Option<Vec<NewAsset>>,
+  meta: VideoMetadata.AsObject,
+}
+
+export type VideoUpdateParameters = {
+  assets: Option<Vec<NewAsset>>,
+  meta: Bytes,
+}
+
+export type VideoCreationParametersInput = {
+  assets: Vec<NewAsset>,
+  meta: VideoMetadata.AsObject,
+}
+
+export type VideoCreationParameters = {
+  assets: Vec<NewAsset>,
+  meta: Bytes,
+}

+ 3 - 52
cli/src/commands/content/createVideo.ts

@@ -1,19 +1,7 @@
 import ContentDirectoryCommandBase from '../../base/ContentDirectoryCommandBase'
 import { IOFlags, getInputJson, saveOutputJson } from '../../helpers/InputOutput'
-import { NewAsset} from '@joystream/types/content'
-import {VideoMetadata, PublishedBeforeJoystream, License, MediaType} from '@joystream/content-metadata-protobuf'
-import { Vec} from '@polkadot/types';
-import { Bytes } from '@polkadot/types/primitive';
-
-type VideoCreationParametersInput = {
-  assets: Vec<NewAsset>,
-  meta: VideoMetadata.AsObject,
-}
-
-type VideoCreationParameters = {
-  assets: Vec<NewAsset>,
-  meta: Bytes,
-}
+import { videoMetadataFromInput } from '../../helpers/serialization'
+import { VideoCreationParameters, VideoCreationParametersInput } from '../../Types'
 
 export default class CreateVideoCommand extends ContentDirectoryCommandBase {
   static description = 'Create video under specific channel inside content directory.'
@@ -47,46 +35,9 @@ export default class CreateVideoCommand extends ContentDirectoryCommandBase {
     if (input) {
       let videoCreationParametersInput = await getInputJson<VideoCreationParametersInput>(input)
 
-      let mediaType = new MediaType()
-      mediaType.setCodecName(videoCreationParametersInput.meta.mediaType?.codecName!)
-      mediaType.setContainer(videoCreationParametersInput.meta.mediaType?.container!)
-      mediaType.setMimeMediaType(videoCreationParametersInput.meta.mediaType?.mimeMediaType!)
-
-      let license = new License()
-      license.setCode(videoCreationParametersInput.meta.license?.code!)
-      license.setAttribution(videoCreationParametersInput.meta.license?.attribution!)
-      license.setCustomText(videoCreationParametersInput.meta.license?.customText!)
-
-      let publishedBeforeJoystream = new PublishedBeforeJoystream()
-      publishedBeforeJoystream.setIsPublished(videoCreationParametersInput.meta.publishedBeforeJoystream?.isPublished!)
-      publishedBeforeJoystream.setDate(videoCreationParametersInput.meta.publishedBeforeJoystream?.date!)
-
-      let videoMetadata = new VideoMetadata()
-      videoMetadata.setTitle(videoCreationParametersInput.meta.title!)
-      videoMetadata.setDescription(videoCreationParametersInput.meta.description!)
-      videoMetadata.setVideo(videoCreationParametersInput.meta.video!)
-      videoMetadata.setThumbnailPhoto(videoCreationParametersInput.meta.thumbnailPhoto!)
-      videoMetadata.setDuration(videoCreationParametersInput.meta.duration!)
-      videoMetadata.setMediaPixelHeight(videoCreationParametersInput.meta.mediaPixelHeight!)
-      videoMetadata.setMediaPixelWidth(videoCreationParametersInput.meta.mediaPixelWidth!)
-      videoMetadata.setLanguage(videoCreationParametersInput.meta.language!)
-      videoMetadata.setHasMarketing(videoCreationParametersInput.meta.hasMarketing!)
-      videoMetadata.setIsPublic(videoCreationParametersInput.meta.isPublic!)
-      videoMetadata.setIsExplicit(videoCreationParametersInput.meta.isExplicit!)
-      videoMetadata.setPersonsList(videoCreationParametersInput.meta.personsList!)
-      videoMetadata.setCategory(videoCreationParametersInput.meta.category!)
-
-      videoMetadata.setMediaType(mediaType)
-      videoMetadata.setLicense(license)
-      videoMetadata.setPublishedBeforeJoystream(publishedBeforeJoystream)
-
-
-      const serialized = videoMetadata.serializeBinary();
-
       const api = await this.getOriginalApi()
       
-      const metaRaw = api.createType('Raw', serialized)
-      const meta = new Bytes(api.registry, metaRaw)
+      const meta = videoMetadataFromInput(api, videoCreationParametersInput)
 
       let videoCreationParameters: VideoCreationParameters = {
         assets: videoCreationParametersInput.assets,

+ 3 - 52
cli/src/commands/content/updateVideo.ts

@@ -1,19 +1,7 @@
 import ContentDirectoryCommandBase from '../../base/ContentDirectoryCommandBase'
 import { IOFlags, getInputJson, saveOutputJson } from '../../helpers/InputOutput'
-import { NewAsset} from '@joystream/types/content'
-import {VideoMetadata, PublishedBeforeJoystream, License, MediaType} from '@joystream/content-metadata-protobuf'
-import { Vec, Option} from '@polkadot/types';
-import { Bytes } from '@polkadot/types/primitive';
-
-type VideoUpdateParametersInput = {
-  assets: Option<Vec<NewAsset>>,
-  meta: VideoMetadata.AsObject,
-}
-
-type VideoUpdateParameters = {
-  assets: Option<Vec<NewAsset>>,
-  meta: Bytes,
-}
+import { VideoUpdateParameters, VideoUpdateParametersInput } from '../../Types'
+import { videoMetadataFromInput } from '../../helpers/serialization'
 
 export default class UpdateVideoCommand extends ContentDirectoryCommandBase {
   static description = 'Update video under specific id.'
@@ -47,46 +35,9 @@ export default class UpdateVideoCommand extends ContentDirectoryCommandBase {
     if (input) {
       let videoUpdateParametersInput = await getInputJson<VideoUpdateParametersInput>(input)
 
-      let mediaType = new MediaType()
-      mediaType.setCodecName(videoUpdateParametersInput.meta.mediaType?.codecName!)
-      mediaType.setContainer(videoUpdateParametersInput.meta.mediaType?.container!)
-      mediaType.setMimeMediaType(videoUpdateParametersInput.meta.mediaType?.mimeMediaType!)
-
-      let license = new License()
-      license.setCode(videoUpdateParametersInput.meta.license?.code!)
-      license.setAttribution(videoUpdateParametersInput.meta.license?.attribution!)
-      license.setCustomText(videoUpdateParametersInput.meta.license?.customText!)
-
-      let publishedBeforeJoystream = new PublishedBeforeJoystream()
-      publishedBeforeJoystream.setIsPublished(videoUpdateParametersInput.meta.publishedBeforeJoystream?.isPublished!)
-      publishedBeforeJoystream.setDate(videoUpdateParametersInput.meta.publishedBeforeJoystream?.date!)
-
-      let videoMetadata = new VideoMetadata()
-      videoMetadata.setTitle(videoUpdateParametersInput.meta.title!)
-      videoMetadata.setDescription(videoUpdateParametersInput.meta.description!)
-      videoMetadata.setVideo(videoUpdateParametersInput.meta.video!)
-      videoMetadata.setThumbnailPhoto(videoUpdateParametersInput.meta.thumbnailPhoto!)
-      videoMetadata.setDuration(videoUpdateParametersInput.meta.duration!)
-      videoMetadata.setMediaPixelHeight(videoUpdateParametersInput.meta.mediaPixelHeight!)
-      videoMetadata.setMediaPixelWidth(videoUpdateParametersInput.meta.mediaPixelWidth!)
-      videoMetadata.setLanguage(videoUpdateParametersInput.meta.language!)
-      videoMetadata.setHasMarketing(videoUpdateParametersInput.meta.hasMarketing!)
-      videoMetadata.setIsPublic(videoUpdateParametersInput.meta.isPublic!)
-      videoMetadata.setIsExplicit(videoUpdateParametersInput.meta.isExplicit!)
-      videoMetadata.setPersonsList(videoUpdateParametersInput.meta.personsList!)
-      videoMetadata.setCategory(videoUpdateParametersInput.meta.category!)
-
-      videoMetadata.setMediaType(mediaType)
-      videoMetadata.setLicense(license)
-      videoMetadata.setPublishedBeforeJoystream(publishedBeforeJoystream)
-
-
-      const serialized = videoMetadata.serializeBinary();
-
       const api = await this.getOriginalApi()
       
-      const metaRaw = api.createType('Raw', serialized)
-      const meta = new Bytes(api.registry, metaRaw)
+      const meta = videoMetadataFromInput(api, videoUpdateParametersInput)
 
       let videoUpdateParameters: VideoUpdateParameters = {
         assets: videoUpdateParametersInput.assets,

+ 47 - 0
cli/src/helpers/serialization.ts

@@ -0,0 +1,47 @@
+import {VideoMetadata, PublishedBeforeJoystream, License, MediaType} from '@joystream/content-metadata-protobuf'
+import { VideoUpdateParametersInput, VideoCreationParametersInput } from '../Types'
+import { ApiPromise } from '@polkadot/api'
+import { Bytes } from '@polkadot/types/primitive';
+
+export function BinaryToMeta(api: ApiPromise, serialized: Uint8Array): Bytes {
+    const metaRaw = api.createType('Raw', serialized)
+    return new Bytes(api.registry, metaRaw)
+}
+
+export function videoMetadataFromInput(api: ApiPromise, videoParametersInput: VideoCreationParametersInput | VideoUpdateParametersInput): Bytes {
+    let mediaType = new MediaType()
+    mediaType.setCodecName(videoParametersInput.meta.mediaType?.codecName!)
+    mediaType.setContainer(videoParametersInput.meta.mediaType?.container!)
+    mediaType.setMimeMediaType(videoParametersInput.meta.mediaType?.mimeMediaType!)
+
+    let license = new License()
+    license.setCode(videoParametersInput.meta.license?.code!)
+    license.setAttribution(videoParametersInput.meta.license?.attribution!)
+    license.setCustomText(videoParametersInput.meta.license?.customText!)
+
+    let publishedBeforeJoystream = new PublishedBeforeJoystream()
+    publishedBeforeJoystream.setIsPublished(videoParametersInput.meta.publishedBeforeJoystream?.isPublished!)
+    publishedBeforeJoystream.setDate(videoParametersInput.meta.publishedBeforeJoystream?.date!)
+
+    let videoMetadata = new VideoMetadata()
+    videoMetadata.setTitle(videoParametersInput.meta.title!)
+    videoMetadata.setDescription(videoParametersInput.meta.description!)
+    videoMetadata.setVideo(videoParametersInput.meta.video!)
+    videoMetadata.setThumbnailPhoto(videoParametersInput.meta.thumbnailPhoto!)
+    videoMetadata.setDuration(videoParametersInput.meta.duration!)
+    videoMetadata.setMediaPixelHeight(videoParametersInput.meta.mediaPixelHeight!)
+    videoMetadata.setMediaPixelWidth(videoParametersInput.meta.mediaPixelWidth!)
+    videoMetadata.setLanguage(videoParametersInput.meta.language!)
+    videoMetadata.setHasMarketing(videoParametersInput.meta.hasMarketing!)
+    videoMetadata.setIsPublic(videoParametersInput.meta.isPublic!)
+    videoMetadata.setIsExplicit(videoParametersInput.meta.isExplicit!)
+    videoMetadata.setPersonsList(videoParametersInput.meta.personsList!)
+    videoMetadata.setCategory(videoParametersInput.meta.category!)
+
+    videoMetadata.setMediaType(mediaType)
+    videoMetadata.setLicense(license)
+    videoMetadata.setPublishedBeforeJoystream(publishedBeforeJoystream)
+
+    const serialized = videoMetadata.serializeBinary();
+    return BinaryToMeta(api, serialized)
+}