<modelVersion>4.0.0</modelVersion>
<groupId>net.pterodactylus</groupId>
<artifactId>sone</artifactId>
- <version>0.4.2</version>
+ <version>0.4.3</version>
<dependencies>
<dependency>
<groupId>net.pterodactylus</groupId>
}
}
}
- Set<Reply> storedReplies = sone.getReplies();
+ Set<Reply> storedReplies = storedSone.getReplies();
synchronized (newReplies) {
for (Reply reply : sone.getReplies()) {
reply.setSone(storedSone);
* {@inheritDoc}
*/
@Override
- public void updateFound(Version version, long releaseTime) {
- coreListenerManager.fireUpdateFound(version, releaseTime);
+ public void updateFound(Version version, long releaseTime, long latestEdition) {
+ coreListenerManager.fireUpdateFound(version, releaseTime, latestEdition);
}
}
* The version that was found
* @param releaseTime
* The release time of the new version
+ * @param latestEdition
+ * The latest edition of the Sone homepage
*/
- public void updateFound(Version version, long releaseTime);
+ public void updateFound(Version version, long releaseTime, long latestEdition);
}
/**
* Notifies all listeners that a new version was found.
*
- * @see CoreListener#updateFound(Version, long)
+ * @see CoreListener#updateFound(Version, long, long)
* @param version
* The new version
* @param releaseTime
* The release time of the new version
+ * @param latestEdition
+ * The latest edition of the Sone homepage
*/
- void fireUpdateFound(Version version, long releaseTime) {
+ void fireUpdateFound(Version version, long releaseTime, long latestEdition) {
for (CoreListener coreListener : getListeners()) {
- coreListener.updateFound(version, releaseTime);
+ coreListener.updateFound(version, releaseTime, latestEdition);
}
}
core.setSoneStatus(sone, SoneStatus.inserting);
long insertTime = System.currentTimeMillis();
insertInformation.setTime(insertTime);
- FreenetURI finalUri = freenetInterface.insertDirectory(insertInformation.getInsertUri().setKeyType("USK").setSuggestedEdition(0), insertInformation.generateManifestEntries(), "index.html");
+ FreenetURI finalUri = freenetInterface.insertDirectory(insertInformation.getInsertUri(), insertInformation.generateManifestEntries(), "index.html");
/* at this point we might already be stopped. */
if (shouldStop()) {
/* if so, bail out, don’t change anything. */
}
sone.setTime(insertTime);
sone.setLatestEdition(finalUri.getEdition());
+ core.saveSone(sone);
success = true;
logger.log(Level.INFO, "Inserted Sone “%s” at %s.", new Object[] { sone.getName(), finalUri });
} catch (SoneException se1) {
/** The current URI of the homepage. */
private FreenetURI currentUri;
+ /** The latest known edition. */
+ private long latestEdition;
+
/** The current latest known version. */
private Version currentLatestVersion = SonePlugin.VERSION;
return latestVersionDate;
}
+ /**
+ * Returns the latest known edition of the Sone homepage.
+ *
+ * @return The latest edition of the Sone homepage
+ */
+ public long getLatestEdition() {
+ return latestEdition;
+ }
+
//
// ACTIONS
//
}
Bucket resultBucket = uriResult.getRight().asBucket();
try {
- parseProperties(resultBucket.getInputStream());
+ parseProperties(resultBucket.getInputStream(), edition);
+ latestEdition = edition;
} catch (IOException ioe1) {
logger.log(Level.WARNING, "Could not parse sone.properties of " + uri, ioe1);
} finally {
* Parses the properties of the latest version and fires events, if
* necessary.
*
- * @see UpdateListener#updateFound(Version, long)
- * @see UpdateListenerManager#fireUpdateFound(Version, long)
+ * @see UpdateListener#updateFound(Version, long, long)
+ * @see UpdateListenerManager#fireUpdateFound(Version, long, long)
* @param propertiesInputStream
* The input stream to parse
+ * @param edition
+ * The latest edition of the Sone homepage
* @throws IOException
* if an I/O error occured
*/
- private void parseProperties(InputStream propertiesInputStream) throws IOException {
+ private void parseProperties(InputStream propertiesInputStream, long edition) throws IOException {
Properties properties = new Properties();
InputStreamReader inputStreamReader = null;
try {
currentLatestVersion = version;
latestVersionDate = releaseTime;
logger.log(Level.INFO, "Found new version: %s (%tc)", new Object[] { version, new Date(releaseTime) });
- updateListenerManager.fireUpdateFound(version, releaseTime);
+ updateListenerManager.fireUpdateFound(version, releaseTime, edition);
}
}
* The version that was found
* @param releaseTime
* The release time of the version
+ * @param latestEdition
+ * The latest edition of the Sone homepage
*/
- public void updateFound(Version version, long releaseTime);
+ public void updateFound(Version version, long releaseTime, long latestEdition);
}
* The new version
* @param releaseTime
* The release time of the new version
+ * @param latestEdition
+ * The latest edition of the Sone homepage
*/
- void fireUpdateFound(Version version, long releaseTime) {
+ void fireUpdateFound(Version version, long releaseTime, long latestEdition) {
for (UpdateListener updateListener : getListeners()) {
- updateListener.updateFound(version, releaseTime);
+ updateListener.updateFound(version, releaseTime, latestEdition);
}
}
*/
public Sone setRequestUri(FreenetURI requestUri) {
if (this.requestUri == null) {
- this.requestUri = requestUri.setDocName("Sone").setMetaString(new String[0]);
+ this.requestUri = requestUri.setKeyType("USK").setDocName("Sone").setMetaString(new String[0]);
return this;
}
if (!this.requestUri.equalsKeypair(requestUri)) {
*/
public Sone setInsertUri(FreenetURI insertUri) {
if (this.insertUri == null) {
- this.insertUri = insertUri.setDocName("Sone").setMetaString(new String[0]);
+ this.insertUri = insertUri.setKeyType("USK").setDocName("Sone").setMetaString(new String[0]);
return this;
}
if (!this.insertUri.equalsKeypair(insertUri)) {
/**
* Sets the property with the given name to the given value.
- * <p>
- * This method is only called by the {@link IdentityManager}.
*
* @param name
* The name of the property
}
/** The version. */
- public static final Version VERSION = new Version(0, 4, 2);
+ public static final Version VERSION = new Version(0, 4, 3);
/** The logger. */
private static final Logger logger = Logging.getLogger(SonePlugin.class);
templateContext.set("request", request);
templateContext.set("currentVersion", SonePlugin.VERSION);
templateContext.set("hasLatestVersion", webInterface.getCore().getUpdateChecker().hasLatestVersion());
+ templateContext.set("latestEdition", webInterface.getCore().getUpdateChecker().getLatestEdition());
templateContext.set("latestVersion", webInterface.getCore().getUpdateChecker().getLatestVersion());
templateContext.set("latestVersionTime", webInterface.getCore().getUpdateChecker().getLatestVersionDate());
}
* {@inheritDoc}
*/
@Override
- public void updateFound(Version version, long releaseTime) {
- newVersionNotification.getTemplateContext().set("version", version);
+ public void updateFound(Version version, long releaseTime, long latestEdition) {
+ newVersionNotification.getTemplateContext().set("latestVersion", version);
+ newVersionNotification.getTemplateContext().set("latestEdition", latestEdition);
newVersionNotification.getTemplateContext().set("releaseTime", releaseTime);
notificationManager.addNotification(newVersionNotification);
}
Notification.SoneRescued.Text=The following Sones have been rescued:
Notification.SoneRescued.Text.RememberToUnlock=Please remember to control the posts and replies you have given and don’t forget to unlock your Sones!
Notification.LockedSones.Text=The following Sones have been locked for more than 5 minutes. Please check if you really want to keep these Sones locked:
-Notification.NewVersion.Text=A new version of the Sone plugin was found: Version {version}.
+Notification.NewVersion.Text=Version {version} of the Sone plugin was found. Download it from USK@nwa8lHa271k2QvJ8aa0Ov7IHAV-DFOCFgmDt3X6BpCI,DuQSUZiI~agF8c-6tjsFFGuZ8eICrzWCILB60nT8KKo,AQACAAE/sone/{edition}!
commentElement = (function(postId) {
separator = $("<span> · </span>").addClass("separator");
var commentElement = $("<div><span>Comment</span></div>").addClass("show-reply-form").click(function() {
- markPostAsKnown(getPostElement(this));
replyElement = $("#sone .post#" + postId + " .create-reply");
replyElement.removeClass("hidden");
replyElement.removeClass("light");
if (success) {
$(inputField).val("");
loadNewReply(replyId, soneId, postId);
- markPostAsKnown(getPostElement(inputField));
$("#sone .post#" + postId + " .create-reply").addClass("hidden");
$("#sone .post#" + postId + " .create-reply .sender").hide();
$("#sone .post#" + postId + " .create-reply .select-sender").show();
/* convert all “like” buttons to javascript functions. */
$(postElement).find(".like-post").submit(function() {
likePost(getPostId(this));
- markPostAsKnown(getPostElement(this));
return false;
});
$(postElement).find(".unlike-post").submit(function() {
unlikePost(getPostId(this));
- markPostAsKnown(getPostElement(this));
return false;
});
function ajaxifyReply(replyElement) {
$(replyElement).find(".like-reply").submit(function() {
likeReply(getReplyId(this));
- markPostAsKnown(getPostElement(this));
return false;
});
$(replyElement).find(".unlike-reply").submit(function() {
unlikeReply(getReplyId(this));
- markPostAsKnown(getPostElement(this));
return false;
});
(function(replyElement) {
untrustSone(getReplyAuthor(this));
return false;
});
-
- /* mark post and all replies as known on click. */
- $(replyElement).click(function() {
- markPostAsKnown(getPostElement(this));
- });
}
/**
postElement = this;
if ($(postElement).hasClass("new")) {
(function(postElement) {
- $.getJSON("markAsKnown.ajax", {"formPassword": getFormPassword(), "type": "post", "id": getPostId(postElement)}, function(data, textStatus) {
- $(postElement).removeClass("new");
- $(".click-to-show", postElement).removeClass("new");
- });
+ $(postElement).removeClass("new");
+ $(".click-to-show", postElement).removeClass("new");
+ $.getJSON("markAsKnown.ajax", {"formPassword": getFormPassword(), "type": "post", "id": getPostId(postElement)});
})(postElement);
}
});
replyElement = this;
if ($(replyElement).hasClass("new")) {
(function(replyElement) {
- $.getJSON("markAsKnown.ajax", {"formPassword": getFormPassword(), "type": "reply", "id": getReplyId(replyElement)}, function(data, textStatus) {
- $(replyElement).removeClass("new");
- });
+ $(replyElement).removeClass("new");
+ $.getJSON("markAsKnown.ajax", {"formPassword": getFormPassword(), "type": "reply", "id": getReplyId(replyElement)});
})(replyElement);
}
});
-<div class="text"><%= Notification.NewVersion.Text|l10n|html|replace needle="{version}" replacementKey=version></div>
+<div class="text"><%= Notification.NewVersion.Text|l10n|replace needle="{version}" replacementKey=latestVersion|replace needle="{edition}" replacementKey=latestEdition|parse sone=currentSone></div>
</div>
<%/foreach>
- <%if ! sone.current>
- <p><%= Page.ViewSone.WriteAMessage|l10n|html></p>
-
- <form action="createPost.html" id="post-message" method="post">
- <input type="hidden" name="formPassword" value="<% formPassword|html>" />
- <input type="hidden" name="returnPage" value="<% request.uri|html>" />
- <input type="hidden" name="recipient" value="<% sone.id|html>" />
- <input type="text" name="text" value="" />
- <button type="submit"><%= Page.CreatePost.Button.Post|l10n|html></button>
- </form>
+ <%ifnull ! currentSone>
+ <%if ! sone.current>
+ <p><%= Page.ViewSone.WriteAMessage|l10n|html></p>
+
+ <form action="createPost.html" id="post-message" method="post">
+ <input type="hidden" name="formPassword" value="<% formPassword|html>" />
+ <input type="hidden" name="returnPage" value="<% request.uri|html>" />
+ <input type="hidden" name="recipient" value="<% sone.id|html>" />
+ <input type="text" name="text" value="" />
+ <button type="submit"><%= Page.CreatePost.Button.Post|l10n|html></button>
+ </form>
+ <%/if>
<%/if>
<h1><%= Page.ViewSone.PostList.Title|l10n|replace needle="{sone}" replacementKey=sone.niceName|html></h1>