class MainInterface(QMainWindow): torrentHeader = ["Name", "File Name", "Size"] taskHeader = ["Torrent Name", "File Name", "Size", "Progress"] def __init__(self): super(MainInterface, self).__init__() self.peer = Peer() self.peer.set_parent(self) self.peer.start() self.initUI() self.initSignals() self.initData() def initMenu(self): openFile = QAction('Make torrent', self) openFile.setStatusTip('Upload file') openFile.triggered.connect(self.makeTorrent) self.statusBar() menuBar = self.menuBar() fileMenu = menuBar.addMenu("&File") fileMenu.addAction(openFile) def makeTorrent(self): fPath = QFileDialog.getOpenFileName(self, 'Open File', "~/Desktop") self.peer.upload_file(unicode(fPath.toUtf8(), encoding="UTF-8")) def initSignals(self): QObject.connect(self, SIGNAL("GET_TORRENT_ON_SERVER"), self.retrieveTorrentOnServer) QObject.connect(self, SIGNAL("FINISH_DOWNLOAD_TORRENT(PyQt_PyObject)"), self.showDownloadFinishMsg) QObject.connect(self.torrentTableView, SIGNAL("doubleClicked(QModelIndex)"), self.downloadTorrentAtIndex) QObject.connect(self.taskTableView, SIGNAL("doubleClicked(QModelIndex)"), self.downloadFileAtIndex) def initData(self): self.emit(SIGNAL("GET_TORRENT_ON_SERVER")) def retrieveTorrentOnServer(self): self.torrentOnServer = self.peer.request_torrent_list() # configure table view of torrents self.torrentTableModel = MyTableModel(self, self.torrentOnServer, self.torrentHeader) self.torrentTableView.setModel(self.torrentTableModel) def retrieveLocalTorrent(self): self.localTorrentData = [] torr_list = os.listdir(local_torrents_folder_path) for name in torr_list: f = open(local_torrents_folder_path + '/' + name) f_name = f.readline().replace('\n', '') f_size = int(f.readline()) self.localTorrentData.append((name, f_name, f_size, 0)) def downloadTorrentAtIndex(self, index): item = self.torrentOnServer[index.row()] Thread(target=self.peer.download_torrent, args=(item[0],)).start() def downloadFileAtIndex(self, index): item = self.localTorrentData[index.row()] Thread(target=self.peer.download_file, args=(item[0],)).start() def finishDownloadTorrentHandler(self, tName): self.emit(SIGNAL("FINISH_DOWNLOAD_TORRENT(PyQt_PyObject)"), tName) def showDownloadFinishMsg(self, tName): f = open(local_torrents_folder_path + '/' + tName) f_name = f.readline().replace('\n', '') f_size = int(f.readline()) self.taskTableModel.layoutAboutToBeChanged.emit() self.localTorrentData.append((tName, f_name, f_size, 0)) self.taskTableModel.layoutChanged.emit() msgBox = QMessageBox() msgBox.setText(tName + " download finish") msgBox.exec_() def initUI(self): self.initMenu() self.retrieveLocalTorrent() self.setGeometry(300, 300, 1000, 500) self.setWindowTitle("P2P Search") self.torrentTableView = QTableView() # self.torrentTableView.resizeColumnsToContents() # self.taskTableView.resizeColumnsToContents() # configure table view of tasks print "1" self.taskTableView = QTableView() print self.localTorrentData[1:4] self.taskTableModel = MyTableModel(self, self.localTorrentData, self.taskHeader) self.taskTableView.setModel(self.taskTableModel) self.taskInfo = QTextEdit() self.taskInfo.setReadOnly(True) self.taskInfo.setLineWrapMode(QTextEdit.NoWrap) self.torrentLabel = QLabel() self.torrentLabel.setText("TORRENTS") rightLayout = QVBoxLayout() rightLayout.addWidget(self.taskTableView) rightLayout.addWidget(self.taskInfo, 2) leftLayout = QVBoxLayout() leftLayout.addWidget(self.torrentLabel) leftLayout.addWidget(self.torrentTableView) mainLayout = QHBoxLayout() mainLayout.addLayout(leftLayout) mainLayout.addLayout(rightLayout, 3) widget = QWidget() widget.setLayout(mainLayout) self.setCentralWidget(widget); self.show()