diff --git a/.github/workflows/Python_tests.yml b/.github/workflows/Python_tests.yml new file mode 100644 index 0000000..57b08ce --- /dev/null +++ b/.github/workflows/Python_tests.yml @@ -0,0 +1,35 @@ +name: Python_tests +on: [push, pull_request] +jobs: + Python_tests: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [macos-latest] + python-version: [2.7] # , 3.8] + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v1 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install flake8 pytest # -r requirements.txt + #- name: Check formatting with black + # if: matrix.python-version == '3.8' + # run: | + # pip install black + # black --check . + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 . --builtins=_,I --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 . --builtins=_,I --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + #- name: Test with pytest + # run: pytest + #- name: Run doctests with pytest + # run: pytest --doctest-modules diff --git a/CALIBRE_CLI_INSTRUCTIONS.md b/CALIBRE_CLI_INSTRUCTIONS.md index d579348..dbda688 100644 --- a/CALIBRE_CLI_INSTRUCTIONS.md +++ b/CALIBRE_CLI_INSTRUCTIONS.md @@ -27,7 +27,7 @@ platforms. #### Enter your keys - Figure out what format DeDRM wants your key in by looking in - [the code that handles that](src/prefs.py). + [the code that handles that](dedrm_src/prefs.py). - For Kindle eInk devices, DeDRM expects you to put a list of serial numbers in the `serials` field: `"serials": ["012345689abcdef"]` or `"serials": ["1111111111111111", "2222222222222222"]`. diff --git a/FAQs.md b/FAQs.md index dd43f19..0791d3a 100644 --- a/FAQs.md +++ b/FAQs.md @@ -22,30 +22,32 @@ But otherwise, if your ebook is from Amazon, Kobo, Barnes & Noble or any of the ### A Recent Change to Kindle for PC/Kindle for Mac Starting with version 1.19, Kindle for PC/Mac uses Amazon's new KFX format which isn't quite as good a source fro conversion to ePub as the older KF8 (& MOBI) formats. There are two options to get the older formats. Either stick with version 1.17 or earlier, or modify the executable by changing a file name. Note that with Kindle for PC/Mac 1.25 and later, there is no current solution even for FKX. You must use 1.24 or earlier. -Version 1.17 of Kindle is are no longer available directly from Amazon, so you will need to search for the proper file name and find it on a third party site. The name is "KindleForPC-installer-1.17.44170.exe" for PC and "KindleForMac-44182.dmg" for Mac. +Version 1.17 of Kindle is are no longer available directly from Amazon, so you will need to search for the proper file name and find it on a third party site. The name is `KindleForPC-installer-1.17.44170.exe` for PC and `KindleForMac-44182.dmg` for Mac. Verify the one of the following cryptographic hash values, using software of your choice, before installing the downloaded file in order to avoid viruses. If the hash does not match, delete the downloaded file and try again from another site. -Kindle for PC: -MD-5: 53F793B562F4823721AA47D7DE099869 -SHA-1: 73C404D719F0DD8D4AE1C2C96612B095D6C86255 -SHA-256: 14E0F0053F1276C0C7C446892DC170344F707FBFE99B695176 2C120144163200 -Kindle for Mac: -MD-5: E7E36D5369E1F3CF1D28E5D9115DF15F -SHA-1: 7AB9A86B954CB23D622BD79E3257F8E2182D791C -SHA-256: 28DC21246A9C7CDEDD2D6F0F4082E6BF7EF9DB9CE9D485548E 8A9E1D19EAE2AC. + +#### Kindle for PC `KindleForPC-installer-1.17.44170.exe`: +* MD-5: 53F793B562F4823721AA47D7DE099869 +* SHA-1: 73C404D719F0DD8D4AE1C2C96612B095D6C86255 +* SHA-256: 14E0F0053F1276C0C7C446892DC170344F707FBFE99B695176 2C120144163200 + +#### Kindle for Mac `KindleForMac-44182.dmg`: +* MD-5: E7E36D5369E1F3CF1D28E5D9115DF15F +* SHA-1: 7AB9A86B954CB23D622BD79E3257F8E2182D791C +* SHA-256: 28DC21246A9C7CDEDD2D6F0F4082E6BF7EF9DB9CE9D485548E 8A9E1D19EAE2AC. You will need to go to the preferences and uncheck the auto update checkbox. Then download and install 1.17 over the top of the 1.19 installation. You'll also need to delete the KFX folders from your My Kindle Content folder. A other possible solution is to use 1.19 or later, but disable KFX by renaming or disabling a necessary component of the application. This may or may not work on versions after 1.20. In a command window, enter the following commands when Kindle for PC/Mac is not running: #### Windows -ren %localappdata%\Amazon\Kindle\application\renderer-test.exe renderer-test.xxx +`ren %localappdata%\Amazon\Kindle\application\renderer-test.exe renderer-test.xxx` -PC Note: The renderer-test program may be in a different location in some Kindle for PC installations. If the rename command fails look in other folders, such as C:\Program Files\Amazon\Kindle. +PC Note: The renderer-test program may be in a different location in some Kindle for PC installations. If the rename command fails look in other folders, such as `C:\Program Files\Amazon\Kindle`. #### Macintosh -chmod -x /Applications/Kindle.app/Contents/MacOS/renderer-test +`chmod -x /Applications/Kindle.app/Contents/MacOS/renderer-test` -Mac Note: If the chmod command fails with a permission error try again using sudo before chmod - sudo chmod [...] +Mac Note: If the chmod command fails with a permission error try again using `sudo` before `chmod` - `sudo chmod` [...] After restarting the Kindle program any books previously downloaded in KFX format will no longer open. You will need to remove them from your device and re-download them. All future downloads will use the older Kindle formats instead of KFX although they will continue to be placed in one individual subdirectory per book. @@ -56,10 +58,10 @@ Thanks to work by several people, the tools can now decrypt KFX format ebooks fr Thanks to jhowell for his investigations into KFX format and the KFX Input plugin. Some of these instructions are from [his thread on the subject](https://www.mobileread.com/forums/showthread.php?t=283371) at MobileRead. ## Where can I get the latest version of these free DRM removal tools? -Right here at github. Just go to the [releases page](https://github.com/apprenticeharper/DeDRM_tools/releases) and download the latest zip archive of the tools, named DeDRM\_tools\_X.X.X.zip, where X.X.X is the version number. You do not need to download the source code archive. +Right here at github. Just go to the [releases page](https://github.com/apprenticeharper/DeDRM_tools/releases) and download the latest zip archive of the tools, named `DeDRM\_tools\_X.X.X.zip`, where X.X.X is the version number. You do not need to download the source code archive. ## I've downloaded the tools archive. Now what? -First, unzip the archive. You should now have a DeDRM folder containing several other folders and a ReadMe\_First.txt file. Please read the ReadMe\_First file! That will explain what the folders are, and you'll be able to work out which of the tools you need. +First, unzip the archive. You should now have a DeDRM folder containing several other folders and a `ReadMe_First.txt` file. Please read the `ReadMe_First.txt` file! That will explain what the folders are, and you'll be able to work out which of the tools you need. ## That's a big complicated ReadMe file! Isn't there a quick guide? Install calibre. Install the DeDRM\_plugin in calibre. Install the Obok\_plugin in calibre. Restart calibre. In the DeDRM_plugin customisation dialog add in any E-Ink Kindle serial numbers and your B&N account email address and password. Remember that the plugin only tries to remove DRM when ebooks are imported. @@ -67,14 +69,14 @@ Install calibre. Install the DeDRM\_plugin in calibre. Install the Obok\_plugin # Installing the Tools ## The calibre plugin ### I am trying to install the calibre plugin, but calibre says "ERROR: Unhandled exception: InvalidPlugin: The plugin in u’[path]DeDRM\_tools\_6.5.3.zip’ is invalid. It does not contain a top-level \_\_init\_\_.py file" -You are trying to add the tools archive (e.g. DeDRM\_tools\_6.5.3.zip) instead of the plugin. The tools archive is not the plugin. It is a collection of DRM removal tools which includes the plugin. You must unzip the archive, and install the calibre plugin (DeDRM\_plugin.zip) from a folder called “DeDRM\_calibre_plugin” in the unzipped archive. +You are trying to add the tools archive (e.g. `DeDRM_tools_6.5.3.zip`) instead of the plugin. The tools archive is not the plugin. It is a collection of DRM removal tools which includes the plugin. You must unzip the archive, and install the calibre plugin `DeDRM_plugin.zip` from a folder called `DeDRM_calibre_plugin` in the unzipped archive. ### I’ve unzipped the tools archive, but I can’t find the calibre plugin when I try to add them to calibre. I use Windows. -You should select the zip file that is in the “DeDRM\_calibre\_plugin” folder, not any files inside the plugin’s zip archive. Make sure you are selecting from the folder that you created when you unzipped the tools archive and not selecting a file inside the still-zipped tools archive. +You should select the zip file that is in the `DeDRM_calibre_plugin` folder, not any files inside the plugin’s zip archive. Make sure you are selecting from the folder that you created when you unzipped the tools archive and not selecting a file inside the still-zipped tools archive. -(The problem is that Windows will allow apps to browse inside zip archives without needing to unzip them first. If there are zip archives inside the main zip archives, Windows will show them as unzipped as well. So what happens is people will unzip the DeDRM\_tools\_X.X.X.zip to a folder, but when using calibre they will actually navigate to the still zipped file by mistake and cannot tell they have done so because they do not have file extensions showing. So to the unwary Windows user, it appears that the zip archive was unzipped and that everything inside it was unzipped as well so there is no way to install the plugins. +(The problem is that Windows will allow apps to browse inside zip archives without needing to unzip them first. If there are zip archives inside the main zip archives, Windows will show them as unzipped as well. So what happens is people will unzip the `DeDRM_tools_X.X.X.zip` to a folder, but when using calibre they will actually navigate to the still zipped file by mistake and cannot tell they have done so because they do not have file extensions showing. So to the unwary Windows user, it appears that the zip archive was unzipped and that everything inside it was unzipped as well so there is no way to install the plugins. -We strongly recommend renaming the DeDRM\_tools\_X.X.X.zip archive (after extracting its contents) to DeDRM\_tools\_X.X.X_archive.zip. If you do that, you are less likely to navigate to the wrong location from inside calibre.) +We strongly recommend renaming the `DeDRM_tools_X.X.X.zip` archive (after extracting its contents) to `DeDRM_tools_X.X.X_archive.zip`. If you do that, you are less likely to navigate to the wrong location from inside calibre.) ## The Windows Application ### I've installed ActiveState Python and PyCrypto, but the Windows application won't run. What have I done wrong? @@ -87,7 +89,7 @@ Try right-clicking and select open. That might give you the option to open it an ### I can't open the Macintosh Application at all. I get 'The aplication "DeDRM" can't be opened' Some unzip applications do not respect the execution bit setting. Try unzipping the main tools archive using the built-in Mac unzip utility. -Alternatively, sometimes the execution bit isn't set correctly in the archive. If you put the extracted DeDRM application in your Applications folder, you can set the executable bit on the 'droplet' file from the terminal using the command chmod +x /Applications/DeDRM.app/Contents/MacOS/droplet +Alternatively, sometimes the execution bit isn't set correctly in the archive. If you put the extracted DeDRM application in your Applications folder, you can set the executable bit on the 'droplet' file from the terminal using the command `chmod +x /Applications/DeDRM.app/Contents/MacOS/droplet` ### I can't open the Macintosh Application at all. I get 'spawn_via_launchd() failed, errno=111' There seems to be a bug in Apple's launch services. Try using the free [Maintenance utility](https://www.titanium-software.fr/en/maintenance.html) from Titanium Software to clear the launch cache and database. @@ -95,28 +97,28 @@ There seems to be a bug in Apple's launch services. Try using the free [Maintena ### The application opens, but always gives an error in the log 'ImportError: No module named Crypto.Cipher' Some version of MacOS don't include PyCrpto. You'll need to install it manually. In Terminal window: -sudo python -m pip install pycrypto +`sudo python -m pip install pycrypto` if error “No module named pip”, type: -sudo easy_install pip +`sudo easy_install pip` -try again: sudo python -m pip install pycrypto +try again: `sudo python -m pip install pycrypto` if installation fails because “C compiler cannot create executables” and pop-up window asks you to install Command Line Tools for XCode, agree by clicking “Continue” -try again: sudo python -m pip install pycrypto +try again: `sudo python -m pip install pycrypto` If after installing pycrypto decryption still fails with something about pylzma in error log, try: -sudo python -m pip install pylzma +`sudo python -m pip install pylzma` # Using the Tools ## I can’t get the tools to work on my rented or library ebooks. The tools are not designed to remove DRM from rented or library ebooks. ## I've unzipped the tools, but what are all the different files, and how do I use them? -Read the ReadMe_First.txt file and then the ReadMe files included in the tools folder(s) you're interested in. That's what they're for. +Read the `ReadMe_First.txt` file and then the ReadMe files included in the tools folder(s) you're interested in. That's what they're for. ## I have installed the calibre plugin, but my books still have DRM. When I try to view or convert my books, calibre says they have DRM. DRM only gets removed when an ebook is imported into calibre. Also, if the book is already in calibre, by default calibre will discard the newly imported file. You can change this in calibre's Adding books preferences page (Automerge..../Overwrite....), so that newly imported files overwrite existing ebook formats. Then just re-import your books and the DRM-free versions will overwrite the DRMed versions while retaining your books' metadata. @@ -127,16 +129,16 @@ Your ebooks are stored on your computer or on your ebook reader. You need to fin ### Macintosh Navigating from your home folder, -Kindle for Mac ebooks are in either Library/Application Support/Kindle/My Kindle Content or Documents/My Kindle Content or Library/Containers/com.amazon.Kindle/Data/Library/Application Support/Kindle/My Kindle Content, depending on your version of Kindle for Mac. +Kindle for Mac ebooks are in either `Library/Application Support/Kindle/My Kindle Content` or `Documents/My Kindle Content or Library/Containers/com.amazon.Kindle/Data/Library/Application Support/Kindle/My Kindle Content`, depending on your version of Kindle for Mac. -Adobe Digital Editions ebooks are in Documents/Digital Editions +Adobe Digital Editions ebooks are in `Documents/Digital Editions` ### Windows -Navigating from your "Documents" folder ("My Documents" folder, pre-Windows 7) +Navigating from your `Documents` folder (`My Documents` folder, pre-Windows 7) -Kindle for PC ebooks are in My Kindle Content +Kindle for PC ebooks are in `My Kindle Content` -Adobe Digital Editions ebooks are in My Digital Editions +Adobe Digital Editions ebooks are in `My Digital Editions` ## I have installed the calibre plugin, and the book is not already in calibre, but the DRM does not get removed. @@ -150,15 +152,15 @@ If this book is from an eInk Kindle (e.g. Paperwhite), you must enter the serial If this book is from Kindle for Mac or Kindle for PC, you must have the Kindle Software installed on the same computer and user account as your copy of calibre. -If this book is from Kindle for Mac you must be using version 1.24 or below, even if you have the Input plugin installed. +If this book is from Kindle for Mac you must be using version 1.24 or below, even if you have the Input plugin installed. If the book is from Kindle for PC or Kindle for Mac and you think you are doing everything right, and you are getting this message, it is possible that the files containing the encryption key aren’t quite in the format the tools expect. To try to fix this: 1. Deregister Kindle for PC(Mac) from your Amazon account. 1. Uninstall Kindle for PC(Mac) 1. Delete the Kindle for PC(Mac) preferences - * PC: Delete the directory [home folder]\AppData\Local\Amazon (it might be hidden) and [home folder]\My Documents\My Kindle Content - * Mac: Delete the directory [home folder]/Library/Application Support/Kindle/and/or [home folder]/Library/Containers/com.amazon.Kindle/Data/Library/Application Support/Kindle/ (one or both may be present and should be deleted) + * PC: Delete the directory `[home folder]\AppData\Local\Amazon` (it might be hidden) and `[home folder]\My Documents\My Kindle Content` + * Mac: Delete the directory `[home folder]/Library/Application Support/Kindle/` and/or `[home folder]/Library/Containers/com.amazon.Kindle/Data/Library/Application Support/Kindle/` (one or both may be present and should be deleted) 1. Reinstall Kindle for PC(Mac) version 1.17 or earlier (see above for download links). 1. Re-register Kindle for PC(Mac) with your Amazon account 1. Download the ebook again. Do not use the files you have downloaded previously. @@ -171,7 +173,7 @@ There are several possible reasons why only some books get their DRM removed. If you are still having problems with particular books, you will need to create a log of the DRM removal attempt for one of the problem books, and post that in a comment at Apprentice Alf's blog or in a new issue at Apprentice Harper's github repository. ## My Kindle book has imported and the DRM has been removed, but all the pictures are gone. -Most likely, this is a book downloaded from Amazon directly to an eInk Kindle (e.g. Paperwhite). Unfortunately, the pictures are probably in a .azw6 file that the tools don't understand. You must download the book manually from Amazon's web site "For transfer via USB" to your Kindle. When you download the eBook in this manner, Amazon will package the pictures in the with text in a single file that the tools will be able to import successfully. +Most likely, this is a book downloaded from Amazon directly to an eInk Kindle (e.g. Paperwhite). Unfortunately, the pictures are probably in a `.azw6` file that the tools don't understand. You must download the book manually from Amazon's web site "For transfer via USB" to your Kindle. When you download the eBook in this manner, Amazon will package the pictures in the with text in a single file that the tools will be able to import successfully. ## My Kindle book has imported, but it's showing up as an AZW4 format. Conversions take a long time and/or are very poor. You have found a Print Replica Kindle ebook. This is a PDF in a Kindle wrapper. Now the DRM has been removed, you can extract the PDF from the wrapper using the KindleUnpack plugin. Conversion of PDFs rarely gives good results. @@ -195,7 +197,7 @@ Remove the DRMed book from calibre. Click the Preferences drop-down menu and cho The Macintosh DeDRM application creates a log file on your desktop every time it is run. After unsuccessfully removing DRM from one ebook, copy the contents of the log file (it is a simple text file) and paste it into your comment at Apprentice Alf's blog or in a new issue at Apprentice Harper's github repository. ## I cannot solve my problem with the Windows DeDRM application, and now I need to ‘post a log’. How do I do that? -The Windows DeDRM application creates a log file in your home directory (C:\Users\[username]) every time it is run. After unsuccessfully removing DRM from one ebook, copy the contents of the log file (it is a simple text file) and paste it into your comment at Apprentice Alf's blog or in a new issue at Apprentice Harper's github repository. +The Windows DeDRM application creates a log file in your home directory `C:\Users\[username]` every time it is run. After unsuccessfully removing DRM from one ebook, copy the contents of the log file (it is a simple text file) and paste it into your comment at Apprentice Alf's blog or in a new issue at Apprentice Harper's github repository. ## Is there a way to use the DeDRM plugin for Calibre from the command line? See the [Calibre command line interface (CLI) instructions](CALIBRE_CLI_INSTRUCTIONS.md). @@ -231,7 +233,7 @@ Amazon turned off backup for Kindle for Android, so the tools can no longer find Apple regularly change the details of their DRM and so the tools in the main tools archive will not work with these ebooks. Apple’s Fairplay DRM scheme can be removed using Requiem if the appropriate version of iTunes can still be installed and used. See the post Apple and ebooks: iBookstore DRM and how to remove it at Apprentice Alf's blog for more details. ## I’ve got the tools archive and I’ve read all the FAQs but I still can’t install the tools and/or the DRM removal doesn’t work -* Read the ReadMe_First.txt file in the top level of the tools archive +* Read the `ReadMe_First.txt` file in the top level of the tools archive * Read the ReadMe file in the folder of the tools you want to use. * If you still can’t remove the DRM, ask in the comments section of Apprentice Alf's blog or create a new issue at Apprentice Harper's github repository, reporting the error as precisely as you can, what platform you use, what tool you have tried, what errors you get, and what versions you are using. If the problem happens when running one of the tools, post a log (see previous questions on how to do this). diff --git a/contrib/DeDRM_calibre_plugin/DeDRM_plugin_ReadMe.txt b/contrib/DeDRM_calibre_plugin/DeDRM_plugin_ReadMe.txt index 7dde68d..698f72a 100644 --- a/contrib/DeDRM_calibre_plugin/DeDRM_plugin_ReadMe.txt +++ b/contrib/DeDRM_calibre_plugin/DeDRM_plugin_ReadMe.txt @@ -50,7 +50,7 @@ When you have finished entering your configuration information, you must click t Troubleshooting --------------- -If you find that the DeDRM plugin is not working for you (imported ebooks still have DRM - that is, they won't convert or open in the calibre ebook viewer), you should make a log of the import process by deleting the DRMed ebook from calibre and then adding the ebook to calibre when it's running in debug mode. This will generate a lot of helpful debugging info that can be copied into any online help requests. Here's how to do it: +If you find that the DeDRM plugin is not working for you (imported ebooks still have DRM - that is, they won't convert or open in the calibre ebook viewer), you should make a log of the import process by deleting the DRMed ebook from calibre and then adding the ebook to calibre when it's running in debug mode. This will generate a lot of helpful debugging info that can be copied into any online help requests. Here's how to do it: - Remove the DRMed book from calibre. - Click the Preferences drop-down menu and choose 'Restart in debug mode'. diff --git a/contrib/Obok_calibre_plugin/obok_plugin_ReadMe.txt b/contrib/Obok_calibre_plugin/obok_plugin_ReadMe.txt index 0170f7c..a7b8f1b 100644 --- a/contrib/Obok_calibre_plugin/obok_plugin_ReadMe.txt +++ b/contrib/Obok_calibre_plugin/obok_plugin_ReadMe.txt @@ -11,7 +11,7 @@ Open calibre's Preferences dialog. Click on the "Plugins" button. Next, click Customization ------------- -No customization is required, except choosing which menus will show the plugin. Altough the ability to enter a device serial number is given, this should not need to be filled in, as the serial number should be picked up automatically from the attached Kobo reader. +No customization is required, except choosing which menus will show the plugin. Although the ability to enter a device serial number is given, this should not need to be filled in, as the serial number should be picked up automatically from the attached Kobo reader. Using the plugin diff --git a/contrib/ReadMe_First.txt b/contrib/ReadMe_First.txt index 9511ce4..d9300bf 100644 --- a/contrib/ReadMe_First.txt +++ b/contrib/ReadMe_First.txt @@ -90,7 +90,7 @@ Windows and Python ------------------ We **strongly** recommend using calibre and the plugin. -If you really want to use the WIndows app or the individual scripts, you'll need to install python. +If you really want to use the Windows app or the individual scripts, you'll need to install python. ActiveState's Active Python 2.7 Community Edition for Windowscan be downloaded for free from: http://www.activestate.com/activepython/downloads diff --git a/dedrm_src/__init__.py b/dedrm_src/__init__.py index 52ee6b2..58fc623 100644 --- a/dedrm_src/__init__.py +++ b/dedrm_src/__init__.py @@ -88,6 +88,11 @@ import zipfile import traceback from zipfile import ZipFile +import erdr2pml +import ineptpdf +import k4mobidedrm +import zipfix + class DeDRMError(Exception): pass diff --git a/dedrm_src/config.py b/dedrm_src/config.py index 49afbda..9bfae68 100644 --- a/dedrm_src/config.py +++ b/dedrm_src/config.py @@ -880,7 +880,7 @@ class AddSerialDialog(QDialog): @property def key_value(self): - return unicode(self.key_ledit.text()).strip() + return unicode(self.key_ledit.text()).replace(' ', '') def accept(self): if len(self.key_name) == 0 or self.key_name.isspace(): diff --git a/dedrm_src/epubtest.py b/dedrm_src/epubtest.py index 01c3602..2b00fe7 100644 --- a/dedrm_src/epubtest.py +++ b/dedrm_src/epubtest.py @@ -49,7 +49,7 @@ from __future__ import print_function __version__ = '1.01' -import sys, struct, os +import sys, struct, os, traceback import zlib import zipfile import xml.etree.ElementTree as etree diff --git a/dedrm_src/genbook.py b/dedrm_src/genbook.py index 9795510..a7512af 100644 --- a/dedrm_src/genbook.py +++ b/dedrm_src/genbook.py @@ -2,6 +2,8 @@ # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab from __future__ import print_function +from .convert2xml import encodeNumber + class Unbuffered: def __init__(self, stream): self.stream = stream diff --git a/dedrm_src/ion.py b/dedrm_src/ion.py index 40433ca..c361d20 100644 --- a/dedrm_src/ion.py +++ b/dedrm_src/ion.py @@ -21,19 +21,24 @@ from Crypto.Cipher import AES from Crypto.Util.py3compat import bchr, bord try: - # lzma library from calibre 2.35.0 or later - import lzma.lzma1 as calibre_lzma + # lzma library from calibre 4.6.0 or later + import calibre_lzma.lzma1 as calibre_lzma except ImportError: calibre_lzma = None + # lzma library from calibre 2.35.0 or later try: - import lzma + import lzma.lzma1 as calibre_lzma except ImportError: - # Need pip backports.lzma on Python <3.3 + calibre_lzma = None try: - from backports import lzma + import lzma except ImportError: - # Windows-friendly choice: pylzma wheels - import pylzma as lzma + # Need pip backports.lzma on Python <3.3 + try: + from backports import lzma + except ImportError: + # Windows-friendly choice: pylzma wheels + import pylzma as lzma TID_NULL = 0 diff --git a/dedrm_src/kindlekey.py b/dedrm_src/kindlekey.py index ec0adde..7b994ed 100644 --- a/dedrm_src/kindlekey.py +++ b/dedrm_src/kindlekey.py @@ -40,6 +40,12 @@ from struct import pack, unpack, unpack_from import json import getopt +try: + RegError +except NameError: + class RegError(Exception): + pass + # Routines common to Mac and PC # Wrap a stream so that output gets flushed immediately @@ -1302,7 +1308,7 @@ elif isosx: uuids = [] uuidnum = os.getenv('MYUUIDNUMBER') if uuidnum != None: - uuids.append(strip(uuidnum)) + uuids.append(uuidnum.strip()) cmdline = '/usr/sbin/ioreg -l -S -w 0 -r -c AppleAHCIDiskDriver' cmdline = cmdline.encode(sys.getfilesystemencoding()) p = subprocess.Popen(cmdline, shell=True, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=False) diff --git a/dedrm_src/mobidedrm.py b/dedrm_src/mobidedrm.py index df702a1..e8400e4 100644 --- a/dedrm_src/mobidedrm.py +++ b/dedrm_src/mobidedrm.py @@ -525,7 +525,7 @@ def cli_main(): else: infile = argv[1] outfile = argv[2] - if len(argv) is 4: + if len(argv) == 4: pidlist = argv[3].split(',') else: pidlist = [] diff --git a/dedrm_src/pycrypto_des.py b/dedrm_src/pycrypto_des.py index 80d7d65..286df9f 100644 --- a/dedrm_src/pycrypto_des.py +++ b/dedrm_src/pycrypto_des.py @@ -11,7 +11,7 @@ def load_pycrypto(): class DES(object): def __init__(self, key): if len(key) != 8 : - raise Error('DES improper key used') + raise ValueError('DES improper key used') self.key = key self._des = _DES.new(key,_DES.MODE_ECB) def desdecrypt(self, data): diff --git a/dedrm_src/scriptinterface.py b/dedrm_src/scriptinterface.py index 0996b68..bcdf0a7 100644 --- a/dedrm_src/scriptinterface.py +++ b/dedrm_src/scriptinterface.py @@ -115,6 +115,7 @@ def decryptpdf(infile, outdir, rscpath): def decryptpdb(infile, outdir, rscpath): + errlog = '' outname = os.path.splitext(os.path.basename(infile))[0] + ".pmlz" outpath = os.path.join(outdir, outname) rv = 1 @@ -142,6 +143,7 @@ def decryptpdb(infile, outdir, rscpath): def decryptk4mobi(infile, outdir, rscpath): + errlog = '' rv = 1 pidnums = [] pidspath = os.path.join(rscpath,'pidlist.txt') diff --git a/dedrm_src/utilities.py b/dedrm_src/utilities.py index c730607..c62b043 100644 --- a/dedrm_src/utilities.py +++ b/dedrm_src/utilities.py @@ -3,6 +3,8 @@ from __future__ import with_statement +from ignoblekeygen import generate_key + __license__ = 'GPL v3' DETAILED_MESSAGE = \ diff --git a/dedrm_src/wineutils.py b/dedrm_src/wineutils.py index 692724d..3a587e1 100644 --- a/dedrm_src/wineutils.py +++ b/dedrm_src/wineutils.py @@ -7,7 +7,7 @@ from __future__ import print_function __license__ = 'GPL v3' # Standard Python modules. -import os, sys, re, hashlib +import os, sys, re, hashlib, traceback from calibre_plugins.dedrm.__init__ import PLUGIN_NAME, PLUGIN_VERSION def WineGetKeys(scriptpath, extension, wineprefix=""): diff --git a/obok_src/common_utils.py b/obok_src/common_utils.py index 964753f..0f2164a 100644 --- a/obok_src/common_utils.py +++ b/obok_src/common_utils.py @@ -8,6 +8,7 @@ __copyright__ = '2012, David Forrester ' __docformat__ = 'restructuredtext en' import os, time, re, sys +from datetime import datetime try: from PyQt5.Qt import (Qt, QIcon, QPixmap, QLabel, QDialog, QHBoxLayout, QProgressBar, QTableWidgetItem, QFont, QLineEdit, QComboBox, diff --git a/obok_src/config.py b/obok_src/config.py index ae4edc0..645c9e3 100644 --- a/obok_src/config.py +++ b/obok_src/config.py @@ -145,28 +145,6 @@ class ManageKeysDialog(QDialog): self.listy.clear() self.populate_list() - def rename_key(self): - if not self.listy.currentItem(): - errmsg = u"No {0} selected to rename. Highlight a keyfile first.".format(self.key_type_name) - r = error_dialog(None, "{0} {1}".format(PLUGIN_NAME, PLUGIN_VERSION), - _(errmsg), show=True, show_copy_button=False) - return - - d = RenameKeyDialog(self) - d.exec_() - - if d.result() != d.Accepted: - # rename cancelled or moot. - return - keyname = unicode(self.listy.currentItem().text()) - if not question_dialog(self, "{0} {1}: Confirm Rename".format(PLUGIN_NAME, PLUGIN_VERSION), u"Do you really want to rename the {2} named {0} to {1}?".format(keyname,d.key_name,self.key_type_name), show_copy_button=False, default_yes=False): - return - self.plugin_keys[d.key_name] = self.plugin_keys[keyname] - del self.plugin_keys[keyname] - - self.listy.clear() - self.populate_list() - def delete_key(self): if not self.listy.currentItem(): return