From 1ef3e208162b9064723e0ddf6f670758dae3d870 Mon Sep 17 00:00:00 2001 From: Lee Treveil Date: Mon, 18 Jan 2016 17:35:58 +0000 Subject: [PATCH] WIP --- lib/index.js | 27 +-- lib/ogg.js | 1 + test/test-audio-frame-header-bug.js | 10 +- test/test-id3v2-duration-allframes.js | 5 + test/test-ogg.js | 232 +++++++++++++------------- test/test-regress-GH-56.js | 7 +- 6 files changed, 145 insertions(+), 137 deletions(-) diff --git a/lib/index.js b/lib/index.js index c5de4fa..ba88b32 100644 --- a/lib/index.js +++ b/lib/index.js @@ -3,35 +3,18 @@ var events = require('events') var common = require('./common') var strtok = require('strtok2') var through = require('through') -var fs = require('fs') -module.exports = function (stream, opts, callback) { +module.exports = function (stream, opts, callback, fileSizeCallback) { + console.log(opts, callback, fileSizeCallback) if (typeof opts === 'function') { + var tmp = callback callback = opts + fileSizeCallback = tmp opts = {} } var emitter = new events.EventEmitter() - var fsize = function (cb) { - if (opts.fileSize) { - process.nextTick(function () { - cb(opts.fileSize) - }) - } else if (stream.hasOwnProperty('path')) { - fs.stat(stream.path, function (err, stats) { - if (err) throw err - cb(stats.size) - }) - } else if (stream.hasOwnProperty('fileSize')) { - stream.fileSize(cb) - } else if (opts.duration) { - emitter.emit( - 'done', - new Error('for non file streams, specify the size of the stream with a fileSize option')) - } - } - // pipe to an internal stream so we aren't messing // with the stream passed to us by our users var istream = stream.pipe(through(null, null, {autoDestroy: false})) @@ -63,7 +46,7 @@ module.exports = function (stream, opts, callback) { emitter.emit(event, value) } buildAliases(alias, event, value, aliased) - }, done, opts.hasOwnProperty('duration'), fsize) + }, done, fileSizeCallback, fileSizeCallback) // re-emitting the first data chunk so the // parser picks the stream up from the start istream.emit('data', result) diff --git a/lib/ogg.js b/lib/ogg.js index ef69ffb..34111ac 100644 --- a/lib/ogg.js +++ b/lib/ogg.js @@ -42,6 +42,7 @@ module.exports = function (stream, callback, done, readDuration) { check_sum: strtok.UINT32_LE.get(v, 22), segments: v[26] } + console.log(header) if (header.type !== 'OggS') { return done(new Error('expected ogg header but was not found')) } diff --git a/test/test-audio-frame-header-bug.js b/test/test-audio-frame-header-bug.js index b965039..18db33b 100644 --- a/test/test-audio-frame-header-bug.js +++ b/test/test-audio-frame-header-bug.js @@ -4,15 +4,21 @@ var fs = require('fs') var test = require('prova') test('audio-frame-header-bug', function (t) { - t.plan(2) + t.plan(3) var sample = (process.browser) ? new window.Blob([fs.readFileSync(__dirname + '/samples/audio-frame-header-bug.mp3')]) : fs.createReadStream(path.join(__dirname, '/samples/audio-frame-header-bug.mp3')) - mm(sample, { duration: true }, function (err, result) { + mm(sample, function (err, result) { t.error(err) t.strictEqual(result.duration, 200.59591666666665) t.end() + }, function (cb) { + fs.stat(sample.path, function (err, stats) { + t.error(err) + cb(stats.size) + }) }) + }) diff --git a/test/test-id3v2-duration-allframes.js b/test/test-id3v2-duration-allframes.js index bd5145b..e295f98 100644 --- a/test/test-id3v2-duration-allframes.js +++ b/test/test-id3v2-duration-allframes.js @@ -24,6 +24,11 @@ test('id3v2-duration-allframes', function (t) { picture: {}, duration: 1.48928125 }) t.end() + }, function (cb) { + fs.stat(sample.path, function (err, stats) { + if (err) throw err + cb(stats.size) + }) }) .on('duration', function (result) { t.strictEqual(result, 1.48928125, 'duration') diff --git a/test/test-ogg.js b/test/test-ogg.js index 14033d8..bb0994e 100644 --- a/test/test-ogg.js +++ b/test/test-ogg.js @@ -8,119 +8,127 @@ test('ogg', function (t) { var comCounter = 0 var genCounter = 0 - var sample = (process.browser) ? + var readable = (process.browser) ? new window.Blob([fs.readFileSync(__dirname + '/samples/oggy.ogg')]) : fs.createReadStream(path.join(__dirname, '/samples/oggy.ogg')) - mm(sample, { duration: true }, function (err, result) { - t.error(err) - t.strictEqual(result.title, 'In Bloom', 'title') - t.strictEqual(result.artist[0], 'Nirvana', 'artist') - t.strictEqual(result.albumartist[0], 'Nirvana', 'albumartist') - t.strictEqual(result.album, 'Nevermind', 'album') - t.strictEqual(result.year, '1991', 'year') - t.strictEqual(result.track.no, 1, 'track no') - t.strictEqual(result.track.of, 12, 'track of') - t.strictEqual(result.disk.no, 1, 'disk no') - t.strictEqual(result.disk.of, 0, 'disk of') - t.strictEqual(result.genre[0], 'Grunge', 'genre 0') - t.strictEqual(result.genre[1], 'Alternative', 'genre 1') - t.strictEqual(result.picture[0].format, 'jpg', 'picture format') - t.strictEqual(result.picture[0].data.length, 30966, 'picture length') - t.strictEqual(result.duration, 0, 'metadata duration') - t.end() - }) - .on('duration', function (result) { - t.strictEqual(result, 0, 'duration') - }) - // aliased tests - .on('title', function (result) { - t.strictEqual(result, 'In Bloom', 'aliased title') - }) - .on('artist', function (result) { - t.strictEqual(result[0], 'Nirvana', 'aliased artist') - }) - .on('albumartist', function (result) { - t.strictEqual(result[0], 'Nirvana', 'aliased albumartist') - }) - .on('album', function (result) { - t.strictEqual(result, 'Nevermind', 'aliased album') - }) - .on('year', function (result) { - t.strictEqual(result, '1991', 'aliased year') - }) - .on('track', function (result) { - t.strictEqual(result.no, 1, 'aliased track no') - t.strictEqual(result.of, 12, 'aliased track of') - }) - .on('disk', function (result) { - t.strictEqual(result.no, 1, 'aliased disk no') - t.strictEqual(result.of, 0, 'aliased disk of') - }) - .on('genre', function (result) { - t.strictEqual(result[0], 'Grunge', 'aliased genre 0') - t.strictEqual(result[1], 'Alternative', 'aliased genre 1') - }) - .on('picture', function (result) { - t.strictEqual(result[0].format, 'jpg', 'aliased picture format') - t.strictEqual(result[0].data.length, 30966, 'aliased picture length') - }) - // raw tests - .on('TRACKTOTAL', function (result) { - t.strictEqual(result, '12', 'raw TRACKTOTAL') - }) - .on('ALBUM', function (result) { - t.strictEqual(result, 'Nevermind', 'raw ALBUM') - }) - .on('ARTIST', function (result) { - t.strictEqual(result, 'Nirvana', 'raw ARTIST') - }) - .on('COMMENT', function (result) { - switch (comCounter) { - case 0: - t.strictEqual(result, "Nirvana's Greatest Album", 'raw COMMENT 0') - break - case 1: - t.strictEqual(result, 'And their greatest song', 'raw COMMENT 1') - break - } - comCounter++ - }) - .on('GENRE', function (result) { - switch (genCounter) { - case 0: - t.strictEqual(result, 'Grunge', 'raw GENRE 0') - break - case 1: - t.strictEqual(result, 'Alternative', 'raw GENRE 1') - break - } - genCounter++ - }) - .on('TITLE', function (result) { - t.strictEqual(result, 'In Bloom', 'raw TITLE') - }) - .on('ALBUMARTIST', function (result) { - t.strictEqual(result, 'Nirvana', 'raw ALBUMARTIST') - }) - .on('DISCNUMBER', function (result) { - t.strictEqual(result, '1', 'raw DISCNUMBER') - }) - .on('DATE', function (result) { - t.strictEqual(result, '1991', 'raw DATE') - }) - .on('TRACKNUMBER', function (result) { - t.strictEqual(result, '1', 'raw TRACKNUMBER') - }) - .on('METADATA_BLOCK_PICTURE', function (result) { - t.strictEqual(result.format, 'image/jpeg', 'raw METADATA_BLOCK_PICTURE format') - t.strictEqual(result.type, 'Cover (back)', 'raw METADATA_BLOCK_PICTURE type') - t.strictEqual(result.description, 'little willy', 'raw METADATA_BLOCK_PICTURE description') - // test exact contents too - t.strictEqual(result.data.length, 30966, 'raw METADATA_BLOCK_PICTURE length') - t.strictEqual(result.data[0], 255, 'raw METADATA_BLOCK_PICTURE data 0') - t.strictEqual(result.data[1], 216, 'raw METADATA_BLOCK_PICTURE data 1') - t.strictEqual(result.data[result.data.length - 1], 217, 'raw METADATA_BLOCK_PICTURE data -1') - t.strictEqual(result.data[result.data.length - 2], 255, 'raw METADATA_BLOCK_PICTURE data -2') - }) + + readable.on('readable', function() { + var chunk; + while (null !== (chunk = readable.read(4))) { + console.log('got %d bytes of data', chunk.length); + } + }); + +// mm(sample, { duration: true }, function (err, result) { +// t.error(err) +// t.strictEqual(result.title, 'In Bloom', 'title') +// t.strictEqual(result.artist[0], 'Nirvana', 'artist') +// t.strictEqual(result.albumartist[0], 'Nirvana', 'albumartist') +// t.strictEqual(result.album, 'Nevermind', 'album') +// t.strictEqual(result.year, '1991', 'year') +// t.strictEqual(result.track.no, 1, 'track no') +// t.strictEqual(result.track.of, 12, 'track of') +// t.strictEqual(result.disk.no, 1, 'disk no') +// t.strictEqual(result.disk.of, 0, 'disk of') +// t.strictEqual(result.genre[0], 'Grunge', 'genre 0') +// t.strictEqual(result.genre[1], 'Alternative', 'genre 1') +// t.strictEqual(result.picture[0].format, 'jpg', 'picture format') +// t.strictEqual(result.picture[0].data.length, 30966, 'picture length') +// t.strictEqual(result.duration, 0, 'metadata duration') +// t.end() +// }) +// .on('duration', function (result) { +// t.strictEqual(result, 0, 'duration') +// }) +// // aliased tests +// .on('title', function (result) { +// t.strictEqual(result, 'In Bloom', 'aliased title') +// }) +// .on('artist', function (result) { +// t.strictEqual(result[0], 'Nirvana', 'aliased artist') +// }) +// .on('albumartist', function (result) { +// t.strictEqual(result[0], 'Nirvana', 'aliased albumartist') +// }) +// .on('album', function (result) { +// t.strictEqual(result, 'Nevermind', 'aliased album') +// }) +// .on('year', function (result) { +// t.strictEqual(result, '1991', 'aliased year') +// }) +// .on('track', function (result) { +// t.strictEqual(result.no, 1, 'aliased track no') +// t.strictEqual(result.of, 12, 'aliased track of') +// }) +// .on('disk', function (result) { +// t.strictEqual(result.no, 1, 'aliased disk no') +// t.strictEqual(result.of, 0, 'aliased disk of') +// }) +// .on('genre', function (result) { +// t.strictEqual(result[0], 'Grunge', 'aliased genre 0') +// t.strictEqual(result[1], 'Alternative', 'aliased genre 1') +// }) +// .on('picture', function (result) { +// t.strictEqual(result[0].format, 'jpg', 'aliased picture format') +// t.strictEqual(result[0].data.length, 30966, 'aliased picture length') +// }) +// // raw tests +// .on('TRACKTOTAL', function (result) { +// t.strictEqual(result, '12', 'raw TRACKTOTAL') +// }) +// .on('ALBUM', function (result) { +// t.strictEqual(result, 'Nevermind', 'raw ALBUM') +// }) +// .on('ARTIST', function (result) { +// t.strictEqual(result, 'Nirvana', 'raw ARTIST') +// }) +// .on('COMMENT', function (result) { +// switch (comCounter) { +// case 0: +// t.strictEqual(result, "Nirvana's Greatest Album", 'raw COMMENT 0') +// break +// case 1: +// t.strictEqual(result, 'And their greatest song', 'raw COMMENT 1') +// break +// } +// comCounter++ +// }) +// .on('GENRE', function (result) { +// switch (genCounter) { +// case 0: +// t.strictEqual(result, 'Grunge', 'raw GENRE 0') +// break +// case 1: +// t.strictEqual(result, 'Alternative', 'raw GENRE 1') +// break +// } +// genCounter++ +// }) +// .on('TITLE', function (result) { +// t.strictEqual(result, 'In Bloom', 'raw TITLE') +// }) +// .on('ALBUMARTIST', function (result) { +// t.strictEqual(result, 'Nirvana', 'raw ALBUMARTIST') +// }) +// .on('DISCNUMBER', function (result) { +// t.strictEqual(result, '1', 'raw DISCNUMBER') +// }) +// .on('DATE', function (result) { +// t.strictEqual(result, '1991', 'raw DATE') +// }) +// .on('TRACKNUMBER', function (result) { +// t.strictEqual(result, '1', 'raw TRACKNUMBER') +// }) +// .on('METADATA_BLOCK_PICTURE', function (result) { +// t.strictEqual(result.format, 'image/jpeg', 'raw METADATA_BLOCK_PICTURE format') +// t.strictEqual(result.type, 'Cover (back)', 'raw METADATA_BLOCK_PICTURE type') +// t.strictEqual(result.description, 'little willy', 'raw METADATA_BLOCK_PICTURE description') +// // test exact contents too +// t.strictEqual(result.data.length, 30966, 'raw METADATA_BLOCK_PICTURE length') +// t.strictEqual(result.data[0], 255, 'raw METADATA_BLOCK_PICTURE data 0') +// t.strictEqual(result.data[1], 216, 'raw METADATA_BLOCK_PICTURE data 1') +// t.strictEqual(result.data[result.data.length - 1], 217, 'raw METADATA_BLOCK_PICTURE data -1') +// t.strictEqual(result.data[result.data.length - 2], 255, 'raw METADATA_BLOCK_PICTURE data -2') +// }) }) diff --git a/test/test-regress-GH-56.js b/test/test-regress-GH-56.js index bb44a80..fc0ee06 100644 --- a/test/test-regress-GH-56.js +++ b/test/test-regress-GH-56.js @@ -4,7 +4,7 @@ var id3 = require('..') var test = require('prova') test('mp3 cbr calculation', function (t) { - t.plan(2) + t.plan(3) var sample = (process.browser) ? new window.Blob([fs.readFileSync(__dirname + '/samples/regress-GH-56.mp3')]) @@ -14,5 +14,10 @@ test('mp3 cbr calculation', function (t) { t.error(err) t.strictEqual(result.duration, 373.329375, 'duration') t.end() + }, function (cb) { + fs.stat(sample.path, function (err, stats) { + t.error(err) + cb(stats.size) + }) }) })