check-requirements.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. var utilities = require('./utilities');
  2. const chalk = require('chalk');
  3. const logSymbols = require('log-symbols');
  4. var hasRequirements = async function(project){
  5. var requirements = {
  6. is_public : project.visibility == "private" || project.visibility == undefined,
  7. has_thumbnail : utilities.fileExists( `${global.source}/${project.permalink}/${project.cover_image}`),
  8. has_hero_img : utilities.fileExists(`${global.source}/${project.permalink}/${project.hero_image}`),
  9. has_description : project.description != "" && project.description != undefined,
  10. has_text : project.text != "" && project.text != undefined,
  11. has_videos : countVideos(project) > 0,
  12. has_screenshots : countScreenshots(project) > 0,
  13. video_check : await checkVideos(project)
  14. }
  15. var pass = ''
  16. if(!requirements.is_public) pass = 'no'
  17. else if(!requirements.has_thumbnail) pass = 'no'
  18. else if(!requirements.has_description) pass = 'no'
  19. else if(!requirements.has_hero_img && !requirements.has_videos) pass = 'no'
  20. else if(allVideosAvailable(requirements.video_check)) pass = 'no'
  21. else if(!requirements.has_text) pass = 'some'
  22. else if(!requirements.has_videos && !requirements.has_screenshots) pass = 'some'
  23. else pass = 'all';
  24. requirements.pass = pass;
  25. return requirements;
  26. }
  27. var requirementMessages = function(project, requirements){
  28. var warning_thumbnail = chalk.red(` - Missing the thumbnail image`);
  29. var warning_hero_img = chalk.red(` - Missing hero image or video`);
  30. var warning_description = chalk.red(` - Missing description`);
  31. var warning_text = chalk.yellow(` - Missing long text description`);
  32. var warning_screenshots = chalk.yellow(` - Missing screenshots`);
  33. if(global.isVerbose){
  34. if(!requirements.has_thumbnail) console.log(warning_thumbnail);
  35. if(!requirements.has_description) console.log(warning_description);
  36. if(!requirements.has_hero_img && !requirements.has_videos) console.log(warning_hero_img);
  37. if(!requirements.has_text) console.log(warning_text);
  38. if(!requirements.has_videos && !requirements.has_screenshots) console.log(warning_screenshots);
  39. if(requirements.has_videos) {
  40. requirements.video_check.forEach(video => {
  41. if(video.available == false) {
  42. console.log(chalk.red(` - Video is not available: ${video.url}`));
  43. }
  44. });
  45. }
  46. }
  47. }
  48. var countVideos = function(project){
  49. if(project.videos != undefined){
  50. return project.videos.length;
  51. } else {
  52. return 0;
  53. }
  54. }
  55. var checkVideos = async function(project){
  56. var videoCheck = []
  57. if(project.videos != undefined){
  58. for (let i = 0; i < project.videos.length; i++) {
  59. const video = project.videos[i];
  60. video.available = await utilities.checkVideo(video.url)
  61. videoCheck.push(video);
  62. }
  63. }
  64. return videoCheck;
  65. }
  66. var allVideosAvailable = function(video_check) {
  67. var result = false;
  68. for (let i = 0; i < video_check.length; i++) {
  69. if(video_check[i].available == false) result = true
  70. }
  71. return result;
  72. }
  73. var countScreenshots = function(project){
  74. if(project.screenshots != undefined){
  75. return project.screenshots.length;
  76. } else {
  77. return 0;
  78. }
  79. }
  80. var showRequirements = async function(query, projects){
  81. if(query != undefined) query = query.toLowerCase();
  82. var result = [ 0, 0, 0]
  83. console.log();
  84. for (let i = 0; i < projects.length; i++) {
  85. const project = projects[i];
  86. if(project.title.toLowerCase() == query || project.permalink == query || query == ""){
  87. var requirements = await hasRequirements(project);
  88. if(requirements.pass == 'all'){
  89. result[0] += 1;
  90. console.log(logSymbols.success,
  91. `Project \'${chalk.bold(project.permalink)}\' has all requirements`);
  92. } else if (requirements.pass == 'some') {
  93. result[1] += 1;
  94. console.log(logSymbols.warning,
  95. `Project \'${chalk.bold(project.permalink)}\' has some requirements`);
  96. } else if(requirements.pass == 'no') {
  97. result[2] += 1;
  98. console.log(logSymbols.error,
  99. `Project \'${chalk.bold(project.permalink)}\' doesn\'t have necessary requirements`);
  100. }
  101. requirementMessages(project, requirements);
  102. }
  103. }
  104. console.log();
  105. if(query == "")
  106. console.log(chalk.green(`${result[0]} passed`) + ", " + chalk.yellow(`${result[1]} passed with warnings`) + ", " + chalk.red(`${result[2]} missing requirements`) + ` (TOTAL: ${projects.length})`);
  107. }
  108. module.exports.hasRequirements = hasRequirements;
  109. module.exports.requirementMessages = requirementMessages;
  110. module.exports.showRequirements = showRequirements;