| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- var taglib=require('taglib');
- // create table songs (id int not null auto_increment, artist varchar(300), title varchar(300) , album varchar(300), added_on DATE, filename varchar(300) not null, transcoded varchar(300), primary key ( id));
- // ALTER TABLE songs ADD CONSTRAINT constr_fname UNIQUE (filename);
- var connection = require('mysql').createConnection({
- user: 'music',
- password: 'music',
- database: 'music',
- socketPath: '/var/run/mysqld/mysqld.sock'
- });
- connection.connect();
- var validExtensions = [ "mp3","aac","flac","alac","ogg","m4a" ];
- //3289 songs in 37sec
- function endsWith(str, suffix) { return str.indexOf(suffix, str.length - suffix.length) !== -1; }
- function validMusicFile(path){
- for (ext in validExtensions)
- if (endsWith(path, validExtensions[ext]))
- return true;
- return false;
- }
- function tags(path) {
- try {
- var tag = taglib.tagSync(path);
- if(!tag.isEmpty())
- return { 'artist': tag.artist, 'title': tag.title};
- else
- return {'artist': '', 'title': ''};
- } catch (ex) {
- return {'artist': '', 'title': ''};
- }
- }
- var fs = require('fs');
- var path = require('path');
- var walk = function(dir, done) {
- var results = [];
- fs.readdir(dir, function(err, list) {
- if (err) return done(err);
- var pending = list.length;
- if (!pending) return done(null, results);
- list.forEach(function(file) {
- file = path.resolve(dir, file);
- fs.stat(file, function(err, stat) {
- if (stat && stat.isDirectory()) {
- walk(file, function(err, res) {
- results = results.concat(res);
- if (!--pending) done(null, results);
- });
- } else {
- if (validMusicFile(file))
- results.push(file);
- if (!--pending) done(null, results);
- }
- });
- });
- });
- };
- walk("/storage/samba/Music", function(err, results) {
- if (err) throw err;
- var query = 'INSERT INTO songs(filename,artist,title) values ? on duplicate key update artist=artist,title=title';
- var res = [];
- for( r in results) {
- var s = [];
- var meta = tags(results[r]);
- s.push(results[r]);
- s.push(meta.artist);
- s.push(meta.title);
- res.push(s);
- }
- connection.query(query, [res], function(err, result) {
- if (err) throw err;
- connection.end();
- });
- });
|