|
|
|
|
@@ -9,16 +9,24 @@ __license__ = 'GPL v3'
|
|
|
|
|
import os, traceback, json
|
|
|
|
|
|
|
|
|
|
# PyQT4 modules (part of calibre).
|
|
|
|
|
from PyQt4.Qt import (Qt, QWidget, QHBoxLayout, QVBoxLayout, QLabel, QLineEdit,
|
|
|
|
|
try:
|
|
|
|
|
from PyQt5.Qt import (Qt, QWidget, QHBoxLayout, QVBoxLayout, QLabel, QLineEdit,
|
|
|
|
|
QGroupBox, QPushButton, QListWidget, QListWidgetItem,
|
|
|
|
|
QAbstractItemView, QIcon, QDialog, QDialogButtonBox, QUrl, QString)
|
|
|
|
|
from PyQt4 import QtGui
|
|
|
|
|
|
|
|
|
|
QAbstractItemView, QIcon, QDialog, QDialogButtonBox, QUrl)
|
|
|
|
|
except ImportError:
|
|
|
|
|
from PyQt4.Qt import (Qt, QWidget, QHBoxLayout, QVBoxLayout, QLabel, QLineEdit,
|
|
|
|
|
QGroupBox, QPushButton, QListWidget, QListWidgetItem,
|
|
|
|
|
QAbstractItemView, QIcon, QDialog, QDialogButtonBox, QUrl)
|
|
|
|
|
try:
|
|
|
|
|
from PyQt5 import Qt as QtGui
|
|
|
|
|
except ImportError:
|
|
|
|
|
from PyQt4 import QtGui
|
|
|
|
|
|
|
|
|
|
from zipfile import ZipFile
|
|
|
|
|
|
|
|
|
|
# calibre modules and constants.
|
|
|
|
|
from calibre.gui2 import (error_dialog, question_dialog, info_dialog, open_url,
|
|
|
|
|
choose_dir, choose_files)
|
|
|
|
|
choose_dir, choose_files, choose_save_file)
|
|
|
|
|
from calibre.utils.config import dynamic, config_dir, JSONConfig
|
|
|
|
|
from calibre.constants import iswindows, isosx
|
|
|
|
|
|
|
|
|
|
@@ -267,7 +275,7 @@ class ManageKeysDialog(QDialog):
|
|
|
|
|
|
|
|
|
|
def getwineprefix(self):
|
|
|
|
|
if self.wineprefix is not None:
|
|
|
|
|
return unicode(self.wp_lineedit.text().toUtf8(), 'utf8').strip()
|
|
|
|
|
return unicode(self.wp_lineedit.text()).strip()
|
|
|
|
|
return u""
|
|
|
|
|
|
|
|
|
|
def populate_list(self):
|
|
|
|
|
@@ -316,7 +324,7 @@ class ManageKeysDialog(QDialog):
|
|
|
|
|
if d.result() != d.Accepted:
|
|
|
|
|
# rename cancelled or moot.
|
|
|
|
|
return
|
|
|
|
|
keyname = unicode(self.listy.currentItem().text().toUtf8(),'utf8')
|
|
|
|
|
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 <strong>{0}</strong> to <strong>{1}</strong>?".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]
|
|
|
|
|
@@ -328,7 +336,7 @@ class ManageKeysDialog(QDialog):
|
|
|
|
|
def delete_key(self):
|
|
|
|
|
if not self.listy.currentItem():
|
|
|
|
|
return
|
|
|
|
|
keyname = unicode(self.listy.currentItem().text().toUtf8(), 'utf8')
|
|
|
|
|
keyname = unicode(self.listy.currentItem().text())
|
|
|
|
|
if not question_dialog(self, "{0} {1}: Confirm Delete".format(PLUGIN_NAME, PLUGIN_VERSION), u"Do you really want to delete the {1} <strong>{0}</strong>?".format(keyname, self.key_type_name), show_copy_button=False, default_yes=False):
|
|
|
|
|
return
|
|
|
|
|
if type(self.plugin_keys) == dict:
|
|
|
|
|
@@ -352,9 +360,10 @@ class ManageKeysDialog(QDialog):
|
|
|
|
|
open_url(QUrl(url))
|
|
|
|
|
|
|
|
|
|
def migrate_files(self):
|
|
|
|
|
dynamic[PLUGIN_NAME + u"config_dir"] = config_dir
|
|
|
|
|
files = choose_files(self, PLUGIN_NAME + u"config_dir",
|
|
|
|
|
u"Select {0} files to import".format(self.key_type_name), [(u"{0} files".format(self.key_type_name), [self.keyfile_ext])], False)
|
|
|
|
|
unique_dlg_name = PLUGIN_NAME + u"import {0} keys".format(self.key_type_name).replace(' ', '_') #takes care of automatically remembering last directory
|
|
|
|
|
caption = u"Select {0} files to import".format(self.key_type_name)
|
|
|
|
|
filters = [(u"{0} files".format(self.key_type_name), [self.keyfile_ext])]
|
|
|
|
|
files = choose_files(self, unique_dlg_name, caption, filters, all_files=False)
|
|
|
|
|
counter = 0
|
|
|
|
|
skipped = 0
|
|
|
|
|
if files:
|
|
|
|
|
@@ -408,17 +417,14 @@ class ManageKeysDialog(QDialog):
|
|
|
|
|
r = error_dialog(None, "{0} {1}".format(PLUGIN_NAME, PLUGIN_VERSION),
|
|
|
|
|
_(errmsg), show=True, show_copy_button=False)
|
|
|
|
|
return
|
|
|
|
|
filter = QString(u"{0} Files (*.{1})".format(self.key_type_name, self.keyfile_ext))
|
|
|
|
|
keyname = unicode(self.listy.currentItem().text().toUtf8(), 'utf8')
|
|
|
|
|
if dynamic.get(PLUGIN_NAME + 'save_dir'):
|
|
|
|
|
defaultname = os.path.join(dynamic.get(PLUGIN_NAME + 'save_dir'), u"{0}.{1}".format(keyname , self.keyfile_ext))
|
|
|
|
|
else:
|
|
|
|
|
defaultname = os.path.join(os.path.expanduser('~'), u"{0}.{1}".format(keyname , self.keyfile_ext))
|
|
|
|
|
filename = unicode(QtGui.QFileDialog.getSaveFileName(self, u"Save {0} File as...".format(self.key_type_name), defaultname,
|
|
|
|
|
u"{0} Files (*.{1})".format(self.key_type_name,self.keyfile_ext), filter))
|
|
|
|
|
keyname = unicode(self.listy.currentItem().text())
|
|
|
|
|
unique_dlg_name = PLUGIN_NAME + u"export {0} keys".format(self.key_type_name).replace(' ', '_') #takes care of automatically remembering last directory
|
|
|
|
|
caption = u"Save {0} File as...".format(self.key_type_name)
|
|
|
|
|
filters = [(u"{0} Files".format(self.key_type_name), [u"{0}".format(self.keyfile_ext)])]
|
|
|
|
|
defaultname = u"{0}.{1}".format(keyname, self.keyfile_ext)
|
|
|
|
|
filename = choose_save_file(self, unique_dlg_name, caption, filters, all_files=False, initial_filename=defaultname)
|
|
|
|
|
if filename:
|
|
|
|
|
dynamic[PLUGIN_NAME + 'save_dir'] = os.path.split(filename)[0]
|
|
|
|
|
with file(filename, 'w') as fname:
|
|
|
|
|
with file(filename, 'wb') as fname:
|
|
|
|
|
if self.binary_file:
|
|
|
|
|
fname.write(self.plugin_keys[keyname].decode('hex'))
|
|
|
|
|
elif self.json_file:
|
|
|
|
|
@@ -458,7 +464,7 @@ class RenameKeyDialog(QDialog):
|
|
|
|
|
self.resize(self.sizeHint())
|
|
|
|
|
|
|
|
|
|
def accept(self):
|
|
|
|
|
if self.key_ledit.text().isEmpty() or unicode(self.key_ledit.text()).isspace():
|
|
|
|
|
if not unicode(self.key_ledit.text()) or unicode(self.key_ledit.text()).isspace():
|
|
|
|
|
errmsg = u"Key name field cannot be empty!"
|
|
|
|
|
return error_dialog(None, "{0} {1}".format(PLUGIN_NAME, PLUGIN_VERSION),
|
|
|
|
|
_(errmsg), show=True, show_copy_button=False)
|
|
|
|
|
@@ -479,7 +485,7 @@ class RenameKeyDialog(QDialog):
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def key_name(self):
|
|
|
|
|
return unicode(self.key_ledit.text().toUtf8(), 'utf8').strip()
|
|
|
|
|
return unicode(self.key_ledit.text()).strip()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -553,7 +559,7 @@ class AddBandNKeyDialog(QDialog):
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def key_name(self):
|
|
|
|
|
return unicode(self.key_ledit.text().toUtf8(), 'utf8').strip()
|
|
|
|
|
return unicode(self.key_ledit.text()).strip()
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def key_value(self):
|
|
|
|
|
@@ -562,11 +568,11 @@ class AddBandNKeyDialog(QDialog):
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def user_name(self):
|
|
|
|
|
return unicode(self.name_ledit.text().toUtf8(), 'utf8').strip().lower().replace(' ','')
|
|
|
|
|
return unicode(self.name_ledit.text()).strip().lower().replace(' ','')
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def cc_number(self):
|
|
|
|
|
return unicode(self.cc_ledit.text().toUtf8(), 'utf8').strip().replace(' ', '').replace('-','')
|
|
|
|
|
return unicode(self.cc_ledit.text()).strip().replace(' ', '').replace('-','')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def accept(self):
|
|
|
|
|
@@ -634,7 +640,7 @@ class AddEReaderDialog(QDialog):
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def key_name(self):
|
|
|
|
|
return unicode(self.key_ledit.text().toUtf8(), 'utf8').strip()
|
|
|
|
|
return unicode(self.key_ledit.text()).strip()
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def key_value(self):
|
|
|
|
|
@@ -643,11 +649,11 @@ class AddEReaderDialog(QDialog):
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def user_name(self):
|
|
|
|
|
return unicode(self.name_ledit.text().toUtf8(), 'utf8').strip().lower().replace(' ','')
|
|
|
|
|
return unicode(self.name_ledit.text()).strip().lower().replace(' ','')
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def cc_number(self):
|
|
|
|
|
return unicode(self.cc_ledit.text().toUtf8(), 'utf8').strip().replace(' ', '').replace('-','')
|
|
|
|
|
return unicode(self.cc_ledit.text()).strip().replace(' ', '').replace('-','')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def accept(self):
|
|
|
|
|
@@ -719,7 +725,7 @@ class AddAdeptDialog(QDialog):
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def key_name(self):
|
|
|
|
|
return unicode(self.key_ledit.text().toUtf8(), 'utf8').strip()
|
|
|
|
|
return unicode(self.key_ledit.text()).strip()
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def key_value(self):
|
|
|
|
|
@@ -792,7 +798,7 @@ class AddKindleDialog(QDialog):
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def key_name(self):
|
|
|
|
|
return unicode(self.key_ledit.text().toUtf8(), 'utf8').strip()
|
|
|
|
|
return unicode(self.key_ledit.text()).strip()
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def key_value(self):
|
|
|
|
|
@@ -841,11 +847,11 @@ class AddSerialDialog(QDialog):
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def key_name(self):
|
|
|
|
|
return unicode(self.key_ledit.text().toUtf8(), 'utf8').strip()
|
|
|
|
|
return unicode(self.key_ledit.text()).strip()
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def key_value(self):
|
|
|
|
|
return unicode(self.key_ledit.text().toUtf8(), 'utf8').strip()
|
|
|
|
|
return unicode(self.key_ledit.text()).strip()
|
|
|
|
|
|
|
|
|
|
def accept(self):
|
|
|
|
|
if len(self.key_name) == 0 or self.key_name.isspace():
|
|
|
|
|
@@ -889,11 +895,11 @@ class AddPIDDialog(QDialog):
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def key_name(self):
|
|
|
|
|
return unicode(self.key_ledit.text().toUtf8(), 'utf8').strip()
|
|
|
|
|
return unicode(self.key_ledit.text()).strip()
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def key_value(self):
|
|
|
|
|
return unicode(self.key_ledit.text().toUtf8(), 'utf8').strip()
|
|
|
|
|
return unicode(self.key_ledit.text()).strip()
|
|
|
|
|
|
|
|
|
|
def accept(self):
|
|
|
|
|
if len(self.key_name) == 0 or self.key_name.isspace():
|
|
|
|
|
|