X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Fgofetch%2FFetcher.java;h=9dbf0e10bf60d52daad2081f9c615d27dc19973d;hb=6c13eccdd9953ff6d65f6fcad3a01fd2d57d68fd;hp=725355c2a1c173deba5c54f85edf08967076d2cd;hpb=5c056aade2e020276e039f81acba7bcb2b12e87f;p=gofetch.git diff --git a/src/be/nikiroo/gofetch/Fetcher.java b/src/be/nikiroo/gofetch/Fetcher.java index 725355c..9dbf0e1 100644 --- a/src/be/nikiroo/gofetch/Fetcher.java +++ b/src/be/nikiroo/gofetch/Fetcher.java @@ -4,7 +4,9 @@ import java.io.File; import java.io.FileWriter; import java.io.FilenameFilter; import java.io.IOException; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import be.nikiroo.gofetch.data.Story; @@ -82,24 +84,23 @@ public class Fetcher { list(support); } - gopherBuilder.append("1" + support.getDescription()).append("\t") - .append("1" + support.getSelector()) // - .append("\t").append(hostname) // - .append("\t").append(Integer.toString(port)) // - .append("\r\n"); + gopherBuilder.append(getLink(support.getDescription(), + support.getSelector(), true, false)); String ref = support.getSelector(); while (ref.startsWith("/")) { ref = ref.substring(1); } - htmlBuilder.append("
" - + support.getDescription() + "
\n"); + ref = "../" + ref + "/index.html"; + + htmlBuilder.append(getLink(support.getDescription(), ref, true, + true)); } File gopherCache = new File(dir, preselector); gopherCache.mkdirs(); File htmlIndex = new File(gopherCache, "index.html"); - gopherCache = new File(gopherCache, ".cache"); + gopherCache = new File(gopherCache, "gophermap"); Output gopher = new Gopher(null, hostname, preselector, port); Output html = new Html(null, hostname, preselector, port); @@ -175,39 +176,77 @@ public class Fetcher { } }); - // Finding which ones to show: - int from = 0; - int to = 0; - if (headers.length > 0) { - Arrays.sort(headers); - from = headers.length - 1; - to = headers.length - maxStories; - if (to < 0) { - to = 0; + // Reverse sort: + Arrays.sort(headers); + List tmp = Arrays.asList(headers); + Collections.reverse(tmp); + headers = tmp.toArray(new String[] {}); + // + + // Write the index (with "MORE" links if needed) + int page = 0; + List gopherLines = new ArrayList(); + List htmlLines = new ArrayList(); + for (i = 0; i < headers.length; i++) { + gopherLines + .add(IOUtils.readSmallFile(new File(varDir, headers[i]))); + htmlLines.add(IOUtils.readSmallFile(new File(varDir, headers[i] + + ".html"))); + + boolean enoughStories = (i > 0 && i % maxStories == 0); + boolean last = i == headers.length - 1; + if (enoughStories || last) { + if (!last) { + gopherLines.add(getLink("More", support.getSelector() + + "gophermap_" + (page + 1), false, false)); + htmlLines.add(getLink("More", "index_" + (page + 1) + + ".html", false, true)); + } + + write(gopherLines, varDir, "gophermap", "", page); + write(htmlLines, varDir, "index", ".html", page); + gopherLines = new ArrayList(); + htmlLines = new ArrayList(); + page++; } } + } - // Writing the cache/index files with the stories: - File gopherCache = new File(varDir, ".cache"); - FileWriter writer = new FileWriter(gopherCache); + private void write(List lines, File varDir, String basename, + String ext, int page) throws IOException { + File file = new File(varDir, basename + (page > 0 ? "_" + page : "") + + ext); + + FileWriter writer = new FileWriter(file); try { - for (i = from; i >= to; i--) { - writer.append(IOUtils - .readSmallFile(new File(varDir, headers[i]))); + for (String line : lines) { + writer.append(line).append("\r\n"); } } finally { writer.close(); } + } - File htmlIndex = new File(varDir, "index.html"); - writer = new FileWriter(htmlIndex); - try { - for (i = from; i >= to; i--) { - writer.append(IOUtils.readSmallFile(new File(varDir, headers[i] - + ".html"))); - } - } finally { - writer.close(); + /** + * + * @param name + * @param ref + * @param menu + * menu (gophermap, i) mode + * @param html + * @return + */ + private String getLink(String name, String ref, boolean menu, boolean html) { + if (!html) { + return new StringBuilder().append((menu ? "1" : "0") + name) + .append("\t").append(ref) // + .append("\t").append(hostname) // + .append("\t").append(Integer.toString(port)) // + .append("\r\n").toString(); } + + return new StringBuilder().append( + "\n").toString(); } }