private OutputStream getLevelDataOutputStream(LevelData levelData) throws FileNotFoundException { Chapter chapter = levelData.getChapter(); return getLevelResourceFileAsOutputStream( chapter.getPlayMode().getLevelFolderName() + "/" + chapter.getFolderName() + "/" + levelData.getLevelFileName()); }
private InputStream getLevelFileInputStream(String levelFileName, Chapter chapter) throws FileNotFoundException { return getLevelResourceFileAsInputStream( chapter.getPlayMode().getLevelFolderName() + "/" + chapter.getFolderName() + "/" + levelFileName); }
public LevelData saveLevelData(LevelData levelData) throws FileNotFoundException { PrintWriter writer = new PrintWriter(getLevelDataOutputStream(levelData)); writer.print(levelData.getLevelDataJSON()); writer.close(); String fileName = levelData.getLevelFileName(); Chapter chapter = levelData.getChapter(); for (int i = 0; i < chapter.getLevelDataList().size(); i++) { if (chapter.getLevelDataList().get(i).getLevelFileName().equals(fileName)) { chapter.getLevelDataList().remove(i); chapter.getLevelDataList().add(i, levelData); break; } } return levelData; }
/** * Start a rendering job for specified {@link Chapter}. The job will sequentially render a * thumbnail one by one, starting from the first {@link LevelData}. * * @param chapter a {@link Chapter} that all of its {@link LevelData}'s thumbnail images will be * rendered. */ protected static void startRenderThumbnail(Chapter chapter) { // if (!chapter.isRenderingJobStarted()) { chapter.setRenderingJobStarted(true); System.out.println( "Thumbnail rendering job of chapter \"" + chapter.getChapterName() + "\" has started"); RendererRunnable previousJob = null; for (LevelData level : chapter.getLevelDataList()) { if (!level.isThumbnailRenderJobOccupied()) { level.setThumbnailRenderJobOccupied(); previousJob = new RendererRunnable(level, previousJob); new Thread(previousJob).start(); } } // } }
private String encodeDataTables(Class<?> limit) { String templateDATATABLES = "['%s', '%s', %d, %d]"; if (limit == Manga.class) { return String.format( templateDATATABLES, getTitle(), getAuthor(), getReleaseYear(), getChapterCount()); } else if (limit == Chapter.class) { StringBuilder sb = new StringBuilder().append("["); Iterator<Chapter> i = chapters.iterator(); while (i.hasNext()) { Chapter m = i.next(); sb.append(m.encode(Encodable.DATATABLES, limit)); if (i.hasNext()) sb.append(","); } sb.append("]"); return sb.toString(); } return null; }
public String encode(String type, Class<?> limit) { if (type.equals(Encodable.DATATABLES)) return encodeDataTables(limit); // templates String templateXML = "<Manga><Title>%s</Title><Description>%s</Description><Author>%s</Author><ReleaseYear>%d</ReleaseYear><Mature>%b</Mature><Cover>%s</Cover><Address>%s</Address><Chapters>%s</Chapters></Manga>"; String templateJSON = "{title: '%s', description: '%s', author: '%s', releaseYear: %d, mature: %b, cover: '%s', address: '%s', chapters: [%s]}"; // check for limit StringBuilder sbchapters = new StringBuilder(); if (limit != Manga.class) { Iterator<Chapter> i = chapters.iterator(); while (i.hasNext()) { Chapter c = i.next(); if (type.equals(Encodable.XML)) sbchapters.append(c.encode(type, limit)); if (type.equals(Encodable.JSON)) { sbchapters.append(c.encode(type, limit)); if (i.hasNext()) sbchapters.append(","); } } } // select format (default XML) String format = templateXML; if (type.equals(Encodable.XML)) { format = templateXML; } else if (type.equals(Encodable.JSON)) { format = templateJSON; } // build! return String.format( format, getTitle(), getDescription(), getAuthor(), getReleaseYear(), isMature(), getCover(), getAddress(), sbchapters); }
public Scene getNextLevelPlayScene(LevelData currentLevel) { Chapter chapter = currentLevel.getChapter(); List<LevelData> levelList = chapter.getLevelDataList(); if (levelList.indexOf(currentLevel) < levelList.size() - 1) { // Not last level return new PlayScene(levelList.get(levelList.indexOf(currentLevel) + 1)); } else { List<Chapter> chapterList = (currentLevel.getPlayerCount() == 1) ? singlePlayerChapterList : coopModeChapterList; int i = chapterList.indexOf(chapter) + 1; while (i < chapterList.size()) { if (!chapterList.get(i).isUserFolder() && chapterList.get(i).getLevelDataList().size() > 0) { return new PlayScene(chapterList.get(i).getLevelDataList().get(0)); } i++; } } return new MainMenuScene(false); }
public static Note decodeToNote(Map m) throws GeneralException { String chid = TypeEncoder.getString(MessageFieldNames.chapterid, m); String chver = TypeEncoder.getString(MessageFieldNames.chapterversion, m); String cname = TypeEncoder.getString(MessageFieldNames.chaptername, m, false); // Create a fake chapter to hold the id/version. Chapter c = new Chapter(); c.setId(chid); c.setVersion(chver); c.setName(cname); String cid = TypeEncoder.getString(MessageFieldNames.commentid, m); String text = TypeEncoder.getString(MessageFieldNames.text, m); Note n = new Note(); n.setChapter(c); n.setDescription(text); // Need to also setup the summary. n.setSummaryFromDescription(); n.setId(cid); n.setDealtWith(TypeEncoder.getDate(MessageFieldNames.date, m, false)); n.setPosition(TypeEncoder.getInt(MessageFieldNames.start, m)); int end = TypeEncoder.getInt(MessageFieldNames.end, m, false); if (end > -1) { n.setEndPosition(end); } return n; }
@Override protected List<Tome> parseTomes(Document htmlDocument, Serie parent) { Date today = new Date(); List<Tome> tomes = new LinkedList<>(); Elements divChapters = htmlDocument.select("div.detail_list"); if (!divChapters.isEmpty()) { Elements spansLeft = divChapters.first().select("span.left"); if (!spansLeft.isEmpty()) { for (Element span : spansLeft) { Elements tomeNumberElements = span.select("span.mr6"); final String tomeNumberString = StringUtils.substringAfter(tomeNumberElements.first().text(), "Vol "); int tomeNumber = 0; if (tomeNumberString != null && !tomeNumberString.isEmpty()) { Integer.parseInt(tomeNumberString); } Tome foundTome = null; for (Tome tome : tomes) { if (tomeNumber == tome.getNumber()) { foundTome = tome; break; } } if (foundTome == null) { Tome tome = new Tome(); tome.setNumber(tomeNumber); tome.setName("Tome " + tomeNumber); tome.setMustBeSaved(true); tome.setValidityDate(today); tome.setSerie(parent); tomes.add(tome); foundTome = tome; } Element link = span.select("a").first(); Chapter chapter = new Chapter(); chapter.setMustBeSaved(true); chapter.setUrl(link.attr("href")); String chapterNumberToParse = link.text(); String tempNumber = StringUtils.substringAfterLast(chapterNumberToParse, " "); chapter.setNumber(Float.parseFloat(tempNumber)); chapter.setName(span.text()); chapter.setTome(foundTome); foundTome.addChapter(chapter); } } } parent.setValidityDate(today); return tomes; }
private void populateLevelInChapter(Chapter chapter) { int currentFileCounter = 0; while (true) { try { String fileName = currentFileCounter + LEVEL_FILE_NAME_SUFFIX; InputStream fileStream = getLevelFileInputStream(fileName, chapter); chapter.addLevel(getFileContent(fileStream), fileName); currentFileCounter++; } catch (FileNotFoundException ex) { break; } } }
// Not the right place for this, create a better structure later. public static Map encode(Chapter c) { Map cdata = new HashMap(); cdata.put(MessageFieldNames.chapterid, c.getId()); cdata.put(MessageFieldNames.name, c.getName()); cdata.put(MessageFieldNames.text, c.getText()); cdata.put(MessageFieldNames.version, c.getVersion()); if (c.getMarkup() != null) { cdata.put(MessageFieldNames.markup, c.getMarkup()); } return cdata; }
public static Chapter decodeToChapter(Map m) throws GeneralException { String cid = TypeEncoder.getString(MessageFieldNames.chapterid, m); String cname = TypeEncoder.getString(MessageFieldNames.name, m); String ctext = TypeEncoder.getString(MessageFieldNames.text, m, false); String cver = TypeEncoder.getString(MessageFieldNames.version, m); String cm = TypeEncoder.getString(MessageFieldNames.markup, m, false); Chapter c = new Chapter(); c.setId(cid); c.setName(cname); c.setText(ctext); c.setMarkup(cm); c.setVersion(cver); return c; }
private Chapter getChapterObject(String chapContent) throws XmlPullParserException, IOException { int start = chapContent.indexOf("<body"); // Log.d("My log", "Start index: " + start); String body = "<html>" + chapContent.substring(start); String content = body.replace(" ", " "); XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(true); XmlPullParser xpp = factory.newPullParser(); xpp.setInput(new StringReader(content)); int eventType = xpp.getEventType(); // loop1: // while (eventType != XmlPullParser.END_DOCUMENT){ // Log.d("My log", "Next eventType"); // if(eventType==XmlPullParser.START_TAG){ // Log.d("My log", xpp.getName()); // if(xpp.getName().equals("body")){ // break loop1; // } // } // eventType=xpp.next(); // } // // loop2: // while (eventType != XmlPullParser.END_DOCUMENT){ // Log.d("My log", "In while loop2"); // Log.d("My log", xpp.getName()); // xpp.next(); // if(eventType==XmlPullParser.START_TAG){ // if(xpp.getName().equals("p")||xpp.getName().equals("b")){ // break loop2; // } // } // if(eventType==XmlPullParser.START_TAG){ // if // (xpp.getName().equals("h1")||xpp.getName().equals("h2")||xpp.getName().equals("h3")||xpp.getName().equals("h4")||xpp.getName().equals("br")){ // Log.d("My log", "Line break!"); // chapter.setTitle("\n"); // } // } // if(eventType == XmlPullParser.TEXT) { // chapter.setTitle(xpp.getText()); // } // eventType=xpp.next(); // } // // eventType = xpp.getEventType(); // while(eventType != XmlPullParser.END_DOCUMENT){ // if(eventType==XmlPullParser.START_TAG){ // if(xpp.getName().equals("p") || xpp.getName().equals("br")){ // Log.d("My log", "Line break!"); // chapter.setText("\n"); // } // } // if(eventType == XmlPullParser.TEXT) { // chapter.setText(xpp.getText()); // } // eventType=xpp.next(); // } String prgrph = ""; chapter = new Chapter(); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_DOCUMENT) { // Log.d("My log", "Start document"); } if (eventType == XmlPullParser.TEXT) { String strTemp = xpp.getText(); // Log.d("My log", strTemp); if (xpp.isWhitespace()) { // Do nothing } else { if (xpp.getText().contains("\n")) { prgrph += xpp.getText().replace("\n", " "); } else { prgrph += xpp.getText(); } } } if (eventType == XmlPullParser.END_TAG) { // Log.d("My log", "Tag name: "+xpp.getName()); if (xpp.getName().equals("h1") || xpp.getName().equals("h2") || xpp.getName().equals("h3") || xpp.getName().equals("h4") || xpp.getName().equals("div") || xpp.getName().equals("li") || xpp.getName().equals("p") || xpp.getName().equals("br")) { if (prgrph.length() > 0) { chapter.addParagraph(prgrph); prgrph = ""; } } } // if(eventType == XmlPullParser.START_TAG) { // Log.d("My log", "Start tag "+xpp.getName()); // } // // if(eventType == XmlPullParser.END_TAG) { // Log.d("My log", "End tag "+xpp.getName()); // // // if(xpp.getName().equals("h1")||xpp.getName().equals("h2")||xpp.getName().equals("h3")||xpp.getName().equals("span")||xpp.getName().equals("b")||xpp.getName().equals("br")){ // chapter.setTitle(xpp.getName()+xpp.nextText()); // }else // if(xpp.getName().equals("strong")||xpp.getName().equals("a")||xpp.getName().equals("li")||xpp.getName().equals("div")||xpp.getName().equals("em")||xpp.getName().equals("p")){ // Log.d("My log", "Start tag add "+xpp.getName()+xpp.nextText()); // chapter.setText(xpp.getName()+xpp.nextText()); // }else if(xpp.getName().equals("link")){ // _item.setLink(xpp.nextText()); // }else if(xpp.getName().equals("author")){ // _item.setAuthor(xpp.nextText()); // }else if(xpp.getName().equals("pubDate")){ // _item.setPubDate(xpp.nextText()); eventType = xpp.next(); } return chapter; }
@Override protected List<Image> parseImages(Document htmlDocument, Chapter parent) { NetLoader loader = new NetLoader(); parent.setValidityDate(new Date()); return getListOfFollowingImages(loader, htmlDocument, -1, parent); }