Skip to content
This repository has been archived by the owner on Dec 3, 2023. It is now read-only.

Commit

Permalink
allow for external bin but keep details internally
Browse files Browse the repository at this point in the history
  • Loading branch information
przemyslawpluta committed Mar 10, 2016
1 parent 1817160 commit f35daab
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 21 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# youtube-dl

[![Build Status](https://secure.travis-ci.org/fent/node-youtube-dl.png)](http://travis-ci.org/fent/node-youtube-dl) [![npm version](https://badge.fury.io/js/youtube-dl.svg)](https://badge.fury.io/js/youtube-dl) [![Dependency Status](https://gemnasium.com/fent/node-youtube-dl.png)](https://gemnasium.com/fent/node-youtube-dl)

Download videos from youtube in node.js using [youtube-dl](http://rg3.github.com/youtube-dl/).

I also made a [pure Javascript youtube downloading module](https://github.com/fent/node-ytdl). The reason I'm maintaining this one is because it supports a lot more video sites besides youtube.
Expand Down
25 changes: 10 additions & 15 deletions lib/downloader.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,12 @@ var fs = require('fs');
var path = require('path');
var mkdirp = require('mkdirp');
var request = require('request');
var pkg = require('../package');
var pathEx = require('path-extra');

// First, look for the download link.
/*jshint maxlen:false */
var dir, filePath, isWin;
var dataPath = pathEx.datadir(pkg.name);
var defaultBin = path.join(__dirname, '..', 'bin');
var defaultPath = path.join(defaultBin, 'details');
var regexp = /https:\/\/yt-dl\.org\/downloads\/(\d{4}\.\d\d\.\d\d(\.\d)?)\/youtube-dl/;
var url = 'https://rg3.github.io/youtube-dl/download.html';

Expand All @@ -35,17 +34,12 @@ function download(link, callback) {
function createBase(binDir) {
'use strict';
isWin = (process.platform === 'win32' || process.env.NODE_PLATFORM === 'windows') ? true : false;
dir = (binDir) ? binDir : path.join(__dirname, '..', 'bin');
dir = (binDir) ? binDir : defaultBin;
mkdirp.sync(dir, {mode: 484});
mkdirp.sync(dataPath, {mode: 484});
if (binDir) { mkdirp.sync(defaultBin, {mode: 484}); }
filePath = path.join(dir, 'youtube-dl' + ((isWin) ? '.exe' : ''));
}

function savePath() {
'use strict';
fs.writeFileSync(path.join(dataPath, 'bin'), filePath, 'utf8');
}

function downloader(binDir, callback) {

'use strict';
Expand All @@ -66,18 +60,19 @@ function downloader(binDir, callback) {

// Check if there is a new version available.
var newVersion = m[1];
var verpath = path.join(dir, 'version');
var oldVersion = fs.existsSync(verpath) && fs.readFileSync(verpath, 'utf8');

if (newVersion === oldVersion && fs.existsSync(dataPath + '/bin')) { return callback(null, 'Already up to date ' + newVersion); }
var details = fs.existsSync(defaultPath) && fs.readFileSync(defaultPath, 'utf8');

if (details) { details = JSON.parse(details); }

if (newVersion === details.version && fs.existsSync(details.path)) { return callback(null, 'Already up to date ' + newVersion); }

var link = m[0];
if (isWin) { link += '.exe'; }

download(link, function error(err) {
if (err) { return callback(err); }
fs.writeFileSync(verpath, newVersion);
savePath();
fs.writeFileSync(defaultPath, JSON.stringify({version: newVersion, path: filePath}), 'utf8');
callback(null, 'Downloaded youtube-dl ' + newVersion);
});

Expand Down
11 changes: 5 additions & 6 deletions lib/youtube-dl.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,14 @@ var http = require('http');
var streamify = require('streamify');
var request = require('request');
var util = require('./util');
var pathEx = require('path-extra');
var pkg = require('../package');

var ytdlBinary = fs.readFileSync(pathEx.datadir(pkg.name) + '/bin').toString();
var details = path.join(__dirname, '..', 'bin/details'), ytdlBinary;

if (fs.existsSync(details)) { ytdlBinary = JSON.parse(fs.readFileSync(details)).path; }

// Check that youtube-dl file exists.
var exists = fs.existsSync(ytdlBinary);
if (!exists) {
console.log('ERROR: unable to locate youtube-dl in ' + path.dirname(ytdlBinary));
if (!fs.existsSync(ytdlBinary)) {
console.log('ERROR: unable to locate youtube-dl details in ' + path.dirname(ytdlBinary));
process.exit(1);
}

Expand Down

0 comments on commit f35daab

Please sign in to comment.