2017-06-19 18:37:35 +02:00
|
|
|
const db = require('../models');
|
2017-06-20 01:15:28 +02:00
|
|
|
const logger = require('winston');
|
2017-09-08 00:31:32 +02:00
|
|
|
|
2017-10-06 00:14:50 +02:00
|
|
|
const DEFAULT_THUMBNAIL = 'https://spee.ch/assets/img/video_thumb_default.png';
|
2017-10-18 00:09:43 +02:00
|
|
|
const NO_CHANNEL = 'NO_CHANNEL';
|
2017-11-27 19:22:47 +01:00
|
|
|
const NO_FILE = 'NO_FILE';
|
2017-08-02 22:16:39 +02:00
|
|
|
|
|
|
|
module.exports = {
|
2017-12-05 19:18:49 +01:00
|
|
|
getClaimId (channelName, channelClaimId, name, claimId) {
|
2017-11-21 21:53:43 +01:00
|
|
|
if (channelName) {
|
2017-12-05 19:18:49 +01:00
|
|
|
return module.exports.getClaimIdByChannel(channelName, channelClaimId, name);
|
2017-11-21 21:53:43 +01:00
|
|
|
} else {
|
|
|
|
return module.exports.getClaimIdByClaim(name, claimId);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
getClaimIdByClaim (claimName, claimId) {
|
|
|
|
logger.debug(`getClaimIdByClaim(${claimName}, ${claimId})`);
|
2017-08-02 03:58:13 +02:00
|
|
|
return new Promise((resolve, reject) => {
|
2017-11-21 21:53:43 +01:00
|
|
|
db.Claim.getLongClaimId(claimName, claimId) // get the long claim id
|
|
|
|
.then(result => {
|
|
|
|
resolve(result); // resolves with NO_CLAIM or valid claim id
|
2017-09-08 02:08:06 +02:00
|
|
|
})
|
|
|
|
.catch(error => {
|
|
|
|
reject(error);
|
|
|
|
});
|
2017-06-19 18:37:35 +02:00
|
|
|
});
|
2017-06-17 22:51:30 +02:00
|
|
|
},
|
2017-12-05 19:18:49 +01:00
|
|
|
getClaimIdByChannel (channelName, channelClaimId, claimName) {
|
|
|
|
logger.debug(`getClaimIdByChannel(${channelName}, ${channelClaimId}, ${claimName})`);
|
2017-08-23 00:50:20 +02:00
|
|
|
return new Promise((resolve, reject) => {
|
2017-12-05 19:18:49 +01:00
|
|
|
db.Certificate.getLongChannelId(channelName, channelClaimId) // 1. get the long channel id
|
2017-11-21 21:53:43 +01:00
|
|
|
.then(result => {
|
2017-10-18 19:00:24 +02:00
|
|
|
if (result === NO_CHANNEL) {
|
2017-11-21 21:53:43 +01:00
|
|
|
resolve(result); // resolves NO_CHANNEL
|
2017-10-18 00:50:35 +02:00
|
|
|
return;
|
|
|
|
}
|
2017-11-21 21:53:43 +01:00
|
|
|
return db.Claim.getClaimIdByLongChannelId(result, claimName); // 2. get the long claim id
|
2017-09-08 02:08:06 +02:00
|
|
|
})
|
2017-11-21 21:53:43 +01:00
|
|
|
.then(result => {
|
|
|
|
resolve(result); // resolves with NO_CLAIM or valid claim id
|
2017-09-08 02:08:06 +02:00
|
|
|
})
|
|
|
|
.catch(error => {
|
|
|
|
reject(error);
|
|
|
|
});
|
2017-08-24 01:01:28 +02:00
|
|
|
});
|
|
|
|
},
|
2017-12-05 19:18:49 +01:00
|
|
|
getChannelContents (channelName, channelClaimId) {
|
2017-08-24 01:01:28 +02:00
|
|
|
return new Promise((resolve, reject) => {
|
2017-12-05 19:18:49 +01:00
|
|
|
let longChannelClaimId;
|
|
|
|
let shortChannelClaimId;
|
|
|
|
db.Certificate.getLongChannelId(channelName, channelClaimId) // 1. get the long channel Id
|
2017-10-13 02:56:23 +02:00
|
|
|
.then(result => { // 2. get all claims for that channel
|
2017-10-18 00:09:43 +02:00
|
|
|
if (result === NO_CHANNEL) {
|
|
|
|
return NO_CHANNEL;
|
|
|
|
}
|
2017-12-05 19:18:49 +01:00
|
|
|
longChannelClaimId = result;
|
|
|
|
return db.Certificate.getShortChannelIdFromLongChannelId(longChannelClaimId, channelName);
|
2017-09-08 02:08:06 +02:00
|
|
|
})
|
2017-10-13 02:56:23 +02:00
|
|
|
.then(result => { // 3. get all Claim records for this channel
|
2017-10-18 00:09:43 +02:00
|
|
|
if (result === NO_CHANNEL) {
|
|
|
|
return NO_CHANNEL;
|
|
|
|
}
|
2017-12-05 19:18:49 +01:00
|
|
|
shortChannelClaimId = result;
|
|
|
|
return db.Claim.getAllChannelClaims(longChannelClaimId);
|
2017-09-08 02:08:06 +02:00
|
|
|
})
|
2017-10-18 00:09:43 +02:00
|
|
|
.then(result => { // 4. add extra data not available from Claim table
|
|
|
|
if (result === NO_CHANNEL) {
|
2017-11-21 21:53:43 +01:00
|
|
|
resolve(result);
|
2017-10-18 00:09:43 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (result) {
|
|
|
|
result.forEach(element => {
|
2017-09-11 20:09:38 +02:00
|
|
|
const fileExtenstion = element.contentType.substring(element.contentType.lastIndexOf('/') + 1);
|
2017-12-05 19:18:49 +01:00
|
|
|
element['showUrlLong'] = `/${channelName}:${longChannelClaimId}/${element.name}`;
|
|
|
|
element['directUrlLong'] = `/${channelName}:${longChannelClaimId}/${element.name}.${fileExtenstion}`;
|
|
|
|
element['showUrlShort'] = `/${channelName}:${shortChannelClaimId}/${element.name}`;
|
|
|
|
element['directUrlShort'] = `/${channelName}:${shortChannelClaimId}/${element.name}.${fileExtenstion}`;
|
2017-11-27 23:52:46 +01:00
|
|
|
element['thumbnail'] = module.exports.chooseThumbnail(element, DEFAULT_THUMBNAIL);
|
2017-09-08 02:08:06 +02:00
|
|
|
});
|
|
|
|
}
|
2017-10-18 00:09:43 +02:00
|
|
|
resolve({
|
2017-09-28 19:51:02 +02:00
|
|
|
channelName,
|
2017-12-05 19:18:49 +01:00
|
|
|
longChannelClaimId,
|
|
|
|
shortChannelClaimId,
|
2017-10-18 00:09:43 +02:00
|
|
|
claims: result,
|
2017-09-28 19:51:02 +02:00
|
|
|
});
|
2017-09-08 02:08:06 +02:00
|
|
|
})
|
|
|
|
.catch(error => {
|
|
|
|
reject(error);
|
|
|
|
});
|
2017-08-23 00:50:20 +02:00
|
|
|
});
|
|
|
|
},
|
2017-11-21 21:53:43 +01:00
|
|
|
getLocalFileRecord (claimId, name) {
|
|
|
|
return db.File.findOne({where: {claimId, name}})
|
|
|
|
.then(file => {
|
|
|
|
if (!file) {
|
2017-11-27 19:22:47 +01:00
|
|
|
return NO_FILE;
|
2017-11-21 21:53:43 +01:00
|
|
|
}
|
|
|
|
return file.dataValues;
|
|
|
|
});
|
|
|
|
},
|
|
|
|
getClaimRecord (claimId, name) {
|
|
|
|
return db.Claim.findOne({where: {claimId, name}})
|
|
|
|
.then(claim => {
|
|
|
|
if (!claim) {
|
|
|
|
throw new Error('no record found in Claim table');
|
|
|
|
}
|
2017-11-30 06:06:59 +01:00
|
|
|
claim.dataValues.thumbnail = module.exports.chooseThumbnail(claim.dataValues, DEFAULT_THUMBNAIL);
|
2017-11-27 23:52:46 +01:00
|
|
|
claim.dataValues.fileExt = module.exports.determineFileExtensionFromContentType(claim.dataValues.contentType);
|
2017-11-21 21:53:43 +01:00
|
|
|
return claim.dataValues;
|
|
|
|
});
|
2017-08-24 01:01:28 +02:00
|
|
|
},
|
2017-11-27 23:52:46 +01:00
|
|
|
determineFileExtensionFromContentType (contentType) {
|
|
|
|
switch (contentType) {
|
|
|
|
case 'image/jpeg':
|
|
|
|
return 'jpeg';
|
|
|
|
case 'image/jpg':
|
|
|
|
return 'jpg';
|
|
|
|
case 'image/png':
|
|
|
|
return 'png';
|
|
|
|
case 'image/gif':
|
|
|
|
return 'gif';
|
|
|
|
case 'video/mp4':
|
|
|
|
return 'mp4';
|
|
|
|
default:
|
|
|
|
logger.info('showing unknown file type as image/jpeg');
|
|
|
|
return 'jpeg';
|
|
|
|
}
|
|
|
|
},
|
|
|
|
chooseThumbnail (claimInfo, defaultThumbnail) {
|
|
|
|
if (!claimInfo.thumbnail || claimInfo.thumbnail.trim() === '') {
|
|
|
|
return defaultThumbnail;
|
|
|
|
}
|
|
|
|
return claimInfo.thumbnail;
|
|
|
|
},
|
2017-06-19 18:37:35 +02:00
|
|
|
};
|