|
@@ -34,6 +34,7 @@ import {
|
|
|
inconsistentState,
|
|
|
logger,
|
|
|
prepareDataObject,
|
|
|
+ createPredictableId,
|
|
|
} from '../common'
|
|
|
|
|
|
|
|
@@ -93,6 +94,7 @@ export interface IReadProtobufArguments {
|
|
|
metadata: Bytes
|
|
|
db: DatabaseManager
|
|
|
blockNumber: number
|
|
|
+ eventIndex: number
|
|
|
}
|
|
|
|
|
|
export interface IReadProtobufArgumentsWithAssets extends IReadProtobufArguments {
|
|
@@ -249,6 +251,7 @@ export async function readProtobufWithAssets<T extends Channel | Video>(
|
|
|
assetIndex: metaAsObject.coverPhoto,
|
|
|
assets: parameters.assets,
|
|
|
db: parameters.db,
|
|
|
+ eventIndex: parameters.eventIndex,
|
|
|
blockNumber: parameters.blockNumber,
|
|
|
contentOwner: parameters.contentOwner,
|
|
|
})
|
|
@@ -263,6 +266,7 @@ export async function readProtobufWithAssets<T extends Channel | Video>(
|
|
|
assets: parameters.assets,
|
|
|
db: parameters.db,
|
|
|
blockNumber: parameters.blockNumber,
|
|
|
+ eventIndex: parameters.eventIndex,
|
|
|
contentOwner: parameters.contentOwner,
|
|
|
})
|
|
|
integrateAsset('avatarPhoto', result, asset) // changes `result` inline!
|
|
@@ -271,7 +275,7 @@ export async function readProtobufWithAssets<T extends Channel | Video>(
|
|
|
|
|
|
// prepare language if needed
|
|
|
if ('language' in metaAsObject) {
|
|
|
- const language = await prepareLanguage(metaAsObject.language, parameters.db, parameters.blockNumber)
|
|
|
+ const language = await prepareLanguage(metaAsObject.language, parameters.db, parameters.blockNumber, parameters.eventIndex)
|
|
|
delete metaAsObject.language // make sure temporary value will not interfere
|
|
|
language.integrateInto(result, 'language')
|
|
|
}
|
|
@@ -309,7 +313,7 @@ export async function readProtobufWithAssets<T extends Channel | Video>(
|
|
|
|
|
|
// prepare license if needed
|
|
|
if ('license' in metaAsObject) {
|
|
|
- result.license = await prepareLicense(metaAsObject.license)
|
|
|
+ result.license = await prepareLicense(metaAsObject.license, parameters.blockNumber, parameters.eventIndex)
|
|
|
}
|
|
|
|
|
|
// prepare thumbnail photo asset if needed
|
|
@@ -319,6 +323,7 @@ export async function readProtobufWithAssets<T extends Channel | Video>(
|
|
|
assets: parameters.assets,
|
|
|
db: parameters.db,
|
|
|
blockNumber: parameters.blockNumber,
|
|
|
+ eventIndex: parameters.eventIndex,
|
|
|
contentOwner: parameters.contentOwner,
|
|
|
})
|
|
|
integrateAsset('thumbnailPhoto', result, asset) // changes `result` inline!
|
|
@@ -332,6 +337,7 @@ export async function readProtobufWithAssets<T extends Channel | Video>(
|
|
|
assets: parameters.assets,
|
|
|
db: parameters.db,
|
|
|
blockNumber: parameters.blockNumber,
|
|
|
+ eventIndex: parameters.eventIndex,
|
|
|
contentOwner: parameters.contentOwner,
|
|
|
})
|
|
|
integrateAsset('media', result, asset) // changes `result` inline!
|
|
@@ -340,7 +346,12 @@ export async function readProtobufWithAssets<T extends Channel | Video>(
|
|
|
|
|
|
// prepare language if needed
|
|
|
if ('language' in metaAsObject) {
|
|
|
- const language = await prepareLanguage(metaAsObject.language, parameters.db, parameters.blockNumber)
|
|
|
+ const language = await prepareLanguage(
|
|
|
+ metaAsObject.language,
|
|
|
+ parameters.db,
|
|
|
+ parameters.blockNumber,
|
|
|
+ parameters.eventIndex
|
|
|
+ )
|
|
|
delete metaAsObject.language // make sure temporary value will not interfere
|
|
|
language.integrateInto(result, 'language')
|
|
|
}
|
|
@@ -452,6 +463,7 @@ interface IConvertAssetParameters {
|
|
|
rawAsset: NewAsset
|
|
|
db: DatabaseManager
|
|
|
blockNumber: number
|
|
|
+ eventIndex: number
|
|
|
contentOwner: typeof DataObjectOwner
|
|
|
}
|
|
|
|
|
@@ -470,7 +482,12 @@ async function convertAsset(parameters: IConvertAssetParameters): Promise<AssetS
|
|
|
|
|
|
// prepare data object
|
|
|
const contentParameters: ContentParameters = parameters.rawAsset.asUpload
|
|
|
- const dataObject = await prepareDataObject(contentParameters, parameters.blockNumber, parameters.contentOwner)
|
|
|
+ const dataObject = await prepareDataObject(
|
|
|
+ contentParameters,
|
|
|
+ parameters.blockNumber,
|
|
|
+ parameters.eventIndex,
|
|
|
+ parameters.contentOwner,
|
|
|
+ )
|
|
|
|
|
|
return dataObject
|
|
|
}
|
|
@@ -480,6 +497,7 @@ interface IExtractAssetParameters {
|
|
|
assets: NewAsset[]
|
|
|
db: DatabaseManager
|
|
|
blockNumber: number
|
|
|
+ eventIndex: number
|
|
|
contentOwner: typeof DataObjectOwner
|
|
|
}
|
|
|
|
|
@@ -506,6 +524,7 @@ async function extractAsset(parameters: IExtractAssetParameters): Promise<Proper
|
|
|
rawAsset: parameters.assets[parameters.assetIndex],
|
|
|
db: parameters.db,
|
|
|
blockNumber: parameters.blockNumber,
|
|
|
+ eventIndex: parameters.eventIndex,
|
|
|
contentOwner: parameters.contentOwner,
|
|
|
})
|
|
|
|
|
@@ -591,7 +610,12 @@ function extractVideoSize(assets: NewAsset[], assetIndex: number | undefined): n
|
|
|
return videoSize
|
|
|
}
|
|
|
|
|
|
-async function prepareLanguage(languageIso: string | undefined, db: DatabaseManager, blockNumber: number): Promise<PropertyChange<Language>> {
|
|
|
+async function prepareLanguage(
|
|
|
+ languageIso: string | undefined,
|
|
|
+ db: DatabaseManager,
|
|
|
+ blockNumber: number,
|
|
|
+ blockIndex: number,
|
|
|
+): Promise<PropertyChange<Language>> {
|
|
|
// is language being unset?
|
|
|
if (languageIso === undefined) {
|
|
|
return PropertyChange.newUnset()
|
|
@@ -625,12 +649,18 @@ async function prepareLanguage(languageIso: string | undefined, db: DatabaseMana
|
|
|
updatedById: '1',
|
|
|
})
|
|
|
|
|
|
+ newLanguage.id = createPredictableId(blockNumber, blockIndex, newLanguage)
|
|
|
+
|
|
|
await db.save<Language>(newLanguage)
|
|
|
|
|
|
return PropertyChange.newChange(newLanguage)
|
|
|
}
|
|
|
|
|
|
-async function prepareLicense(licenseProtobuf: LicenseMetadata.AsObject | undefined): Promise<License | undefined> {
|
|
|
+async function prepareLicense(
|
|
|
+ licenseProtobuf: LicenseMetadata.AsObject | undefined,
|
|
|
+ blockNumber: number,
|
|
|
+ blockIndex: number,
|
|
|
+): Promise<License | undefined> {
|
|
|
// NOTE: Deletion of any previous license should take place in appropriate event handling function
|
|
|
// and not here even it might appear so.
|
|
|
|
|
@@ -647,6 +677,8 @@ async function prepareLicense(licenseProtobuf: LicenseMetadata.AsObject | undefi
|
|
|
updatedById: '1',
|
|
|
})
|
|
|
|
|
|
+ license.id = createPredictableId(blockNumber, blockIndex, license)
|
|
|
+
|
|
|
return license
|
|
|
}
|
|
|
|