Skip to content

Commit

Permalink
Don't repack EPUB if nothing has changed
Browse files Browse the repository at this point in the history
  • Loading branch information
noDRM committed Nov 10, 2024
1 parent c5ee327 commit de3d91f
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 4 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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).

21 changes: 17 additions & 4 deletions DeDRM_plugin/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,12 +216,16 @@ def initialize(self):
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
Expand All @@ -248,6 +252,15 @@ def postProcessEPUB(self, path_to_ebook):
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:
Expand Down Expand Up @@ -299,9 +312,9 @@ def ePubDecrypt(self,path_to_ebook):
# 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
Expand Down Expand Up @@ -628,7 +641,7 @@ def ePubDecrypt(self,path_to_ebook):

# 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):
Expand Down

0 comments on commit de3d91f

Please sign in to comment.