class MainWindow(QtGui.QMainWindow): def __init__(self, network, parent=None): super(MainWindow, self).__init__() self.logger = logging.getLogger('MainWindow') self.tracklist_model = TracklistModel() if network: self.network = network.server self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.trackListView.setModel(self.tracklist_model) self.ui.trackListView.doubleClicked.connect(self.listDoubleClicked) self.ui.trackListView.clicked.connect(self.listClicked) self.ui.searchBtn.clicked.connect(self.searchBtnClick) self.ui.playBtn.clicked.connect(self.playBtnClick) self.ui.stopBtn.clicked.connect(self.stopBtnClick) self.ui.pauseBtn.clicked.connect(self.pauseBtnClick) self.setWindowTitle(u'Сетевой Проигрыватель') self.current_stream_id = None self.current_track = None self.audio = Audio() self.audio.tick.connect(self.tick) self.audio.state_changed.connect(self.stateChanged) self.audio.finished.connect(self.playingFinished) self.ui.seekSlider.setMediaObject(self.audio.get_media_object()) self.ui.volumeSlider.setAudioOutput(self.audio.get_audio_output()) self.ui.pauseBtn.setEnabled(False) self.ui.playBtn.setEnabled(True) self.ui.stopBtn.setEnabled(False) def stateChanged(self, newState, oldState): self.ui.pauseBtn.setEnabled(False) self.ui.playBtn.setEnabled(False) self.ui.stopBtn.setEnabled(False) if newState == Phonon.PlayingState: self.ui.pauseBtn.setEnabled(True) self.ui.stopBtn.setEnabled(True) elif newState == Phonon.StoppedState: self.ui.playBtn.setEnabled(True) self.ui.timeLbl.setText("00:00") elif newState == Phonon.PausedState: self.ui.playBtn.setEnabled(True) self.ui.stopBtn.setEnabled(True) def tick(self, time): displayTime = QtCore.QTime(0, (time / 60000) % 60, (time / 1000) % 60) self.ui.timeLbl.setText(displayTime.toString('mm:ss')) def playingFinished(self): current_index = self.ui.trackListView.currentIndex() peers, hash = self.tracklist_model.data(current_index, Qt.UserRole) if self.current_track != hash: pass def searchBtnClick(self): search_text = self.ui.searchEdit.text() if len(search_text) > 0: self.tracklist_model.reset() self.current_index = None self.tracklist_model.request_id = self.network.search(search_text+"%") def playBtnClick(self): current_index = self.ui.trackListView.currentIndex() peers, hash = self.tracklist_model.data(current_index, Qt.UserRole) if self.current_track != hash: self.current_track = hash self.logger.debug("query to stream track [hash: %s]" % hash) self.current_stream_id = self.network.initiateFileStream(peers, hash) if self.current_stream_id: stream_handler = self.network.getStreamHandlerById(self.current_stream_id) self.audio.set_audio_buffer(stream_handler.get_audio_buffer()) self.audio.play() else: if self.audio.state() == Phonon.PausedState: self.audio.play() else: self.stopBtnClick() self.audio.play() def stopBtnClick(self): if self.current_stream_id: self.network.getStreamHandlerById(self.current_stream_id).stop() self.audio.stop() def pauseBtnClick(self): self.audio.pause() def listDoubleClicked(self, item): current_index = self.ui.trackListView.currentIndex() peers, hash = self.tracklist_model.data(current_index, Qt.UserRole) if self.current_track != hash: self._mediaObject.stop() self.playBtnClick() def listClicked(self, item): self.ui.playBtn.setEnabled(True)