config.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. """main.py: Configuration parameter GUI for a Calibre plugin that can read OPDS feeds"""
  2. __author__ = "Steinar Bang"
  3. __copyright__ = "Steinar Bang, 2015-2022"
  4. __credits__ = ["Steinar Bang"]
  5. __license__ = "GPL v3"
  6. from PyQt5.Qt import QWidget, QGridLayout, QLabel, QComboBox, QCheckBox
  7. from calibre.utils.config import JSONConfig
  8. prefs = JSONConfig('plugins/opds_client')
  9. prefs.defaults['opds_url'] = ['http://localhost:8080/opds']
  10. prefs.defaults['hideNewspapers'] = True
  11. prefs.defaults['hideBooksAlreadyInLibrary'] = True
  12. class ConfigWidget(QWidget):
  13. def __init__(self):
  14. QWidget.__init__(self)
  15. self.layout = QGridLayout()
  16. self.setLayout(self.layout)
  17. labelColumnWidths = []
  18. self.opdsUrlLabel = QLabel('OPDS URL: ')
  19. self.layout.addWidget(self.opdsUrlLabel, 0, 0)
  20. labelColumnWidths.append(self.layout.itemAtPosition(0, 0).sizeHint().width())
  21. print(type(prefs.defaults['opds_url']))
  22. print(type(prefs['opds_url']))
  23. convertSingleStringOpdsUrlPreferenceToListOfStringsPreference()
  24. self.opdsUrlEditor = QComboBox(self)
  25. self.opdsUrlEditor.addItems(prefs['opds_url'])
  26. self.opdsUrlEditor.setEditable(True)
  27. self.opdsUrlEditor.setInsertPolicy(QComboBox.InsertAtTop)
  28. self.layout.addWidget(self.opdsUrlEditor, 0, 1)
  29. self.opdsUrlLabel.setBuddy(self.opdsUrlEditor)
  30. self.hideNewsCheckbox = QCheckBox('Hide Newspapers', self)
  31. self.hideNewsCheckbox.setChecked(prefs['hideNewspapers'])
  32. self.layout.addWidget(self.hideNewsCheckbox, 1, 0)
  33. labelColumnWidths.append(self.layout.itemAtPosition(1, 0).sizeHint().width())
  34. self.hideBooksAlreadyInLibraryCheckbox = QCheckBox('Hide books already in library', self)
  35. self.hideBooksAlreadyInLibraryCheckbox.setChecked(prefs['hideBooksAlreadyInLibrary'])
  36. self.layout.addWidget(self.hideBooksAlreadyInLibraryCheckbox, 2, 0)
  37. labelColumnWidths.append(self.layout.itemAtPosition(2, 0).sizeHint().width())
  38. labelColumnWidth = max(labelColumnWidths)
  39. self.layout.setColumnMinimumWidth(1, labelColumnWidth * 2)
  40. def save_settings(self):
  41. prefs['hideNewspapers'] = self.hideNewsCheckbox.isChecked()
  42. prefs['hideBooksAlreadyInLibrary'] = self.hideBooksAlreadyInLibraryCheckbox.isChecked()
  43. prefs['opds_url'] = saveOpdsUrlCombobox(self.opdsUrlEditor)
  44. def saveOpdsUrlCombobox(opdsUrlEditor):
  45. opdsUrls = []
  46. print("item count: %d" % opdsUrlEditor.count())
  47. for i in range(opdsUrlEditor.count()):
  48. print("item %d: %s" % (i, opdsUrlEditor.itemText(i)))
  49. opdsUrls.append(opdsUrlEditor.itemText(i))
  50. # Move the selected item first in the list
  51. currentSelectedUrlIndex = opdsUrlEditor.currentIndex()
  52. if currentSelectedUrlIndex > 0:
  53. currentUrl = opdsUrls[currentSelectedUrlIndex]
  54. del opdsUrls[currentSelectedUrlIndex]
  55. opdsUrls.insert(0, currentUrl)
  56. return opdsUrls
  57. def convertSingleStringOpdsUrlPreferenceToListOfStringsPreference():
  58. if type(prefs['opds_url']) != type(prefs.defaults['opds_url']):
  59. # Upgrade config option from single string to list of strings
  60. originalUrl = prefs['opds_url']
  61. prefs['opds_url'] = prefs.defaults['opds_url']
  62. prefs['opds_url'].insert(0, originalUrl)