Browse Source

Add video check requirement

James Peret 3 years ago
parent
commit
9913b99565

+ 5 - 1
fetch-content.js

@@ -1,6 +1,10 @@
 const chalk = require('chalk');
 
 var fetch_projects = require('./fetch-scripts/fetch-projects');
+var requirements = require('./fetch-scripts/check-requirements');
+
+//console.log(process.argv)
+global.source = "/Users/james/codex/projects"
 
 var hasArg = function(arg){
     for (let i = 0; i < process.argv.length; i++) {
@@ -43,7 +47,7 @@ if(hasArg('test')){
         if (process.argv[i] != '-v' && process.argv[i] != '--verbose' ) query += process.argv[i] + " ";
     }
     if(query != '') global.isVerbose = true;
-    fetch_projects.showRequirements(query.replace(/\s+$/, ''))
+    requirements.showRequirements(query.replace(/\s+$/, ''), fetch_projects.list_projects())
     return;
 }
 

+ 118 - 0
fetch-scripts/check-requirements.js

@@ -0,0 +1,118 @@
+var utilities = require('./utilities');
+
+const chalk = require('chalk');
+const logSymbols = require('log-symbols');
+
+var hasRequirements = async function(project){
+    var requirements = {
+        is_public : project.visibility == "private" || project.visibility == undefined,
+        has_thumbnail : utilities.fileExists( `${global.source}/${project.permalink}/${project.cover_image}`),
+        has_hero_img : utilities.fileExists(`${global.source}/${project.permalink}/${project.hero_image}`),
+        has_description : project.description != "" && project.description != undefined,
+        has_text : project.text != "" && project.text != undefined,
+        has_videos : countVideos(project) > 0,
+        has_screenshots : countScreenshots(project) > 0,
+        video_check : await checkVideos(project)
+    }
+    var pass = ''
+    if(!requirements.is_public) pass = 'no'
+    else if(!requirements.has_thumbnail) pass = 'no'
+    else if(!requirements.has_description) pass = 'no'
+    else if(!requirements.has_hero_img && !requirements.has_videos) pass = 'no'
+    else if(allVideosAvailable(requirements.video_check)) pass = 'no'
+    else if(!requirements.has_text) pass = 'some'
+    else if(!requirements.has_videos && !requirements.has_screenshots) pass = 'some'
+    else pass = 'all';
+    requirements.pass = pass;
+    return requirements;
+}
+
+var requirementMessages = function(project, requirements){
+    var warning_thumbnail =   chalk.red(`  - Missing the thumbnail image`);
+    var warning_hero_img =    chalk.red(`  - Missing hero image or video`);
+    var warning_description = chalk.red(`  - Missing description`);
+    var warning_text =        chalk.yellow(`  - Missing long text description`);
+    var warning_screenshots = chalk.yellow(`  - Missing screenshots`);
+    if(global.isVerbose){
+        if(!requirements.has_thumbnail) console.log(warning_thumbnail);
+        if(!requirements.has_description) console.log(warning_description);
+        if(!requirements.has_hero_img && !requirements.has_videos) console.log(warning_hero_img);
+        if(!requirements.has_text) console.log(warning_text);
+        if(!requirements.has_videos && !requirements.has_screenshots) console.log(warning_screenshots);
+        if(requirements.has_videos) {
+            requirements.video_check.forEach(video => {
+                if(video.available == false) {
+                    console.log(chalk.red(`  - Video is not available: ${video.url}`));
+                }
+            });
+        }
+    }
+}
+
+var countVideos = function(project){
+    if(project.videos != undefined){
+        return project.videos.length;
+    } else {
+        return 0;
+    }
+}
+
+var checkVideos = async function(project){
+    var videoCheck = []
+    if(project.videos != undefined){
+        for (let i = 0; i < project.videos.length; i++) {
+            const video = project.videos[i];
+            video.available = await utilities.checkVideo(video.url)
+            videoCheck.push(video);
+        }
+    }
+    return videoCheck;
+}
+
+var allVideosAvailable = function(video_check) {
+    var result = false;
+    for (let i = 0; i < video_check.length; i++) {
+        if(video_check[i].available == false) result = true
+    }
+    return result;
+}
+
+var countScreenshots = function(project){
+    if(project.screenshots != undefined){
+        return project.screenshots.length;
+    } else {
+        return 0;
+    }
+}
+
+var showRequirements = async function(query, projects){
+    if(query != undefined) query = query.toLowerCase();
+    var result = [ 0, 0, 0]
+    console.log();
+    for (let i = 0; i < projects.length; i++) {
+        const project = projects[i];
+        if(project.title.toLowerCase() == query || project.permalink == query || query == ""){
+            var requirements = await hasRequirements(project);
+            if(requirements.pass == 'all'){
+                result[0] += 1;
+                console.log(logSymbols.success, 
+                    `Project \'${chalk.bold(project.permalink)}\' has all requirements`);
+            } else if (requirements.pass == 'some') {
+                result[1] += 1;
+                console.log(logSymbols.warning, 
+                    `Project \'${chalk.bold(project.permalink)}\' has some requirements`);
+            } else if(requirements.pass == 'no') {
+                result[2] += 1;
+                console.log(logSymbols.error, 
+                    `Project \'${chalk.bold(project.permalink)}\' doesn\'t have necessary requirements`);
+            }
+            requirementMessages(project, requirements);
+        }
+    }
+    console.log();
+    if(query == "")
+        console.log(chalk.green(`${result[0]} passed`) + ", " + chalk.yellow(`${result[1]} passed with warnings`) + ", " + chalk.red(`${result[2]} missing requirements`) + ` (TOTAL: ${projects.length})`);
+}
+module.exports.hasRequirements = hasRequirements;
+module.exports.requirementMessages = requirementMessages;
+module.exports.showRequirements = showRequirements;

+ 0 - 0
fetch-scripts/check-videos.js


+ 35 - 105
fetch-scripts/fetch-projects.js

@@ -2,6 +2,7 @@ var fs = require('fs')
 const sharp = require('sharp');
 
 var utilities = require('./utilities');
+var requirements = require('./check-requirements');
 
 const chalk = require('chalk');
 const logSymbols = require('log-symbols');
@@ -10,82 +11,32 @@ const YAML = require('json-to-pretty-yaml');
 const TurndownService = require('turndown');
 var turndownService = new TurndownService()
 
-var source = "/Users/james/codex/projects"
-var project_directories = utilities.getDirectories(source);
-var projects = []
-
-// Load Files into JSON object
-project_directories.forEach(project => {
-    try {
-        projects.push(JSON.parse(fs.readFileSync(`${source}/${project}/project.json`)));
-    } catch(err){}
-});
-
-var hasRequirements = function(project){
-    var requirements = {
-        is_public : project.visibility == "private" || project.visibility == undefined,
-        has_thumbnail : utilities.fileExists( `${source}/${project.permalink}/${project.cover_image}`),
-        has_hero_img : utilities.fileExists(`${source}/${project.permalink}/${project.hero_image}`),
-        has_description : project.description != "" && project.description != undefined,
-        has_text : project.text != "" && project.text != undefined,
-        has_videos : countVideos(project) > 0,
-        has_screenshots : countScreenshots(project) > 0
-    }
-    var pass = ''
-    if(!requirements.is_public) pass = 'no'
-    else if(!requirements.has_thumbnail) pass = 'no'
-    else if(!requirements.has_description) pass = 'no'
-    else if(!requirements.has_hero_img && !requirements.has_videos) pass = 'no'
-    else if(!requirements.has_text) pass = 'some'
-    else if(!requirements.has_videos && !requirements.has_screenshots) pass = 'some'
-    else pass = 'all';
-    requirements.pass = pass;
-    return requirements;
-}
-
-var requirementMessages = function(project, requirements){
-    var warning_thumbnail =   chalk.red(`  - Missing the thumbnail image`);
-    var warning_hero_img =    chalk.red(`  - Missing hero image or video`);
-    var warning_description = chalk.red(`  - Missing description`);
-    var warning_text =        chalk.yellow(`  - Missing long text description`);
-    var warning_screenshots = chalk.yellow(`  - Missing screenshots`);
-    if(global.isVerbose){
-        if(!requirements.has_thumbnail) console.log(warning_thumbnail);
-        if(!requirements.has_description) console.log(warning_description);
-        if(!requirements.has_hero_img && !requirements.has_videos) console.log(warning_hero_img);
-        if(!requirements.has_text) console.log(warning_text);
-        if(!requirements.has_videos && !requirements.has_screenshots) console.log(warning_screenshots);
-    }
-}
-
-var countVideos = function(project){
-    if(project.videos != undefined){
-        return project.videos.length;
-    } else {
-        return 0;
-    }
-}
-
-var countScreenshots = function(project){
-    if(project.screenshots != undefined){
-        return project.screenshots.length;
-    } else {
-        return 0;
-    }
+var list_projects = function(){
+    var project_directories = utilities.getDirectories(global.source);
+    var projects = []
+    
+    // Load Files into JSON object
+    project_directories.forEach(project => {
+        try {
+            projects.push(JSON.parse(fs.readFileSync(`${global.source}/${project}/project.json`)));
+        } catch(err){}
+    });
+    return projects;
 }
 
-var createProject = function(project){
-    var requirements = hasRequirements(project);
+var createProject = async function(project){
+    var project_requirements = await requirements.hasRequirements(project);
     //console.log(`${project.title} ${hasRequirements}`)
-    if(requirements.pass == 'no'){
+    if(project_requirements.pass == 'no'){
+        result[2] += 1;
         console.log(logSymbols.error, `Error creating project \'${chalk.bold(project.permalink)}\'`);
-        requirementMessages(project, requirements);
+        requirements.requirementMessages(project, project_requirements);
         return;
     }
     // Create folder
     utilities.createDirectory(`source/_posts/projects/${project.permalink}`)
     // Generate cover
-    var cover_path = `${source}/${project.permalink}/${project.cover_image}`
+    var cover_path = `${global.source}/${project.permalink}/${project.cover_image}`
     var cover_ext = project.cover_image.split(".")[1];
     var cover_destination = `source/_posts/projects/${project.permalink}/cover.jpg`
     sharp(cover_path).resize(1000, 625).toFile(cover_destination);
@@ -96,7 +47,7 @@ var createProject = function(project){
     // Copy Hero
     var hero_path, hero_ext, hero_destination;
     if(project.hero_image != undefined){
-        hero_path = `${source}/${project.permalink}/${project.hero_image}`
+        hero_path = `${global.source}/${project.permalink}/${project.hero_image}`
         hero_ext = project.hero_image.split(".")[1];
         hero_destination = `source/_posts/projects/${project.permalink}/hero.${hero_ext}`
         utilities.copyFile(hero_path, hero_destination);
@@ -108,7 +59,7 @@ var createProject = function(project){
         if(project.screenshots.length > 0) {
             for (let i = 0; i < project.screenshots.length; i++) {
                 var screenshot = project.screenshots[i];
-                screenshot_path = `${source}/${project.permalink}/${screenshot.url}`
+                screenshot_path = `${global.source}/${project.permalink}/${screenshot.url}`
                 screenshot_ext = project.hero_image.split(".")[1];
                 screenshot_destination = `source/_posts/projects/${project.permalink}/screenshot-${i}.${screenshot_ext}`
                 utilities.copyFile(screenshot_path, screenshot_destination);
@@ -153,11 +104,13 @@ var createProject = function(project){
     var project_file_path = `source/_posts/projects/${project.permalink}.md`
     try {
         fs.writeFileSync(project_file_path, file);
-        if(requirements.pass == 'all') {
+        if(project_requirements.pass == 'all') {
+            result[0] += 1;
             console.log(logSymbols.success, `Created Project \'${chalk.bold(project.permalink)}\'`);
-        } else if(requirements.pass == 'some') {
+        } else if(project_requirements.pass == 'some') {
+            result[1] += 1;
             console.log(logSymbols.warning, `Created Project \'${chalk.bold(project.permalink)}\' with warnings`);
-            requirementMessages(project, requirements);
+            requirements.requirementMessages(project, project_requirements);
         }
         counter += 1;
     } catch (err){
@@ -166,39 +119,16 @@ var createProject = function(project){
     }
 }
 
-var counter = 0;
+var result = [ 0, 0, 0]
 
-module.exports.all = function(){
-    projects.forEach(project => {
-        createProject(project);
-    });
-    console.log(`Copied ${counter}/${projects.length} projects`);
+module.exports.all = async function(){
+    console.log()
+    var projects = list_projects();
+    for (let i = 0; i < projects.length; i++) {
+        await createProject(projects[i]);
+    }
+    console.log()
+    console.log(chalk.green(`${result[0]} created`) + ", " + chalk.yellow(`${result[1]} created with warnings`) + ", " + chalk.red(`${result[2]} missing requirements`) + ` (TOTAL: ${projects.length})`);
 }
 
-module.exports.showRequirements = function(query){
-    if(query != undefined) query = query.toLowerCase();
-    var result = [ 0, 0, 0]
-    console.log();
-    projects.forEach(project => {
-        if(project.title.toLowerCase() == query || project.permalink == query || query == ""){
-            var requirements = hasRequirements(project);
-            if(requirements.pass == 'all'){
-                result[0] += 1;
-                console.log(logSymbols.success, 
-                    `Project \'${chalk.bold(project.permalink)}\' has all requirements`);
-            } else if (requirements.pass == 'some') {
-                result[1] += 1;
-                console.log(logSymbols.warning, 
-                    `Project \'${chalk.bold(project.permalink)}\' has some requirements`);
-            } else if(requirements.pass == 'no') {
-                result[2] += 1;
-                console.log(logSymbols.error, 
-                    `Project \'${chalk.bold(project.permalink)}\' doesn\'t have necessary requirements`);
-            }
-            requirementMessages(project, requirements);
-        }
-    });
-    console.log();
-    if(query == "")
-        console.log(chalk.green(`${result[0]} passed`) + ", " + chalk.yellow(`${result[1]} passed with warnings`) + ", " + chalk.red(`${result[2]} missing requirements`));
-}
+module.exports.list_projects = list_projects;

+ 25 - 0
fetch-scripts/utilities.js

@@ -1,4 +1,5 @@
 var fs = require('fs')
+const request = require('request');
 const chalk = require('chalk');
 const logSymbols = require('log-symbols');
 
@@ -19,6 +20,19 @@ module.exports.copyFile = function(original_path, destination_path){
     }
 }
 
+function vimeoCheck(url) {
+    return new Promise((resolve, reject) => {
+        request(`https://vimeo.com/api/oembed.json?url=${url}`, (error, response, body) => {
+            if (error) reject(error);
+            if (response.statusCode == 200) {
+                resolve(true)
+            } else if (response.statusCode == 404) {
+                resolve(false)
+            }
+        });
+    });
+}
+
 module.exports.getDirectories = function(source) {
     return fs.readdirSync(source, { withFileTypes: true })
         .filter(item => item.isDirectory())
@@ -34,4 +48,15 @@ module.exports.createDirectory = function(dir){
     if (!fs.existsSync(dir)){
         fs.mkdirSync(dir);
     }
+}
+
+module.exports.checkVideo = async function checkVideo(url) {
+    try {
+        if(url.includes("vimeo")){
+            return await vimeoCheck(url)
+        }
+    } catch (error) {
+        console.error('ERROR:');
+        console.error(error);
+    }
 }

+ 3 - 3
package-lock.json

@@ -809,9 +809,9 @@
       "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
     },
     "fast-deep-equal": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
-      "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
     },
     "fast-json-stable-stringify": {
       "version": "2.1.0",

+ 1 - 0
package.json

@@ -28,6 +28,7 @@
     "markdown-yaml-metadata-parser": "^2.0.5",
     "minipass": "2.7.0",
     "node-time-ago": "^1.0.0",
+    "request": "^2.88.2",
     "sharp": "^0.23.0",
     "turndown": "^6.0.0"
   }