package com.openseedbox.jobs.torrent; import com.openseedbox.Config; import com.openseedbox.backend.ITorrent; import com.openseedbox.backend.ITorrentBackend; import com.openseedbox.jobs.LoggedJob; import com.openseedbox.models.Node; import com.openseedbox.models.Torrent; import com.openseedbox.models.TorrentEvent; import com.openseedbox.models.TorrentEvent.TorrentEventType; import com.openseedbox.models.User; import com.openseedbox.models.UserMessage; import com.openseedbox.models.UserTorrent; import java.io.File; import org.apache.commons.io.FileUtils; public class AddTorrentJob extends LoggedJob<TorrentEvent> { private String urlOrMagnet; private File file; private TorrentEvent event; private User user; private String groupName; public AddTorrentJob(String urlOrMagnet, File file, long userId, String groupName) { this.urlOrMagnet = urlOrMagnet; this.file = file; this.user = User.findById(userId); this.event = new TorrentEvent(TorrentEventType.ADDING, user); this.groupName = groupName; } @Override protected TorrentEvent getJobEvent() { return event; } @Override protected Object doGenericJob() throws Exception { if (Config.isTestMode()) { sleep(2); //add in some lag to simulate slow backend } //TODO: check that we dont already have the torrent somewhere in the system. Hard because we dont know the torrent hash at this point Node node = Node.getBestForNewTorrent(user); ITorrentBackend backend = node.getNodeBackend(); ITorrent added = (file != null) ? backend.addTorrent(file) : backend.addTorrent(urlOrMagnet); Torrent t = new Torrent(); t.setHashString(added.getTorrentHash()); t.setStatus(added.getStatus()); t.setName(added.getName()); t.setNode(node); t.save(); UserTorrent ut = new UserTorrent(); ut.setUser(user); ut.setTorrentHash(added.getTorrentHash()); user.addTorrentGroup(groupName); ut.setGroupName(groupName); ut.setRunning(true); ut.insert(); event.setTorrentHash(added.getTorrentHash()); event.setUserNotified(false); if (file != null) { FileUtils.deleteQuietly(file); } return null; } @Override protected void onException(Exception ex) { UserMessage um = new UserMessage(); um.setUser(user); um.setHeading("An error occured adding a torrent!"); um.setMessage("The following error occured: " + ex.getMessage()); um.insert(); } }