Guest User

mp3sorter

a guest
Mar 17th, 2013
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. '''
  2. mp3sorter.coffee - Sorts mp3 files into directories as dir/artist/album/title.mp3
  3. Original written in C by Speed
  4. by justin_
  5. Run the program twice if there are sync issues.
  6. '''
  7. fs = require 'fs'
  8.  
  9. # Trims the junk.
  10. trimData = (data) ->
  11.     data[0..2] = []
  12.  
  13. String::removeJunk = ->
  14.     this.replace /\u0000/gi, ''
  15.    
  16. # Parses the MP3s and sorts the songs.
  17. sort = (filePath, oldDir, destDir) ->
  18.     fs.readFile filePath, (err, data) ->
  19.         parseData = data[(data.length - 128)..]
  20.         change = 28
  21.         offset = change
  22.         trimData parseData
  23.         title = parseData[0..offset].toString('utf-8', 0).removeJunk()
  24.         artist = parseData[offset..(offset + change)].toString('utf-8', 0).removeJunk()
  25.         offset += change
  26.         album = parseData[offset..(offset + change)].toString('utf-8', 0).removeJunk()
  27.         console.log "Title: #{title}\tArtist: #{artist}\tAlbum: #{album}"
  28.        
  29.         baseDir = "#{__dirname}/#{destDir}"
  30.         fs.exists baseDir, (exists) ->
  31.             if not exists
  32.                 fs.mkdir baseDir, (err) ->
  33.         fs.exists "#{baseDir}/#{artist}", (exists) ->
  34.             if not exists
  35.                 fs.mkdir "#{baseDir}/#{artist}", (err) ->
  36.         fs.exists "#{baseDir}/#{artist}/#{album}", (exists) ->
  37.             if not exists
  38.                 fs.mkdir "#{baseDir}/#{artist}/#{album}", (err) ->
  39.         fs.writeFile "#{baseDir}/#{artist}/#{album}/#{title}.mp3", data, (err) ->
  40.             console.log err
  41.  
  42. argc = process.argv.length - 2
  43. argv = process.argv[2..]
  44.  
  45. if argc is 0
  46.     console.log 'Usage: mp3sorter  in-dir [out-dir]'
  47. else if argc >= 1
  48.     dir = if argc is 1 then __dirname else argv[argc - 1]
  49.     console.log "Output directory: #{dir}"
  50.     path = "#{__dirname}/#{argv[0]}"
  51.     fs.lstat "#{path}", (err, stats) ->
  52.         if stats.isDirectory()
  53.             fs.readdir path, (err, files) ->
  54.                 for item in files
  55.                     if /\.mp3$/.test item
  56.                         console.log "Processing #{item}"
  57.                         sort "#{path}/#{item}", path, dir
  58.         else
  59.             console.log 'nope'
Advertisement
Add Comment
Please, Sign In to add comment