OSDN Git Service

remove IOException from Village.
authorOlyutorskii <olyutorskii@users.osdn.me>
Sun, 23 Feb 2020 17:52:52 +0000 (02:52 +0900)
committerOlyutorskii <olyutorskii@users.osdn.me>
Sun, 23 Feb 2020 17:52:52 +0000 (02:52 +0900)
src/main/java/jp/sfjp/jindolf/Controller.java
src/main/java/jp/sfjp/jindolf/data/Village.java

index bd2a467..9504abf 100644 (file)
@@ -1095,6 +1095,28 @@ public class Controller
     }
 
     /**
+     * アンカー先を含むPeriodの全会話を事前にロードする。
+     * 
+     * @param village 村
+     * @param anchor アンカー
+     * @return アンカー先を含むPeriod。
+     * アンカーがG国発言番号ならnull。
+     * Periodが見つからないならnull。
+     * @throws IOException 入力エラー
+     */
+    private Period loadAnchoredPeriod(Village village, Anchor anchor)
+            throws IOException{
+        if(anchor.hasTalkNo()) return null;
+
+        Period anchorPeriod = village.getPeriod(anchor);
+        if(anchorPeriod == null) return null;
+
+        PeriodLoader.parsePeriod(anchorPeriod, false);
+
+        return anchorPeriod;
+    }
+
+    /**
      * アンカーにジャンプする。
      */
     private void actionJumpAnchor(){
@@ -1121,6 +1143,7 @@ public class Controller
 
                 final List<Talk> talkList;
                 try{
+                    loadAnchoredPeriod(village, anchor);
                     talkList = village.getTalkListFromAnchor(anchor);
                     if(talkList == null || talkList.size() <= 0){
                         updateStatusBar(
@@ -1634,6 +1657,7 @@ public class Controller
 
                 final List<Talk> talkList;
                 try{
+                    loadAnchoredPeriod(village, anchor);
                     talkList = village.getTalkListFromAnchor(anchor);
                     if(talkList == null || talkList.size() <= 0){
                         updateStatusBar(
index 5e0fee2..08d313f 100644 (file)
@@ -8,14 +8,12 @@
 package jp.sfjp.jindolf.data;
 
 import java.awt.image.BufferedImage;
-import java.io.IOException;
 import java.text.MessageFormat;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import jp.sfjp.jindolf.data.html.PeriodLoader;
 import jp.sfjp.jindolf.util.GUIUtils;
 import jp.sourceforge.jindolf.corelib.LandDef;
 import jp.sourceforge.jindolf.corelib.VillageState;
@@ -479,15 +477,13 @@ public class Village{
      * アンカーに一致する会話(Talk)のリストを取得する。
      * @param anchor アンカー
      * @return Talkのリスト
-     * @throws java.io.IOException おそらくネットワークエラー
      */
-    public List<Talk> getTalkListFromAnchor(Anchor anchor)
-            throws IOException{
+    public List<Talk> getTalkListFromAnchor(Anchor anchor){
         List<Talk> result = new LinkedList<>();
 
         /* G国アンカー対応 */
         if(anchor.hasTalkNo()){
-            // 事前に全Periodがロードされているのが前提
+            // äº\8bå\89\8dã\81«å\85¨Periodã\81®å\85¨ä¼\9a話ã\81\8cã\83­ã\83¼ã\83\89ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\81®ã\81\8cå\89\8dæ\8f\90
             for(Period period : this.periodList){
                 Talk talk = period.getNumberedTalk(anchor.getTalkNo());
                 if(talk == null) continue;
@@ -499,7 +495,7 @@ public class Village{
         Period anchorPeriod = getPeriod(anchor);
         if(anchorPeriod == null) return result;
 
-        PeriodLoader.parsePeriod(anchorPeriod, false);
+        // 事前にアンカー対象Periodの全会話がロードされているのが前提
 
         for(Topic topic : anchorPeriod.getTopicList()){
             if( ! (topic instanceof Talk) ) continue;