From 5d75018719b33353588199b59824e5ce7e452065 Mon Sep 17 00:00:00 2001 From: Apprentice Harper Date: Thu, 29 Sep 2016 07:00:11 +0100 Subject: [PATCH] Topaz fix and updated FAQ reference to point to github --- .../DeDRM.app/Contents/Info.plist | 4 ++-- .../Contents/Resources/DeDRM_Help.htm | 2 +- .../DeDRM.app/Contents/Resources/__init__.py | 14 ++++++++------ .../Contents/Resources/convert2xml.py | 1 + .../Contents/Resources/topazextract.py | 2 +- .../DeDRM_App/DeDRM_lib/DeDRM_App.pyw | 3 ++- .../DeDRM_App/DeDRM_lib/lib/DeDRM_Help.htm | 2 +- .../DeDRM_App/DeDRM_lib/lib/__init__.py | 13 +++++++------ .../DeDRM_App/DeDRM_lib/lib/convert2xml.py | 1 + .../DeDRM_App/DeDRM_lib/lib/topazextract.py | 2 +- DeDRM_calibre_plugin/DeDRM_plugin.zip | Bin 353493 -> 353614 bytes .../DeDRM_plugin/DeDRM_Help.htm | 2 +- DeDRM_calibre_plugin/DeDRM_plugin/__init__.py | 13 +++++++------ .../DeDRM_plugin/convert2xml.py | 1 + .../DeDRM_plugin/topazextract.py | 2 +- DeDRM_calibre_plugin/DeDRM_plugin_ReadMe.txt | 2 +- 16 files changed, 36 insertions(+), 28 deletions(-) diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist index aaef336..a079e5a 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist @@ -24,7 +24,7 @@ CFBundleExecutable droplet CFBundleGetInfoString - DeDRM AppleScript 6.5.1 Written 2010–2016 by Apprentice Alf et al. + DeDRM AppleScript 6.5.2 Written 2010–2016 by Apprentice Alf et al. CFBundleIconFile DeDRM CFBundleIdentifier @@ -36,7 +36,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 6.5.1 + 6.5.2 CFBundleSignature dplt LSRequiresCarbon diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/DeDRM_Help.htm b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/DeDRM_Help.htm index 86653eb..3fed9df 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/DeDRM_Help.htm +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/DeDRM_Help.htm @@ -55,7 +55,7 @@ p {margin-top: 0}
  • And probably many more.
  • -

    For additional help read the FAQs at Apprentice Alf’s Blog and ask questions in the comments section of the first post.

    +

    For additional help read the FAQs at Apprentice Harpers’s GitHub repository. You can ask questions in the comments section of the first post at Apprentice Alf's blog or raise an issue.

    Linux Systems Only

    Generating decryption keys for Adobe Digital Editions and Kindle for PC

    diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py index dd3da88..b359451 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py @@ -54,6 +54,8 @@ __docformat__ = 'restructuredtext en' # 6.5.0 - Big update to Macintosh app # Fix for some more 'new' tags in Topaz ebooks. # Fix an error in wineutils.py +# 6.5.1 - Updated version number, added PDF check for DRM-free documents +# 6.5.2 - Another Topaz fix """ @@ -61,7 +63,7 @@ Decrypt DRMed ebooks. """ PLUGIN_NAME = u"DeDRM" -PLUGIN_VERSION_TUPLE = (6, 5, 0) +PLUGIN_VERSION_TUPLE = (6, 5, 2) PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE]) # Include an html helpfile in the plugin's zipfile with the following name. RESOURCE_NAME = PLUGIN_NAME + '_Help.htm' @@ -285,7 +287,7 @@ class DeDRM(FileTypePlugin): except Exception, e: pass - print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Alf's blog: http://apprenticealf.wordpress.com/".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) + print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) raise DeDRMError(u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime)) # import the Adobe Adept ePub handler @@ -385,7 +387,7 @@ class DeDRM(FileTypePlugin): pass # Something went wrong with decryption. - print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Alf's blog: http://apprenticealf.wordpress.com/".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) + print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) raise DeDRMError(u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime)) # Not a Barnes & Noble nor an Adobe Adept @@ -485,7 +487,7 @@ class DeDRM(FileTypePlugin): pass # Something went wrong with decryption. - print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Alf's blog: http://apprenticealf.wordpress.com/".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) + print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) raise DeDRMError(u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime)) @@ -553,7 +555,7 @@ class DeDRM(FileTypePlugin): pass if not decoded: #if you reached here then no luck raise and exception - print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Alf's blog: http://apprenticealf.wordpress.com/".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) + print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) raise DeDRMError(u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime)) of = self.temporary_file(book.getBookExtension()) @@ -588,7 +590,7 @@ class DeDRM(FileTypePlugin): print u"{0} v{1}: Failed to decrypt with key {2:s} after {3:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION,keyname_masked,time.time()-self.starttime) - print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Alf's blog: http://apprenticealf.wordpress.com/".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) + print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) raise DeDRMError(u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime)) diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/convert2xml.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/convert2xml.py index 3413eda..8c2d0f3 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/convert2xml.py +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/convert2xml.py @@ -403,6 +403,7 @@ class PageParser(object): 'num_headers_yes' : (1, 'number', 0, 0), 'tracking' : (1, 'number', 0, 0), + 'src' : (1, 'text', 0, 0), } diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/topazextract.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/topazextract.py index fb5eb7a..5b6709f 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/topazextract.py +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/topazextract.py @@ -352,7 +352,7 @@ class TopazBook: break if not bookKey: - raise DrmException(u"No key found in {0:d} keys tried. Read the FAQs at Alf's blog: http://apprenticealf.wordpress.com/".format(len(pidlst))) + raise DrmException(u"No key found in {0:d} keys tried. Read the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md".format(len(pidlst))) self.setBookKey(bookKey) self.createBookDirectory() diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_App.pyw b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_App.pyw index e9d7165..c3a40d4 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_App.pyw +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_App.pyw @@ -27,8 +27,9 @@ # 6.4.3 - Version bump to match plugin & Mac app # 6.5.0 - Fix for some new tags in Topaz ebooks # 6.5.1 - Version bump to match plugin & Mac app +# 6.5.2 - Fix for a new tag in Topaz ebooks -__version__ = '6.5.1' +__version__ = '6.5.2' import sys import os, os.path diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/DeDRM_Help.htm b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/DeDRM_Help.htm index 86653eb..3fed9df 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/DeDRM_Help.htm +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/DeDRM_Help.htm @@ -55,7 +55,7 @@ p {margin-top: 0}
  • And probably many more.
  • -

    For additional help read the FAQs at Apprentice Alf’s Blog and ask questions in the comments section of the first post.

    +

    For additional help read the FAQs at Apprentice Harpers’s GitHub repository. You can ask questions in the comments section of the first post at Apprentice Alf's blog or raise an issue.

    Linux Systems Only

    Generating decryption keys for Adobe Digital Editions and Kindle for PC

    diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/__init__.py b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/__init__.py index d15eddb..b359451 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/__init__.py +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/__init__.py @@ -55,6 +55,7 @@ __docformat__ = 'restructuredtext en' # Fix for some more 'new' tags in Topaz ebooks. # Fix an error in wineutils.py # 6.5.1 - Updated version number, added PDF check for DRM-free documents +# 6.5.2 - Another Topaz fix """ @@ -62,7 +63,7 @@ Decrypt DRMed ebooks. """ PLUGIN_NAME = u"DeDRM" -PLUGIN_VERSION_TUPLE = (6, 5, 1) +PLUGIN_VERSION_TUPLE = (6, 5, 2) PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE]) # Include an html helpfile in the plugin's zipfile with the following name. RESOURCE_NAME = PLUGIN_NAME + '_Help.htm' @@ -286,7 +287,7 @@ class DeDRM(FileTypePlugin): except Exception, e: pass - print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Alf's blog: http://apprenticealf.wordpress.com/".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) + print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) raise DeDRMError(u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime)) # import the Adobe Adept ePub handler @@ -386,7 +387,7 @@ class DeDRM(FileTypePlugin): pass # Something went wrong with decryption. - print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Alf's blog: http://apprenticealf.wordpress.com/".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) + print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) raise DeDRMError(u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime)) # Not a Barnes & Noble nor an Adobe Adept @@ -486,7 +487,7 @@ class DeDRM(FileTypePlugin): pass # Something went wrong with decryption. - print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Alf's blog: http://apprenticealf.wordpress.com/".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) + print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) raise DeDRMError(u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime)) @@ -554,7 +555,7 @@ class DeDRM(FileTypePlugin): pass if not decoded: #if you reached here then no luck raise and exception - print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Alf's blog: http://apprenticealf.wordpress.com/".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) + print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) raise DeDRMError(u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime)) of = self.temporary_file(book.getBookExtension()) @@ -589,7 +590,7 @@ class DeDRM(FileTypePlugin): print u"{0} v{1}: Failed to decrypt with key {2:s} after {3:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION,keyname_masked,time.time()-self.starttime) - print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Alf's blog: http://apprenticealf.wordpress.com/".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) + print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) raise DeDRMError(u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime)) diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/convert2xml.py b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/convert2xml.py index 3413eda..8c2d0f3 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/convert2xml.py +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/convert2xml.py @@ -403,6 +403,7 @@ class PageParser(object): 'num_headers_yes' : (1, 'number', 0, 0), 'tracking' : (1, 'number', 0, 0), + 'src' : (1, 'text', 0, 0), } diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/topazextract.py b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/topazextract.py index fb5eb7a..5b6709f 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/topazextract.py +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/topazextract.py @@ -352,7 +352,7 @@ class TopazBook: break if not bookKey: - raise DrmException(u"No key found in {0:d} keys tried. Read the FAQs at Alf's blog: http://apprenticealf.wordpress.com/".format(len(pidlst))) + raise DrmException(u"No key found in {0:d} keys tried. Read the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md".format(len(pidlst))) self.setBookKey(bookKey) self.createBookDirectory() diff --git a/DeDRM_calibre_plugin/DeDRM_plugin.zip b/DeDRM_calibre_plugin/DeDRM_plugin.zip index 3f6c98803cb00289dbadcc5211bdbaf78a0b9eb7..e6a9298b2b40d3e072174541528cd34a5b96284d 100644 GIT binary patch delta 19307 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 q0hUuCNRlAb9Wqp;orhpod}y9N;s0A7#Ipy~?y- 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 JW(p**@Na1%L*oDd diff --git a/DeDRM_calibre_plugin/DeDRM_plugin/DeDRM_Help.htm b/DeDRM_calibre_plugin/DeDRM_plugin/DeDRM_Help.htm index 86653eb..3fed9df 100644 --- a/DeDRM_calibre_plugin/DeDRM_plugin/DeDRM_Help.htm +++ b/DeDRM_calibre_plugin/DeDRM_plugin/DeDRM_Help.htm @@ -55,7 +55,7 @@ p {margin-top: 0}
  • And probably many more.
  • -

    For additional help read the FAQs at Apprentice Alf’s Blog and ask questions in the comments section of the first post.

    +

    For additional help read the FAQs at Apprentice Harpers’s GitHub repository. You can ask questions in the comments section of the first post at Apprentice Alf's blog or raise an issue.

    Linux Systems Only

    Generating decryption keys for Adobe Digital Editions and Kindle for PC

    diff --git a/DeDRM_calibre_plugin/DeDRM_plugin/__init__.py b/DeDRM_calibre_plugin/DeDRM_plugin/__init__.py index d15eddb..b359451 100644 --- a/DeDRM_calibre_plugin/DeDRM_plugin/__init__.py +++ b/DeDRM_calibre_plugin/DeDRM_plugin/__init__.py @@ -55,6 +55,7 @@ __docformat__ = 'restructuredtext en' # Fix for some more 'new' tags in Topaz ebooks. # Fix an error in wineutils.py # 6.5.1 - Updated version number, added PDF check for DRM-free documents +# 6.5.2 - Another Topaz fix """ @@ -62,7 +63,7 @@ Decrypt DRMed ebooks. """ PLUGIN_NAME = u"DeDRM" -PLUGIN_VERSION_TUPLE = (6, 5, 1) +PLUGIN_VERSION_TUPLE = (6, 5, 2) PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE]) # Include an html helpfile in the plugin's zipfile with the following name. RESOURCE_NAME = PLUGIN_NAME + '_Help.htm' @@ -286,7 +287,7 @@ class DeDRM(FileTypePlugin): except Exception, e: pass - print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Alf's blog: http://apprenticealf.wordpress.com/".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) + print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) raise DeDRMError(u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime)) # import the Adobe Adept ePub handler @@ -386,7 +387,7 @@ class DeDRM(FileTypePlugin): pass # Something went wrong with decryption. - print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Alf's blog: http://apprenticealf.wordpress.com/".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) + print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) raise DeDRMError(u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime)) # Not a Barnes & Noble nor an Adobe Adept @@ -486,7 +487,7 @@ class DeDRM(FileTypePlugin): pass # Something went wrong with decryption. - print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Alf's blog: http://apprenticealf.wordpress.com/".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) + print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) raise DeDRMError(u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime)) @@ -554,7 +555,7 @@ class DeDRM(FileTypePlugin): pass if not decoded: #if you reached here then no luck raise and exception - print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Alf's blog: http://apprenticealf.wordpress.com/".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) + print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) raise DeDRMError(u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime)) of = self.temporary_file(book.getBookExtension()) @@ -589,7 +590,7 @@ class DeDRM(FileTypePlugin): print u"{0} v{1}: Failed to decrypt with key {2:s} after {3:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION,keyname_masked,time.time()-self.starttime) - print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Alf's blog: http://apprenticealf.wordpress.com/".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) + print u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.\nRead the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md".format(PLUGIN_NAME, PLUGIN_VERSION,time.time()-self.starttime) raise DeDRMError(u"{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds.".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime)) diff --git a/DeDRM_calibre_plugin/DeDRM_plugin/convert2xml.py b/DeDRM_calibre_plugin/DeDRM_plugin/convert2xml.py index 3413eda..8c2d0f3 100644 --- a/DeDRM_calibre_plugin/DeDRM_plugin/convert2xml.py +++ b/DeDRM_calibre_plugin/DeDRM_plugin/convert2xml.py @@ -403,6 +403,7 @@ class PageParser(object): 'num_headers_yes' : (1, 'number', 0, 0), 'tracking' : (1, 'number', 0, 0), + 'src' : (1, 'text', 0, 0), } diff --git a/DeDRM_calibre_plugin/DeDRM_plugin/topazextract.py b/DeDRM_calibre_plugin/DeDRM_plugin/topazextract.py index fb5eb7a..5b6709f 100644 --- a/DeDRM_calibre_plugin/DeDRM_plugin/topazextract.py +++ b/DeDRM_calibre_plugin/DeDRM_plugin/topazextract.py @@ -352,7 +352,7 @@ class TopazBook: break if not bookKey: - raise DrmException(u"No key found in {0:d} keys tried. Read the FAQs at Alf's blog: http://apprenticealf.wordpress.com/".format(len(pidlst))) + raise DrmException(u"No key found in {0:d} keys tried. Read the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md".format(len(pidlst))) self.setBookKey(bookKey) self.createBookDirectory() diff --git a/DeDRM_calibre_plugin/DeDRM_plugin_ReadMe.txt b/DeDRM_calibre_plugin/DeDRM_plugin_ReadMe.txt index 47f5630..4f4c3f8 100644 --- a/DeDRM_calibre_plugin/DeDRM_plugin_ReadMe.txt +++ b/DeDRM_calibre_plugin/DeDRM_plugin_ReadMe.txt @@ -53,7 +53,7 @@ If you find that the DeDRM plugin is not working for you (imported ebooks still - Once calibre has re-started, import the problem ebook. - Now close calibre. -A log will appear that you can copy and paste into a comment at Apprentice Alf's blog, http://apprenticealf.wordpress.com/ . You should also give details of your computer, and how you obtained the ebook file. +A log will appear that you can copy and paste into a comment at Apprentice Alf's blog, http://apprenticealf.wordpress.com/ or an issue at Apprentice Harper's repository, https://github.com/apprenticeharper/DeDRM_tools/issues . You should also give details of your computer, and how you obtained the ebook file. Credits