]> gitweb.fperrin.net Git - Dictionary.git/commitdiff
Fix HtmlEntry for v6 dictionaries.
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>
Sat, 2 Sep 2017 17:50:05 +0000 (19:50 +0200)
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>
Sat, 2 Sep 2017 17:50:05 +0000 (19:50 +0200)
Util
src/com/hughes/android/dictionary/engine/Dictionary.java
src/com/hughes/android/dictionary/engine/HtmlEntry.java

diff --git a/Util b/Util
index a7bfc9e9fe94486a358662b650078c5a2b9d73ea..25459d31490c08a67141ac56d9bf5d6b9c1d4d97 160000 (submodule)
--- a/Util
+++ b/Util
@@ -1 +1 @@
-Subproject commit a7bfc9e9fe94486a358662b650078c5a2b9d73ea
+Subproject commit 25459d31490c08a67141ac56d9bf5d6b9c1d4d97
index 151bad6b66bfb781fa160c8c2cebe09cc6d935aa..3abe61e959f82d870acf576cb3b503574ae7fd30 100644 (file)
@@ -94,7 +94,7 @@ public class Dictionary implements RAFSerializable<Dictionary> {
                               CACHE_SIZE);
             if (dictFileVersion >= 5) {
                 htmlEntries = CachingList.create(
-                                  RAFList.create(ch, new HtmlEntry.Serializer(this), ch.position(), dictFileVersion, dictInfo + " html: "),
+                                  RAFList.create(ch, new HtmlEntry.Serializer(this, ch), ch.position(), dictFileVersion, dictInfo + " html: "),
                                   CACHE_SIZE);
             } else {
                 htmlEntries = Collections.emptyList();
@@ -130,7 +130,7 @@ public class Dictionary implements RAFSerializable<Dictionary> {
         System.out.println("text start: " + raf.getFilePointer());
         RAFList.write(raf, textEntries, new TextEntry.Serializer(this));
         System.out.println("html index start: " + raf.getFilePointer());
-        RAFList.write(raf, htmlEntries, new HtmlEntry.Serializer(this), 64, true);
+        RAFList.write(raf, htmlEntries, new HtmlEntry.Serializer(this, null), 64, true);
         System.out.println("html data start: " + raf.getFilePointer());
         assert htmlData == null;
         RAFList.write(raf, htmlEntries, new HtmlEntry.DataSerializer(), 128, true);
index ca153a70126af7638ffcbed677a65402227e6eb8..ce57e11a980cc2011bb57af85cb60f20896d5bf9 100644 (file)
@@ -12,6 +12,7 @@ import java.io.PrintStream;
 import java.io.RandomAccessFile;
 import java.io.UnsupportedEncodingException;
 import java.lang.ref.SoftReference;
+import java.nio.channels.FileChannel;
 import java.util.List;
 import java.util.regex.Pattern;
 
@@ -28,11 +29,11 @@ public class HtmlEntry extends AbstractEntry implements Comparable<HtmlEntry> {
         lazyHtmlLoader = null;
     }
 
-    public HtmlEntry(Dictionary dictionary, DataInput raf, final int index)
+    public HtmlEntry(Dictionary dictionary, FileChannel ch, DataInput raf, final int index)
     throws IOException {
         super(dictionary, raf, index);
         title = raf.readUTF();
-        lazyHtmlLoader = new LazyHtmlLoader(raf, dictionary.htmlData, index);
+        lazyHtmlLoader = new LazyHtmlLoader(ch, raf, dictionary.htmlData, index);
         html = null;
     }
 
@@ -73,14 +74,16 @@ public class HtmlEntry extends AbstractEntry implements Comparable<HtmlEntry> {
     static final class Serializer implements RAFListSerializer<HtmlEntry> {
 
         final Dictionary dictionary;
+        final FileChannel ch;
 
-        Serializer(Dictionary dictionary) {
+        Serializer(Dictionary dictionary, FileChannel ch) {
             this.dictionary = dictionary;
+            this.ch = ch;
         }
 
         @Override
         public HtmlEntry read(DataInput raf, final int index) throws IOException {
-            return new HtmlEntry(dictionary, raf, index);
+            return new HtmlEntry(dictionary, ch, raf, index);
         }
 
         @Override
@@ -210,7 +213,8 @@ public class HtmlEntry extends AbstractEntry implements Comparable<HtmlEntry> {
     // --------------------------------------------------------------------
 
     public static final class LazyHtmlLoader {
-        final RandomAccessFile raf;
+        final DataInput raf;
+        final FileChannel ch;
         final long offset;
         final int numBytes;
         final int numZipBytes;
@@ -220,20 +224,22 @@ public class HtmlEntry extends AbstractEntry implements Comparable<HtmlEntry> {
         // Not sure this volatile is right, but oh well.
         volatile SoftReference<String> htmlRef = new SoftReference<String>(null);
 
-        private LazyHtmlLoader(final DataInput inp, List<byte[]> data, int index) throws IOException {
+        private LazyHtmlLoader(FileChannel ch, final DataInput inp, List<byte[]> data, int index) throws IOException {
             this.data = data;
             this.index = index;
             if (data != null) {
                 this.raf = null;
+                this.ch = null;
                 this.offset = 0;
                 this.numBytes = -1;
                 this.numZipBytes = -1;
                 return;
             }
-            raf = (RandomAccessFile)inp;
+            raf = inp;
+            this.ch = ch;
             numBytes = raf.readInt();
             numZipBytes = raf.readInt();
-            offset = raf.getFilePointer();
+            offset = ch.position();
             raf.skipBytes(numZipBytes);
         }
 
@@ -254,10 +260,10 @@ public class HtmlEntry extends AbstractEntry implements Comparable<HtmlEntry> {
             System.out.println("Loading Html: numBytes=" + numBytes + ", numZipBytes="
                                + numZipBytes);
             final byte[] zipBytes = new byte[numZipBytes];
-            synchronized (raf) {
+            synchronized (ch) {
                 try {
-                    raf.seek(offset);
-                    raf.read(zipBytes);
+                    ch.position(offset);
+                    raf.readFully(zipBytes);
                 } catch (IOException e) {
                     throw new RuntimeException("Failed to read HTML data from dictionary", e);
                 }