TubeLab-App-Android/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/GetMagnet3.java

125 lines
4.3 KiB
Java

package com.frostwire.jlibtorrent.demo;
import com.frostwire.jlibtorrent.AlertListener;
import com.frostwire.jlibtorrent.Priority;
import com.frostwire.jlibtorrent.SessionManager;
import com.frostwire.jlibtorrent.TorrentHandle;
import com.frostwire.jlibtorrent.TorrentInfo;
import com.frostwire.jlibtorrent.alerts.AddTorrentAlert;
import com.frostwire.jlibtorrent.alerts.Alert;
import com.frostwire.jlibtorrent.alerts.StatsAlert;
import java.io.File;
import java.io.FileOutputStream;
import java.sql.Time;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
/**
* To test issue https://github.com/frostwire/frostwire-jlibtorrent/issues/180
*
* @author gubatron
* @author aldenml
*/
public final class GetMagnet3 {
public static void main(String[] args) throws Throwable {
// code taken from
// https://github.com/frostwire/frostwire-jlibtorrent/issues/180#issuecomment-345458935
// author proninyaroslav
final String magnet = "<magnet here>";
final SessionManager s = new SessionManager();
final CountDownLatch signal = new CountDownLatch(1);
// the session stats are posted about once per second.
AlertListener l = new AlertListener() {
@Override
public int[] types() {
return null;
}
@Override
public void alert(Alert<?> alert) {
switch (alert.type()) {
case ADD_TORRENT:
System.out.println("Torrent added");
TorrentHandle th = ((AddTorrentAlert) alert).handle();
th.resume();
TorrentInfo ti = th.torrentFile();
Priority[] p = th.filePriorities();
p[0] = Priority.IGNORE;
System.out.println("Expected priorities:");
for (int i = 0; i < ti.numFiles(); i++)
System.out.println(String.format("priority=%-8sfile=%s",
p[i],
ti.files().fileName(i)));
System.out.println();
th.prioritizeFiles(p);
break;
case STATS:
th = ((StatsAlert) alert).handle();
ti = th.torrentFile();
p = th.filePriorities();
System.out.println(String.format("[%s] Current priorities:",
new Time(System.currentTimeMillis())));
for (int i = 0; i < ti.numFiles(); i++)
System.out.println(String.format("priority=%-8sfile=%s",
p[i],
ti.files().fileName(i)));
System.out.println();
break;
case TORRENT_FINISHED:
System.out.println("Torrent finished\n");
break;
}
}
};
s.addListener(l);
s.start();
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
long nodes = s.stats().dhtNodes();
if (nodes >= 10) {
System.out.println("DHT contains " + nodes + " nodes");
signal.countDown();
timer.cancel();
}
}
}, 0, 1000);
System.out.println("Waiting for nodes in DHT (10 seconds)...");
boolean r = signal.await(10, TimeUnit.SECONDS);
if (!r) {
System.out.println("DHT bootstrap timeout");
System.exit(0);
}
System.out.println("Fetching the magnet uri, please wait...");
byte[] data = s.fetchMagnet(magnet, 30, true);
if (data == null) {
System.out.println("data == null");
s.stop();
return;
}
File f = File.createTempFile("test", "torrent");
FileOutputStream fos = new FileOutputStream(f);
fos.write(data);
s.download(new TorrentInfo(f), new File(System.getProperty("user.dir")));
System.in.read();
s.stop();
}
}