import static com.google.common.base.Preconditions.checkState;
import java.util.List;
+import java.util.Set;
import net.pterodactylus.rhynodge.Reaction;
import net.pterodactylus.rhynodge.State;
import org.apache.commons.lang3.StringEscapeUtils;
import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
/**
* {@link Trigger} implementation that is triggered by {@link TorrentFile}s that
*/
public class NewTorrentTrigger implements Trigger {
+ /** All known torrents. */
+ private final Set<TorrentFile> allTorrentFiles = Sets.newHashSet();
+
/** The newly detected torrent files. */
- private List<TorrentFile> torrentFiles = Lists.newArrayList();
+ private final List<TorrentFile> newTorrentFiles = Lists.newArrayList();
//
// TRIGGER METHODS
//
/**
- * {@inheritDoc}
+ * {@inheritDocs}
*/
@Override
- public boolean triggers(State currentState, State previousState) {
+ public State mergeStates(State previousState, State currentState) {
checkState(currentState instanceof TorrentState, "currentState is not a TorrentState but a %s", currentState.getClass().getName());
checkState(previousState instanceof TorrentState, "previousState is not a TorrentState but a %s", currentState.getClass().getName());
TorrentState currentTorrentState = (TorrentState) currentState;
TorrentState previousTorrentState = (TorrentState) previousState;
- torrentFiles.clear();
+
+ allTorrentFiles.clear();
+ newTorrentFiles.clear();
+ allTorrentFiles.addAll(previousTorrentState.torrentFiles());
for (TorrentFile torrentFile : currentTorrentState) {
- torrentFiles.add(torrentFile);
+ if (allTorrentFiles.add(torrentFile)) {
+ newTorrentFiles.add(torrentFile);
+ }
}
- for (TorrentFile torrentFile : previousTorrentState) {
- torrentFiles.remove(torrentFile);
- }
- return !torrentFiles.isEmpty();
+
+ return new TorrentState(allTorrentFiles);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean triggers() {
+ return !newTorrentFiles.isEmpty();
}
/**
*/
@Override
public Output output(Reaction reaction) {
- DefaultOutput output = new DefaultOutput(String.format("Found %d new Torrent(s) for “%s!”", torrentFiles.size(), reaction.name()));
- output.addText("text/plain", getPlainTextList(torrentFiles));
- output.addText("text/html", getHtmlTextList(torrentFiles));
+ DefaultOutput output = new DefaultOutput(String.format("Found %d new Torrent(s) for “%s!”", newTorrentFiles.size(), reaction.name()));
+ output.addText("text/plain", getPlainTextList(newTorrentFiles));
+ output.addText("text/html", getHtmlTextList(newTorrentFiles));
return output;
}
plainText.append(torrentFile.name()).append('\n');
plainText.append('\t').append(torrentFile.size()).append(" in ").append(torrentFile.fileCount()).append(" file(s)\n");
plainText.append('\t').append(torrentFile.seedCount()).append(" seed(s), ").append(torrentFile.leechCount()).append(" leecher(s)\n");
- plainText.append('\t').append(torrentFile.magnetUri()).append('\n');
- plainText.append('\t').append(torrentFile.downloadUri()).append('\n');
+ if ((torrentFile.magnetUri() != null) && (torrentFile.magnetUri().length() > 0)) {
+ plainText.append('\t').append(torrentFile.magnetUri()).append('\n');
+ }
+ if ((torrentFile.downloadUri() != null) && (torrentFile.downloadUri().length() > 0)) {
+ plainText.append('\t').append(torrentFile.downloadUri()).append('\n');
+ }
plainText.append('\n');
}
return plainText.toString();
htmlText.append("<li><strong>").append(StringEscapeUtils.escapeHtml4(torrentFile.name())).append("</strong></li>");
htmlText.append("<div>Size: <strong>").append(StringEscapeUtils.escapeHtml4(torrentFile.size())).append("</strong> in <strong>").append(torrentFile.fileCount()).append("</strong> file(s)</div>");
htmlText.append("<div><strong>").append(torrentFile.seedCount()).append("</strong> seed(s), <strong>").append(torrentFile.leechCount()).append("</strong> leecher(s)</div>");
- htmlText.append(String.format("<div><a href=\"%s\">Magnet URI</a></div>", StringEscapeUtils.escapeHtml4(torrentFile.magnetUri())));
- htmlText.append(String.format("<div><a href=\"%s\">Download URI</a></div>", StringEscapeUtils.escapeHtml4(torrentFile.downloadUri())));
+ if ((torrentFile.magnetUri() != null) && (torrentFile.magnetUri().length() > 0)) {
+ htmlText.append(String.format("<div><a href=\"%s\">Magnet URI</a></div>", StringEscapeUtils.escapeHtml4(torrentFile.magnetUri())));
+ }
+ if ((torrentFile.downloadUri() != null) && (torrentFile.downloadUri().length() > 0)) {
+ htmlText.append(String.format("<div><a href=\"%s\">Download URI</a></div>", StringEscapeUtils.escapeHtml4(torrentFile.downloadUri())));
+ }
}
htmlText.append("</ul>\n");
htmlText.append("</body></html>\n");