Changeset 18
- Timestamp:
- 07/03/07 19:25:58 (5 years ago)
- Location:
- mymrc/trunk/mymrc/src
- Files:
-
- 1 removed
- 7 modified
-
db/audioqueries.py (modified) (3 diffs)
-
db/dbdriver.py (modified) (1 diff)
-
lang.conf (modified) (1 diff)
-
mobileclient/appuifw.py (modified) (2 diffs)
-
mobileclient/clientengine.py (modified) (24 diffs)
-
mobileclient/opcode.py (modified) (2 diffs)
-
mymrc.conf (modified) (1 diff)
-
mymrc.db (deleted)
Legend:
- Unmodified
- Added
- Removed
-
mymrc/trunk/mymrc/src/db/audioqueries.py
r16 r18 115 115 116 116 ## Get all available playlists. 117 def playlists(self): 118 query="""SELECT name FROM audio_playlist ORDER BY name;""" 117 def playlists(self, raw=False): 118 if raw: 119 query="""SELECT * FROM audio_playlist ORDER BY name;""" 120 else: 121 query="""SELECT name FROM audio_playlist ORDER BY name;""" 119 122 return self._iDB.execute(query) 120 123 … … 122 125 # ID, determined after the playlist was selected). 123 126 # NOTE: this is not tested, just a guess. 124 def playlistSongs(self ):127 def playlistSongs(self, aPlaylist): 125 128 query="""SELECT audio_song.id AS id, 126 129 audio_song.path AS path, … … 136 139 audio_song.genre_id = audio_genre.id AND 137 140 audio_song.id = audio_playlist_data.song_id AND 138 audio_playlist_data.playlist_id = <ID of the selected playlist>141 audio_playlist_data.playlist_id = (SELECT id FROM audio_playlist WHERE name='%s') 139 142 ORDER BY audio_artist.name, audio_album.title, audio_song.title;""" 140 return self._iDB.execute(query )143 return self._iDB.execute(query%(aPlaylist)) 141 144 142 145 def songById(self, aId): 143 146 query = """ SELECT path FROM audio_song WHERE id=%s""" %(aId) 144 147 return self._iDB.execute(query).fetchall() 148 149 150 def addSongToPlaylist(self, aPlaylistId, aSongId): 151 query = """ INSERT INTO audio_playlist_data(playlist_id, song_id) 152 values('%s', '%s')""" 153 return self._iDB.execute(query%(aPlaylistId, aSongId)) 154 145 155 146 156 -
mymrc/trunk/mymrc/src/db/dbdriver.py
r16 r18 181 181 INSERT INTO audio_genre(id, name) VALUES(124, 'Euro-House'); 182 182 INSERT INTO audio_genre(id, name) VALUES(125, 'Dance Hall'); 183 184 INSERT INTO audio_playlist(name) values ('Favourites') 183 185 """ 184 186 -
mymrc/trunk/mymrc/src/lang.conf
r14 r18 28 28 AllVideos = All videos 29 29 AllPlaylists = All playlists 30 Play = Play 30 PlayingNow = Playing Now 31 Play = Play 32 PlayPause = Play/Pause 33 Stop = Stop 34 Forward = Forward 35 Backward = Backward 36 Next = Next 37 Previous = Previous 38 VolumeUp = Volume up 39 VolumeDown = Volume down 40 FullScreen = Full screen 41 ToogleControls = Toogle controls 42 Close = Close 31 43 32 -
mymrc/trunk/mymrc/src/mobileclient/appuifw.py
r14 r18 26 26 27 27 28 def addString(self, aLabel , aText):28 def addString(self, aLabel=None, aText=None): 29 29 self._iForm += """ <string label="%s" text="%s"/>\n""" % (aLabel, aText) 30 30 … … 44 44 45 45 46 def addCommand(self): 47 self._iForm += """ <command label="text" opcode="opcode"/>\n""" 46 def addCommand(self, aType, aLabel, aOpcode): 47 self._iForm += """ <command type="%s" label="%s" opcode="%s"/>\n"""\ 48 % (aType, aLabel, aOpcode) 48 49 49 50 50 51 def getForm(self): 51 self._iForm += """</form>"""52 return self._iForm 52 #self._iForm += """</form>""" 53 return self._iForm + """</form>""" 53 54 54 55 -
mymrc/trunk/mymrc/src/mobileclient/clientengine.py
r14 r18 8 8 from db.audioqueries import AudioQueries 9 9 from controllers.audiocontroller import AudioController 10 from mobileclient.opcode import OPCode 11 from mobileclient.opcode import OPCode 10 12 11 13 … … 68 70 lb.addLabel(Lang().label('AllSongs')) 69 71 actions.append( self.allSongs ) 72 id_list.append(0) 70 73 71 74 lb.addLabel(Lang().label('Playlists')) 72 75 actions.append( self.playlists ) 76 id_list.append(1) 73 77 74 78 lb.addLabel(Lang().label('Artists')) 75 79 actions.append( self.artists ) 80 id_list.append(2) 76 81 77 82 lb.addLabel(Lang().label('Albums')) 78 83 actions.append( self.albums ) 84 id_list.append(3) 79 85 80 86 lb.addLabel(Lang().label('Genres')) 81 87 actions.append( self.genres ) 88 id_list.append(4) 82 89 83 90 # Feed options menu … … 110 117 # Feed options menu 111 118 lb.addCommand('options', Lang().label('Play'), OPCode()['PLAY']) 112 lb.addCommand('options', Lang().label('AddToPlaylist'), OPCode()[' DISCONNECT'])119 lb.addCommand('options', Lang().label('AddToPlaylist'), OPCode()['PLADDSONG']) 113 120 lb.addCommand('options', Lang().label('NowPlaying'), OPCode()['NOWPLAYING']) 114 121 lb.addCommand('options', Lang().label('Back'), OPCode()['BACK']) … … 134 141 lb.addLabel(artist) 135 142 actions.append(lambda:self.artistAlbums(artist)) 143 id_list.append(artist) 136 144 137 145 # Feed options menu … … 166 174 lb.addLabel(album) 167 175 actions.append(lambda:self.artistAlbumSongs(album)) 176 id_list.append(album) 168 177 169 178 # Feed options menu … … 192 201 for song in resultset.fetchall(): 193 202 lb.addLabel(song[3]) 203 id_list.append(song[0]) 194 204 195 205 # Feed options menu … … 218 228 for song in resultset.fetchall(): 219 229 lb.addLabel(song[3]) 230 id_list.append(song[0]) 220 231 221 232 # Feed options menu … … 245 256 lb.addLabel(album) 246 257 actions.append(lambda:self.albumSongs(album)) 258 id_list.append(album) 247 259 248 260 # Feed options menu … … 272 284 lb.addLabel(song[3]) 273 285 actions.append(lambda:None) 286 id_list.append(song[0]) 274 287 275 288 # Feed options menu … … 283 296 self._iActionStack.append(actions) 284 297 self._iViewStack.append(lb.getList()) 298 self._iListStack.append(id_list) 285 299 286 300 … … 298 312 lb.addLabel(genre) 299 313 actions.append(lambda:self.genreSongs(genre)) 314 id_list.append(genre) 300 315 301 316 # Feed options menu … … 324 339 for song in resultset.fetchall(): 325 340 lb.addLabel(song[3]) 341 id_list.append(song[0]) 326 342 327 343 # Feed options menu … … 350 366 for playlist in resultset.fetchall(): 351 367 lb.addLabel(playlist) 368 id_list.append(playlist) 369 actions.append(lambda:self.playlistSongs(playlist)) 352 370 353 371 # Feed options menu … … 363 381 364 382 365 def playlistSongs(self ):383 def playlistSongs(self, aPlaylist): 366 384 print "Audio playlist" 367 playlistName="" 368 lb = ListBox(playlistName) 369 actions = [] 370 id_list = [] 371 372 db = AudioQueries() 373 resultset = db.genreSongs( playlistName ) 385 lb = ListBox(aPlaylist) 386 actions = [] 387 id_list = [] 388 389 db = AudioQueries() 390 resultset = db.playlistSongs(aPlaylist) 374 391 375 392 # feed list 376 393 for song in resultset.fetchall(): 377 394 lb.addLabel(song[3]) 395 id_list.append(song[0]) 378 396 379 397 # Feed options menu … … 438 456 lb.addCommand('options', Lang().label('Select'), OPCode()['SELECT']) 439 457 lb.addCommand('options', Lang().label('Disconnect'), OPCode()['DISCONNECT']) 440 lb.addCommand('options', Lang().label('Settings'), OPCode()['SETTINGS'])458 # lb.addCommand('options', Lang().label('Settings'), OPCode()['SETTINGS']) 441 459 lb.addCommand('options', Lang().label('About'), OPCode()['ABOUT']) 442 460 lb.addCommand('options', Lang().label('Exit'), OPCode()['EXIT']) … … 445 463 self._iViewStack.append(lb.getList()) 446 464 self._iActionStack.append(action) 465 466 467 def nowPlaying(self): 468 lb = ListBox(Lang().label('NowPlaying')) 469 actions = [] 470 id_list = [] 471 lb.addLabel(Lang().label('PlayPause')) 472 actions.append(lambda:AudioController().pause()) 473 474 lb.addLabel(Lang().label('Stop')) 475 actions.append(lambda:AudioController().stop()) 476 477 lb.addLabel(Lang().label('Forward')) 478 actions.append(lambda:AudioController().forward()) 479 480 lb.addLabel(Lang().label('Backward')) 481 actions.append(lambda:AudioController().backward()) 482 483 lb.addLabel(Lang().label('Next')) 484 actions.append(lambda:AudioController().next()) 485 486 lb.addLabel(Lang().label('Previous')) 487 actions.append(lambda:AudioController().previous()) 488 489 lb.addLabel(Lang().label('VolumeUp')) 490 actions.append(lambda:AudioController().volume_up()) 491 492 lb.addLabel(Lang().label('VolumeDown')) 493 actions.append(lambda:AudioController().volume_down()) 494 495 lb.addLabel(Lang().label('FullScreen')) 496 actions.append(lambda:AudioController().fullscreen()) 497 498 lb.addLabel(Lang().label('ToogleControls')) 499 actions.append(lambda:AudioController().hide_show_controls()) 500 501 lb.addLabel(Lang().label('Close')) 502 actions.append(lambda:AudioController().close()) 503 504 lb.addCommand('options', Lang().label('Select'), OPCode()['PLAYER']) 505 lb.addCommand('options', Lang().label('Back'), OPCode()['BACK']) 506 lb.addCommand('back', Lang().label('Back'), OPCode()['BACK']) 507 lb.addCommand('select', Lang().label('Select'), OPCode()['PLAYER']) 508 self._iViewStack.append(lb.getList()) 509 self._iActionStack.append(actions) 510 self._iListStack.append(id_list) 511 512 def chosePlaylist(self): 513 print "Choose playlist" 514 lb = ListBox(Lang().label('Playlists')) 515 actions = [] 516 id_list = [] 517 518 db = AudioQueries() 519 rs = db.playlists(True) 520 521 for playlist in rs.fetchall(): 522 print "playlist: ", playlist[1] 523 lb.addLabel(playlist[1]) 524 actions.append(lambda:None) 525 id_list.append(playlist[0]) 526 527 lb.addCommand('options', Lang().label('Select'), OPCode()['PLID']) 528 lb.addCommand('options', Lang().label('Back'), OPCode()['BACK']) 529 lb.addCommand('back', Lang().label('Cancel'), OPCode()['BACK']) 530 lb.addCommand('select', Lang().label('Select'), OPCode()['PLID']) 531 532 print lb.getList() 533 534 self._iViewStack.append(lb.getList()) 535 self._iActionStack.append(actions) 536 self._iListStack.append(id_list) 537 538 447 539 448 540 def _audio(self): … … 461 553 def _TV(self): 462 554 print "TV" 555 556 463 557 464 558 def getResultset(self): … … 478 572 self._iViewStack.pop() 479 573 self._iActionStack.pop() 574 self._iListStack.pop() 480 575 print len(self._iViewStack) 481 576 return self._iViewStack[-1] … … 486 581 self.send = aSendCb 487 582 DBDriver( '/home/dlefevre/workspace/mymrc/src' ) 583 self._iSongId = None 488 584 #self.handle_event(PacketBuilder().build('0000', '')) 489 585 490 def handle_event(self, aEvent):491 print "Event received: ", aEvent492 opcode, length, value = PacketParser().parse( aEvent)586 def handle_event(self, opcode): 587 print "Event received: ", opcode 588 opcode, length, value = PacketParser().parse(opcode) 493 589 494 590 ## UI … … 499 595 elif opcode == OPCode()['SELECT']: 500 596 actions = self._iViewEngine.getActions() 597 print 'value: ', value 501 598 actions[int(value)]() 502 599 retVal = self._iViewEngine.getView() … … 506 603 retVal = self._iViewEngine.back() 507 604 self.send(PacketBuilder().build(OPCode()['PARSELS'], retVal)) 508 509 605 606 elif opcode == OPCode()['NOWPLAYING']: 607 self._iViewEngine.nowPlaying() 608 retVal = self._iViewEngine.getView() 609 self.send(PacketBuilder().build(OPCode()['PARSELS'], retVal)) 610 611 elif opcode == OPCode()['PLAYER']: 612 action = self._iViewEngine.getActions() 613 action[int(value)]() 614 self.send(PacketBuilder().build(OPCode()['DUMMY'], '')) 615 616 ## Playlist 617 elif opcode == OPCode()['PLADDSONG']: 618 self._iSongId = int(self._iViewEngine.getStack()[int(value)]) 619 self._iViewEngine.chosePlaylist() 620 retVal = self._iViewEngine.getView() 621 self.send(PacketBuilder().build(OPCode()['PARSELS'], retVal)) 622 623 elif opcode == OPCode()['PLID']: 624 db = AudioQueries() 625 id = self._iViewEngine.getStack() 626 rs = db.addSongToPlaylist(id[int(value)], self._iSongId) 627 retVal = self._iViewEngine.back() 628 self.send(PacketBuilder().build(OPCode()['PARSELS'], retVal)) 629 630 631 632 633 634 635 ## audio player controls 510 636 # controller 511 637 elif opcode == OPCode()['PLAY']: … … 518 644 except: 519 645 pass 646 elif opcode == OPCode()["STOP"]: 647 AudioController().stop() 648 self.send(PacketBuilder().build(OPCode()['DUMMY'], '')) 649 650 elif opcode == OPCode()["PAUSE"]: 651 AudioController().pause() 652 self.send(PacketBuilder().build(OPCode()['DUMMY'], '')) 653 654 elif opcode == OPCode()["NEXT"]: 655 AudioController().next() 656 self.send(PacketBuilder().build(OPCode()['DUMMY'], '')) 657 658 elif opcode == OPCode()["CLOSE"]: 659 AudioController().close() 660 self.send(PacketBuilder().build(OPCode()['DUMMY'], '')) 661 662 elif opcode == OPCode()["PREVIOUS"]: 663 AudioController().previous() 664 self.send(PacketBuilder().build(OPCode()['DUMMY'], '')) 665 666 elif opcode == OPCode()["FORWARD"]: 667 AudioController().forward() 668 self.send(PacketBuilder().build(OPCode()['DUMMY'], '')) 669 670 elif opcode == OPCode()["BACKWARD"]: 671 AudioController().backward() 672 self.send(PacketBuilder().build(OPCode()['DUMMY'], '')) 673 674 elif opcode == OPCode()["VINC"]: 675 AudioController().volume_up() 676 self.send(PacketBuilder().build(OPCode()['DUMMY'], '')) 677 678 elif opcode == OPCode()["VDEC"]: 679 AudioController().volume_down() 680 self.send(PacketBuilder().build(OPCode()['DUMMY'], '')) 681 682 elif opcode == OPCode()["FULL"]: 683 AudioController().fullscreen() 684 self.send(PacketBuilder().build(OPCode()['DUMMY'], '')) 685 686 elif opcode == OPCode()["TOGG"]: 687 AudioController().hide_show_controls() 688 self.send(PacketBuilder().build(OPCode()['DUMMY'], '')) 689 690 691 692 520 693 521 694 … … 563 736 #print AudioView().playlistSongs() 564 737 565 query = """ INSERT INTO song (title, path) values ('Gin Blossoms - Allison Road', '/home/storage/Music/Gin Blossoms - Allison Road.mp3')""" 566 query = """SELECT * FROM song""" 738 query = """SELECT * FROM audio_playlist_data""" 567 739 rs = DBDriver().execute(query) 568 740 print rs.fetchall() 569 570 741 742 query = """SELECT * FROM audio_playlist""" 743 rs = DBDriver().execute(query) 744 print rs.fetchall() 745 746 query = """SELECT * FROM audio_song""" 747 rs = DBDriver().execute(query) 748 print rs.fetchall() 749 750 751 db = AudioQueries() 752 rs = db.playlists() 753 print rs.fetchall() 754 755 571 756 def send(aData): 572 757 print aData … … 576 761 while True: 577 762 entry = raw_input('>>>').strip() 578 if entry == 'h ello':763 if entry == 'h': 579 764 engine.handle_event(PacketBuilder().build(OPCode()['HELLO'],'')) 580 elif entry == 's elect':765 elif entry == 's': 581 766 entry = raw_input('Index >>>').strip() 582 767 engine.handle_event(PacketBuilder().build(OPCode()['SELECT'], entry) ) 583 elif entry == 'back': 768 elif entry == 'o': 769 entry = raw_input('Index >>>').strip() 770 engine.handle_event(PacketBuilder().build(OPCode()['NOWPLAYING'], '')) 771 elif entry == 'b': 584 772 engine.handle_event(OPCode()['BACK']) 773 774 775 776 585 777 elif entry == 'q': 586 778 break -
mymrc/trunk/mymrc/src/mobileclient/opcode.py
r14 r18 18 18 self['PAUSE']='0103' 19 19 self['NEXT']='0104' 20 self[' LAST']='0105'21 self['FORW ']='0106'22 self['BACKW ']='0107'20 self['PREVIOUS']='0105' 21 self['FORWARD']='0106' 22 self['BACKWARD']='0107' 23 23 self['VINC']='0108' 24 self['VDE V']='0109'24 self['VDEC']='0109' 25 25 self['MUTE']='0110' 26 26 self['FULL']='0111' 27 27 self['TOGG']='0112' 28 self['ADDPL']='0113' 28 self['CLOSE'] = '0113' 29 self['PLAYER'] = '0114' 29 30 30 31 # internal client event' … … 37 38 # Playlist events 38 39 self['PLNEW']='0200' 39 self['PLADDSONG']='0201' 40 self['PLADDARTIST'] = '0202' 41 self['PLADDGENRE'] = '0203' 42 self['PLADDALBUM'] = '0204' 40 self['PLID'] = '0201' 41 self['PLADDSONG']='0202' 42 self['PLADDARTIST'] = '0203' 43 self['PLADDGENRE'] = '0204' 44 self['PLADDALBUM'] = '0205' 43 45 44 self['PLREMOVESONG'] = '0205' 46 self['PLREMOVESONG'] = '020' 47 48 self['DUMMY'] = '9999' -
mymrc/trunk/mymrc/src/mymrc.conf
r14 r18 1 1 [inet] 2 2 #interface=eth0 3 port=123 43 port=1235 4 4 host=11.2.1.4 5 5 maxclient=5
