]> xmof Git - DeDRM.git/commitdiff
Allow users to specify Kobo directory and add 'ip' command for linux
authorsnah <h.g.n.chua@gmail.com>
Sat, 6 Jul 2019 03:01:28 +0000 (11:01 +0800)
committersnah <h.g.n.chua@gmail.com>
Sat, 6 Jul 2019 03:01:28 +0000 (11:01 +0800)
obok_src/action.py
obok_src/config.py
obok_src/obok/obok.py

index af843b9ebe181105d9f6f66d7c9c7020b7e6123f..a0b63a6df4bb888e6d7f6765d77f7a7e90b3e486 100644 (file)
@@ -93,7 +93,7 @@ class InterfacePluginAction(InterfaceAction):
             debug_print("Exception getting device path. Probably not an E-Ink Kobo device")
 
         # Get the Kobo Library object (obok v3.01)
-        self.library = KoboLibrary(tmpserials, device_path)
+        self.library = KoboLibrary(tmpserials, device_path, cfg['kobo_directory'])
         debug_print ("got kobodir %s" % self.library.kobodir)
         if (self.library.kobodir == ''):
             # linux and no device connected, but could be extended
index ae4edc01da27d54e832ecf3793289a594cdac9fd..0b2fcab57f8c255a15f1851dc9534ff8baa681da 100644 (file)
@@ -3,9 +3,9 @@ from __future__ import (unicode_literals, division, absolute_import,
                         print_function)
 
 try:
-    from PyQt5.Qt import (Qt, QGroupBox, QListWidget, QLineEdit, QDialogButtonBox, QWidget, QLabel, QDialog, QVBoxLayout, QAbstractItemView, QIcon, QHBoxLayout, QComboBox, QListWidgetItem)
+    from PyQt5.Qt import (Qt, QGroupBox, QListWidget, QLineEdit, QDialogButtonBox, QWidget, QLabel, QDialog, QVBoxLayout, QAbstractItemView, QIcon, QHBoxLayout, QComboBox, QListWidgetItem, QFileDialog)
 except ImportError:
-    from PyQt4.Qt import (Qt, QGroupBox, QListWidget, QLineEdit, QDialogButtonBox, QWidget, QLabel, QDialog, QVBoxLayout, QAbstractItemView, QIcon, QHBoxLayout, QComboBox, QListWidgetItem)
+    from PyQt4.Qt import (Qt, QGroupBox, QListWidget, QLineEdit, QDialogButtonBox, QWidget, QLabel, QDialog, QVBoxLayout, QAbstractItemView, QIcon, QHBoxLayout, QComboBox, QListWidgetItem, QFileDialog)
 
 try:
     from PyQt5 import Qt as QtGui
@@ -18,6 +18,7 @@ from calibre.utils.config import JSONConfig, config_dir
 plugin_prefs = JSONConfig('plugins/obok_dedrm_prefs')
 plugin_prefs.defaults['finding_homes_for_formats'] = 'Ask'
 plugin_prefs.defaults['kobo_serials'] = []
+plugin_prefs.defaults['kobo_directory'] = u''
 
 from calibre_plugins.obok_dedrm.__init__ import PLUGIN_NAME, PLUGIN_VERSION
 from calibre_plugins.obok_dedrm.utilities import (debug_print)
@@ -37,6 +38,7 @@ class ConfigWidget(QWidget):
 
         # copy of preferences
         self.tmpserials = plugin_prefs['kobo_serials']
+        self.kobodirectory = plugin_prefs['kobo_directory']
 
         combo_label = QLabel(_('When should Obok try to insert EPUBs into existing calibre entries?'), self)
         layout.addWidget(combo_label)
@@ -53,15 +55,30 @@ class ConfigWidget(QWidget):
         self.serials_button.clicked.connect(self.edit_serials)
         layout.addWidget(self.serials_button)
 
+        self.kobo_directory_button = QtGui.QPushButton(self)
+        self.kobo_directory_button.setToolTip(_(u"Click to specify the Kobo directory"))
+        self.kobo_directory_button.setText(u"Kobo directory")
+        self.kobo_directory_button.clicked.connect(self.edit_kobo_directory)
+        layout.addWidget(self.kobo_directory_button)
+
 
     def edit_serials(self):
-        d = ManageKeysDialog(self,u"Kobo device serial numbers",self.tmpserials, AddSerialDialog)
+        d = ManageKeysDialog(self,u"Kobo device serial number",self.tmpserials, AddSerialDialog)
         d.exec_()
 
-    
+
+    def edit_kobo_directory(self):
+        tmpkobodirectory = QFileDialog.getExistingDirectory(self, u"Select Kobo directory", self.kobodirectory or "/home", QFileDialog.ShowDirsOnly)
+
+        if tmpkobodirectory != u"" and tmpkobodirectory is not None:
+            self.kobodirectory = tmpkobodirectory
+
+
     def save_settings(self):
         plugin_prefs['finding_homes_for_formats'] = unicode(self.find_homes.currentText())
         plugin_prefs['kobo_serials'] = self.tmpserials
+        plugin_prefs['kobo_directory'] = self.kobodirectory
+
 
 
 
index 033c67a3f018de0ff1a869c8314cd37a826633f1..2fdf9bf6bffc422afd1ab17a8080ef73c90e38f1 100644 (file)
@@ -290,7 +290,7 @@ class KoboLibrary(object):
     written by the Kobo Desktop Edition application, including the list
     of books, their titles, and the user's encryption key(s)."""
 
-    def __init__ (self, serials = [], device_path = None):
+    def __init__ (self, serials = [], device_path = None, desktopkobodir = u""):
         print __about__
         self.kobodir = u""
         kobodb = u""
@@ -344,19 +344,23 @@ class KoboLibrary(object):
 
         if (self.kobodir == u""):
             # step 4. we haven't found a device with serials, so try desktop apps
-            if sys.platform.startswith('win'):
-                import _winreg as winreg
-                if sys.getwindowsversion().major > 5:
-                    if 'LOCALAPPDATA' in os.environ.keys():
-                        # Python 2.x does not return unicode env. Use Python 3.x
-                        self.kobodir = winreg.ExpandEnvironmentStrings(u"%LOCALAPPDATA%")
-                if (self.kobodir == u""):
-                    if 'USERPROFILE' in os.environ.keys():
-                        # Python 2.x does not return unicode env. Use Python 3.x
-                        self.kobodir = os.path.join(winreg.ExpandEnvironmentStrings(u"%USERPROFILE%"), u"Local Settings", u"Application Data")
-                self.kobodir = os.path.join(self.kobodir, u"Kobo", u"Kobo Desktop Edition")
-            elif sys.platform.startswith('darwin'):
-                self.kobodir = os.path.join(os.environ['HOME'], u"Library", u"Application Support", u"Kobo", u"Kobo Desktop Edition")
+            if desktopkobodir != u'':
+                self.kobodir = desktopkobodir
+
+            if (self.kobodir == u""):
+                if sys.platform.startswith('win'):
+                    import _winreg as winreg
+                    if sys.getwindowsversion().major > 5:
+                        if 'LOCALAPPDATA' in os.environ.keys():
+                            # Python 2.x does not return unicode env. Use Python 3.x
+                            self.kobodir = winreg.ExpandEnvironmentStrings(u"%LOCALAPPDATA%")
+                    if (self.kobodir == u""):
+                        if 'USERPROFILE' in os.environ.keys():
+                            # Python 2.x does not return unicode env. Use Python 3.x
+                            self.kobodir = os.path.join(winreg.ExpandEnvironmentStrings(u"%USERPROFILE%"), u"Local Settings", u"Application Data")
+                    self.kobodir = os.path.join(self.kobodir, u"Kobo", u"Kobo Desktop Edition")
+                elif sys.platform.startswith('darwin'):
+                    self.kobodir = os.path.join(os.environ['HOME'], u"Library", u"Application Support", u"Kobo", u"Kobo Desktop Edition")
             #elif linux_path != None:
                 # Probably Linux, let's get the wine prefix and path to Kobo.
             #   self.kobodir = os.path.join(linux_path, u"Local Settings", u"Application Data", u"Kobo", u"Kobo Desktop Edition")
@@ -368,7 +372,6 @@ class KoboLibrary(object):
                 self.kobodir = u""
                 kobodb  = u""
 
-        
         if (self.kobodir != u""):
             self.bookdir = os.path.join(self.kobodir, u"kepub")
             # make a copy of the database in a temporary file
@@ -450,7 +453,16 @@ class KoboLibrary(object):
                 # print u"m:{0}".format(m[0])
                 macaddrs.append(m[0].upper())
         else:
-            # probably linux, let's try ipconfig under wine
+            # probably linux
+
+            # let's try ip
+            c = re.compile('\s(' + '[0-9a-f]{2}:' * 5 + '[0-9a-f]{2})(\s|$)', re.IGNORECASE)
+            for line in os.popen('ip -br link'):
+                m = c.search(line)
+                if m:
+                    macaddrs.append(m.group(1).upper())
+
+            # let's try ipconfig under wine
             c = re.compile('\s(' + '[0-9a-f]{2}-' * 5 + '[0-9a-f]{2})(\s|$)', re.IGNORECASE)
             for line in os.popen('ipconfig /all'):
                 m = c.search(line)