projects
/
Sone.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
If no current Sone exists, return an error.
[Sone.git]
/
src
/
main
/
java
/
net
/
pterodactylus
/
sone
/
web
/
WebInterface.java
diff --git
a/src/main/java/net/pterodactylus/sone/web/WebInterface.java
b/src/main/java/net/pterodactylus/sone/web/WebInterface.java
index
0863fee
..
ea1cb83
100644
(file)
--- a/
src/main/java/net/pterodactylus/sone/web/WebInterface.java
+++ b/
src/main/java/net/pterodactylus/sone/web/WebInterface.java
@@
-1,5
+1,5
@@
/*
/*
- * Sone - WebInterface.java - Copyright © 2010–201
2
David Roden
+ * Sone - WebInterface.java - Copyright © 2010–201
3
David Roden
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@
-32,6
+32,10
@@
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.Level;
import java.util.logging.Logger;
@@
-142,16
+146,10
@@
import net.pterodactylus.util.template.TemplateContextFactory;
import net.pterodactylus.util.template.TemplateParser;
import net.pterodactylus.util.template.TemplateProvider;
import net.pterodactylus.util.template.XmlFilter;
import net.pterodactylus.util.template.TemplateParser;
import net.pterodactylus.util.template.TemplateProvider;
import net.pterodactylus.util.template.XmlFilter;
-import net.pterodactylus.util.thread.Ticker;
import net.pterodactylus.util.web.RedirectPage;
import net.pterodactylus.util.web.StaticPage;
import net.pterodactylus.util.web.TemplatePage;
import net.pterodactylus.util.web.RedirectPage;
import net.pterodactylus.util.web.StaticPage;
import net.pterodactylus.util.web.TemplatePage;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.eventbus.Subscribe;
-import com.google.inject.Inject;
-
import freenet.clients.http.SessionManager;
import freenet.clients.http.SessionManager.Session;
import freenet.clients.http.ToadletContainer;
import freenet.clients.http.SessionManager;
import freenet.clients.http.SessionManager.Session;
import freenet.clients.http.ToadletContainer;
@@
-159,6
+157,11
@@
import freenet.clients.http.ToadletContext;
import freenet.l10n.BaseL10n;
import freenet.support.api.HTTPRequest;
import freenet.l10n.BaseL10n;
import freenet.support.api.HTTPRequest;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.eventbus.Subscribe;
+import com.google.inject.Inject;
+
/**
* Bundles functionality that a web interface of a Freenet plugin needs, e.g.
* references to l10n helpers.
/**
* Bundles functionality that a web interface of a Freenet plugin needs, e.g.
* references to l10n helpers.
@@
-213,7
+216,7
@@
public class WebInterface {
private final Map<Sone, TemplateNotification> soneInsertNotifications = new HashMap<Sone, TemplateNotification>();
/** Sone locked notification ticker objects. */
private final Map<Sone, TemplateNotification> soneInsertNotifications = new HashMap<Sone, TemplateNotification>();
/** Sone locked notification ticker objects. */
- private final Map<Sone,
Object> lockedSonesTickerObjects = Collections.synchronizedMap(new HashMap<Sone, Object
>());
+ private final Map<Sone,
ScheduledFuture<?>> lockedSonesTickerObjects = Collections.synchronizedMap(new HashMap<Sone, ScheduledFuture<?>
>());
/** The “Sone locked” notification. */
private final ListNotification<Sone> lockedSonesNotification;
/** The “Sone locked” notification. */
private final ListNotification<Sone> lockedSonesNotification;
@@
-230,6
+233,9
@@
public class WebInterface {
/** The “image insert failed” notification. */
private final ListNotification<Image> imageInsertFailedNotification;
/** The “image insert failed” notification. */
private final ListNotification<Image> imageInsertFailedNotification;
+ /** Scheduled executor for time-based notifications. */
+ private final ScheduledExecutorService ticker = Executors.newScheduledThreadPool(1);
+
/**
* Creates a new web interface.
*
/**
* Creates a new web interface.
*
@@
-240,7
+246,7
@@
public class WebInterface {
public WebInterface(SonePlugin sonePlugin) {
this.sonePlugin = sonePlugin;
formPassword = sonePlugin.pluginRespirator().getToadletContainer().getFormPassword();
public WebInterface(SonePlugin sonePlugin) {
this.sonePlugin = sonePlugin;
formPassword = sonePlugin.pluginRespirator().getToadletContainer().getFormPassword();
- soneTextParser = new SoneTextParser(getCore()
, getCor
e());
+ soneTextParser = new SoneTextParser(getCore()
.getDatabas
e());
templateContextFactory = new TemplateContextFactory();
templateContextFactory.addAccessor(Object.class, new ReflectionAccessor());
templateContextFactory = new TemplateContextFactory();
templateContextFactory.addAccessor(Object.class, new ReflectionAccessor());
@@
-417,7
+423,7
@@
public class WebInterface {
if (soneId == null) {
return null;
}
if (soneId == null) {
return null;
}
- return getCore().getLocalSone(soneId
, false
);
+ return getCore().getLocalSone(soneId
).orNull(
);
}
/**
}
/**
@@
-554,17
+560,17
@@
public class WebInterface {
final TemplateNotification startupNotification = new TemplateNotification("startup-notification", startupNotificationTemplate);
notificationManager.addNotification(startupNotification);
final TemplateNotification startupNotification = new TemplateNotification("startup-notification", startupNotificationTemplate);
notificationManager.addNotification(startupNotification);
-
Ticker.getInstance().registerEvent(System.currentTimeMillis() + (120 * 1000),
new Runnable() {
+
ticker.schedule(
new Runnable() {
@Override
public void run() {
startupNotification.dismiss();
}
@Override
public void run() {
startupNotification.dismiss();
}
- },
"Sone Startup Notification Remover"
);
+ },
2, TimeUnit.MINUTES
);
Template wotMissingNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/wotMissingNotification.html"));
final TemplateNotification wotMissingNotification = new TemplateNotification("wot-missing-notification", wotMissingNotificationTemplate);
Template wotMissingNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/wotMissingNotification.html"));
final TemplateNotification wotMissingNotification = new TemplateNotification("wot-missing-notification", wotMissingNotificationTemplate);
-
Ticker.getInstance().registerEvent(System.currentTimeMillis() + (15 * 1000),
new Runnable() {
+
ticker.scheduleAtFixedRate(
new Runnable() {
@Override
@SuppressWarnings("synthetic-access")
@Override
@SuppressWarnings("synthetic-access")
@@
-574,10
+580,9
@@
public class WebInterface {
} else {
notificationManager.addNotification(wotMissingNotification);
}
} else {
notificationManager.addNotification(wotMissingNotification);
}
- Ticker.getInstance().registerEvent(System.currentTimeMillis() + (15 * 1000), this, "Sone WoT Connector Checker");
}
}
- },
"Sone WoT Connector Checker"
);
+ },
15, 15, TimeUnit.SECONDS
);
}
/**
}
/**
@@
-585,7
+590,7
@@
public class WebInterface {
*/
public void stop() {
unregisterToadlets();
*/
public void stop() {
unregisterToadlets();
-
Ticker.getInstance().stop
();
+
ticker.shutdownNow
();
}
//
}
//
@@
-852,12
+857,12
@@
public class WebInterface {
}
if (!hasFirstStartNotification()) {
notificationManager.addNotification(isLocal ? localReplyNotification : newReplyNotification);
}
if (!hasFirstStartNotification()) {
notificationManager.addNotification(isLocal ? localReplyNotification : newReplyNotification);
- if (!getMentionedSones(reply.getText()).isEmpty() && !isLocal &&
(reply.getPost().getSone() != null
) && (reply.getTime() <= System.currentTimeMillis())) {
- mentionNotification.add(reply.getPost());
+ if (!getMentionedSones(reply.getText()).isEmpty() && !isLocal &&
reply.getPost().isPresent(
) && (reply.getTime() <= System.currentTimeMillis())) {
+ mentionNotification.add(reply.getPost()
.get()
);
notificationManager.addNotification(mentionNotification);
}
} else {
notificationManager.addNotification(mentionNotification);
}
} else {
-
getCore().markReplyKnown(reply
);
+
reply.modify().setKnown().update(getCore().postReplyUpdated()
);
}
}
}
}
@@
-895,7
+900,7
@@
public class WebInterface {
public void markReplyKnown(MarkPostReplyKnownEvent markPostReplyKnownEvent) {
newReplyNotification.remove(markPostReplyKnownEvent.postReply());
localReplyNotification.remove(markPostReplyKnownEvent.postReply());
public void markReplyKnown(MarkPostReplyKnownEvent markPostReplyKnownEvent) {
newReplyNotification.remove(markPostReplyKnownEvent.postReply());
localReplyNotification.remove(markPostReplyKnownEvent.postReply());
- mentionNotification.remove(markPostReplyKnownEvent.postReply().getPost());
+ mentionNotification.remove(markPostReplyKnownEvent.postReply().getPost()
.get()
);
}
/**
}
/**
@@
-933,13
+938,13
@@
public class WebInterface {
PostReply reply = postReplyRemovedEvent.postReply();
newReplyNotification.remove(reply);
localReplyNotification.remove(reply);
PostReply reply = postReplyRemovedEvent.postReply();
newReplyNotification.remove(reply);
localReplyNotification.remove(reply);
- if (!getMentionedSones(reply.getText()).isEmpty()) {
+ if (!getMentionedSones(reply.getText()).isEmpty()
&& reply.getPost().isPresent()
) {
boolean isMentioned = false;
boolean isMentioned = false;
- for (PostReply existingReply :
getCore().getReplies(reply.getPost()
)) {
+ for (PostReply existingReply :
reply.getPost().transform(Post.TO_REPLIES).get(
)) {
isMentioned |= !reply.isKnown() && !getMentionedSones(existingReply.getText()).isEmpty();
}
if (!isMentioned) {
isMentioned |= !reply.isKnown() && !getMentionedSones(existingReply.getText()).isEmpty();
}
if (!isMentioned) {
- mentionNotification.remove(reply.getPost());
+ mentionNotification.remove(reply.getPost()
.get()
);
}
}
}
}
}
}
@@
-953,16
+958,15
@@
public class WebInterface {
@Subscribe
public void soneLocked(SoneLockedEvent soneLockedEvent) {
final Sone sone = soneLockedEvent.sone();
@Subscribe
public void soneLocked(SoneLockedEvent soneLockedEvent) {
final Sone sone = soneLockedEvent.sone();
-
Object tickerObject = Ticker.getInstance().registerEvent(System.currentTimeMillis() + (5 * 60) * 1000,
new Runnable() {
+
ScheduledFuture<?> tickerObject = ticker.schedule(
new Runnable() {
@Override
@SuppressWarnings("synthetic-access")
public void run() {
lockedSonesNotification.add(sone);
@Override
@SuppressWarnings("synthetic-access")
public void run() {
lockedSonesNotification.add(sone);
- lockedSonesTickerObjects.remove(sone);
notificationManager.addNotification(lockedSonesNotification);
}
notificationManager.addNotification(lockedSonesNotification);
}
- },
"Sone Locked Notification"
);
+ },
5, TimeUnit.MINUTES
);
lockedSonesTickerObjects.put(sone, tickerObject);
}
lockedSonesTickerObjects.put(sone, tickerObject);
}
@@
-975,7
+979,7
@@
public class WebInterface {
@Subscribe
public void soneUnlocked(SoneUnlockedEvent soneUnlockedEvent) {
lockedSonesNotification.remove(soneUnlockedEvent.sone());
@Subscribe
public void soneUnlocked(SoneUnlockedEvent soneUnlockedEvent) {
lockedSonesNotification.remove(soneUnlockedEvent.sone());
-
Ticker.getInstance().deregisterEvent(lockedSonesTickerObjects.remove(soneUnlockedEvent.sone())
);
+
lockedSonesTickerObjects.remove(soneUnlockedEvent.sone()).cancel(false
);
}
/**
}
/**