class SearcherTest(unittest.TestCase): def setUp(self): self.au_alb = AudioAlbum(os.getcwd() + os.sep + 'test_audio_files') self.searcher = Searcher(self.au_alb) def test_search(self): results = {('Song: King Of Kings', self.au_alb.songs_titles['King Of Kings']), ('Song: Army Of The Dead , Part 1', self.au_alb.songs_titles['Army Of The Dead , Part 1']), ('Album: Gods Of War', self.au_alb.album_titles['Gods Of War'])} self.assertSetEqual(results, set(self.searcher.get_search_results('of'))) self.assertSetEqual(set(), set(self.searcher.get_search_results('Of'))) self.assertSetEqual(set(), set(self.searcher.get_search_results('OF')))
class MainFrame(wx.Frame): def __init__(self, my_audio_album): wx.Frame.__init__(self, None) self.audio_album = my_audio_album splitter = wx.SplitterWindow(self) p = wx.Panel(splitter) self.nb = wx.Notebook(p) self.player = PlayerTab(splitter, my_audio_album) self.song_tab = SongTab(self.nb, my_audio_album.songs, self.player) self.song_tab.SetSize(600, 600) self.artist_tab = ArtistTab(self.nb, self.player, my_audio_album.artists) self.albums_tab = HalfSplittedTab(self.nb, my_audio_album.albums, self.player, "Choose an album to listen") self.genres_tab = HalfSplittedTab(self.nb, my_audio_album.genres, self.player, "Choose a genre to listen") self.playlist_tab = PlaylistTab(self.nb, my_audio_album.playlists, self.player, "Choose a playlist to listen", my_audio_album) self.nb.AddPage(self.song_tab, "Songs") self.nb.AddPage(self.artist_tab, "Artists") self.nb.AddPage(self.albums_tab, "Albums") self.nb.AddPage(self.genres_tab, "Genres") self.nb.AddPage(self.playlist_tab, "Playlists") splitter.SplitHorizontally(p, self.player) splitter.SetSashGravity(0.8) sizer = wx.BoxSizer() sizer.Add(self.nb, 1, wx.EXPAND) p.SetSizer(sizer) tb = wx.ToolBar(self, -1) self.ToolBar = tb self.searcher = Searcher(my_audio_album) self.search = wx.SearchCtrl(tb, style=wx.TE_PROCESS_ENTER) tb.Bind(wx.EVT_TEXT_ENTER, self.on_search) tb.AddControl(self.search) img = wx.Bitmap(os.path.join(bitmapDir, "update.png")) tb.AddTool(23, 'update', img) tb.Bind(wx.EVT_TOOL, self.update) tb.Realize() def update(self, event): self.searcher.update() self.update_tab(self.song_tab, self.audio_album.songs) self.update_tab(self.artist_tab, self.audio_album.artists) self.update_tab(self.albums_tab, self.audio_album.albums) self.update_tab(self.genres_tab, self.audio_album.genres) self.update_tab(self.playlist_tab, self.audio_album.playlists) def on_search(self, event): i = -1 search_request = self.search.GetValue() results = self.searcher.get_search_results(search_request.lower()) ch = wx.SingleChoiceDialog( self, 'Found for request: {}'.format(search_request), 'Search result', [r[0] for r in results]) if ch.ShowModal() == wx.ID_OK: i = ch.GetSelection() ch.Destroy() if i != -1: self.open_search_result(results[i][1]) def open_search_result(self, au_object): t = type(au_object) if t == Song: self.nb.SetSelection(0) for button in self.song_tab.panel.buttons: if au_object.id == button.Id: self.focus(0, button) break self.player.change_now_playing(self.audio_album.songs) self.player.set_idx(self.audio_album.songs.index(au_object)) elif t == Album: self.focus( 2, self.albums_tab.panel.buttons[self.audio_album.albums.index( au_object)]) elif t == Artist: self.focus( 1, self.artist_tab.panel.buttons[ self.audio_album.artists.index(au_object)]) elif t == Playlist: self.focus( 4, self.playlist_tab.panel.buttons[ self.audio_album.playlists.index(au_object)]) elif t == Genre: self.focus( 3, self.genres_tab.panel.buttons[self.audio_album.genres.index( au_object)]) def focus(self, page, focus_button): self.nb.SetSelection(page) focus_button.SetFocus() @staticmethod def update_tab(tab, objects_list): tab.panel.delete_buttons() tab.panel.add_buttons(objects_list)