Handle a few extra edge cases when parsing epubs.
authorChris Jaekl <cejaekl@yahoo.com>
Mon, 8 Jul 2019 23:45:48 +0000 (19:45 -0400)
committerChris Jaekl <cejaekl@yahoo.com>
Mon, 8 Jul 2019 23:45:48 +0000 (19:45 -0400)
Also, remove trailing white space.

book.rb

diff --git a/book.rb b/book.rb
index 6d90c0e2947a0a243b3480758518159e075d8d85..cd14ab690b6164c14c7f842b4755e85bb87d231e 100644 (file)
--- a/book.rb
+++ b/book.rb
@@ -90,7 +90,7 @@ class Book
     if nil != @author
       result.push('<i>by ' + @author.reading_order + '</i>')
     end
     if nil != @author
       result.push('<i>by ' + @author.reading_order + '</i>')
     end
-    
+
     seriesInfo = []
     series = @store.load_series(@series_id)
     if nil != series and nil != series.descr
     seriesInfo = []
     series = @store.load_series(@series_id)
     if nil != series and nil != series.descr
@@ -153,7 +153,7 @@ class Book
   def series_id
     @series_id
   end
   def series_id
     @series_id
   end
-  
+
   def series_id=(value)
     @series_id = value
   end
   def series_id=(value)
     @series_id = value
   end
@@ -270,14 +270,15 @@ class Book
     if ('01_nonfic' == category) && (nil == classification_id)
       open(Store.unclassified_csv, 'a') do |fd|
         fd.puts('"' + grouping.to_s + '","' + path + '"')
     if ('01_nonfic' == category) && (nil == classification_id)
       open(Store.unclassified_csv, 'a') do |fd|
         fd.puts('"' + grouping.to_s + '","' + path + '"')
-      end 
+      end
     end
   end
 
     end
   end
 
-  protected 
+  protected
   def scanEpub!(fileName)
     #puts 'Scanning "' + fileName.to_s + '"...'
     begin
   def scanEpub!(fileName)
     #puts 'Scanning "' + fileName.to_s + '"...'
     begin
+      Zip.warn_invalid_date = false
       Zip::File.open(fileName) do |zipfile|
         entry = zipfile.find_entry('META-INF/container.xml')
         if nil == entry
       Zip::File.open(fileName) do |zipfile|
         entry = zipfile.find_entry('META-INF/container.xml')
         if nil == entry
@@ -361,7 +362,7 @@ class Book
 
     #---------------------------------------
     # Description
 
     #---------------------------------------
     # Description
-    
+
     descrNodes = opfDoc.css('dc|description', 'dc' => @@DC_NS_URL)
     if (descrNodes.length > 0)
       descrNode = descrNodes[0]
     descrNodes = opfDoc.css('dc|description', 'dc' => @@DC_NS_URL)
     if (descrNodes.length > 0)
       descrNode = descrNodes[0]
@@ -412,9 +413,9 @@ class Book
         entry = zipfile.find_entry(href)
 
         if nil == entry
         entry = zipfile.find_entry(href)
 
         if nil == entry
-          # Although the epub standard requires the path to be relative 
+          # Although the epub standard requires the path to be relative
           # to the base of the epub (zip), some books encountered in the
           # to the base of the epub (zip), some books encountered in the
-          # wild have been found to use a bath relative to the location 
+          # wild have been found to use a bath relative to the location
           # of the opf file.
           parts = opfPath.split('/')
           opfBasePath = opfPath.split('/')[0..-2].join('/')
           # of the opf file.
           parts = opfPath.split('/')
           opfBasePath = opfPath.split('/')[0..-2].join('/')
@@ -422,6 +423,14 @@ class Book
           entry = zipfile.find_entry(coverPath)
         end
 
           entry = zipfile.find_entry(coverPath)
         end
 
+        unless entry
+          # Another case found in the wild:  cover image is at the root, but path is '../cover.jpeg'
+          if href.start_with? '../'
+            coverPath = href[3..-1]
+            entry = zipfile.find_entry(coverPath)
+          end
+        end
+
         if nil == entry
           puts 'WARNING!  Cover image "' + href + '" not found in file "' + @path + '".'
           return nil
         if nil == entry
           puts 'WARNING!  Cover image "' + href + '" not found in file "' + @path + '".'
           return nil