X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Frhynodge%2Fstates%2FTorrentState.java;h=98578eba7dcca7870567a13c96bac38e0a414185;hb=75dffc0a110405807d5e6a6dd9e0815299d894ad;hp=c4c3e0bfcd2367f377294ed2b43bcb8979eb0e14;hpb=6ec36ef950c23c135bf0e112d932c5b7068189b8;p=rhynodge.git diff --git a/src/main/java/net/pterodactylus/rhynodge/states/TorrentState.java b/src/main/java/net/pterodactylus/rhynodge/states/TorrentState.java index c4c3e0b..98578eb 100644 --- a/src/main/java/net/pterodactylus/rhynodge/states/TorrentState.java +++ b/src/main/java/net/pterodactylus/rhynodge/states/TorrentState.java @@ -18,8 +18,11 @@ package net.pterodactylus.rhynodge.states; import java.nio.charset.Charset; +import java.util.Collection; +import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Optional; import net.pterodactylus.rhynodge.State; import net.pterodactylus.rhynodge.states.TorrentState.TorrentFile; @@ -42,10 +45,41 @@ public class TorrentState extends AbstractState implements Iterable @JsonProperty private List files = Lists.newArrayList(); + /** + * Creates a new torrent state without torrent files. + */ + public TorrentState() { + this(Collections. emptySet()); + } + + /** + * Creates a new torrent state containing the given torrent files. + * + * @param torrentFiles + * The torrent files + */ + public TorrentState(Collection torrentFiles) { + files.addAll(torrentFiles); + } + // // ACCESSORS // + @Override + public boolean isEmpty() { + return files.isEmpty(); + } + + /** + * Returns all torrent files of this state. + * + * @return All torrent files of this state + */ + public Collection torrentFiles() { + return Collections.unmodifiableList(files); + } + /** * Adds a torrent file to this state. * @@ -238,11 +272,7 @@ public class TorrentState extends AbstractState implements Iterable */ private String generateId() { if (magnetUri != null) { - String id = extractId(magnetUri); - if (id != null) { - return id; - } - return magnetUri; + return extractId(magnetUri).orElse(magnetUri); } return (downloadUri != null) ? downloadUri : name; } @@ -258,14 +288,17 @@ public class TorrentState extends AbstractState implements Iterable * The magnet URI to extract the “xt” from * @return The extracted ID, or {@code null} if no ID could be found */ - private static String extractId(String magnetUri) { + private static Optional extractId(String magnetUri) { + if ((magnetUri == null) || (magnetUri.length() < 8)) { + return Optional.empty(); + } List parameters = URLEncodedUtils.parse(magnetUri.substring("magnet:?".length()), Charset.forName("UTF-8")); for (NameValuePair parameter : parameters) { if (parameter.getName().equals("xt")) { - return parameter.getValue(); + return Optional.of(parameter.getValue().toLowerCase()); } } - return null; + return Optional.empty(); } //