Skip to content

Latest commit

 

History

History
360 lines (277 loc) · 7.83 KB

README.md

File metadata and controls

360 lines (277 loc) · 7.83 KB

node-transmission

transmission-daemon wrapper script written in node.js

Install

npm install transmission

How to Use

Transmission = require 'transmission'
transmission = new Transmission
  host: 'localhost'  # default 'localhost'
  port: 9091         # default 9091
  username: 'username'   # default blank
  password: 'password'   # default blank
  ssl: true   # default false use https
  url: '/my/other/url'   # default '/transmission/rpc'

Definition

Status

RPC returned torrent status with integer 0-7.

Using transmission.status for inspect status.

transmission.status =
  STOPPED       : 0  # Torrent is stopped
  CHECK_WAIT    : 1  # Queued to check files
  CHECK         : 2  # Checking files
  DOWNLOAD_WAIT : 3  # Queued to download
  DOWNLOAD      : 4  # Downloading
  SEED_WAIT     : 5  # Queued to seed
  SEED          : 6  # Seeding
  ISOLATED      : 7  # Torrent can't find peers

Methods

transmission.set([ids], callback)

Set torrent's properties.

transmission.set(id, options, function(err, arg){});

You must provide one or more ids. According to the rpc-spec, transmission will not respond a success argument. Only error.

transmission.addFile(filePath, callback)

Add torrents to transmission-daemon.

transmission.addFile('path', function(err, arg){});

OR

The options object would be the arguments passed to transmission. If you want to set the download directory of the torrent you would pass in "download-dir":"/my/path"

transmission.addFile('path', options, function(err, arg){});

transmission.addUrl(url, callback)

Add torrents to transmission-daemon.

transmission.addUrl('url', function(err, arg){});

OR

The options object would be the arguments passed to transmission. If you want to set the download directory of the torrent you would pass in "download-dir":"/my/path"

transmission.addUrl('url', options, function(err, arg){});

transmission.remove(ids, del, callback)

Remove torrents.

Remove also local data when del is true.

transmission.remove(ids, function(err, arg){});

transmission.active(callback)

List of active torrents. Callback is not needed and will fire the active event.

transmission.active(function(err, arg){});

transmission.get([ids], callback)

Get torrents info that optional ids.

If omit ids, get all torrents.

transmission.get(ids, function(err, arg){
  if err
    console.error err
  else{
    for torrent in arg.torrents
      console.log arg.torrents
   }
});

# Get all torrents and remove it if status is stopped.
transmission.get(function(err, arg){
  if err
    console.error err
  else{
    for torrent in arg.torrents
      if torrent.status is transmission.status.STOPPED
        transmission.remove ([torrent.id], function (err){
          console.error err if err
      	});
  }
});

transmission.waitForState(id, targetState, callback)

Polls the server and waits for the target state. targetState = ['STOPPED', 'CHECK_WAIT', 'CHECK', 'DOWNLOAD_WAIT', 'DOWNLOAD', 'SEED_WAIT', 'SEED', 'ISOLATED'];

transmission.waitForState(id, targetState, function(err, arg){});

transmission.stop(ids, callback)

Stop working torrents.

transmission.stop(ids, function(err, arg){});

transmission.start(ids, callback)

Start working torrents.

transmission.start(ids, function(err, arg){});

transmission.startNow(ids, callback)

Bypass the download queue, start working torrents immediately.

transmission.startNow(ids, function(err, arg){});

transmission.verify(ids, callback)

Verify torrent data.

transmission.verify(ids,function(err, arg){});

transmission.reannounce(ids, callback)

Reannounce to the tracker, ask for more peers.

transmission.reannounce(ids, function(err, arg){});

transmission.session(callback)

Get client session infomation.

transmission.session (function(err, arg){});

transmission.session({}, callback)

Set session infomation.

transmission.session({'download-dir':'/my/path'}, function(err, arg){});

transmission.sessionStats(callback)

Get client session stats.

transmission.sessionStats(function(err, arg){});

transmission.freeSpace(path, callback)

Get free space available on the server for the specified directory.

transmission.freeSpace(path, function(err, arg){});

All together.

'use strict';

var Transmission = require('transmission');
var transmission = new Transmission({
	port: 9091,			// DEFAULT : 9091
	host: 192.168.1.34,			// DEAFULT : 127.0.0.1
	username: 'username',	// DEFAULT : BLANK
	password: 'password'	// DEFAULT : BLANK
});

// Get details of all torrents currently queued in transmission app
function getTransmissionStats(){
	transmission.sessionStats(function(err, result){
		if(err){
			console.log(err);
		} else {
			console.log(result);
		}
	});
}

// Add a torrent by passing a URL to .torrent file or a magnet link
function addTorrent(url){
	transmission.addUrl(url, {
	    "download-dir" : "~/transmission/torrents"
	}, function(err, result) {
	    if (err) {
	        return console.log(err);
	    }
	    var id = result.id;
	    console.log('Just added a new torrent.');
	    console.log('Torrent ID: ' + id);
	});
}

// Get various stats about a torrent in the queue
function getTorrentDetails(id) {
    transmission.get(id, function(err, result) {
        if (err) {
            throw err;
        }
        if(result.torrents.length > 0){
        	// console.log(result.torrents[0]);			// Gets all details
        	console.log("Name = "+ result.torrents[0].name);
        	console.log("Download Rate = "+ result.torrents[0].rateDownload/1000);
        	console.log("Upload Rate = "+ result.torrents[0].rateUpload/1000);
        	console.log("Completed = "+ result.torrents[0].percentDone*100);
        	console.log("ETA = "+ result.torrents[0].eta/3600);
        	console.log("Status = "+ getStatusType(result.torrents[0].status));
        }
    });
}

function deleteTorrent(id){
	transmission.remove(id, true, function(err, result){
		if (err){
			console.log(err);
		} else {
			transmission.get(id, function(err, result) {
		       //err no torrent found...
		    });
		}
	});
}

// To start a paused / stopped torrent which is still in queue
function startTorrent(id){
	transmission.start(id, function(err, result){});
}

// To get list of all torrents currently in queue (downloading + paused)
// NOTE : This may return null if all torrents are in paused state 
function getAllActiveTorrents(){
	transmission.active(function(err, result){
	if (err){
		console.log(err);
	}
	else {
		for (var i=0; i< result.torrents.length; i++){
			console.log(result.torrents[i].id);
			console.log(result.torrents[i].name);
		}
	}
	});
}

// Pause / Stop a torrent
function stopTorrent(id){
	transmission.stop(id, function(err, result){});
}

// Pause / Stop all torrent
function stopAllActiveTorrents(){
	transmission.active(function(err, result){
	if (err){
		console.log(err);
	}
	else {
		for (var i=0; i< result.torrents.length; i++){
			stopTorrents(result.torrents[i].id);
		}
	}
	});
}

// Remove a torrent from download queue
// NOTE : This does not trash torrent data i.e. does not remove it from disk
function removeTorrent(id) {
    transmission.remove(id, function(err) {
        if (err) {
            throw err;
        }
        console.log('torrent was removed');
    });
}

// Get torrent state
function getStatusType(type){
	return transmission.statusArray[type]
	if(type === 0){
		return 'STOPPED';
	} else if(type === 1){
		return 'CHECK_WAIT';
	} else if(type === 2){
		return 'CHECK';
	} else if(type === 3){
		return 'DOWNLOAD_WAIT';
	} else if(type === 4){
		return 'DOWNLOAD';
	} else if(type === 5){
		return 'SEED_WAIT';
	} else if(type === 6){
		return 'SEED';
	} else if(type === 7){
		return 'ISOLATED';
	}
}