1# -*- coding: utf-8 -*-
2
3# Copyright (c) 2012 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4#
5
6"""
7Module implementing a dialog to manage the Send Referer whitelist.
8"""
9
10from PyQt5.QtCore import pyqtSlot, Qt, QSortFilterProxyModel, QStringListModel
11from PyQt5.QtWidgets import QDialog, QInputDialog, QLineEdit
12
13from .Ui_SendRefererWhitelistDialog import Ui_SendRefererWhitelistDialog
14
15import Preferences
16
17
18class SendRefererWhitelistDialog(QDialog, Ui_SendRefererWhitelistDialog):
19    """
20    Class implementing a dialog to manage the Send Referer whitelist.
21    """
22    def __init__(self, parent=None):
23        """
24        Constructor
25
26        @param parent reference to the parent widget (QWidget)
27        """
28        super().__init__(parent)
29        self.setupUi(self)
30
31        self.__model = QStringListModel(
32            Preferences.getWebBrowser("SendRefererWhitelist"), self)
33        self.__model.sort(0)
34        self.__proxyModel = QSortFilterProxyModel(self)
35        self.__proxyModel.setFilterCaseSensitivity(
36            Qt.CaseSensitivity.CaseInsensitive)
37        self.__proxyModel.setSourceModel(self.__model)
38        self.whitelist.setModel(self.__proxyModel)
39
40        self.searchEdit.textChanged.connect(
41            self.__proxyModel.setFilterFixedString)
42
43        self.removeButton.clicked.connect(self.whitelist.removeSelected)
44        self.removeAllButton.clicked.connect(self.whitelist.removeAll)
45
46    @pyqtSlot()
47    def on_addButton_clicked(self):
48        """
49        Private slot to add an entry to the whitelist.
50        """
51        host, ok = QInputDialog.getText(
52            self,
53            self.tr("Send Referer Whitelist"),
54            self.tr("Enter host name to add to the whitelist:"),
55            QLineEdit.EchoMode.Normal)
56        if ok and host != "" and host not in self.__model.stringList():
57            self.__model.insertRow(self.__model.rowCount())
58            self.__model.setData(
59                self.__model.index(self.__model.rowCount() - 1), host)
60            self.__model.sort(0)
61
62    def accept(self):
63        """
64        Public method to accept the dialog data.
65        """
66        Preferences.setWebBrowser(
67            "SendRefererWhitelist", self.__model.stringList())
68
69        super().accept()
70