Beispiel #1
0
 def populate_playlists_for_menu(self, playlistinfo):
     if self.mergepl_id:
         self.UIManager().remove_ui(self.mergepl_id)
     if self.actionGroupPlaylists:
         self.UIManager().remove_action_group(self.actionGroupPlaylists)
         self.actionGroupPlaylists = None
     self.actionGroupPlaylists = Gtk.ActionGroup('MPDPlaylists')
     self.UIManager().ensure_update()
     actions = [("Playlist: %s" % playlist.replace("&", ""),
                 Gtk.STOCK_JUSTIFY_CENTER,
                 ui.quote_label(misc.unescape_html(playlist)), None, None,
                 self.on_playlist_menu_click) for playlist in playlistinfo]
     self.actionGroupPlaylists.add_actions(actions)
     uiDescription = """
         <ui>
           <popup name="mainmenu">
               <menu action="plmenu">
         """
     uiDescription += "".join('<menuitem action=\"%s\"/>' % action[0]
                              for action in actions)
     uiDescription += '</menu></popup></ui>'
     self.mergepl_id = self.UIManager().add_ui_from_string(uiDescription)
     self.UIManager().insert_action_group(self.actionGroupPlaylists, 0)
     self.UIManager().get_widget('/hidden').set_property('visible', False)
     # If we're not on the Current tab, prevent additional menu items
     # from displaying:
     self.update_menu_visibility()
Beispiel #2
0
 def populate_playlists_for_menu(self, playlistinfo):
     if self.mergepl_id:
         self.UIManager().remove_ui(self.mergepl_id)
     if self.actionGroupPlaylists:
         self.UIManager().remove_action_group(self.actionGroupPlaylists)
         self.actionGroupPlaylists = None
     self.actionGroupPlaylists = Gtk.ActionGroup('MPDPlaylists')
     self.UIManager().ensure_update()
     actions = [
         ("Playlist: %s" % playlist.replace("&", ""),
          Gtk.STOCK_JUSTIFY_CENTER,
          ui.quote_label(misc.unescape_html(playlist)),
          None, None,
          self.on_playlist_menu_click)
         for playlist in playlistinfo]
     self.actionGroupPlaylists.add_actions(actions)
     uiDescription = """
         <ui>
           <popup name="mainmenu">
               <menu action="plmenu">
         """
     uiDescription += "".join('<menuitem action=\"%s\"/>' % action[0]
                     for action in actions)
     uiDescription += '</menu></popup></ui>'
     self.mergepl_id = self.UIManager().add_ui_from_string(uiDescription)
     self.UIManager().insert_action_group(self.actionGroupPlaylists, 0)
     self.UIManager().get_widget('/hidden').set_property('visible', False)
     # If we're not on the Current tab, prevent additional menu items
     # from displaying:
     self.update_menu_visibility()
Beispiel #3
0
 def on_streams_edit(self, action):
     model, selected = self.streams_selection.get_selected_rows()
     try:
         streamname = misc.unescape_html(model.get_value(model.get_iter(selected[0]), 1))
         for i, name in enumerate(self.config.stream_names):
             if name == streamname:
                 self.on_streams_new(action, i)
                 return
     except:
         pass
Beispiel #4
0
 def on_streams_edit(self, action):
     model, selected = self.streams_selection.get_selected_rows()
     try:
         streamname = misc.unescape_html(
             model.get_value(model.get_iter(selected[0]), 1))
         for i, name in enumerate(self.config.stream_names):
             if name == streamname:
                 self.on_streams_new(action, i)
                 return
     except:
         pass
Beispiel #5
0
    def get_lyrics_response(self, artist_then, title_then, song_dir,
                lyrics=None, error=None):
        if lyrics and not error:
            filename = self.target_lyrics_filename(artist_then, title_then,
                                                   song_dir)
            # Save lyrics to file:
            misc.create_dir('~/.lyrics/')
            try:
                with open(filename, 'w', encoding="utf-8") as f:
                    lyrics = misc.unescape_html(lyrics)
                    f.write(lyrics)
            except IOError:
                pass

        self._show_lyrics(artist_then, title_then, lyrics, error)
Beispiel #6
0
    def get_lyrics_response(self, artist_then, title_then, song_dir,
                lyrics=None, error=None):
        if lyrics and not error:
            filename = target_lyrics_filename(self.config, artist_then,
                                              title_then, song_dir)
            # Save lyrics to file:
            misc.create_dir('~/.lyrics/')
            self.logger.info("Saving lyrics to: %s", filename)
            try:
                with open(filename, 'w', encoding="utf-8") as f:
                    lyrics = misc.unescape_html(lyrics)
                    f.write(lyrics)
            except IOError as e:
                self.logger.warning("Can't save lyrics to %s: %s", filename, e)

        self.communicate(artist_then, title_then, lyrics, error)
Beispiel #7
0
 def on_playlist_menu_click(self, action):
     plname = misc.unescape_html(action.get_name().replace("Playlist: ",
                                                           ""))
     text = ('Would you like to replace the existing playlist or append'
             'these songs?')
     response = ui.show_msg(self.window,
                            _(text), _("Existing Playlist"),
                            "existingPlaylist", (_("Replace playlist"),
                                                 1, _("Append songs"), 2),
                            default=self.config.existing_playlist_option)
     if response == 1: # Overwrite
         self.config.existing_playlist_option = response
         self.mpd.playlistclear(plname)
         self.add_selected_to_playlist(plname)
     elif response == 2: # Append songs:
         self.config.existing_playlist_option = response
         self.add_selected_to_playlist(plname)
Beispiel #8
0
 def on_playlist_rename(self, _action):
     model, selected = self.playlists_selection.get_selected_rows()
     oldname = misc.unescape_html(
         model.get_value(model.get_iter(selected[0]), 1))
     plname = self.prompt_for_playlist_name(_("Rename Playlist"),
                                            'renamePlaylist', oldname)
     if plname:
         if self.playlist_name_exists(_("Rename Playlist"),
                                      'renamePlaylistError',
                                      plname, oldname):
             return
         self.playlist_create(plname, oldname)
         # Re-select item:
         row = 0
         for pl in self.playlistsdata:
             if pl[1] == plname:
                 self.playlists_selection.select_path((row,))
                 return
             row = row + 1
Beispiel #9
0
 def on_playlist_rename(self, _action):
     model, selected = self.playlists_selection.get_selected_rows()
     oldname = misc.unescape_html(
         model.get_value(model.get_iter(selected[0]), 1))
     plname = self.prompt_for_playlist_name(_("Rename Playlist"),
                                            'renamePlaylist', oldname)
     if plname:
         if self.playlist_name_exists(_("Rename Playlist"),
                                      'renamePlaylistError', plname,
                                      oldname):
             return
         self.playlist_create(plname, oldname)
         # Re-select item:
         row = 0
         for pl in self.playlistsdata:
             if pl[1] == plname:
                 self.playlists_selection.select_path((row, ))
                 return
             row = row + 1
Beispiel #10
0
 def on_playlist_menu_click(self, action):
     plname = misc.unescape_html(action.get_name().replace(
         "Playlist: ", ""))
     text = ('Would you like to replace the existing playlist or append'
             'these songs?')
     response = ui.show_msg(
         self.window,
         _(text),
         _("Existing Playlist"),
         "existingPlaylist",
         (_("Replace playlist"), 1, _("Append songs"), 2),
         default=self.config.existing_playlist_option)
     if response == 1:  # Overwrite
         self.config.existing_playlist_option = response
         self.mpd.playlistclear(plname)
         self.add_selected_to_playlist(plname)
     elif response == 2:  # Append songs:
         self.config.existing_playlist_option = response
         self.add_selected_to_playlist(plname)
Beispiel #11
0
    def get_lyrics_response(self,
                            artist_then,
                            title_then,
                            song_dir,
                            lyrics=None,
                            error=None):
        if lyrics and not error:
            filename = self.target_lyrics_filename(artist_then, title_then,
                                                   song_dir)
            # Save lyrics to file:
            misc.create_dir('~/.lyrics/')
            try:
                with open(filename, 'w', encoding="utf-8") as f:
                    lyrics = misc.unescape_html(lyrics)
                    f.write(lyrics)
            except IOError:
                pass

        self._show_lyrics(artist_then, title_then, lyrics, error)
Beispiel #12
0
    def get_lyrics_response(self,
                            artist_then,
                            title_then,
                            song_dir,
                            lyrics=None,
                            error=None):
        if lyrics and not error:
            filename = target_lyrics_filename(self.config, artist_then,
                                              title_then, song_dir)
            # Save lyrics to file:
            misc.create_dir('~/.lyrics/')
            self.logger.info("Saving lyrics to: %s", filename)
            try:
                with open(filename, 'w', encoding="utf-8") as f:
                    lyrics = misc.unescape_html(lyrics)
                    f.write(lyrics)
            except IOError as e:
                self.logger.warning("Can't save lyrics to %s: %s", filename, e)

        self.communicate(artist_then, title_then, lyrics, error)
Beispiel #13
0
    def _set_lyrics(self, lyrics):
        if lyrics is None:
            return

        lyrics_buf = self.lyrics_text.get_buffer()
        lyrics_buf.set_text('')

        # pango needs only ampersand to be escaped
        lyrics = misc.unescape_html(lyrics).replace('&', '&amp;')

        try:
            attr_list, plain_text, accel_marker = Pango.parse_markup(lyrics)
        except:
            # failed to parse, use lyrics as it is
            lyrics_buf.set_text(lyrics)
            return

        attr_iter = attr_list.get_iterator()

        while True:
            range = attr_iter.range()
            font = attr_iter.get_font()[0]
            text = plain_text[range[0]:range[1]]

            tags = []
            if font.get_weight() == Pango.Weight.BOLD:
                tags.append('bold')
            if font.get_style() == Pango.Style.ITALIC:
                tags.append('italic')

            if tags:
                lyrics_buf.insert_with_tags_by_name(lyrics_buf.get_end_iter(),
                                                    text, *tags)
            else:
                lyrics_buf.insert(lyrics_buf.get_end_iter(), text)

            if not attr_iter.next():
                break
Beispiel #14
0
    def _set_lyrics(self, lyrics):
        if lyrics is None:
            return

        lyrics_buf = self.lyrics_text.get_buffer()
        lyrics_buf.set_text('')

        # pango needs only ampersand to be escaped
        lyrics = misc.unescape_html(lyrics).replace('&', '&amp;')

        try:
            attr_list, plain_text, accel_marker = Pango.parse_markup(lyrics)
        except:
            # failed to parse, use lyrics as it is
            lyrics_buf.set_text(lyrics)
            return

        attr_iter = attr_list.get_iterator()

        while True:
            range = attr_iter.range()
            font = attr_iter.get_font()[0]
            text = plain_text[range[0]:range[1]]

            tags = []
            if font.get_weight() == Pango.Weight.BOLD:
                tags.append('bold')
            if font.get_style() == Pango.Style.ITALIC:
                tags.append('italic')

            if tags:
                lyrics_buf.insert_with_tags_by_name(lyrics_buf.get_end_iter(),
                                                    text, *tags)
            else:
                lyrics_buf.insert(lyrics_buf.get_end_iter(), text)

            if not attr_iter.next():
                break