X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Fgofetch%2FFetcher.java;fp=src%2Fbe%2Fnikiroo%2Fgofetch%2FFetcher.java;h=725355c2a1c173deba5c54f85edf08967076d2cd;hb=5c056aade2e020276e039f81acba7bcb2b12e87f;hp=bf3af6e9664d07edcafff0df57de4766025a5975;hpb=2527107526aea628df09c3ad53432e9a5480fcd7;p=gofetch.git diff --git a/src/be/nikiroo/gofetch/Fetcher.java b/src/be/nikiroo/gofetch/Fetcher.java index bf3af6e..725355c 100644 --- a/src/be/nikiroo/gofetch/Fetcher.java +++ b/src/be/nikiroo/gofetch/Fetcher.java @@ -7,7 +7,6 @@ import java.io.IOException; import java.util.Arrays; import java.util.List; -import be.nikiroo.gofetch.data.Comment; import be.nikiroo.gofetch.data.Story; import be.nikiroo.gofetch.output.Gopher; import be.nikiroo.gofetch.output.Html; @@ -72,47 +71,53 @@ public class Fetcher { * in case of I/O error */ public void start() throws IOException { - File cache = new File(dir, preselector); - cache.mkdirs(); - File cacheHtml = new File(cache, "index.html"); - cache = new File(cache, ".cache"); + StringBuilder gopherBuilder = new StringBuilder(); + StringBuilder htmlBuilder = new StringBuilder(); + + BasicSupport.setPreselector(preselector); + for (Type type : Type.values()) { + BasicSupport support = BasicSupport.getSupport(type); + + if (type == this.type || this.type == null) { + 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"); + + String ref = support.getSelector(); + while (ref.startsWith("/")) { + ref = ref.substring(1); + } + htmlBuilder.append("
" + + support.getDescription() + "
\n"); + } + + File gopherCache = new File(dir, preselector); + gopherCache.mkdirs(); + File htmlIndex = new File(gopherCache, "index.html"); + gopherCache = new File(gopherCache, ".cache"); Output gopher = new Gopher(null, hostname, preselector, port); Output html = new Html(null, hostname, preselector, port); - FileWriter writer = new FileWriter(cache); + FileWriter writer = new FileWriter(gopherCache); try { - FileWriter writerHtml = new FileWriter(cacheHtml); - try { - writer.append(gopher.getIndexHeader()); - writerHtml.append(html.getIndexHeader()); - - BasicSupport.setPreselector(preselector); - for (Type type : Type.values()) { - BasicSupport support = BasicSupport.getSupport(type); - - if (type == this.type || this.type == null) { - list(support); - } - - writer.append("1" + support.getDescription()).append("\t") - .append("1" + support.getSelector()) // - .append("\t").append(hostname) // - .append("\t").append(Integer.toString(port)) // - .append("\r\n"); - String ref = support.getSelector(); - while (ref.startsWith("/")) { - ref = ref.substring(1); - } - writerHtml.append("
" + support.getDescription() + "
\n"); - } - - writer.append(gopher.getIndexFooter()); - writerHtml.append(html.getIndexFooter()); - } finally { - writerHtml.close(); - } + writer.append(gopher.getIndexHeader()); + writer.append(gopherBuilder.toString()); + writer.append(gopher.getIndexFooter()); + } finally { + writer.close(); + } + + try { + writer = new FileWriter(htmlIndex); + writer.append(html.getIndexHeader()); + writer.append(htmlBuilder.toString()); + writer.append(html.getIndexFooter()); } finally { writer.close(); } @@ -128,35 +133,40 @@ public class Fetcher { * in case of I/O error **/ private void list(BasicSupport support) throws IOException { + // Get stories: + System.err + .print("Listing recent news for " + support.getType() + "..."); + List stories = support.list(); + System.err.println(" " + stories.size() + " stories found!"); + + // Get comments (and update stories if needed): + int i = 1; + for (Story story : stories) { + System.err.println(String.format("%02d/%02d", i, stories.size()) + + " Fetching full story " + story.getId() + "..."); + support.fetch(story); + i++; + } + 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.err - .print("Listing recent news for " + support.getType() + "..."); - List stories = support.list(); - System.err.println(" " + stories.size() + " stories found!"); - int i = 1; for (Story story : stories) { IOUtils.writeSmallFile(dir, story.getSelector() + ".header", - gopher.export(story)); + gopher.exportHeader(story)); IOUtils.writeSmallFile(dir, story.getSelector() + ".header.html", - html.export(story)); - - System.err.println(String.format("%02d/%02d", i, stories.size()) - + " Fetching comments for story " + story.getId() + "..."); - List comments = support.getComments(story); + html.exportHeader(story)); IOUtils.writeSmallFile(dir, story.getSelector(), - gopher.export(story, comments)); + gopher.export(story)); IOUtils.writeSmallFile(dir, story.getSelector() + ".html", - html.export(story, comments)); - - i++; + html.export(story)); } + // Finding headers of all stories in cache: File varDir = new File(dir, support.getSelector()); String[] headers = varDir.list(new FilenameFilter() { @Override @@ -165,29 +175,36 @@ public class Fetcher { } }); - File cache = new File(varDir, ".cache"); - File cacheHtml = new File(varDir, "index.html"); - FileWriter writer = new FileWriter(cache); + // 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; + } + } + + // Writing the cache/index files with the stories: + File gopherCache = new File(varDir, ".cache"); + FileWriter writer = new FileWriter(gopherCache); + try { + for (i = from; i >= to; i--) { + writer.append(IOUtils + .readSmallFile(new File(varDir, headers[i]))); + } + } finally { + writer.close(); + } + + File htmlIndex = new File(varDir, "index.html"); + writer = new FileWriter(htmlIndex); try { - FileWriter writerHtml = new FileWriter(cacheHtml); - try { - if (headers.length > 0) { - Arrays.sort(headers); - int from = headers.length - 1; - int to = headers.length - maxStories; - if (to < 0) { - to = 0; - } - for (i = from; i >= to; i--) { - writer.append(IOUtils.readSmallFile(new File(varDir, - headers[i]))); - - writerHtml.append(IOUtils.readSmallFile(new File( - varDir, headers[i] + ".html"))); - } - } - } finally { - writerHtml.close(); + for (i = from; i >= to; i--) { + writer.append(IOUtils.readSmallFile(new File(varDir, headers[i] + + ".html"))); } } finally { writer.close();