File cacheHtml = new File(cache, "index.html");
cache = new File(cache, ".cache");
- Output gopher = new Gopher(null, hostname, port);
- Output html = new Html(null);
+ Output gopher = new Gopher(null, hostname, preselector, port);
+ Output html = new Html(null, hostname, preselector, port);
FileWriter writer = new FileWriter(cache);
try {
writer.append(gopher.getIndexHeader());
writerHtml.append(html.getIndexHeader());
- Type types[];
- if (type == null) {
- types = Type.values();
- } else {
- types = new Type[] { type };
- }
-
BasicSupport.setPreselector(preselector);
- for (Type type : types) {
+ for (Type type : Type.values()) {
BasicSupport support = BasicSupport.getSupport(type);
- list(support);
+
+ if (type == this.type || this.type == null) {
+ list(support);
+ }
writer.append("1" + support.getDescription()).append("\t")
.append("1" + support.getSelector()) //
* in case of I/O error
**/
private void list(BasicSupport support) throws IOException {
- Output gopher = new Gopher(support.getType(), hostname, port);
- Output html = new Html(support.getType());
+ Output gopher = new Gopher(support.getType(), hostname, preselector,
+ port);
+ Output html = new Html(support.getType(), hostname, preselector, port);
new File(dir, support.getSelector()).mkdirs();
System.exit(1);
}
- // Selector base (empty is ok, DO NOT end with /)
+ // Selector base :
+ // - empty is ok
+ // - DO NOT end with /
+ // - always starts with / if not empty
String preselector = "";
if (preselectorStr != null && !preselectorStr.startsWith("/")) {
preselector = "/" + preselectorStr;
Type type = null;
if (!"ALL".equals(typeStr)) {
try {
- Type.valueOf(typeStr.toUpperCase());
+ type = Type.valueOf(typeStr.toUpperCase());
} catch (IllegalArgumentException e) {
System.err.println("Invalid type: " + typeStr);
System.exit(1);
public class Gopher extends Output {
static private final int LINE_SIZE = 70;
- private String hostname;
- private int port;
-
- public Gopher(Type type, String hostname, int port) {
- super(type);
-
- this.hostname = hostname;
- this.port = port;
+ public Gopher(Type type, String hostname, String preselector, int port) {
+ super(type, hostname, preselector, port);
}
@Override
public String getIndexHeader() {
- return "iHello world!\r\niThis is my news site.\r\ni\r\n";
+ StringBuilder builder = new StringBuilder();
+
+ appendCenter(builder, "NEWS", true);
+ appendLeft(builder, "", "");
+ appendLeft(builder, "You will find here a few pages full of news.", "");
+ appendLeft(builder, "", "");
+ appendLeft(
+ builder,
+ "They are simply scrapped from their associated webpage and converted into a gopher friendly format, updated a few times a day.",
+ "");
+ appendLeft(builder, "", "");
+
+ return builder.toString();
}
@Override
builder.append("i\r\n");
- for (Comment comment : comments) {
- append(builder, comment, "");
+ if (comments != null) {
+ for (Comment comment : comments) {
+ append(builder, comment, "");
+ }
}
builder.append("i\r\n");
if (links) {
appendCenter(builder, story.getTitle(), true);
builder.append("i\r\n");
- appendLeft(builder, story.getDetails(), "", "", " ");
- builder.append("i\r\n");
- builder.append("i o News link: ").append(story.getUrlInternal());
+ appendLeft(builder, story.getDetails(), " ");
builder.append("i\r\n");
- builder.append("i o Source link: ").append(story.getUrlExternal());
+ builder.append("i o News link: ").append(story.getUrlInternal())
+ .append("\r\n");
+ builder.append("i o Source link: ").append(story.getUrlExternal())
+ .append("\r\n");
builder.append("i\r\n");
} else {
builder.append('1').append(story.getTitle()) //
.append('\t').append(hostname) //
.append('\t').append(port) //
.append("\r\n");
- appendLeft(builder, story.getDetails(), "", "", " ");
+ appendLeft(builder, story.getDetails(), " ");
}
builder.append("i\r\n");
- appendLeft(builder, story.getContent(), "", "", " ");
+ appendLeft(builder, story.getContent(), " ");
builder.append("i\r\n");
}
}
+ // note: adds "i"
+ private static void appendLeft(StringBuilder builder, String text,
+ String space) {
+ appendLeft(builder, text, "", "", space);
+ }
+
// note: adds "i"
private static void appendLeft(StringBuilder builder, String text,
String prependFirst, String prependOthers, String space) {
import be.nikiroo.gofetch.support.BasicSupport.Type;
public class Html extends Output {
- public Html(Type type) {
- super(type);
+ public Html(Type type, String hostname, String preselector, int port) {
+ super(type, hostname, preselector, port);
}
@Override
public String getIndexHeader() {
- return "<h1>Hello world!</h1><br/>TODO\n";
+ String gopherUrl = "gopher://" + hostname + preselector + ":" + port;
+
+ return "<h1>News</h1>\n"//
+ + "<p>You will find here a few pages full of news, mirroring <a href='"
+ + gopherUrl + "'>"
+ + gopherUrl
+ + "</a>.</p>\n"//
+ + "<br/>\n"//
+ + "<p>They are simply scrapped from their associated webpage and updated a few times a day.</p>\n"//
+ + "<br/>\n"//
+ ;
}
@Override
@Override
public String export(Story story) {
- return appendHtml(new StringBuilder(), story, true).append("<hr/>\n")
- .toString();
+ StringBuilder builder = new StringBuilder();
+
+ builder.append("<div class='story-header'>\n");
+ appendHtml(builder, story, true);
+ builder.append("<hr/>\n");
+ builder.append("</div>\n");
+
+ return builder.toString();
}
@Override
public String export(Story story, List<Comment> comments) {
StringBuilder builder = new StringBuilder();
- appendHtml(builder, story, false);
- // TODO: ext link and link
+ builder.append("<div class='story'>\n");
+ appendHtml(builder, story, false);
+ builder.append("<hr/>\n");
- builder.append("<hr/>");
- for (Comment comment : comments) {
- appendHtml(builder, comment, " ");
+ if (comments != null) {
+ for (Comment comment : comments) {
+ appendHtml(builder, comment, " ");
+ }
}
+ builder.append("</div>\n");
+
return builder.toString();
}
}
private StringBuilder appendHtml(StringBuilder builder, Story story,
- boolean links) {
- // TODO
- builder.append("<div class='story'>");
- if (links) {
+ boolean resume) {
+ if (resume) {
builder.append(" <h1><a href='" + story.getId() + ".html'>"
- + story.getTitle() + "</a></h1>");
+ + story.getTitle() + "</a></h1>\n");
} else {
- builder.append(" <h1>" + story.getTitle() + "</h1>");
+ builder.append(" <h1>" + story.getTitle() + "</h1>\n");
}
builder.append(" <div class='details'>(" + story.getDetails()
- + ")</div>");
- builder.append(" <br/>");
- builder.append(" <div class='content'>");
- builder.append(" " + story.getContent());
- builder.append(" </div>");
- builder.append("</div>");
+ + ")</div>\n");
+ builder.append(" <br/>\n");
+
+ if (!resume) {
+ builder.append(" <ul>\n");
+ builder.append(" <li>News link: <a href='"
+ + story.getUrlInternal() + "'>" + story.getUrlInternal()
+ + "</a></li>\n");
+ builder.append(" <li>Source link: <a href='"
+ + story.getUrlExternal() + "'>" + story.getUrlExternal()
+ + "</a></li>\n");
+ builder.append(" </ul>\n");
+ builder.append(" <br/>\n");
+ }
+
+ builder.append(" <div class='content'>\n");
+ builder.append(" " + story.getContent() + "\n");
+ builder.append(" </div>\n");
return builder;
}
*/
protected Type type;
+ /**
+ * The gopher hostname to use.
+ */
+ protected String hostname;
+
+ /**
+ * The sub directory and (pre-)selector to use for the resources.
+ */
+ protected String preselector;
+
+ /**
+ * The Gopher port to use.
+ */
+ protected int port;
+
/**
* Create a new {@link Output} class for the given type (which can be NULL).
*
* @param type
* the type or NULL for no type
+ * @param hostname
+ * the gopher hostname to use
+ * @param preselector
+ * the sub directory and (pre-)selector to use for the resources
+ * @param port
+ * the Gopher port to use
*/
- public Output(Type type) {
+ public Output(Type type, String hostname, String preselector, int port) {
this.type = type;
+ this.hostname = hostname;
+ this.preselector = preselector;
+ this.port = port;
}
/**
import be.nikiroo.gofetch.data.Comment;
import be.nikiroo.gofetch.data.Story;
+/**
+ * Support <a href='https://slashdot.org/'>https://slashdot.org/</a>.
+ *
+ * @author niki
+ */
public class Slashdot extends BasicSupport {
@Override
public String getDescription() {
if (titles.size() == 0) {
continue;
}
+
Element title = titles.get(0);
String id = "" + title.attr("id");