80 lines
2.5 KiB
JavaScript
Executable file
80 lines
2.5 KiB
JavaScript
Executable file
#!/usr/bin/env node
|
|
|
|
require('batteries').extendNative()
|
|
|
|
var fs = require('fs')
|
|
, http = require('http')
|
|
, join = require('path').join
|
|
, notify = require('growl').notify
|
|
, Downloads = join(process.env.HOME, 'Downloads')
|
|
, created = JSON.parse(process.env.WATCH_CREATED)
|
|
, torrents = created.grep(/\.torrent$/i)
|
|
, skipped = []
|
|
, _log = []
|
|
, log = function(s) { s = '>>> ' + s; _log.push(s); console.log(s) }
|
|
, err = function(s) { s = '!!! ' + s; _log.push(s); console.error(s) }
|
|
, writeLog = function() { fs.writeFileSync('/Users/sjs/log/yarrr.log', _log.join('\n')) }
|
|
|
|
process.on('uncaughtException', function(e) {
|
|
err('error: ' + e)
|
|
err('bailing')
|
|
process.exit(1)
|
|
})
|
|
|
|
torrents.forEach(function(torrent, i) {
|
|
log(torrent)
|
|
var path = join(Downloads, torrent)
|
|
try {
|
|
fs.statSync(path)
|
|
}
|
|
catch (e) {
|
|
skipped.push(torrent)
|
|
err(path + ' does not exist, skipping')
|
|
return
|
|
}
|
|
var boundary = '48940923YARRRPIRATE3890457293'
|
|
, torrentData = fs.readFileSync(path, 'binary')
|
|
, torrentSize = torrentData.length
|
|
, data = [ '--' + boundary
|
|
, 'Content-Disposition: form-data; name="torrent_file"; filename="' + torrent + '"'
|
|
, 'Content-Type: application/x-bittorrent'
|
|
, ''
|
|
, torrentData
|
|
, '--' + boundary + '--\r\n'
|
|
].join('\r\n')
|
|
, opts = {
|
|
method: 'POST',
|
|
host: 'h.samhuri.net',
|
|
port: 8080,
|
|
path: '/gui/?action=add-file',
|
|
headers: { 'Authorization': 'Basic YWRtaW46YWRtaW4='
|
|
, 'Content-Type': 'multipart/form-data; boundary=' + boundary
|
|
, 'Content-Length': data.length
|
|
}
|
|
}
|
|
, req = http.request(opts, function(res) {
|
|
var responseData = ''
|
|
res.on('data', function(chunk) { responseData += chunk })
|
|
res.on('end', function() {
|
|
if (res.statusCode === 200 && !('error' in JSON.parse(responseData))) {
|
|
log('rm ' + path)
|
|
fs.unlink(path)
|
|
}
|
|
else {
|
|
err('error ' + res.statusCode)
|
|
err(responseData)
|
|
}
|
|
if (i === torrents.length - 1) {
|
|
var n = torrents.length - skipped.length
|
|
, s = n === 1 ? '' : 's'
|
|
if (n > 0) {
|
|
notify(n + ' torrent' + s + ' → µTorrent')
|
|
}
|
|
//writeLog()
|
|
}
|
|
})
|
|
})
|
|
log('torrent size: ' + torrentSize)
|
|
log('total size: ' + data.length)
|
|
req.end(data, 'binary')
|
|
})
|