mirror of
https://github.com/noDRM/DeDRM_tools
synced 2024-12-25 21:58:59 +01:00
Bugfixes in standalone code for Calibre < 5 / Python 2
This commit is contained in:
parent
dbf4b54026
commit
b11aadcca6
17 changed files with 100 additions and 43 deletions
14
DeDRM_plugin/__calibre_compat_code.py
Normal file
14
DeDRM_plugin/__calibre_compat_code.py
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
|
||||||
|
#@@CALIBRE_COMPAT_CODE_START@@
|
||||||
|
import sys, os
|
||||||
|
|
||||||
|
# Explicitly allow importing the parent folder
|
||||||
|
if os.path.dirname(os.path.dirname(os.path.abspath(__file__))) not in sys.path:
|
||||||
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||||
|
|
||||||
|
# Bugfix for Calibre < 5:
|
||||||
|
if "calibre" in sys.modules and sys.version_info[0] == 2:
|
||||||
|
from calibre.utils.config import config_dir
|
||||||
|
if os.path.join(config_dir, "plugins", "DeDRM.zip") not in sys.path:
|
||||||
|
sys.path.insert(0, os.path.join(config_dir, "plugins", "DeDRM.zip"))
|
||||||
|
#@@CALIBRE_COMPAT_CODE_END@@
|
|
@ -1,6 +1,8 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
# __init__.py for DeDRM_plugin
|
# __init__.py for DeDRM_plugin
|
||||||
# Copyright © 2008-2020 Apprentice Harper et al.
|
# Copyright © 2008-2020 Apprentice Harper et al.
|
||||||
# Copyright © 2021 NoDRM
|
# Copyright © 2021 NoDRM
|
||||||
|
@ -97,9 +99,7 @@ import sys, os
|
||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
# Calibre stuff - so we can import from our ZIP without absolute module name
|
#@@CALIBRE_COMPAT_CODE@@
|
||||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
|
|
||||||
|
|
||||||
class DeDRMError(Exception):
|
class DeDRMError(Exception):
|
||||||
pass
|
pass
|
||||||
|
@ -162,7 +162,7 @@ class DeDRM(FileTypePlugin):
|
||||||
|
|
||||||
|
|
||||||
def cli_main(self, data):
|
def cli_main(self, data):
|
||||||
from standalone import main
|
from .standalone import main
|
||||||
main(data)
|
main(data)
|
||||||
|
|
||||||
def initialize(self):
|
def initialize(self):
|
||||||
|
|
|
@ -16,8 +16,8 @@ from PyQt5.Qt import (Qt, QWidget, QHBoxLayout, QVBoxLayout, QLabel, QLineEdit,
|
||||||
from PyQt5 import Qt as QtGui
|
from PyQt5 import Qt as QtGui
|
||||||
from zipfile import ZipFile
|
from zipfile import ZipFile
|
||||||
|
|
||||||
# Calibre stuff - so we can import from our ZIP without absolute module name
|
|
||||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
#@@CALIBRE_COMPAT_CODE@@
|
||||||
|
|
||||||
|
|
||||||
# calibre modules and constants.
|
# calibre modules and constants.
|
||||||
|
|
|
@ -71,9 +71,7 @@ __version__='1.00'
|
||||||
import sys, re
|
import sys, re
|
||||||
import struct, binascii, getopt, zlib, os, os.path, urllib, tempfile, traceback
|
import struct, binascii, getopt, zlib, os, os.path, urllib, tempfile, traceback
|
||||||
|
|
||||||
# Calibre stuff - so we can import from our ZIP without absolute module name
|
#@@CALIBRE_COMPAT_CODE@@
|
||||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
|
|
||||||
|
|
||||||
# Wrap a stream so that output gets flushed immediately
|
# Wrap a stream so that output gets flushed immediately
|
||||||
# and also make sure that any unicode strings get
|
# and also make sure that any unicode strings get
|
||||||
|
|
|
@ -35,8 +35,7 @@ import getopt
|
||||||
from struct import pack
|
from struct import pack
|
||||||
from struct import unpack
|
from struct import unpack
|
||||||
|
|
||||||
# Calibre stuff - so we can import from our ZIP without absolute module name
|
#@@CALIBRE_COMPAT_CODE@@
|
||||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
|
|
||||||
|
|
||||||
class TpzDRMError(Exception):
|
class TpzDRMError(Exception):
|
||||||
|
|
|
@ -72,8 +72,7 @@ import time
|
||||||
import html.entities
|
import html.entities
|
||||||
import json
|
import json
|
||||||
|
|
||||||
# Calibre stuff - so we can import from our ZIP without absolute module name
|
#@@CALIBRE_COMPAT_CODE@@
|
||||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
|
|
||||||
|
|
||||||
class DrmException(Exception):
|
class DrmException(Exception):
|
||||||
|
|
|
@ -15,8 +15,9 @@ import zipfile
|
||||||
|
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
|
||||||
# Calibre stuff - so we can import from our ZIP without absolute module name
|
|
||||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
#@@CALIBRE_COMPAT_CODE@@
|
||||||
|
|
||||||
|
|
||||||
from ion import DrmIon, DrmIonVoucher
|
from ion import DrmIon, DrmIonVoucher
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,8 @@ __license__ = 'GPL v3'
|
||||||
import os, sys
|
import os, sys
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
# Calibre stuff - so we can import from our ZIP without absolute module name
|
|
||||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
#@@CALIBRE_COMPAT_CODE@@
|
||||||
|
|
||||||
|
|
||||||
from calibre.utils.config import JSONConfig
|
from calibre.utils.config import JSONConfig
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
|
||||||
# Calibre stuff - so we can import from our ZIP without absolute module name
|
|
||||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
#@@CALIBRE_COMPAT_CODE@@
|
||||||
|
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
# CLI interface for the DeDRM plugin (useable without Calibre, too)
|
# CLI interface for the DeDRM plugin (useable without Calibre, too)
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function
|
||||||
|
|
||||||
# Copyright © 2021 NoDRM
|
# Copyright © 2021 NoDRM
|
||||||
|
|
||||||
OPT_SHORT_TO_LONG = [
|
OPT_SHORT_TO_LONG = [
|
||||||
|
@ -16,15 +18,11 @@ OPT_SHORT_TO_LONG = [
|
||||||
["f", "force"]
|
["f", "force"]
|
||||||
]
|
]
|
||||||
|
|
||||||
import sys, os
|
#@@CALIBRE_COMPAT_CODE@@
|
||||||
IS_CALIBRE = False
|
|
||||||
if "calibre" in sys.modules:
|
|
||||||
IS_CALIBRE = True
|
|
||||||
|
|
||||||
# Explicitly allow importing the parent folder
|
|
||||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
||||||
# Explicitly set the package identifier so we are allowed to import stuff ...
|
# Explicitly set the package identifier so we are allowed to import stuff ...
|
||||||
__package__ = "DeDRM_plugin"
|
__package__ = "DeDRM_plugin"
|
||||||
|
import os, sys
|
||||||
|
|
||||||
|
|
||||||
global _additional_data
|
global _additional_data
|
||||||
|
@ -46,7 +44,7 @@ def print_help():
|
||||||
print("Based on DeDRM Calibre plugin by Apprentice Harper, Apprentice Alf and others.")
|
print("Based on DeDRM Calibre plugin by Apprentice Harper, Apprentice Alf and others.")
|
||||||
print("See https://github.com/noDRM/DeDRM_tools for more information.")
|
print("See https://github.com/noDRM/DeDRM_tools for more information.")
|
||||||
print()
|
print()
|
||||||
if IS_CALIBRE:
|
if "calibre" in sys.modules:
|
||||||
print("This plugin can be run through Calibre - like you are doing right now - ")
|
print("This plugin can be run through Calibre - like you are doing right now - ")
|
||||||
print("but it can also be executed with a standalone Python interpreter.")
|
print("but it can also be executed with a standalone Python interpreter.")
|
||||||
else:
|
else:
|
||||||
|
@ -81,11 +79,11 @@ def handle_single_argument(arg, next):
|
||||||
|
|
||||||
if arg == "--help":
|
if arg == "--help":
|
||||||
print_help()
|
print_help()
|
||||||
exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
elif arg == "--credits":
|
elif arg == "--credits":
|
||||||
print_credits()
|
print_credits()
|
||||||
exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
elif arg in ["--username", "--password"]:
|
elif arg in ["--username", "--password"]:
|
||||||
used_up = 1
|
used_up = 1
|
||||||
|
@ -93,7 +91,7 @@ def handle_single_argument(arg, next):
|
||||||
if next is None:
|
if next is None:
|
||||||
print_err_header()
|
print_err_header()
|
||||||
print("Missing parameter for argument " + arg)
|
print("Missing parameter for argument " + arg)
|
||||||
exit(1)
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
_additional_params.append(next[0])
|
_additional_params.append(next[0])
|
||||||
|
|
||||||
|
@ -104,7 +102,7 @@ def handle_single_argument(arg, next):
|
||||||
else:
|
else:
|
||||||
print_err_header()
|
print_err_header()
|
||||||
print("Unknown argument: " + arg)
|
print("Unknown argument: " + arg)
|
||||||
exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
# Used up 0 additional arguments
|
# Used up 0 additional arguments
|
||||||
|
@ -132,7 +130,7 @@ def main(argv):
|
||||||
skip_opts = False
|
skip_opts = False
|
||||||
|
|
||||||
# First element is always the ZIP name, remove that.
|
# First element is always the ZIP name, remove that.
|
||||||
if not arguments[0].lower().endswith(".zip") and not IS_CALIBRE:
|
if not arguments[0].lower().endswith(".zip") and not "calibre" in sys.modules:
|
||||||
print("Warning: File name does not end in .zip ...")
|
print("Warning: File name does not end in .zip ...")
|
||||||
print(arguments)
|
print(arguments)
|
||||||
arguments.pop(0)
|
arguments.pop(0)
|
||||||
|
|
|
@ -14,8 +14,8 @@ __version__ = '6.0'
|
||||||
import sys
|
import sys
|
||||||
import os, csv, getopt
|
import os, csv, getopt
|
||||||
|
|
||||||
# Calibre stuff - so we can import from our ZIP without absolute module name
|
#@@CALIBRE_COMPAT_CODE@@
|
||||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
|
|
||||||
import zlib, zipfile, tempfile, shutil
|
import zlib, zipfile, tempfile, shutil
|
||||||
import traceback
|
import traceback
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import sys, os
|
#@@CALIBRE_COMPAT_CODE@@
|
||||||
# Calibre stuff - so we can import from our ZIP without absolute module name
|
|
||||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
|
|
||||||
|
|
||||||
from ignoblekeyGenPassHash import generate_key
|
from ignoblekeyGenPassHash import generate_key
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,10 @@ __license__ = 'GPL v3'
|
||||||
|
|
||||||
# Standard Python modules.
|
# Standard Python modules.
|
||||||
import os, sys, re, hashlib, traceback
|
import os, sys, re, hashlib, traceback
|
||||||
from calibre_plugins.dedrm.__init__ import PLUGIN_NAME, PLUGIN_VERSION
|
|
||||||
|
#@@CALIBRE_COMPAT_CODE@@
|
||||||
|
|
||||||
|
from __init__ import PLUGIN_NAME, PLUGIN_VERSION
|
||||||
|
|
||||||
|
|
||||||
class NoWinePython3Exception(Exception):
|
class NoWinePython3Exception(Exception):
|
||||||
|
|
|
@ -22,8 +22,7 @@ __version__ = "1.1"
|
||||||
|
|
||||||
import sys, os
|
import sys, os
|
||||||
|
|
||||||
# Calibre stuff - so we can import from our ZIP without absolute module name
|
#@@CALIBRE_COMPAT_CODE@@
|
||||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
|
|
||||||
import zlib
|
import zlib
|
||||||
import zipfilerugged
|
import zipfilerugged
|
||||||
|
|
|
@ -788,7 +788,7 @@ def cli_main():
|
||||||
books = [lib.books[num - 1]]
|
books = [lib.books[num - 1]]
|
||||||
except (ValueError, IndexError):
|
except (ValueError, IndexError):
|
||||||
print("Invalid choice. Exiting...")
|
print("Invalid choice. Exiting...")
|
||||||
exit()
|
sys.exit()
|
||||||
|
|
||||||
results = [decrypt_book(book, lib) for book in books]
|
results = [decrypt_book(book, lib) for book in books]
|
||||||
lib.close()
|
lib.close()
|
||||||
|
|
|
@ -739,7 +739,7 @@ def cli_main():
|
||||||
books = [lib.books[num - 1]]
|
books = [lib.books[num - 1]]
|
||||||
except (ValueError, IndexError):
|
except (ValueError, IndexError):
|
||||||
print("Invalid choice. Exiting...")
|
print("Invalid choice. Exiting...")
|
||||||
exit()
|
sys.exit()
|
||||||
|
|
||||||
results = [decrypt_book(book, lib) for book in books]
|
results = [decrypt_book(book, lib) for book in books]
|
||||||
lib.close()
|
lib.close()
|
||||||
|
|
|
@ -14,19 +14,65 @@ import shutil
|
||||||
|
|
||||||
|
|
||||||
DEDRM_SRC_DIR = 'DeDRM_plugin'
|
DEDRM_SRC_DIR = 'DeDRM_plugin'
|
||||||
|
DEDRM_SRC_TMP_DIR = 'DeDRM_plugin_temp'
|
||||||
DEDRM_README= 'DeDRM_plugin_ReadMe.txt'
|
DEDRM_README= 'DeDRM_plugin_ReadMe.txt'
|
||||||
OBOK_SRC_DIR = 'Obok_plugin'
|
OBOK_SRC_DIR = 'Obok_plugin'
|
||||||
OBOK_README = 'obok_plugin_ReadMe.txt'
|
OBOK_README = 'obok_plugin_ReadMe.txt'
|
||||||
RELEASE_DIR = 'release'
|
RELEASE_DIR = 'release'
|
||||||
|
|
||||||
|
def patch_file(filepath):
|
||||||
|
f = open(filepath, "rb")
|
||||||
|
fn = open(filepath + ".tmp", "wb")
|
||||||
|
patch = open(os.path.join(DEDRM_SRC_DIR, "__calibre_compat_code.py"), "rb")
|
||||||
|
patchdata = patch.read()
|
||||||
|
patch.close()
|
||||||
|
|
||||||
|
while True:
|
||||||
|
line = f.readline()
|
||||||
|
if len(line) == 0:
|
||||||
|
break
|
||||||
|
|
||||||
|
if line.strip().startswith(b"#@@CALIBRE_COMPAT_CODE@@"):
|
||||||
|
fn.write(patchdata)
|
||||||
|
else:
|
||||||
|
fn.write(line)
|
||||||
|
|
||||||
|
f.close()
|
||||||
|
fn.close()
|
||||||
|
shutil.move(filepath + ".tmp", filepath)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def make_release(version):
|
def make_release(version):
|
||||||
try:
|
try:
|
||||||
shutil.rmtree(RELEASE_DIR)
|
shutil.rmtree(RELEASE_DIR)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
try:
|
||||||
|
shutil.rmtree(DEDRM_SRC_TMP_DIR)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
os.mkdir(RELEASE_DIR)
|
os.mkdir(RELEASE_DIR)
|
||||||
shutil.make_archive(DEDRM_SRC_DIR, 'zip', DEDRM_SRC_DIR)
|
|
||||||
|
# Copy folder
|
||||||
|
shutil.copytree(DEDRM_SRC_DIR, DEDRM_SRC_TMP_DIR)
|
||||||
|
|
||||||
|
# Modify folder
|
||||||
|
try:
|
||||||
|
shutil.rmtree(os.path.join(os.path.abspath(DEDRM_SRC_TMP_DIR), "__pycache__"))
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Patch file to add compat code.
|
||||||
|
for root, dirs, files in os.walk(DEDRM_SRC_TMP_DIR):
|
||||||
|
for name in files:
|
||||||
|
if name.endswith(".py"):
|
||||||
|
patch_file(os.path.join(root, name))
|
||||||
|
|
||||||
|
|
||||||
|
# Package
|
||||||
|
shutil.make_archive(DEDRM_SRC_DIR, 'zip', DEDRM_SRC_TMP_DIR)
|
||||||
shutil.make_archive(OBOK_SRC_DIR, 'zip', OBOK_SRC_DIR)
|
shutil.make_archive(OBOK_SRC_DIR, 'zip', OBOK_SRC_DIR)
|
||||||
shutil.move(DEDRM_SRC_DIR+'.zip', RELEASE_DIR)
|
shutil.move(DEDRM_SRC_DIR+'.zip', RELEASE_DIR)
|
||||||
shutil.move(OBOK_SRC_DIR+'.zip', RELEASE_DIR)
|
shutil.move(OBOK_SRC_DIR+'.zip', RELEASE_DIR)
|
||||||
|
@ -34,6 +80,9 @@ def make_release(version):
|
||||||
shutil.copy(OBOK_README, RELEASE_DIR)
|
shutil.copy(OBOK_README, RELEASE_DIR)
|
||||||
shutil.copy("ReadMe_Overview.txt", RELEASE_DIR)
|
shutil.copy("ReadMe_Overview.txt", RELEASE_DIR)
|
||||||
|
|
||||||
|
# Remove temp folder:
|
||||||
|
shutil.rmtree(DEDRM_SRC_TMP_DIR)
|
||||||
|
|
||||||
if version is not None:
|
if version is not None:
|
||||||
release_name = 'DeDRM_tools_{}'.format(version)
|
release_name = 'DeDRM_tools_{}'.format(version)
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in a new issue