wip on feeds page js side

This commit is contained in:
Zlatin Balevsky
2020-03-13 00:37:58 +00:00
parent 7183f15c5c
commit 392deee34c
3 changed files with 144 additions and 12 deletions

View File

@@ -43,7 +43,7 @@ public class FeedServlet extends HttpServlet {
StringBuilder sb = new StringBuilder();
sb.append("<?xml version='1.0' encoding='UTF-8'?>");
if (section.equals("status")) {
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());
@@ -213,10 +213,10 @@ public class FeedServlet extends HttpServlet {
private static final ColumnComparators<WrappedFeed> FEED_COMPARATORS = new ColumnComparators<>();
static {
FEED_COMPARATORS.add("publisher", FEED_BY_PUBLISHER);
FEED_COMPARATORS.add("files", FEED_BY_FILES);
FEED_COMPARATORS.add("status", FEED_BY_STATUS);
FEED_COMPARATORS.add("lastUpdated", FEED_BY_LAST_UPDATED);
FEED_COMPARATORS.add("Publisher", FEED_BY_PUBLISHER);
FEED_COMPARATORS.add("Files", FEED_BY_FILES);
FEED_COMPARATORS.add("Status", FEED_BY_STATUS);
FEED_COMPARATORS.add("Last Updated", FEED_BY_LAST_UPDATED);
}
private static final Comparator<WrappedFeedItem> ITEM_BY_NAME = (l, r) -> {
@@ -237,10 +237,10 @@ public class FeedServlet extends HttpServlet {
private static final ColumnComparators<WrappedFeedItem> ITEM_COMPARATORS = new ColumnComparators<>();
static {
ITEM_COMPARATORS.add("name", ITEM_BY_NAME);
ITEM_COMPARATORS.add("size", ITEM_BY_SIZE);
ITEM_COMPARATORS.add("status", ITEM_BY_STATUS);
ITEM_COMPARATORS.add("timestamp", ITEM_BY_TIMESTAMP);
ITEM_COMPARATORS.add("Name", ITEM_BY_NAME);
ITEM_COMPARATORS.add("Size", ITEM_BY_SIZE);
ITEM_COMPARATORS.add("Status", ITEM_BY_STATUS);
ITEM_COMPARATORS.add("Published", ITEM_BY_TIMESTAMP);
}
private static class WrappedFeedItem {

View File

@@ -54,6 +54,7 @@ public class Util {
_x("Feeds"),
_x("Fetching Certificates"),
_x("File"),
_x("Files"),
_x("Hashing"),
_x("Hide Certificates"),
_x("Hide Comment"),
@@ -70,6 +71,8 @@ public class Util {
_x("Pause"),
_x("Piece Size"),
_x("Progress"),
_x("Published"),
_x("Publisher"),
_x("Query"),
// noun
_x("Reason"),

View File

@@ -1,10 +1,139 @@
class Feed {
constructor(xmlNode) {
this.publisher = xmlNode.getElementsByTagName("Publisher")[0].childNodes[0].nodeValue
this.publisherB64 = xmlNode.getElementsByTagName("PublisherB64")[0].childNodes[0].nodeValue
this.files = xmlNode.getElementsByTagName("Files")[0].childNodes[0].nodeValue
this.revision = xmlNode.getElementsByTagName("Revision")[0].childNodes[0].nodeValue
this.status = xmlNode.getElementsByTagName("Status")[0].childNodes[0].nodeValue
this.active = xmlNode.getElementsByTagName("Active")[0].childNodes[0].nodeValue
this.lastUpdated = xmlNode.getElementsByTagName("LastUpdated")[0].childNodes[0].nodeValue
}
getMapping() {
// TODO: implement
}
}
class Item {
constructor(xmlNode) {
this.name = xmlNode.getElementsByTagName("Name")[0].childNodes[0].nodeValue
this.resultStatus = xmlNode.getElementsByTagName("ResultStatus")[0].childNodes[0].nodeValue
this.size = xmlNode.getElementsByTagName("Size")[0].childNodes[0].nodeValue
this.timestamp = xmlNode.getElementsByTagName("Timestamp")[0].childNodes[0].nodeValue
this.infoHash = xmlNode.getElementsByTagName("InfoHash")[0].childNodes[0].nodeValue
this.certificates = xmlNode.getElementsByTagName("Certificates")[0].childNodes[0].nodeValue
try {
this.comment = xmlNode.getElementsByTagName("Comment")[0].childNodes[0].nodeValue
} catch (ignore) {
this.comment = ""
}
}
getMapping() {
// TODO: implement
}
}
function initFeeds() {
setTimeout(refreshActive, 1)
setInterval(refreshActive, 3000)
setTimeout(refreshFeeds, 1)
setInterval(refreshFeeds, 3000)
}
function refreshActive() {
// TODO: write
var xmlhttp = new XMLHttpRequest()
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
feeds.clear()
var listOfFeeds = []
var feedNodes = this.responseXML.getElementsByTagName("Feed")
var i
for (i = 0; i < feedNodes.length; i++) {
var feed = new Feed(feedNodes[i])
feeds.set(feed.publisher, feed)
listOfFeeds.push(feed)
}
var newOrder
if (feedsSortOrder == "descending")
newOrder = "ascending"
else if (feedsSortOrder == "ascending")
newOrder = "descending"
var table = new Table(["Publisher", "Files", "Last Updated", "Status"], "sortFeeds", feedsSortKey, newOrder, null)
for (i = 0; i < listOfFeeds.length; i++) {
table.addRow(listOfFeeds[i].getMapping())
}
var feedsDiv = document.getElementById("feedsTable")
if (listOfFeeds.length > 0)
feedsDiv.innerHTML = table.render()
else
feedsDiv.innerHTML = ""
if (currentFeed != null)
displayFeed(currentFeed)
else
document.getElementById("itemsTable").innerHTML = ""
}
}
var sortParam = "&key=" + feedsSortKey + "&order=" + feedsSortOrder
xmlhttp.open("GET", encodeURI("/MuWire/Feed?section=feeds" + sortParam), true)
xmlhttp.send()
}
function displayFeed(feed) {
currentFeed = feed
var b64 = feeds.get(currentFeed).publisherB64
var xmlhttp = new XMLHttpRequest()
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var items = []
var itemNodes = this.responseXML.getElementsByTagName("Item")
var i
for (i = 0; i < itemNodes.length; i++)
items.push(new Item(itemNodes[i]))
var newOrder
if (itemsSortOrder == "descending")
newOrder = "ascending"
else if (itemsSortOrder == "ascending")
newOrder = "descending"
var table = new Table(["Name", "Size", "Status", "Published"], "sortItems", itemsSortKey, newOrder, null)
for (i = 0; i < items.length; i++) {
table.addRow(items[i].getMapping())
}
var itemsDiv = document.getElementById("itemsTable")
if (items.length > 0)
itemsDiv.innerHTML = table.render()
else
itemsDiv.innerHTML = ""
}
}
var sortParam = "&key=" + itemsSortKey + "&order=" + itemsSortOrder
xmlhttp.open("GET", encodeURI("/MuWire/Feed?section=items&publisher=" + b64 + sortParam), true)
xmlhttp.send()
}
function sortFeeds(key, order) {
feedsSortKey = key
feedsSortOrder = order
refreshActive()
}
function sortItems(key, order) {
itemsSortKey = key
itemsSortOrder = order
displayFeed(currentFeed)
}
var feeds = new Map()
var currentFeed = null
var feedsSortKey = "Publisher"
var feedsSortOrder = "descending"
var itemsSortKey = "Name"
var itemsSortOrder = "descending"