mirror of https://github.com/zlatinb/muwire
only refresh feeds table if something changes. This prevents the hover menu from flickering
parent
bb69535874
commit
83cd5e57a2
|
@ -24,6 +24,7 @@ public class FeedManager {
|
||||||
private final Core core;
|
private final Core core;
|
||||||
private final FileManager fileManager;
|
private final FileManager fileManager;
|
||||||
private final Map<Persona, RemoteFeed> remoteFeeds = new ConcurrentHashMap<>();
|
private final Map<Persona, RemoteFeed> remoteFeeds = new ConcurrentHashMap<>();
|
||||||
|
private volatile long revision;
|
||||||
|
|
||||||
public FeedManager(Core core, FileManager fileManager) {
|
public FeedManager(Core core, FileManager fileManager) {
|
||||||
this.core = core;
|
this.core = core;
|
||||||
|
@ -34,14 +35,20 @@ public class FeedManager {
|
||||||
return remoteFeeds;
|
return remoteFeeds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long getRevision() {
|
||||||
|
return revision;
|
||||||
|
}
|
||||||
|
|
||||||
public void onFeedLoadedEvent(FeedLoadedEvent e) {
|
public void onFeedLoadedEvent(FeedLoadedEvent e) {
|
||||||
remoteFeeds.put(e.getFeed().getPublisher(), new RemoteFeed(e.getFeed()));
|
remoteFeeds.put(e.getFeed().getPublisher(), new RemoteFeed(e.getFeed()));
|
||||||
|
revision++;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onUIFeedConfigurationEvent(UIFeedConfigurationEvent e) {
|
public void onUIFeedConfigurationEvent(UIFeedConfigurationEvent e) {
|
||||||
if (!e.isNewFeed())
|
if (!e.isNewFeed())
|
||||||
return;
|
return;
|
||||||
remoteFeeds.put(e.getFeed().getPublisher(), new RemoteFeed(e.getFeed()));
|
remoteFeeds.put(e.getFeed().getPublisher(), new RemoteFeed(e.getFeed()));
|
||||||
|
revision++;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onFeedFetchEvent(FeedFetchEvent e) {
|
public void onFeedFetchEvent(FeedFetchEvent e) {
|
||||||
|
@ -50,6 +57,7 @@ public class FeedManager {
|
||||||
return; // hmm
|
return; // hmm
|
||||||
feed.getFeed().setStatus(e.getStatus());
|
feed.getFeed().setStatus(e.getStatus());
|
||||||
feed.revision++;
|
feed.revision++;
|
||||||
|
revision++;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onFeedItemFetchedEvent(FeedItemFetchedEvent e) {
|
public void onFeedItemFetchedEvent(FeedItemFetchedEvent e) {
|
||||||
|
|
|
@ -43,7 +43,9 @@ public class FeedServlet extends HttpServlet {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append("<?xml version='1.0' encoding='UTF-8'?>");
|
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().
|
List<WrappedFeed> feeds = feedManager.getRemoteFeeds().values().stream().
|
||||||
map(rf -> new WrappedFeed(rf, core.getFeedManager().getFeedItems(rf.getFeed().getPublisher()).size())).
|
map(rf -> new WrappedFeed(rf, core.getFeedManager().getFeedItems(rf.getFeed().getPublisher()).size())).
|
||||||
collect(Collectors.toList());
|
collect(Collectors.toList());
|
||||||
|
|
|
@ -116,10 +116,24 @@ class Item {
|
||||||
|
|
||||||
|
|
||||||
function initFeeds() {
|
function initFeeds() {
|
||||||
setTimeout(refreshFeeds, 1)
|
setTimeout(fetchRevision, 1)
|
||||||
setInterval(refreshFeeds, 3000)
|
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() {
|
function refreshFeeds() {
|
||||||
var xmlhttp = new XMLHttpRequest()
|
var xmlhttp = new XMLHttpRequest()
|
||||||
|
@ -375,6 +389,7 @@ function download(infoHash) {
|
||||||
xmlhttp.send("action=download&host=" + hostB64 + "&infoHash=" + infoHash)
|
xmlhttp.send("action=download&host=" + hostB64 + "&infoHash=" + infoHash)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var revision = 0
|
||||||
var feeds = new Map()
|
var feeds = new Map()
|
||||||
var currentFeed = null
|
var currentFeed = null
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue