Esempio n. 1
0
 private OutputStream getLevelDataOutputStream(LevelData levelData) throws FileNotFoundException {
   Chapter chapter = levelData.getChapter();
   return getLevelResourceFileAsOutputStream(
       chapter.getPlayMode().getLevelFolderName()
           + "/"
           + chapter.getFolderName()
           + "/"
           + levelData.getLevelFileName());
 }
Esempio n. 2
0
 private InputStream getLevelFileInputStream(String levelFileName, Chapter chapter)
     throws FileNotFoundException {
   return getLevelResourceFileAsInputStream(
       chapter.getPlayMode().getLevelFolderName()
           + "/"
           + chapter.getFolderName()
           + "/"
           + levelFileName);
 }
Esempio n. 3
0
  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();
      }
    }
    // }
  }
Esempio n. 5
0
 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;
 }
Esempio n. 6
0
  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);
  }
Esempio n. 7
0
  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);
  }
Esempio n. 8
0
  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;
  }
Esempio n. 10
0
  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;
      }
    }
  }
Esempio n. 11
0
  // 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;
  }
Esempio n. 12
0
  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("&nbsp;", " ");
    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);
 }