def __init__(self): QtGui.QMainWindow.__init__(self) self.setupUi(self) self.setWindowIcon(QtGui.QIcon('icon.png')) self.setWindowTitle('PyPlayer!') #----------------------------------- self.m_media = None self.currentRow = 0 self.coverImage.setScaledContents(1) #----------------------------------- #Подключение к коллекции self.Coll = CreateDatabase(0) #Заполняем artistList, albumList, titleList self.getArtist() ## self.getAlbum() self.delayedInit() #Загружаем настройки #self.readSettings() ## self.m_media.pause() #Подключаем обработчики self.connect(self.pushButton,QtCore.SIGNAL("clicked()"),self.play)#phononPlay self.artistList.itemClicked.connect(self.getAlbum) self.albumList.itemClicked.connect(self.getTracks) self.titleList.itemClicked.connect(self.getTracksToView) self.tableWidget.itemDoubleClicked.connect(self.tableWidgetClick) self.playButton.clicked.connect(self.PlayPausePlayer) self.stopButton.clicked.connect(self.StopPlayer) self.pushButton.clicked.connect(self.playNextTrack) self.prevButton.clicked.connect(self.playPrevTrack) self.newPlsButton.clicked.connect(self.generateM3U) self.clearPlsButton.clicked.connect(self.clearPlaylist)
class TWindow(QtGui.QMainWindow, Ui_MainWindow): def __init__(self): QtGui.QMainWindow.__init__(self) self.setupUi(self) self.setWindowIcon(QtGui.QIcon('icon.png')) self.setWindowTitle('PyPlayer!') #----------------------------------- self.m_media = None self.currentRow = 0 self.coverImage.setScaledContents(1) #----------------------------------- #Подключение к коллекции self.Coll = CreateDatabase(0) #Заполняем artistList, albumList, titleList self.getArtist() ## self.getAlbum() self.delayedInit() #Загружаем настройки #self.readSettings() ## self.m_media.pause() #Подключаем обработчики self.connect(self.pushButton,QtCore.SIGNAL("clicked()"),self.play)#phononPlay self.artistList.itemClicked.connect(self.getAlbum) self.albumList.itemClicked.connect(self.getTracks) self.titleList.itemClicked.connect(self.getTracksToView) self.tableWidget.itemDoubleClicked.connect(self.tableWidgetClick) self.playButton.clicked.connect(self.PlayPausePlayer) self.stopButton.clicked.connect(self.StopPlayer) self.pushButton.clicked.connect(self.playNextTrack) self.prevButton.clicked.connect(self.playPrevTrack) self.newPlsButton.clicked.connect(self.generateM3U) self.clearPlsButton.clicked.connect(self.clearPlaylist) #self.actionScan.triggered.connect(self.test) #показываем фс #model = QFileSystemModel() #model.setRootPath('C:\\') #self.treeView.setModel(model) #self.loadM3U() def closeEvent(self, event): self.writeSettings() def test(self): pass #self.Coll.ScanFolders() def keyPressEvent(self, e): #----CTRL+1,2,3,4,5------------- if e.key() == QtCore.Qt.Key_1: if (e.modifiers() & QtCore.Qt.CTRL): print 'Ctrl+1' if e.key() == QtCore.Qt.Key_2: if (e.modifiers() & QtCore.Qt.CTRL): print 'Ctrl+2' if e.key() == QtCore.Qt.Key_3: if (e.modifiers() & QtCore.Qt.CTRL): print 'Ctrl+3' if e.key() == QtCore.Qt.Key_4: if (e.modifiers() & QtCore.Qt.CTRL): print 'Ctrl+4' if e.key() == QtCore.Qt.Key_5: if (e.modifiers() & QtCore.Qt.CTRL): print 'Ctrl+5' #оценка 1 звезда #update запись в бд def tock(self, time): time = time/1000 h = time/3600 m = (time-3600*h) / 60 s = (time-3600*h-m*60) self.lcdNumber.display('%02d:%02d:%02d'%(h,m,s)) #--------------Инит для плеера-------------------------------------------------- def delayedInit(self): if not self.m_media: print 'Player\'s init!' self.m_media = Phonon.MediaObject(self) self.audioOutput = Phonon.AudioOutput(Phonon.MusicCategory, self) Phonon.createPath(self.m_media, self.audioOutput) self.m_media.setTickInterval(100) self.m_media.tick.connect(self.tock) self.seekSlider.setMediaObject(self.m_media) self.volumeSlider.setAudioOutput(self.audioOutput) self.m_media.aboutToFinish.connect(self.playNextTrack) self.m_media.stateChanged.connect(self.test2) def test2(self): print 'State:'+unicode(self.m_media.errorString()) def PlayPausePlayer(self): if (self.m_media.state() == 2): self.m_media.pause() self.playButton.setIcon(QIcon('Icons\control_play_blue.png')) else: self.m_media.play() self.playButton.setIcon(QIcon('Icons\control_pause_blue.png')) def StopPlayer(self): self.m_media.stop() def play(self, path): self.delayedInit() if os.path.exists(path): print 'Path exists!' else: print 'Path NOT exists!' print path path_ = QString(path) self.m_media.setCurrentSource(Phonon.MediaSource(path_)) self.m_media.play() print 'State: '+str(self.m_media.state()) print self.m_media.errorString() #ставим обложку трека self.album = unicode(self.tableWidget.item(self.oldRow,3).text()) aList = self.Coll.QueryToCollection('select cover_path from music where album="'\ +unicode(self.album)+'"') self.coverImage.setScaledContents(1) self.coverImage.setPixmap(QPixmap(aList[0])) #---------------Сохранение/Загрузка--------------------------------------------- def writeSettings(self): settings = QtCore.QSettings('settings.ini',QtCore.QSettings.IniFormat) settings.beginGroup('MainWindow') settings.setValue('size',self.size()) settings.endGroup() settings.beginGroup('tableWidget') settings.setValue('rowCount', self.tableWidget.rowCount()) settings.setValue('currentRow',self.tableWidget.currentRow()) settings.setValue('oldRow', self.oldRow) row_str = '' for row in xrange(self.tableWidget.rowCount()): for col in xrange(self.tableWidget.columnCount()): if self.tableWidget.item(row,col) != None: row_str += self.tableWidget.item(row,col).text()+';' else: row_str += ';' settings.setValue(str(row), unicode(row_str)) row_str = '' settings.endGroup() settings.beginGroup('Lists') settings.setValue('artistListCurRow',self.artistList.currentRow()) settings.setValue('albumListCurRow',self.albumList.currentRow()) settings.setValue('titleListCurRow',self.titleList.currentRow()) settings.endGroup() settings.beginGroup('Player') settings.setValue('currentTime',self.m_media.currentTime()) settings.setValue('currentSource',self.m_media.currentSource().fileName()) settings.setValue('currentVolume',self.audioOutput.volume()) settings.endGroup() settings.beginGroup('lcdNumber') settings.setValue('displayStr',self.lcdNumber.value()) settings.endGroup() settings.beginGroup('cover') #получаем обложку из бд print self.oldRow self.album = unicode(self.tableWidget.item(self.oldRow,3).text()) print self.album aList = self.Coll.QueryToCollection('select cover_path from music where album="'\ +unicode(self.album)+'"') if len(aList) > 0: settings.setValue('coverImage',aList[0]) else: settings.setValue('coverImage',DEFAULT_COVER) settings.endGroup() settings.beginGroup('System') global musicPath settings.setValue('MusicPath',musicPath) settings.endGroup() def readSettings(self): settings = QtCore.QSettings('settings.ini',QtCore.QSettings.IniFormat) settings.beginGroup('MainWindow') self.resize(settings.value('size',QSize(400,400)).toSize()) settings.endGroup() settings.beginGroup('System') global musicPath musicPath = settings.value('MusicPath').toString() settings.endGroup() settings.beginGroup('tableWidget') self.oldRow = settings.value('oldRow',0).toInt()[0] self.tableWidget.setRowCount( settings.value('rowCount').toInt()[0]) row_list=[] row_str ='' for row in xrange(self.tableWidget.rowCount()): row_str = unicode( settings.value(str(row),'roy').toString()) row_list = row_str.split(';') for col in xrange(self.tableWidget.columnCount()): newItem = QTableWidgetItem(unicode(row_list[col])) self.tableWidget.setItem(row,col,newItem) settings.endGroup() settings.beginGroup('Player') print settings.value('currentTime').toInt()[0] self.m_media.seek( settings.value('currentTime').toInt()[0]) self.m_media.setCurrentSource(Phonon.MediaSource(settings.value('currentSource').toString()) ) self.audioOutput.setVolume( settings.value('currentVolume').toFloat()[0]) settings.endGroup() settings.beginGroup('cover') s = settings.value('coverImage').toString() print 'S = ',s self.coverImage.setPixmap(QPixmap(s)) settings.endGroup() settings.beginGroup('Lists') self.artistList.setCurrentRow( settings.value('artistListCurRow').toInt()[0] ) self.albumList.setCurrentRow( settings.value('albumListCurRow').toInt()[0] ) self.titleList.setCurrentRow( settings.value('titleListCurRow').toInt()[0] ) settings.endGroup() #------------------------------------------------------------------------------- def AppendToList(self): ## print self.artistList.item(self.artistList.currentRow()).text() ## self.artistList.addItem(self.lineEdit.text()) self.artist = self.artistList.currentItem().text() def showSplash(self,splash): splash.showMessage('Loadng') QtGui.qApp.processEvents() def showProgress(self): progressWindow = QtGui.QWidget(self, flags=QtCore.Qt.SubWindow) ## progressWindow.setWindowFlags(QtCore.Qt.SubWindow) progressWindow.setWindowTitle('Progress...') progressWindow.setAttribute(QtCore.Qt.WA_DeleteOnClose, True) progressWindow.resize(200,90) progressWindow.show() def getArtist(self): self.artistList.clear() aList = self.Coll.getArtists() for item in aList: self.artistList.addItem(item.decode('utf-8')) def getAlbum(self): self.artist = self.artistList.currentItem().text() self.albumList.clear() aList = self.Coll.getAlbums(self.artist) for item in aList: self.albumList.addItem(item.decode('utf-8')) def getTracks(self): self.album = self.albumList.currentItem().text() self.titleList.clear() aList = self.Coll.getTracks(self.artist, self.album) for item in aList: self.titleList.addItem(item.decode('utf-8')) def getTracksToView(self): curRow = self.tableWidget.rowCount() print 'curRow = ',curRow self.tableWidget.setRowCount(curRow+1) curCol = 0 self.title = self.titleList.currentItem().text() aList = self.Coll.QueryToCollection('select track from music where title="'\ +unicode(self.title)+'"') print aList[0] newItem = QTableWidgetItem(aList[0]) self.tableWidget.setItem(curRow,curCol,newItem) curCol+=1 newItem = QTableWidgetItem(self.title) self.tableWidget.setItem(curRow,curCol,newItem) curCol+=1 aList = self.Coll.QueryToCollection('select artist from music where title="'\ +unicode(self.title)+'"') print aList[0] newItem = QTableWidgetItem(aList[0]) self.tableWidget.setItem(curRow,curCol,newItem) curCol+=1 aList = self.Coll.QueryToCollection('select album from music where title="'\ +unicode(self.title)+'"') print aList[0] newItem = QTableWidgetItem(aList[0]) self.tableWidget.setItem(curRow,curCol,newItem) curCol+=1 aList = self.Coll.QueryToCollection('select play_time from music where title="'\ +unicode(self.title)+'"') print aList[0] newItem = QTableWidgetItem(aList[0]) self.tableWidget.setItem(curRow,curCol,newItem) curCol+=1 aList = self.Coll.QueryToCollection('select date from music where title="'\ +unicode(self.title)+'"') print aList[0] newItem = QTableWidgetItem(aList[0]) self.tableWidget.setItem(curRow,curCol,newItem) curCol+=1 aList = self.Coll.QueryToCollection('select genre from music where title="'\ +unicode(self.title)+'"') print aList[0] newItem = QTableWidgetItem(aList[0]) self.tableWidget.setItem(curRow,curCol,newItem) curCol+=1 aList = self.Coll.QueryToCollection('select file_size from music where title="'\ +unicode(self.title)+'"') newItem = QTableWidgetItem(aList[0]) self.tableWidget.setItem(curRow,curCol,newItem) curCol+=1 aList = self.Coll.QueryToCollection('select path from music where title="'\ +unicode(self.title)+'"') print aList[0] newItem = QTableWidgetItem(aList[0]) self.tableWidget.setItem(curRow,curCol,newItem) def playNextTrack(self): #УБИРАЕМ иконку "воспроизведения" self.tableWidget.item(self.oldRow,0).setIcon(QIcon(QPixmap(''))) if (self.tableWidget.item(self.oldRow+1,8).text() != ''): #получаем путь из таблицы. ЕСЛИ он есть, иначе из БД path = self.tableWidget.item(self.oldRow+1,8).text() #СТАВИМ иконку "воспроизведения" self.tableWidget.item(self.oldRow+1,0).setIcon(QIcon(QPixmap('Icons/select_play.png'))) self.play(path) else: print 'Field is null' self.oldRow += 1 ## print 'Old row=',self.oldRow ## print 'Current row=',self.tableWidget.currentRow() ## path = unicode(self.tableWidget.item(self.oldRow+1,8).text()) ## print path ## print unicode(self.tableWidget.item(0,8).text()) ## self.play(path) def playPrevTrack(self): #убираем иконку "воспроизведения" self.tableWidget.item(self.oldRow,0).setIcon(QIcon(QPixmap(''))) if (self.tableWidget.item(self.oldRow-1,8).text() !=''): path = self.tableWidget.item(self.oldRow-1,8).text() #ставим иконку "воспроизведения" self.tableWidget.item(self.oldRow-1,0).setIcon(QIcon(QPixmap('Icons/select_play.png'))) self.play(path) else: print 'Field is empty' self.oldRow -= 1 def tableWidgetClick(self): #запоминаем текущую строку self.oldRow = self.tableWidget.currentRow() #получаем название трека из таблицы и по нему делаем запрос->получаем полный путь self.title = unicode(self.tableWidget.item(self.tableWidget.currentRow(),1).text()) aList = self.Coll.QueryToCollection('select path from music where title="'\ +unicode(self.title)+'"') #проигрываем указанный путь print 'Play!' self.play(aList[0]) def generateM3U(self,filename=u'Pls/main.m3u'): #колонки: название - 1; артист - 2; длина - 4; путь - 8; fp = file(filename, "w") fp.write("#EXTM3U\n") for row in xrange(self.tableWidget.rowCount()): ## str1 += self.tableWidget.item(row,col).text() #получаем данные для формрования m3u title = self.tableWidget.item(row,1).text() artist = self.tableWidget.item(row,2).text() track_length = self.tableWidget.item(row,4).text() full_path = self.tableWidget.item(row,8).text() #формируем m3u плейлист fp.write("#EXTINF" + ":" + track_length + "," +\ artist + " - " + title + "\n") fp.write(full_path + "\n") fp.close() def loadM3U(self, filename=u'Pls/main.m3u'): pass def clearPlaylist(self): self.tableWidget.clearContents() self.tableWidget.setRowCount(0)