-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathInfoSearch.py
127 lines (93 loc) · 4.49 KB
/
InfoSearch.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
__author__ = 'Abraham Yusuf <[email protected]>'
import logging
from PyQt5 import QtCore, QtWidgets, QtGui
from datastructures import FEPRecord
from finders import FileSystemFinder
from finders.tasks import FindInFolder, clean
from ui_InfoSearch import Ui_InfoSearch
from SubscriberInfo import SubscriberInfo
class InfoSearch(QtWidgets.QWidget, Ui_InfoSearch):
def __init__(self, parent=None):
super(InfoSearch, self).__init__(parent)
self.setupUi(self)
self.retranslateUi(self)
self.lblFolder.setText('')
self.lblStatus.setText('')
self.thread_pool = QtCore.QThreadPool(self)
self.thread_pool.setMaxThreadCount(1)
self.finder = None
self.logger = logging.getLogger(__name__)
@QtCore.pyqtSlot()
def on_txtMobileNos_textChanged(self):
text = self.txtMobileNos.toPlainText()
if text[-1] not in '0123456789,':
self.txtMobileNos.setPlainText(text[:-1])
cursor = self.txtMobileNos.textCursor()
cursor.movePosition(QtGui.QTextCursor.End)
self.txtMobileNos.setTextCursor(cursor)
@QtCore.pyqtSlot()
def on_btnGetFolder_clicked(self):
folder = QtWidgets.QFileDialog.getExistingDirectory(self, 'FEP/MNO Folder', QtCore.QDir.homePath())
if folder:
if self.lblFolder.text().find(folder) != -1:
QtWidgets.QMessageBox.information(self, 'Info', 'Duplicate Entry!')
return
current_text = self.lblFolder.text()
new_text = ',\n'.join([current_text, folder]) if len(current_text) else folder
self.lblFolder.setText(new_text)
@QtCore.pyqtSlot()
def on_btnGetFile_clicked(self):
file_name = QtWidgets.QFileDialog.getOpenFileName(self, 'Open File', QtCore.QDir.homePath(), 'Text Files (*.txt *.rtf)')[0]
if file_name:
try:
with open(file_name) as source:
mobile_nos = source.read().split(',')
self.txtMobileNos.setText(','.join(clean(mobile_nos)))
except Exception as e:
self.logger.error(repr(e))
QtWidgets.QMessageBox.critical(self, 'Error', 'Unable to read from selected file.')
@QtCore.pyqtSlot()
def on_btnSearch_clicked(self):
if self.txtMobileNos.toPlainText().strip() == '':
QtWidgets.QMessageBox.information(self, 'Info', 'You have not entered a mobile number.')
return
if self.lblFolder.text().strip() == '':
QtWidgets.QMessageBox.information(self, 'Info', 'You have not selected an FEP/MNO folder.')
return
self.tblResult.clearContents()
self.tblResult.setHorizontalHeaderLabels(['Packet', 'XML File'])
self.startSearch()
def startSearch(self):
task = FindInFolder(self.txtMobileNos.toPlainText().strip(), self.lblFolder.text())
self.finder = FileSystemFinder(task)
self.finder.signals.itemFound.connect(self.on_finder_foundItem)
self.finder.signals.statusChanged.connect(self.on_finder_statusChanged)
self.finder.signals.completed.connect(self.on_search_completed)
self.lblStatus.setText('')
self.btnSearch.setEnabled(False)
self.setCursor(QtCore.Qt.BusyCursor)
self.thread_pool.start(self.finder)
@QtCore.pyqtSlot(str, str)
def on_finder_foundItem(self, packet, xmlfilename):
row = self.tblResult.rowCount()
self.tblResult.insertRow(row)
self.tblResult.setItem(row, 0, QtWidgets.QTableWidgetItem(packet))
self.tblResult.setItem(row, 1, QtWidgets.QTableWidgetItem(xmlfilename))
@QtCore.pyqtSlot(int, int)
def on_finder_statusChanged(self, currentCount, totalCount):
self.lblStatus.setText('Processing %s of %s packets' % (currentCount, totalCount))
@QtCore.pyqtSlot()
def on_search_completed(self):
self.lblStatus.setText('')
self.lblFolder.setText('')
self.btnSearch.setEnabled(True)
self.setCursor(QtCore.Qt.ArrowCursor)
QtWidgets.QMessageBox.information(self, 'Search completed!', 'Found %s matches.' % self.tblResult.rowCount())
self.finder = None
@QtCore.pyqtSlot(QtWidgets.QTableWidgetItem)
def on_tblResult_itemClicked(self, item):
packet = self.tblResult.item(item.row(), 0).text()
xmlfile = self.tblResult.item(item.row(), 1).text()
dialog = SubscriberInfo(FEPRecord(packet, xmlfile), parent=self.parent())
if dialog.exec():
return