Changeset 28

Show
Ignore:
Timestamp:
07/09/07 23:50:02 (5 years ago)
Author:
dlefevre
Message:

Minor fixes

Location:
mymrc/trunk/mymrc/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • mymrc/trunk/mymrc/src/db/dbdriver.py

    r18 r28  
    11import os.path 
     2from symbol import arglist 
    23template = """-- 
    34--  tables create statements 
     
    4344        song_id integer not null references song 
    4445); 
     46 
     47 
     48-- 
     49-- mutex table used to simulate the missing "INSERT IF NOT EXISTS" 
     50-- see: http://www.xaprb.com/blog/2005/09/25/insert-if-not-exists-queries-in-mysql/ 
     51-- 
     52 
     53CREATE TABLE mutex( 
     54    i int not null primary key 
     55); 
     56 
     57INSERT INTO mutex(i) values (0); 
     58INSERT INTO mutex(i) values (1); 
    4559 
    4660 
     
    209223                self.executescript( template ) 
    210224     
    211         def execute( self, aQuery ): 
    212             resulset = self._iCur.execute( aQuery ) 
     225        def execute( self, aQuery, args=[] ): 
     226            resulset = self._iCur.execute( aQuery, args ) 
    213227            self._iConn.commit( ) 
    214228            return resulset 
    215229         
    216         def executescript( self, aScript ): 
    217             resulset = self._iCur.executescript( aScript ) 
     230        def executescript( self, aScript, args=[] ): 
     231            resulset = self._iCur.executescript( aScript, args ) 
    218232            self._iConn.commit() 
    219233            return resulset 
     
    278292            self.executescript( template ) 
    279293     
    280     def execute( self, aQuery ): 
    281         resulset = self._iCur.execute( aQuery ) 
     294    def execute( self, aQuery, args=[] ): 
     295        resulset = self._iCur.execute( aQuery, args ) 
    282296        self._iConn.commit( ) 
    283297        return resulset 
    284298         
    285     def executescript( self, aScript ): 
    286         resulset = self._iCur.executescript( aScript ) 
     299    def executescript( self, aScript, args=[] ): 
     300        resulset = self._iCur.executescript( aScript, args=[] ) 
    287301        self._iConn.commit() 
    288302        return resulset 
  • mymrc/trunk/mymrc/src/mobileclient/clientengine.py

    r18 r28  
    11from networking.packet import PacketBuilder 
    2 from mobileclient.appuifw import ListBox, Form 
    32from settings.settings import Settings 
    43from settings.lang import Lang 
     
    87from db.audioqueries import AudioQueries 
    98from controllers.audiocontroller import AudioController 
    10 from mobileclient.opcode import OPCode 
    11 from mobileclient.opcode import OPCode 
    12  
    13  
    14  
    15 class VideoView(object): 
    16     def __init__(self, aViewStack, aActionStack, aListStack): 
    17         self._iViewStack = aViewStack 
    18         self._iActionStack = aActionStack 
    19         self._iListStack = aListStack 
    20      
    21     def main(self): 
    22         lb = ListBox(Lang().label('Video')) 
    23         actions = [] 
    24         id_list = [] 
    25         # Feed listbox 
    26         lb.addLabel(Lang().label('AllVideos')) 
    27         actions.append(lambda:None) 
    28         lb.addLabel(Lang().label('Playlists')) 
    29         actions.append(lambda:None) 
    30          
    31         # Feed options menu 
    32         lb.addCommand('options', Lang().label('Select'), OPCode()['SELECT']) 
    33         lb.addCommand('options', Lang().label('NowPlaying'), OPCode()['NOWPLAYING']) 
    34         lb.addCommand('options', Lang().label('Back'), OPCode()['BACK']) 
    35         self._iViewStack.append(lb.getList()) 
    36         self._iActionStack.append(actions) 
    37         self._iListStack.append(id_list) 
    38  
    39 class DvdView(object): 
    40     def __init__(self): 
    41         pass 
    42  
    43     def main(self): 
    44         print "Dvd view" 
    45         pass 
    46      
    47          
    48 class TvView(object): 
    49     def __init__(self): 
    50         pass 
    51      
    52     def main(self): 
    53         print "Tv view" 
    54         pass 
    55      
    56      
    57 class AudioView(object): 
    58     def __init__(self, aViewStack, aActionStack, aListStack): 
    59         self._iViewStack = aViewStack 
    60         self._iActionStack = aActionStack 
    61         self._iListStack = aListStack 
    62         self._iDB = AudioQueries() 
    63      
    64     def main(self): 
    65         print "Audio main" 
    66         actions = [] 
    67         id_list = [] 
    68         lb = ListBox(Lang().label('Audio')) 
    69         # Feed listbox 
    70         lb.addLabel(Lang().label('AllSongs')) 
    71         actions.append( self.allSongs ) 
    72         id_list.append(0) 
    73  
    74         lb.addLabel(Lang().label('Playlists')) 
    75         actions.append( self.playlists ) 
    76         id_list.append(1) 
    77  
    78         lb.addLabel(Lang().label('Artists')) 
    79         actions.append( self.artists ) 
    80         id_list.append(2) 
    81          
    82         lb.addLabel(Lang().label('Albums')) 
    83         actions.append( self.albums ) 
    84         id_list.append(3) 
    85          
    86         lb.addLabel(Lang().label('Genres')) 
    87         actions.append( self.genres ) 
    88         id_list.append(4) 
    89          
    90         # Feed options menu 
    91         lb.addCommand('select', Lang().label('Select'), OPCode()['SELECT']) 
    92         lb.addCommand('options', Lang().label('Select'), OPCode()['SELECT']) 
    93         lb.addCommand('options', Lang().label('NowPlaying'), OPCode()['NOWPLAYING']) 
    94         lb.addCommand('options', Lang().label('Back'), OPCode()['BACK']) 
    95         lb.addCommand('back', Lang().label('Back'), OPCode()['BACK']) 
    96         self._iActionStack.append(actions) 
    97         self._iViewStack.append(lb.getList()) 
    98         self._iListStack.append(id_list) 
    99      
    100     def allSongs(self): 
    101         print "Audio all songs" 
    102          
    103         lb = ListBox(Lang().label('AllSongs')) 
    104         actions = [] 
    105         id_list = [] 
    106          
    107         db = AudioQueries() 
    108         resultset = db.allSongs() 
    109         #resultset = db.execute(query) 
    110  
    111         # feed list 
    112         for song in resultset.fetchall(): 
    113             print song 
    114             lb.addLabel(song[3]) 
    115             id_list.append(song[0]) 
    116          
    117         # Feed options menu 
    118         lb.addCommand('options', Lang().label('Play'), OPCode()['PLAY']) 
    119         lb.addCommand('options', Lang().label('AddToPlaylist'), OPCode()['PLADDSONG']) 
    120         lb.addCommand('options', Lang().label('NowPlaying'), OPCode()['NOWPLAYING']) 
    121         lb.addCommand('options', Lang().label('Back'), OPCode()['BACK']) 
    122         lb.addCommand('back', Lang().label('Back'), OPCode()['BACK']) 
    123         lb.addCommand('select', Lang().label('Play'), OPCode()['PLAY']) 
    124         self._iActionStack.append(actions) 
    125         self._iViewStack.append(lb.getList()) 
    126         self._iListStack.append(id_list) 
    127       
    128      
    129     def artists(self): 
    130         print "Audio Artists" 
    131         lb = ListBox(Lang().label('Artists')) 
    132         actions = [] 
    133         id_list = [] 
    134          
    135         db = AudioQueries() 
    136         resultset = db.artists() 
    137          
    138         # feed list 
    139         for artist in resultset.fetchall(): 
    140             print artist 
    141             lb.addLabel(artist) 
    142             actions.append(lambda:self.artistAlbums(artist)) 
    143             id_list.append(artist) 
    144          
    145         # Feed options menu 
    146         lb.addCommand('options', Lang().label('Select'), OPCode()['SELECT']) 
    147         lb.addCommand('options', Lang().label('AddToPlaylist'), OPCode()['PLNEW']) 
    148         lb.addCommand('options', Lang().label('NowPlaying'), OPCode()['NOWPLAYING']) 
    149         lb.addCommand('options', Lang().label('Back'), OPCode()['BACK']) 
    150         lb.addCommand('back', Lang().label('Back'), OPCode()['BACK']) 
    151         lb.addCommand('select', Lang().label('Select'), OPCode()['SELECT']) 
    152          
    153         self._iActionStack.append(actions) 
    154         self._iViewStack.append(lb.getList()) 
    155         self._iListStack.append(id_list) 
    156      
    157      
    158     def artistAlbums(self, aArtistName): 
    159         print "Audio %s album" %(aArtistName) 
    160         lb = ListBox(aArtistName) 
    161         actions = [] 
    162         id_list = [] 
    163  
    164         # all songs 
    165         lb.addLabel(Lang().label('AllSongs')) 
    166         actions.append(lambda:self.artistAllSongs()) 
    167  
    168          
    169         db = AudioQueries() 
    170         resultset = db.artistAlbums(aArtistName) 
    171          
    172         # feed list 
    173         for album in resultset.fetchall(): 
    174             lb.addLabel(album) 
    175             actions.append(lambda:self.artistAlbumSongs(album)) 
    176             id_list.append(album) 
    177                          
    178         # Feed options menu 
    179         lb.addCommand('options', Lang().label('Select'), OPCode()['SELECT']) 
    180         lb.addCommand('options', Lang().label('AddToPlaylist'), OPCode()['PLNEW']) 
    181         lb.addCommand('options', Lang().label('NowPlaying'), OPCode()['NOWPLAYING']) 
    182         lb.addCommand('options', Lang().label('Back'), OPCode()['BACK']) 
    183         lb.addCommand('back', Lang().label('Back'), OPCode()['BACK']) 
    184         lb.addCommand('select', Lang().label('Select'), OPCode()['SELECT'])             
    185  
    186         self._iActionStack.append(actions) 
    187         self._iViewStack.append(lb.getList())  
    188         self._iListStack.append(id_list)    
    189      
    190      
    191     def artistAlbumSongs(self, aAlbum): 
    192         print "Audio artist album songs" 
    193         lb = ListBox(aAlbum) 
    194         actions = [] 
    195         id_list = [] 
    196          
    197         db = AudioQueries() 
    198         resultset = db.albumSongs(aAlbum) 
    199          
    200         # feed list 
    201         for song in resultset.fetchall(): 
    202             lb.addLabel(song[3]) 
    203             id_list.append(song[0]) 
    204              
    205         # Feed options menu 
    206         lb.addCommand('options', Lang().label('Play'), OPCode()['PLAY']) 
    207         lb.addCommand('options', Lang().label('AddToPlaylist'), OPCode()['PLNEW']) 
    208         lb.addCommand('options', Lang().label('NowPlaying'), OPCode()['NOWPLAYING']) 
    209         lb.addCommand('options', Lang().label('Back'), OPCode()['BACK']) 
    210         lb.addCommand('back', Lang().label('Back'), OPCode()['BACK']) 
    211         lb.addCommand('select', Lang().label('Play'), OPCode()['PLAY'])          
    212         self._iActionStack.append(actions) 
    213         self._iViewStack.append(lb.getList()) 
    214         self._iListStack.append(id_list) 
    215      
    216          
    217     def artistAllSongs(self): 
    218         print "Audio artist all songs" 
    219         artistName = "Unknown" 
    220         lb = ListBox(artistName) 
    221         actions = [] 
    222         id_list = [] 
    223          
    224         db = AudioQueries() 
    225         resultset = db.artistAllSongs(artistName) 
    226          
    227         # feed list 
    228         for song in resultset.fetchall(): 
    229             lb.addLabel(song[3]) 
    230             id_list.append(song[0]) 
    231              
    232         # Feed options menu 
    233         lb.addCommand('options', Lang().label('Play'), OPCode()['PLAY']) 
    234         lb.addCommand('options', Lang().label('AddToPlaylist'), OPCode()['DISCONNECT']) 
    235         lb.addCommand('options', Lang().label('NowPlaying'), OPCode()['NOWPLAYING']) 
    236         lb.addCommand('options', Lang().label('Back'), OPCode()['BACK']) 
    237         lb.addCommand('back', Lang().label('Back'), OPCode()['BACK']) 
    238         lb.addCommand('select', Lang().label('Play'), OPCode()['PLAY'])             
    239          
    240         self._iActionStack.append(actions) 
    241         self._iViewStack.append(lb.getList()) 
    242         self._iListStack.append(id_list) 
    243          
    244      
    245     def albums(self): 
    246         print "Audio album" 
    247         lb = ListBox(Lang().label('Albums')) 
    248         actions = [] 
    249         id_list = [] 
    250          
    251         db = AudioQueries() 
    252         resultset = db.albums() 
    253          
    254         # feed list 
    255         for album in resultset.fetchall(): 
    256             lb.addLabel(album) 
    257             actions.append(lambda:self.albumSongs(album)) 
    258             id_list.append(album) 
    259              
    260         # Feed options menu 
    261         lb.addCommand('options', Lang().label('Select'), OPCode()['SELECT']) 
    262         lb.addCommand('options', Lang().label('AddToPlaylist'), OPCode()['PLNEW']) 
    263         lb.addCommand('options', Lang().label('NowPlaying'), OPCode()['NOWPLAYING']) 
    264         lb.addCommand('options', Lang().label('Back'), OPCode()['BACK']) 
    265         lb.addCommand('back', Lang().label('Back'), OPCode()['BACK']) 
    266         lb.addCommand('select', Lang().label('Select'), OPCode()['SELECT'])         
    267  
    268         self._iActionStack.append(actions) 
    269         self._iViewStack.append(lb.getList()) 
    270         self._iListStack.append(id_list) 
    271      
    272      
    273     def albumSongs(self, aAlbum): 
    274         print "Audio album songs" 
    275         lb = ListBox(aAlbum) 
    276         actions = [] 
    277         id_list = [] 
    278          
    279         db = AudioQueries() 
    280         resultset = db.albumSongs(aAlbum) 
    281          
    282         # feed list 
    283         for song in resultset.fetchall(): 
    284             lb.addLabel(song[3]) 
    285             actions.append(lambda:None) 
    286             id_list.append(song[0]) 
    287              
    288         # Feed options menu 
    289         lb.addCommand('options', Lang().label('Play'), OPCode()['PLAY']) 
    290         lb.addCommand('options', Lang().label('AddToPlaylist'), OPCode()['PLNEW']) 
    291         lb.addCommand('options', Lang().label('NowPlaying'), OPCode()['NOWPLAYING']) 
    292         lb.addCommand('options', Lang().label('Back'), OPCode()['BACK']) 
    293         lb.addCommand('back', Lang().label('Back'), OPCode()['BACK']) 
    294         lb.addCommand('select', Lang().label('Play'), OPCode()['PLAY'])   
    295          
    296         self._iActionStack.append(actions) 
    297         self._iViewStack.append(lb.getList()) 
    298         self._iListStack.append(id_list) 
    299          
    300      
    301     def genres(self): 
    302         print "Audio genres" 
    303         lb = ListBox(Lang().label('Genres')) 
    304         actions = [] 
    305         id_list = [] 
    306          
    307         db = AudioQueries() 
    308         resultset = db.genres() 
    309          
    310         # feed list 
    311         for genre in resultset.fetchall(): 
    312             lb.addLabel(genre) 
    313             actions.append(lambda:self.genreSongs(genre)) 
    314             id_list.append(genre) 
    315          
    316         # Feed options menu 
    317         lb.addCommand('options', Lang().label('Select'), OPCode()['SELECT']) 
    318         lb.addCommand('options', Lang().label('AddToPlaylist'), OPCode()['PLNEW']) 
    319         lb.addCommand('options', Lang().label('NowPlaying'), OPCode()['NOWPLAYING']) 
    320         lb.addCommand('options', Lang().label('Back'), OPCode()['BACK']) 
    321         lb.addCommand('back', Lang().label('Back'), OPCode()['BACK']) 
    322         lb.addCommand('select', Lang().label('Select'), OPCode()['SELECT']) 
    323  
    324         self._iActionStack.append(actions) 
    325         self._iViewStack.append(lb.getList()) 
    326         self._iListStack.append(id_list) 
    327          
    328      
    329     def genreSongs(self, aGenre): 
    330         print "Audio genres songs" 
    331         lb = ListBox(aGenre) 
    332         actions = [] 
    333         id_list = [] 
    334  
    335         db = AudioQueries() 
    336         resultset = db.genreSongs( aGenre ) 
    337          
    338         # feed list 
    339         for song in resultset.fetchall(): 
    340             lb.addLabel(song[3]) 
    341             id_list.append(song[0]) 
    342              
    343         # Feed options menu 
    344         lb.addCommand('options', Lang().label('Play'), OPCode()['PLAY']) 
    345         lb.addCommand('options', Lang().label('AddToPlaylist'), OPCode()['PLNEW']) 
    346         lb.addCommand('options', Lang().label('NowPlaying'), OPCode()['NOWPLAYING']) 
    347         lb.addCommand('options', Lang().label('Back'), OPCode()['BACK']) 
    348         lb.addCommand('back', Lang().label('Back'), OPCode()['BACK']) 
    349         lb.addCommand('select', Lang().label('Play'), OPCode()['PLAY'])           
    350  
    351         self._iActionStack.append(actions) 
    352         self._iViewStack.append(lb.getList()) 
    353         self._iListStack.append(id_list) 
    354          
    355      
    356     def playlists(self): 
    357         print "Audio playlists" 
    358         lb = ListBox(Lang().label('Playlists')) 
    359         actions = [] 
    360         id_list = [] 
    361          
    362         db = AudioQueries() 
    363         resultset = db.playlists() 
    364          
    365         # feed list 
    366         for playlist in resultset.fetchall(): 
    367             lb.addLabel(playlist) 
    368             id_list.append(playlist) 
    369             actions.append(lambda:self.playlistSongs(playlist)) 
    370          
    371         # Feed options menu 
    372         lb.addCommand('options', Lang().label('Select'), OPCode()['SELECT']) 
    373         lb.addCommand('options', Lang().label('NowPlaying'), OPCode()['NOWPLAYING']) 
    374         lb.addCommand('options', Lang().label('Back'), OPCode()['BACK']) 
    375         lb.addCommand('back', Lang().label('Back'), OPCode()['BACK']) 
    376         lb.addCommand('select', Lang().label('Select'), OPCode()['SELECT']) 
    377          
    378         self._iActionStack.append(actions) 
    379         self._iViewStack.append(lb.getList()) 
    380         self._iListStack.append(id_list) 
    381      
    382      
    383     def playlistSongs(self, aPlaylist): 
    384         print "Audio playlist" 
    385         lb = ListBox(aPlaylist) 
    386         actions = [] 
    387         id_list = [] 
    388          
    389         db = AudioQueries() 
    390         resultset = db.playlistSongs(aPlaylist) 
    391          
    392         # feed list 
    393         for song in resultset.fetchall(): 
    394             lb.addLabel(song[3]) 
    395             id_list.append(song[0]) 
    396              
    397         # Feed options menu 
    398         lb.addCommand('options', Lang().label('Play'), OPCode()['PLAY']) 
    399         lb.addCommand('options', Lang().label('NowPlaying'), OPCode()['NOWPLAYING']) 
    400         lb.addCommand('options', Lang().label('Back'), OPCode()['BACK']) 
    401         lb.addCommand('back', Lang().label('Back'), OPCode()['BACK']) 
    402         lb.addCommand('select', Lang().label('Play'), OPCode()['PLAY'])  
    403          
    404         self._iActionStack.append(actions) 
    405         self._iViewStack.append(lb.getList()) 
    406         self._iListStack.append(id_list) 
    407          
    408          
    409  
    410 class ViewEngine( object ): 
    411     def __init__(self): 
    412         self._iViewStack = [] 
    413         self._iActionStack = [] 
    414         self._iListStack = [] 
    415          
    416         self._iAudioView = AudioView(self._iViewStack, self._iActionStack, 
    417                                      self._iListStack) 
    418         self._iVideoView = VideoView(self._iViewStack, self._iActionStack, 
    419                                      self._iListStack) 
    420         self._iDvdView = DvdView() 
    421         self._iTvView = TvView() 
    422          
    423  
    424          
    425      
    426     def select_view(self, aOPCode): 
    427         if aOPCode == OPCode()['HELLO']: 
    428             self._main() 
    429              
    430         elif aOPCode == 1: 
    431             return self._iViewStack[1]['view']() 
    432         elif aOPCode == 2: 
    433             return self._iViewStack[2]['view']() 
    434          
    435         return self._iViewStack[-1] 
    436  
    437  
    438     def _main(self): 
    439         lb = ListBox('myMRC') 
    440         action = [] 
    441         # Feed listbox 
    442         if Settings().get('settings', 'audio') == '1': 
    443             lb.addLabel(Lang().label('Audio')) 
    444             action.append( self._audio ) 
    445         if Settings().get('settings', 'video') == '1': 
    446             lb.addLabel(Lang().label('Video')) 
    447             action.append( self._video ) 
    448         if Settings().get('settings', 'dvd') == '1': 
    449             lb.addLabel(Lang().label('DVD')) 
    450             action.append( self._DVD ) 
    451         if Settings().get('settings', 'tv') == '1': 
    452             lb.addLabel(Lang().label('TV')) 
    453             action.append( self._TV ) 
    454          
    455         # Feed options menu 
    456         lb.addCommand('options', Lang().label('Select'), OPCode()['SELECT']) 
    457         lb.addCommand('options', Lang().label('Disconnect'), OPCode()['DISCONNECT']) 
    458         # lb.addCommand('options', Lang().label('Settings'), OPCode()['SETTINGS']) 
    459         lb.addCommand('options', Lang().label('About'), OPCode()['ABOUT']) 
    460         lb.addCommand('options', Lang().label('Exit'), OPCode()['EXIT']) 
    461         lb.addCommand('back', Lang().label('Exit'), OPCode()['EXIT']) 
    462         lb.addCommand('select', Lang().label('Select'), OPCode()['SELECT']) 
    463         self._iViewStack.append(lb.getList()) 
    464         self._iActionStack.append(action) 
     9from mobileclient.viewengine import ViewEngine 
    46510    
    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          
    539      
    540     def _audio(self): 
    541         print "audio" 
    542         self._iAudioView.main() 
    543          
    544              
    545     def _video(self): 
    546         self._iVideoView.main() 
    547          
    548          
    549     def _DVD(self): 
    550         print "DVD" 
    551  
    552      
    553     def _TV(self): 
    554         print "TV" 
    555          
    556      
    557          
    558     def getResultset(self): 
    559         return self._iResultSet 
    560      
    561     def getActions(self): 
    562         return self._iActionStack[-1] 
    563      
    564     def getView(self): 
    565         return self._iViewStack[-1] 
    566      
    567     def getStack(self): 
    568         return self._iListStack[-1] 
    569      
    570     def back(self): 
    571         if len(self._iViewStack)-1 > 0: 
    572             self._iViewStack.pop() 
    573             self._iActionStack.pop() 
    574             self._iListStack.pop() 
    575         print len(self._iViewStack) 
    576         return self._iViewStack[-1] 
    57711 
    57812class ClientEngine( object ): 
     
    58115        self.send = aSendCb 
    58216        DBDriver( '/home/dlefevre/workspace/mymrc/src' ) 
    583         self._iSongId = None 
    584         #self.handle_event(PacketBuilder().build('0000', '')) 
     17        self._iAddToPlaylist = {} 
    58518     
    58619    def handle_event(self, opcode): 
     
    59023        ## UI 
    59124        if opcode == OPCode()['HELLO']: 
    592             self._iViewEngine.select_view(opcode) 
     25            self._iViewEngine.main() 
    59326            retVal = self._iViewEngine.getView() 
    59427            self.send(PacketBuilder().build(OPCode()['PARSELS'], retVal)) 
    59528        elif opcode == OPCode()['SELECT']: 
    59629            actions = self._iViewEngine.getActions() 
    597             print 'value: ', value 
    598             actions[int(value)]() 
     30            params = self._iViewEngine.getStack() 
     31            print params 
     32            if params[int(value)]: 
     33                print actions[int(value)](params[int(value)]) 
     34            else: 
     35                print actions[int(value)]() 
     36             
     37                     
    59938            retVal = self._iViewEngine.getView() 
    60039            self.send(PacketBuilder().build(OPCode()['PARSELS'], retVal)) 
     
    60342            retVal = self._iViewEngine.back() 
    60443            self.send(PacketBuilder().build(OPCode()['PARSELS'], retVal)) 
     44            self._iAddToPlaylist = {} 
    60545             
    60646        elif opcode == OPCode()['NOWPLAYING']: 
    60747            self._iViewEngine.nowPlaying() 
    60848            retVal = self._iViewEngine.getView() 
    609             self.send(PacketBuilder().build(OPCode()['PARSELS'], retVal)) 
     49             
     50            #self.send(PacketBuilder().build(OPCode()['PARSELS'], retVal)) 
     51            self.send(PacketBuilder().build(OPCode()['PARSECNV'], retVal)) 
    61052 
    61153        elif opcode == OPCode()['PLAYER']: 
     
    61557             
    61658        ## Playlist 
     59        # Add song to playlist: store song id and prompt the choose playlist 
     60        # listbox 
    61761        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              
     62            self._iAddToPlaylist['songid'] = int(self._iViewEngine.getStack()[int(value)]) 
     63            self._iViewEngine.chosePlaylist() 
     64            retVal = self._iViewEngine.getView() 
     65            self.send(PacketBuilder().build(OPCode()['PARSELS'], retVal)) 
     66 
     67        # Add artist songs to playlist: store artist id and prompt the choose  
     68        # playlist listbox. 
     69        elif opcode == OPCode()['PLADDARTIST']: 
     70            self._iAddToPlaylist['artistid'] = self._iViewEngine.getStack()[int(value)] 
     71            self._iViewEngine.chosePlaylist() 
     72            retVal = self._iViewEngine.getView() 
     73            self.send(PacketBuilder().build(OPCode()['PARSELS'], retVal)) 
     74 
     75        # Add album songs to playlist: store album id and prompt the choose  
     76        # playlist listbox. 
     77        elif opcode == OPCode()['PLADDALBUM']: 
     78            print self._iViewEngine.getStack()[int(value)] 
     79            self._iAddToPlaylist['albumid'] = self._iViewEngine.getStack()[int(value)] 
     80            self._iViewEngine.chosePlaylist() 
     81            retVal = self._iViewEngine.getView() 
     82            self.send(PacketBuilder().build(OPCode()['PARSELS'], retVal)) 
     83 
     84        # Add genre songs to playlist: store genre id and prompt the choose  
     85        # playlist listbox. 
     86        elif opcode == OPCode()['PLADDGENRE']: 
     87            self._iAddToPlaylist['genreid'] = self._iViewEngine.getStack()[int(value)] 
     88            self._iViewEngine.chosePlaylist() 
     89            retVal = self._iViewEngine.getView() 
     90            self.send(PacketBuilder().build(OPCode()['PARSELS'], retVal)) 
     91 
     92        # Returns index id from the choose playlist view to get the playlist id 
     93        # to add the song into.             
    62394        elif opcode == OPCode()['PLID']: 
    624             db = AudioQueries() 
    625             id = self._iViewEngine.getStack() 
    626             rs = db.addSongToPlaylist(id[int(value)], self._iSongId) 
     95            try: 
     96                db = AudioQueries() 
     97                id = self._iViewEngine.getStack() 
     98                 
     99                if self._iAddToPlaylist.has_key("songid"): 
     100                    rs = db.addSongToPlaylist(id[int(value)], self._iAddToPlaylist["songid"]) 
     101                 
     102                elif self._iAddToPlaylist.has_key("artistid"): 
     103                    print "artist name: ", self._iAddToPlaylist['artistid'] 
     104                    rs = db.addArtistToPlaylist(self._iAddToPlaylist['artistid'],  
     105                                                id[int(value)]) 
     106                    print rs.fetchall()     
     107                elif self._iAddToPlaylist.has_key("albumid"): 
     108                    print "album name: ", self._iAddToPlaylist['albumid'] 
     109                    print "playlist: ", self._iViewEngine.getStack() 
     110                    rs = db.addAlbumToPlaylist(self._iAddToPlaylist['albumid'],  
     111                                               id[int(value)]) 
     112                    print rs.fetchall() 
     113                     
     114 
     115                elif self._iAddToPlaylist.has_key('genreid'): 
     116                    print "artist name: ", self._iAddToPlaylist['genreid'][1] 
     117                    rs = db.addGenreToPlaylist(self._iAddToPlaylist['genreid'],  
     118                                               id[int(value)]) 
     119                    print rs.fetchall() 
     120                     
     121            except Exception, e: 
     122                print e 
     123             
    627124            retVal = self._iViewEngine.back() 
    628125            self.send(PacketBuilder().build(OPCode()['PARSELS'], retVal)) 
     126            self._iAddToPlaylist = {} 
     127             
     128 
    629129 
    630130             
     
    638138            try: 
    639139                print "value: ", value 
    640                 id = self._iViewEngine.getStack()[int(value)] 
    641                 path = AudioQueries().songById(id) 
    642                 print path 
    643                 AudioController().play( path[0] ) 
    644             except: 
     140                print self._iViewEngine.getStack() 
     141                path = self._iViewEngine.getStack()[int(value)][1] 
     142                AudioController().play( path ) 
     143                self.send(PacketBuilder().build(OPCode()['DUMMY'], '')) 
     144            except Exception, e: 
     145                print e 
     146                self.send(PacketBuilder().build(OPCode()['DUMMY'], '')) 
    645147                pass 
    646148        elif opcode ==  OPCode()["STOP"]: 
     
    688190            self.send(PacketBuilder().build(OPCode()['DUMMY'], '')) 
    689191             
    690          
    691          
    692  
    693          
    694          
    695          
    696          
    697192if __name__ == '__main__': 
    698193    Settings('/home/dlefevre/workspace/mymrc/src') 
    699194    Lang('/home/dlefevre/workspace/mymrc/src') 
    700195    DBDriver( '/home/dlefevre/workspace/mymrc/src' ) 
    701     #resultset = DBDriver( '/home/dlefevre/workspace/mymrc/src' ).execute(query) 
    702     #print resultset.fetchall() 
    703  
    704  
    705     #query = "INSERT INTO song (artist_id, title, path, album_id, track_no, genre_id)"\ 
    706     #"values (%d, '%s', '%s', %d, %d, %d)" %(1, 
    707     #                                   unicode('Counting Crows - Mr. Jones.mp3'), 
    708     #                                   unicode('/home/storage/Music/Counting Crows - Mr. Jones.mp3'), 
    709     #                                   1, 
    710     #                                   1, 
    711     #                                   1 
    712     #                                   ) 
    713     #query = "INSERT INTO artist (name) values ('%s')" %(unicode('Counting Crows'))   
    714     #query = "INSERT INTO genre (name) values ('%s')" %(unicode('Rock')) 
    715     #print "All songs" 
    716     #print AudioView().allSongs() 
    717     #print "Artists" 
    718     #print AudioView().artists() 
    719     #print "Artist albums" 
    720     #print AudioView().artistAlbums() 
    721     #print "Artist album songs" 
    722     #print AudioView().artistAlbumSongs() 
    723     #print "Artist All songs" 
    724     #print AudioView().artistAllSongs() 
    725     #print "albums" 
    726     #print AudioView().albums() 
    727     #print "Album Songs" 
    728     #print AudioView().albumSongs() 
    729     #print "Genres" 
    730     #print AudioView().genres() 
    731     #print "Genre Songs" 
    732     #print AudioView().genreSongs() 
    733     #print "playlists" 
    734     #print AudioView().playlists() 
    735     #print "Playlist Songs" 
    736     #print AudioView().playlistSongs() 
    737196     
    738197    query = """SELECT * FROM audio_playlist_data"""