only refresh feeds table if something changes. This prevents the hover menu from flickering

pull/53/head
Zlatin Balevsky 2020-03-23 08:47:05 +00:00
parent bb69535874
commit 83cd5e57a2
3 changed files with 28 additions and 3 deletions

View File

@ -24,6 +24,7 @@ public class FeedManager {
private final Core core;
private final FileManager fileManager;
private final Map<Persona, RemoteFeed> remoteFeeds = new ConcurrentHashMap<>();
private volatile long revision;
public FeedManager(Core core, FileManager fileManager) {
this.core = core;
@ -34,14 +35,20 @@ public class FeedManager {
return remoteFeeds;
}
long getRevision() {
return revision;
}
public void onFeedLoadedEvent(FeedLoadedEvent e) {
remoteFeeds.put(e.getFeed().getPublisher(), new RemoteFeed(e.getFeed()));
revision++;
}
public void onUIFeedConfigurationEvent(UIFeedConfigurationEvent e) {
if (!e.isNewFeed())
return;
remoteFeeds.put(e.getFeed().getPublisher(), new RemoteFeed(e.getFeed()));
revision++;
}
public void onFeedFetchEvent(FeedFetchEvent e) {
@ -50,6 +57,7 @@ public class FeedManager {
return; // hmm
feed.getFeed().setStatus(e.getStatus());
feed.revision++;
revision++;
}
public void onFeedItemFetchedEvent(FeedItemFetchedEvent e) {

View File

@ -43,7 +43,9 @@ public class FeedServlet extends HttpServlet {
StringBuilder sb = new StringBuilder();
sb.append("<?xml version='1.0' encoding='UTF-8'?>");
if (section.equals("feeds")) {
if (section.equals("revision")) {
sb.append("<Revision>").append(feedManager.getRevision()).append("</Revision>");
} else if (section.equals("feeds")) {
List<WrappedFeed> feeds = feedManager.getRemoteFeeds().values().stream().
map(rf -> new WrappedFeed(rf, core.getFeedManager().getFeedItems(rf.getFeed().getPublisher()).size())).
collect(Collectors.toList());

View File

@ -116,10 +116,24 @@ class Item {
function initFeeds() {
setTimeout(refreshFeeds, 1)
setInterval(refreshFeeds, 3000)
setTimeout(fetchRevision, 1)
setInterval(fetchRevision, 3000)
}
function fetchRevision() {
var xmlhttp = new XMLHttpRequest()
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var newRevision = parseInt(this.responseXML.getElementsByTagName("Revision")[0].childNodes[0].nodeValue)
if (newRevision > revision) {
revision = newRevision
refreshFeeds()
}
}
}
xmlhttp.open("GET", "/MuWire/Feed?section=revision", true)
xmlhttp.send()
}
function refreshFeeds() {
var xmlhttp = new XMLHttpRequest()
@ -375,6 +389,7 @@ function download(infoHash) {
xmlhttp.send("action=download&host=" + hostB64 + "&infoHash=" + infoHash)
}
var revision = 0
var feeds = new Map()
var currentFeed = null