Advertisement
Guest User

Untitled

a guest
Feb 7th, 2016
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 KB | None | 0 0
  1. var recursive = require('recursive-readdir');
  2. var mongoose = require('mongoose');
  3. var path = require('path');
  4. var mm = require('musicmetadata')
  5. var FileQueue = require('filequeue')
  6. var fq = new FileQueue(1024) // max number of open files. Beyond this limit, EMFILE exception will occur
  7. var Promise = require('promise')
  8.  
  9. var musicSchema = mongoose.Schema({
  10. path : {type : String, required: true},
  11. genre : {type: String, required: true},
  12. img: { data: Buffer, contentType: String }
  13. });
  14.  
  15. var fromToSchema = mongoose.Schema({
  16. from : {type : String, required: true},
  17. to : {type: String, required: true},
  18. number : {type : Number, required: true, default: 0}
  19. })
  20.  
  21. var genreSchema = mongoose.Schema({
  22. genre : {type : String, required: true},
  23. number : {type : Number, required: true, default: 0}
  24. })
  25.  
  26. console.log('Db initializing')
  27. Music = mongoose.model("Music", musicSchema);
  28. FromTo = mongoose.model("FromTo", fromToSchema);
  29. Genre = mongoose.model("Genre", genreSchema);
  30.  
  31. var authExt = ['.mp3', '.ogg'];
  32.  
  33. mongoose.connect("mongodb://localhost/musicalBase", function(){
  34. Music.count(function(err, count)
  35. {
  36. console.log('Number of music files ' + count)
  37. if (count === 0 || ISDEBUG)
  38. {
  39. console.log('db reset')
  40. dbReset();
  41. }
  42. });
  43. });
  44.  
  45. function dbReset()
  46. {
  47. mongoose.connection.db.dropDatabase();
  48.  
  49. recursive('musicFiles', function (err, files) {
  50. if (err)
  51. {
  52. console.log('Error during files reading - ' + err)
  53. return;
  54. }
  55.  
  56. files = files.filter(function(file)
  57. {
  58. var ext = path.extname(file);
  59. return authExt.contains(ext);
  60. })
  61.  
  62. // use of promises in order to be able to check when all the files are processed
  63. var promises = [];
  64. files.forEach(function(file)
  65. {
  66. var p = new Promise(function(resolve, reject)
  67. {
  68. var filePath = file.split('\\').splice(1).join('/');
  69. mm(fq.createReadStream(file), function(err, metadata)
  70. {
  71. var music = new Music
  72. music.path = htmlEncode(filePath)
  73. music.genre = (metadata.genre != null && metadata.genre != '' ? metadata.genre : '(empty)')
  74. if (metadata.picture.length > 0)
  75. {
  76. music.img.data = metadata.picture[0].data
  77. music.img.contentType = 'image/' + metadata.picture[0].format
  78. }
  79.  
  80. music.save(function(err, musicFile)
  81. {
  82. if (err)
  83. {
  84. reject('Error during mongoDb music file save ' + filePath + ' - ' + err);
  85. }
  86. else
  87. {
  88. resolve(filePath)
  89. }
  90. });
  91. });
  92. });
  93. promises.push(p);
  94. });
  95.  
  96. Promise.all(promises).then(function(valeur) {
  97. console.log("Db init completed");
  98. }, function(raison) {
  99. console.log(raison)
  100. });
  101.  
  102. });
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement