Add search engine assistant functionality under Node Operations.

This commit is contained in:
AccentuSoft
2022-07-05 13:29:20 +03:00
parent a0d9fef19b
commit 5fab0f34df

View File

@@ -293,6 +293,17 @@ class MenuBar(QtWidgets.QMenuBar):
triggered=self.screenshotWebsites)
nodeOperationsMenu.addAction(screenshotWebsitesAction)
nodeOperationsMenu.addSeparator()
searchOnlineAction = QtGui.QAction("Search Engine Query for Selected Entities",
self,
statusTip="Open Browser tabs running search engine queries on a variety of "
"search engines for the primary fields of the selected entities.",
triggered=self.searchOnline)
nodeOperationsMenu.addAction(searchOnlineAction)
nodeOperationsMenu.addSeparator()
notesToTextFilesAction = QtGui.QAction("Save Notes Fields to Text Files",
self,
statusTip="Save the 'Notes' fields of the selected nodes as text files.",
@@ -999,6 +1010,28 @@ class MenuBar(QtWidgets.QMenuBar):
except (KeyError, AttributeError):
continue
def searchOnline(self) -> None:
currentScene = self.parent().centralWidget().tabbedPane.getCurrentScene()
selectedURLs = SearchEngineDialog(self)
if selectedURLs.exec_():
selectedEngineURLs = []
for engineCheckbox in selectedURLs.searchEngineWidgets:
if engineCheckbox.isChecked():
selectedEngineURLs.append(engineCheckbox.searchAttr)
searchTerms = []
for item in currentScene.selectedItems():
if isinstance(item, BaseNode):
itemJSON = self.parent().LENTDB.getEntity(item.uid)
primaryField = str(itemJSON[list(itemJSON)[1]])
primaryField = parse.quote(primaryField, "")
searchTerms.append('"' + primaryField + '"')
for searchEngineURL in selectedEngineURLs:
try:
webbrowser.open(searchEngineURL + " ".join(searchTerms), new=0, autoraise=False)
except KeyError:
continue
def rearrangeGraph(self) -> None:
self.parent().centralWidget().tabbedPane.getCurrentScene().rearrangeGraph()
@@ -2656,6 +2689,45 @@ class CanvasPictureDialog(QtWidgets.QDialog):
self.fileDirectoryLine.setText(self.fileDirectory)
class SearchEngineDialog(QtWidgets.QDialog):
searchEngines = ['https://www.startpage.com/sp/search?q=', 'https://html.duckduckgo.com/html?q=',
'https://www.google.com/search?q=', 'https://www.bing.com/search?q=',
'https://www.yandex.com/search/?text=', 'https://gigablast.com/search?q=',
'https://www.etools.ch/searchSubmit.do?query=', 'https://lite.qwant.com/?q=',
'https://www.izito.com/search?q=', 'https://searx.org/search?q=']
def __init__(self, parent):
super(SearchEngineDialog, self).__init__(parent=parent)
self.setWindowTitle('Search Engine Lookup')
self.setModal(True)
self.setStyleSheet(Stylesheets.MAIN_WINDOW_STYLESHEET)
layout = QtWidgets.QVBoxLayout()
self.setLayout(layout)
dialogLabel = QtWidgets.QLabel('Select the search engines to use:')
layout.addWidget(dialogLabel)
self.searchEngineWidgets = []
for engine in self.searchEngines:
engineCheckbox = QtWidgets.QCheckBox('/'.join(engine.split('/')[:3]))
engineCheckbox.searchAttr = engine
layout.addWidget(engineCheckbox)
self.searchEngineWidgets.append(engineCheckbox)
buttonsWidget = QtWidgets.QWidget()
buttonsWidgetLayout = QtWidgets.QHBoxLayout()
buttonsWidget.setLayout(buttonsWidgetLayout)
acceptButton = QtWidgets.QPushButton('Confirm')
cancelButton = QtWidgets.QPushButton('Cancel')
cancelButton.clicked.connect(self.reject)
acceptButton.clicked.connect(self.accept)
buttonsWidgetLayout.addWidget(cancelButton)
buttonsWidgetLayout.addWidget(acceptButton)
layout.addWidget(buttonsWidget)
class ScreenshotWebsiteThread(QtCore.QThread):
progressSignal = QtCore.Signal(int)
cancelled = False