forked from I2P_Developers/i2p.i2p
CLI: Add NewsHandler CLI to fetch news from servers
This commit is contained in:
@@ -18,7 +18,8 @@ public class CommandLine extends net.i2p.router.CommandLine {
|
||||
protected static final List<String> NCLASSES = Arrays.asList(new String[] {
|
||||
"com.vuze.plugins.mlab.MLabRunner",
|
||||
"net.i2p.router.news.BlocklistEntries",
|
||||
"net.i2p.router.news.NewsXMLParser"
|
||||
"net.i2p.router.news.NewsXMLParser",
|
||||
"net.i2p.router.update.NewsHandler"
|
||||
});
|
||||
|
||||
protected CommandLine() {}
|
||||
|
@@ -1,12 +1,18 @@
|
||||
package net.i2p.router.update;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import gnu.getopt.Getopt;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.crypto.SU3File;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.router.web.ConfigUpdateHelper;
|
||||
import net.i2p.util.EepGet;
|
||||
import net.i2p.update.*;
|
||||
import static net.i2p.update.UpdateType.*;
|
||||
import static net.i2p.update.UpdateMethod.*;
|
||||
@@ -17,9 +23,9 @@ import static net.i2p.update.UpdateMethod.*;
|
||||
*
|
||||
* Overrides UpdateRunner for convenience, this is not an Updater
|
||||
*
|
||||
* @since 0.9.4 moved from NewsFetcher
|
||||
* @since 0.9.4 moved from NewsFetcher, public since 0.9.57 for CLI only
|
||||
*/
|
||||
class NewsHandler extends UpdateHandler implements Checker {
|
||||
public class NewsHandler extends UpdateHandler implements Checker {
|
||||
|
||||
/**
|
||||
* NOTE: If you change, also change in Android:
|
||||
@@ -64,4 +70,91 @@ class NewsHandler extends UpdateHandler implements Checker {
|
||||
UpdateRunner update = new NewsFetcher(_context, _mgr, updateSources);
|
||||
return update;
|
||||
}
|
||||
|
||||
/**
|
||||
* CLI fetch
|
||||
*
|
||||
* @since 0.9.57
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
I2PAppContext ctx = I2PAppContext.getGlobalContext();
|
||||
String url = ConfigUpdateHelper.getNewsURL(ctx);
|
||||
String proxyHost = "127.0.0.1";
|
||||
int proxyPort = 4444;
|
||||
String lang = null;
|
||||
boolean custom = false;
|
||||
boolean error = false;
|
||||
|
||||
Getopt g = new Getopt("newshandler", args, "p:l:u:");
|
||||
int c;
|
||||
while ((c = g.getopt()) != -1) {
|
||||
switch (c) {
|
||||
case 'p':
|
||||
String s = g.getOptarg();
|
||||
int colon = s.indexOf(':');
|
||||
if (colon >= 0) {
|
||||
if (colon > 0)
|
||||
proxyHost = s.substring(0, colon);
|
||||
String port = s.substring(colon + 1);
|
||||
proxyPort = Integer.parseInt(port);
|
||||
} else {
|
||||
proxyHost = s;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'l':
|
||||
lang = g.getOptarg();
|
||||
break;
|
||||
|
||||
case 'u':
|
||||
url = g.getOptarg();
|
||||
custom = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
error = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (error || args.length - g.getOptind() != 0) {
|
||||
System.err.println("Usage: newshandler [-p 127.0.0.1[:4444]] [-l en] [-u url]");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
if (lang != null)
|
||||
url = url + "?lang=" + lang;
|
||||
File file = new File("news-primary.su3");
|
||||
System.out.println("Fetching news from primary server at " + url);
|
||||
test(ctx, proxyHost, proxyPort, url, file);
|
||||
if (!custom) {
|
||||
url = DEFAULT_BACKUP_NEWS_URL_SU3;
|
||||
if (lang != null)
|
||||
url = url + "?lang=" + lang;
|
||||
file = new File("news-backup.su3");
|
||||
System.out.println("Fetching news from backup server at " + url);
|
||||
test(ctx, proxyHost, proxyPort, url, file);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* CLI fetch
|
||||
*
|
||||
* @since 0.9.57
|
||||
*/
|
||||
private static void test(I2PAppContext ctx, String phost, int pport, String url, File file) {
|
||||
file.delete();
|
||||
String path = file.getAbsolutePath();
|
||||
EepGet get = new EepGet(ctx, phost, pport, 0, file.getAbsolutePath(), url);
|
||||
if (get.fetch()) {
|
||||
int status = get.getStatusCode();
|
||||
if (status == 200) {
|
||||
SU3File.main(new String[] {"showversion", path} );
|
||||
SU3File.main(new String[] {"extract", "-x", path} );
|
||||
} else {
|
||||
System.out.println("Failed to fetch, status " + status + " for " + url);
|
||||
}
|
||||
} else {
|
||||
System.out.println("Failed to fetch " + url);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user