]> xmof Git - DeDRM.git/commitdiff
Don't repack EPUB if nothing has changed
authorNoDRM <no_drm123@protonmail.com>
Sun, 10 Nov 2024 14:21:09 +0000 (15:21 +0100)
committerNoDRM <no_drm123@protonmail.com>
Sun, 10 Nov 2024 14:21:09 +0000 (15:21 +0100)
CHANGELOG.md
DeDRM_plugin/__init__.py

index 9565d520a868b33f4f3dbb85c2b717325fadfd33..569d982106391b9c3e4b0892e2616ec3d40f2757 100644 (file)
@@ -109,4 +109,5 @@ This is v10.0.9, a release candidate for v10.1.0. I don't expect there to be maj
 - Fix SHA1 hash function for erdr2pml.py script (#608, thanks @unwiredben).
 - Make Kobo DRM removal not fail when there are undownloaded ebooks (#384, thanks @precondition).
 - Fix Obok import failing in Calibre flatpak due to missing ip command (#586 and #585, thanks @jcotton42).
+- Don't re-pack EPUB if there's no DRM to remove and no postprocessing done (fixes #555).
 
index 983ecc807fadac1020147bd738a50ce00aae49ab..8200122779e3ab24c88610b89a0ec2313cd5c6b0 100644 (file)
@@ -216,12 +216,16 @@ class DeDRM(FileTypePlugin):
             traceback.print_exc()
             raise
 
-    def postProcessEPUB(self, path_to_ebook):
+    def postProcessEPUB(self, path_to_ebook, path_to_original_ebook = None):
         # This is called after the DRM is removed (or if no DRM was present)
         # It does stuff like de-obfuscating fonts (by calling checkFonts) 
         # or removing watermarks. 
 
         postProcessStart = time.time()
+        postProcessingNeeded = False
+
+        # Save a backup of the EPUB path after DRM removal but before any postprocessing is done.
+        pre_postprocessing_EPUB_path = path_to_ebook
 
         try: 
             import prefs
@@ -248,6 +252,15 @@ class DeDRM(FileTypePlugin):
             postProcessEnd = time.time()
             print("{0} v{1}: Post-processing took {2:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION, postProcessEnd-postProcessStart))
 
+
+            # If the EPUB is DRM-free (path_to_original_ebook will only be set in this case), 
+            # and the post-processing hasn't changed anything in the EPUB, 
+            # return the raw original file from path_to_original_ebook from before the
+            # zipfix code was executed.
+            if ((path_to_ebook == pre_postprocessing_EPUB_path) and path_to_original_ebook is not None):
+                print("{0} v{1}: Post-processing didn't do anything on DRM-free EPUB, returning original file".format(PLUGIN_NAME, PLUGIN_VERSION))
+                return path_to_original_ebook
+
             return path_to_ebook
 
         except: 
@@ -299,9 +312,9 @@ class DeDRM(FileTypePlugin):
         # import the LCP handler
         import lcpdedrm
 
-        if (lcpdedrm.isLCPbook(path_to_ebook)):
+        if (lcpdedrm.isLCPbook(inf.name)):
             try: 
-                retval = lcpdedrm.decryptLCPbook(path_to_ebook, dedrmprefs['lcp_passphrases'], self)
+                retval = lcpdedrm.decryptLCPbook(inf.name, dedrmprefs['lcp_passphrases'], self)
             except:
                 print("Looks like that didn't work:")
                 raise
@@ -628,7 +641,7 @@ class DeDRM(FileTypePlugin):
 
         # Not a Barnes & Noble nor an Adobe Adept
         # Probably a DRM-free EPUB, but we should still check for fonts.
-        return self.postProcessEPUB(inf.name)
+        return self.postProcessEPUB(inf.name, path_to_ebook)
 
     
     def PDFIneptDecrypt(self, path_to_ebook):