From: David ‘Bombe’ Roden Date: Wed, 25 Jan 2012 09:52:38 +0000 (+0100) Subject: Store a Sone’s known status in the Sone itself. X-Git-Tag: 0.8^2~32 X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=commitdiff_plain;h=c3240e5c85d0cd49e346939f864cf93fa36daed0 Store a Sone’s known status in the Sone itself. --- diff --git a/src/main/java/net/pterodactylus/sone/core/Core.java b/src/main/java/net/pterodactylus/sone/core/Core.java index 7a97842..ed34ef2 100644 --- a/src/main/java/net/pterodactylus/sone/core/Core.java +++ b/src/main/java/net/pterodactylus/sone/core/Core.java @@ -137,11 +137,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis /* synchronize access on this on itself. */ private Map remoteSones = new HashMap(); - /** All new Sones. */ - private Set newSones = new HashSet(); - /** All known Sones. */ - /* synchronize access on {@link #newSones}. */ private Set knownSones = new HashSet(); /** All posts. */ @@ -504,19 +500,6 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis } /** - * Returns whether the Sone with the given ID is a new Sone. - * - * @param soneId - * The ID of the sone to check for - * @return {@code true} if the given Sone is new, false otherwise - */ - public boolean isNewSone(String soneId) { - synchronized (newSones) { - return !knownSones.contains(soneId) && newSones.contains(soneId); - } - } - - /** * Returns whether the given Sone has been modified. * * @param sone @@ -972,12 +955,10 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis sone.setRequestUri(getSoneUri(identity.getRequestUri())); sone.setLatestEdition(Numbers.safeParseLong(identity.getProperty("Sone.LatestEdition"), (long) 0)); if (newSone) { - synchronized (newSones) { + synchronized (knownSones) { newSone = !knownSones.contains(sone.getId()); - if (newSone) { - newSones.add(sone.getId()); - } } + sone.setKnown(!newSone); if (newSone) { coreListenerManager.fireNewSoneFound(sone); for (Sone localSone : getLocalSones()) { @@ -1353,12 +1334,13 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis * The Sone to mark as known */ public void markSoneKnown(Sone sone) { - synchronized (newSones) { - if (newSones.remove(sone.getId())) { + if (!sone.isKnown()) { + sone.setKnown(true); + synchronized (knownSones) { knownSones.add(sone.getId()); - coreListenerManager.fireMarkSoneKnown(sone); - touchConfiguration(); } + coreListenerManager.fireMarkSoneKnown(sone); + touchConfiguration(); } } @@ -1569,7 +1551,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis sone.setAlbums(topLevelAlbums); soneInserters.get(sone).setLastInsertFingerprint(lastInsertFingerprint); } - synchronized (newSones) { + synchronized (knownSones) { for (String friend : friends) { knownSones.add(friend); } @@ -2232,7 +2214,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis /* save known Sones. */ int soneCounter = 0; - synchronized (newSones) { + synchronized (knownSones) { for (String knownSoneId : knownSones) { configuration.getStringValue("KnownSone/" + soneCounter++ + "/ID").setValue(knownSoneId); } @@ -2361,7 +2343,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis if (knownSoneId == null) { break; } - synchronized (newSones) { + synchronized (knownSones) { knownSones.add(knownSoneId); } } @@ -2554,10 +2536,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis synchronized (remoteSones) { remoteSones.remove(identity.getId()); } - synchronized (newSones) { - newSones.remove(identity.getId()); - coreListenerManager.fireSoneRemoved(sone); - } + coreListenerManager.fireSoneRemoved(sone); } // diff --git a/src/main/java/net/pterodactylus/sone/data/Sone.java b/src/main/java/net/pterodactylus/sone/data/Sone.java index 63cdbcb..c2f9ae1 100644 --- a/src/main/java/net/pterodactylus/sone/data/Sone.java +++ b/src/main/java/net/pterodactylus/sone/data/Sone.java @@ -200,6 +200,9 @@ public class Sone implements Fingerprintable, Comparable { /** The client used by the Sone. */ private volatile Client client; + /** Whether this Sone is known. */ + private volatile boolean known; + /** All friend Sones. */ private final Set friendSones = new CopyOnWriteArraySet(); @@ -451,6 +454,27 @@ public class Sone implements Fingerprintable, Comparable { } /** + * Returns whether this Sone is known. + * + * @return {@code true} if this Sone is known, {@code false} otherwise + */ + public boolean isKnown() { + return known; + } + + /** + * Sets whether this Sone is known. + * + * @param known + * {@code true} if this Sone is known, {@code false} otherwise + * @return This Sone + */ + public Sone setKnown(boolean known) { + this.known = known; + return this; + } + + /** * Returns all friend Sones of this Sone. * * @return The friend Sones of this Sone diff --git a/src/main/java/net/pterodactylus/sone/template/SoneAccessor.java b/src/main/java/net/pterodactylus/sone/template/SoneAccessor.java index 305e9a8..c134fc0 100644 --- a/src/main/java/net/pterodactylus/sone/template/SoneAccessor.java +++ b/src/main/java/net/pterodactylus/sone/template/SoneAccessor.java @@ -96,7 +96,7 @@ public class SoneAccessor extends ReflectionAccessor { } else if (member.equals("downloading")) { return sone.getStatus() == SoneStatus.downloading; } else if (member.equals("new")) { - return core.isNewSone(sone.getId()); + return !sone.isKnown(); } else if (member.equals("locked")) { return core.isLocked(sone); } else if (member.equals("lastUpdatedText")) { diff --git a/src/main/java/net/pterodactylus/sone/web/KnownSonesPage.java b/src/main/java/net/pterodactylus/sone/web/KnownSonesPage.java index 6ed5667..f32a47d 100644 --- a/src/main/java/net/pterodactylus/sone/web/KnownSonesPage.java +++ b/src/main/java/net/pterodactylus/sone/web/KnownSonesPage.java @@ -91,7 +91,7 @@ public class KnownSonesPage extends SoneTemplatePage { */ @Override public boolean filterObject(Sone sone) { - return webInterface.getCore().isNewSone(sone.getId()); + return !sone.isKnown(); } }); } else if ("not-new".equals(filter)) { @@ -101,7 +101,7 @@ public class KnownSonesPage extends SoneTemplatePage { */ @Override public boolean filterObject(Sone sone) { - return !webInterface.getCore().isNewSone(sone.getId()); + return sone.isKnown(); } }); }