コード例 #1
0
    def select_item(self, s=None):
        """ Select item from menu

        :param state: button state
        """
        self.current_item = s.name
        state = State()
        state.folder = os.path.join(self.config[COLLECTION][BASE_FOLDER],
                                    s.folder[1:])
        state.topic = self.collection_topic

        if state.topic == KEY_FILE:
            state.file_name = s.file_name
        elif state.topic == TITLE:
            state.file_name = self.selector.get_filename_by_title(
                s.folder, self.title)
            state.url = os.path.join(state.folder, state.file_name)
        else:
            files = self.util.get_audio_files_in_folder(state.folder, False)
            if files:
                f = files[0]
                state.file_name = f.file_name
                state.url = os.path.join(state.folder, state.file_name)
            else:
                state.file_name = None
                state.url = None

        state.source = "detail"
        self.collection_list_menu.select_by_index(s.index)
        self.go_file_playback(state)
コード例 #2
0
    def set_tracks(self, tracks, page):
        """ Set tracks in menu
        
        :param tracks: list of tracks
        :param page: page number
        """
        if tracks == None:
            return
        self.tracks = tracks
        items = {}
        start_index = TRACKS_PER_PAGE * (page - 1)
        end_index = start_index + TRACKS_PER_PAGE

        layout = GridLayout(self.bb)
        layout.set_pixel_constraints(TRACK_ROWS, TRACK_COLUMNS, 1, 1)
        constr = layout.get_next_constraints()
        fixed_height = int((constr.h * LABEL_HEIGHT_PERCENT) / 100.0)

        for i, a in enumerate(self.tracks[start_index:end_index]):
            state = State()
            state.name = a["title"]
            state.l_name = state.name
            state.bgr = self.config[COLORS][COLOR_DARK]
            state.img_x = None
            state.img_y = None
            state.auto_update = True
            state.show_bgr = True
            state.show_img = False
            state.show_label = True
            state.comparator_item = state.name
            state.index = i
            state.fixed_height = fixed_height
            state.file_name = a["file_name"]
            items[state.name] = state
        self.set_items(items, 0, self.play_track, False)
コード例 #3
0
    def change_track(self, track_index):
        """ Change track
        
        :param track_index: index track
        """
        a = [AUDIOBOOKS, CD_PLAYER]
        m = self.config[CURRENT][MODE]
        if not (m in a):
            self.config[FILE_PLAYBACK][CURRENT_FILE] = self.get_filename(
                track_index)

        self.stop_timer()
        time.sleep(0.3)
        s = State()
        if m == FILE_PLAYBACK:
            s.playback_mode = self.config[FILE_PLAYBACK][
                CURRENT_FILE_PLAYBACK_MODE]

        s.playlist_track_number = track_index
        s.index = track_index
        s.source = ARROW_BUTTON
        s.file_name = self.get_filename(track_index)

        if self.cd_album != None:
            s.album = self.cd_album

        self.set_current(True, s)
コード例 #4
0
ファイル: util.py プロジェクト: Rucia1/Peppy
    def load_playlist(self, state, playlist_provider, rows, columns):
        """ Handle playlist
        
        :param state: state object defining playlist
        :param playlist_provider: provider
        :param rows: menu rows 
        :param columns: menu columns
        
        :return: playlist 
        """
        n = getattr(state, "file_name", None)
        if n == None:
            state.file_name = self.config[FILE_PLAYBACK][FILE_AUDIO]

        p = playlist_provider(state)

        if not p:
            return

        play_list = []

        for i, n in enumerate(p):
            s = State()
            s.index = i
            s.playlist_track_number = i
            s.file_name = n
            s.file_type = FILE_AUDIO
            s.url = state.folder + os.sep + n
            s.playback_mode = FILE_PLAYLIST
            play_list.append(s)

        return self.load_playlist_content(play_list, rows, columns)
コード例 #5
0
 def get_cd_tracks_summary(self, cd_drive_name):
     """ Get the list of CD tracks summaries
     
     :param cd_drive_name: CD drive name
     
     :return: CD tracks summaries
     """
     drive_id = self.get_cd_drive_id_by_name(cd_drive_name)
     names = self.get_cd_track_names(drive_id)
     if not names:
         return None
     
     items = []
     for id, cd in enumerate(names):
         s = State()
         s.index = id
         s.playlist_track_number = id
         s.name = cd
         s.l_name = s.name
         s.file_type = FILE_AUDIO
         s.playback_mode = FILE_AUDIO
         s.file_name = self.get_cd_track_url(cd_drive_name, id + 1)
         s.url = s.file_name       
         items.append(s)
         
     return items
コード例 #6
0
ファイル: podcastplayer.py プロジェクト: thekismet/Peppy
    def set_audio_file(self, new_track, s=None):
        """ Set new audio file
        
        :param new_track: True - new file
        "param s" button state
        """
        state = State()
        state.folder = PODCASTS_FOLDER

        if s.status == STATUS_LOADED:
            state.url = s.file_name
            state.original_url = s.url
        else:
            state.url = s.url

        self.config[PLAYER_SETTINGS][PAUSE] = False
        state.mute = self.config[PLAYER_SETTINGS][MUTE]
        state.pause = self.config[PLAYER_SETTINGS][PAUSE]
        state.file_type = FILE_AUDIO
        state.dont_notify = True
        state.source = FILE_AUDIO
        state.playback_mode = FILE_AUDIO
        state.status = s.status
        if hasattr(s, "file_name"):
            state.file_name = s.file_name
        source = None
        if s:
            source = getattr(s, "source", None)

        if new_track:
            tt = 0.0
        else:
            tt = self.config[PODCASTS][PODCAST_EPISODE_TIME]

        if (isinstance(tt, str) and len(tt) != 0) or (
                isinstance(tt, float) or
            (source and source == RESUME)) or isinstance(tt, int):
            state.track_time = tt

        self.time_control.slider.set_position(0)

        if self.file_button and self.file_button.components[
                1] and self.file_button.components[1].content:
            state.icon_base = self.file_button.components[1].content

        if s:
            if self.config[VOLUME_CONTROL][
                    VOLUME_CONTROL_TYPE] == VOLUME_CONTROL_TYPE_PLAYER:
                state.volume = s.volume
            else:
                state.volume = None

        if getattr(s, "full_screen_image", None) != None:
            state.full_screen_image = s.full_screen_image

        self.notify_play_listeners(state)
コード例 #7
0
 def get_cd_track(self):
     """ Get CD track info for the track defined in the configuration 
     
     :return: track info
     """
     s = State()
     cd_drive = self.config[CD_PLAYBACK][CD_DRIVE_NAME]
     cd_track = self.config[CD_PLAYBACK][CD_TRACK]
     if cd_drive and cd_track:
         s.file_name = self.get_cd_track_url(cd_drive, int(cd_track))
         s.url = s.file_name
         return s
     return None
コード例 #8
0
ファイル: podcastsutil.py プロジェクト: whenthelight/Peppy
    def get_episodes_from_disk(self, podcast_url):
        """ Get podcast episodes from disk
        
        :param podcast_url: podcast URL
        
        :return: dictionary with episodes
        """
        try:
            podcast = self.summary_cache[podcast_url]
            podcast_image_url = podcast.image_name
            episodes = podcast.episodes
            return episodes
        except:
            pass

        episodes = []
        podcast = self.summary_cache[podcast_url]

        entries = []
        for p in self.podcasts_json:
            if p["url"] == podcast_url:
                try:
                    entries = p["episodes"]
                except:
                    pass
        if len(entries) == 0:
            return []

        for i, entry in enumerate(entries):
            s = State()
            s.index = i
            s.name = entry["name"]
            s.l_name = s.name
            s.file_name = entry["filename"]
            s.description = entry["summary"]
            s.fixed_height = int(self.episode_button_font_size * 0.8)
            s.file_type = PODCASTS
            s.online = podcast.online
            s.comparator_item = s.index
            s.bgr = self.config[COLORS][COLOR_DARK]
            s.show_bgr = True
            s.podcast_url = podcast_url
            s.podcast_name = podcast.name
            s.url = ""
            s.podcast_image_url = podcast_image_url
            self.set_episode_icon(s.name, self.episode_button_bb, s, False)
            episodes.append(s)

        self.summary_cache[podcast_url].episodes = episodes
        return episodes
コード例 #9
0
 def get_audio_files_from_playlist(self):
     """ Call player for files in the playlist 
     
     :return: list of files from playlist
     """
     playlist = self.get_current_playlist()
     files = []
     if playlist:
         for n in range(len(playlist)):
             st = State()
             st.index = st.comparator_item = n
             st.file_type = FILE_AUDIO
             st.file_name = playlist[n]
             files.append(st)
     return files
コード例 #10
0
ファイル: bookplayer.py プロジェクト: GregoryWest501/Peppy
 def get_audio_files_from_playlist(self):
     """ Call player for files in the playlist 
     
     :return: list of files from playlist
     """
     files = []
     if getattr(self, "playlist", None):
         for n in range(len(self.playlist)):
             st = State()
             st.index = st.comparator_item = n
             t = self.playlist[n]
             st.file_type = FILE_AUDIO
             st.file_name = t["file_name"]
             files.append(st)
     return files
コード例 #11
0
    def change_track(self, track_index):
        """ Change track
        
        :param track_index: index track
        """
        self.config[COLLECTION_PLAYBACK][COLLECTION_FILE] = self.get_filename(
            track_index)
        self.stop_timer()
        time.sleep(0.3)
        s = State()
        s.playlist_track_number = track_index
        s.index = track_index
        s.source = ARROW_BUTTON
        s.file_name = self.get_filename(track_index)

        folder = self.current_folder
        if not folder.endswith(os.sep):
            folder += os.sep
        s.folder = os.path.join(self.config[COLLECTION][BASE_FOLDER], folder)
        s.url = os.path.join(s.folder, s.file_name)

        self.set_current(True, s)
コード例 #12
0
ファイル: fileutil.py プロジェクト: alexander-jung/Peppy
    def get_folder_content(self, folder_name):
        """ Return the list representing folder content 
        
        :param folder_name: folder name
        :return:  
        """
        files = []

        if not os.path.exists(folder_name):
            return

        if folder_name.endswith(":") and WINDOWS in self.platform:
            folder_name += "\\"

        self.current_folder = folder_name

        if folder_name == self.ROOT and WINDOWS in self.platform:
            disks = self.get_windows_disks()
            for d in disks:
                state = State()
                state.folder = self.current_folder
                state.file_type = FOLDER
                state.file_name = d
                state.url = d
                files.append(state)
            return files

        for f in os.listdir(folder_name):
            file_path = os.path.join(folder_name, f)
            real_path = os.path.realpath(file_path)

            state = State()
            state.folder = self.current_folder
            state.file_type = FOLDER
            state.file_name = f
            state.url = real_path

            if os.path.isdir(file_path) and not re.match(
                    RE_HIDDEN_FOLDER_PREFIXES, f):  # folder
                try:
                    folder_image_path = self.get_folder_image_path(real_path)
                    if folder_image_path:
                        state.file_type = FOLDER_WITH_ICON
                        state.file_image_path = folder_image_path
                    files.append(state)
                except PermissionError:
                    pass
            elif os.path.isfile(file_path) and not f.startswith("."):  # file
                if self.is_audio_file(f):
                    state.file_type = FILE_AUDIO
                    if self.util.get_image_from_audio_file(file_path):
                        state.has_embedded_image = True
                    else:
                        state.has_embedded_image = False
                    files.append(state)
                elif self.is_playlist_file(f):
                    # had issues with mplayer and cue files:
                    # https://en.wikipedia.org/wiki/Talk%3ACue_sheet_(computing)#mplayer_have_more_faults
                    # had also issues using cue playlists and vlc python binding
                    p = self.config[AUDIO][CLIENT_NAME]
                    if (p == MPLAYER or p == VLC) and f.endswith(".cue"):
                        continue
                    state.file_type = FILE_PLAYLIST
                    files.append(state)
        files.sort(key=lambda x: [
            int(n) if n.isdigit() else n.lower()
            for n in split(self.cre, x.file_name)
        ])

        for n, f in enumerate(files):
            f.comparator_item = n

        return files
コード例 #13
0
ファイル: bookplayer.py プロジェクト: GregoryWest501/Peppy
    def set_audio_file(self, new_track, s=None):
        """ Set new audio file
        
        :param new_track: True - new audio file
        :param s: button state object 
        """
        state = State()
        state.playback_mode = FILE_AUDIO
        state.playlist_track_number = 0
        name = url = None

        if s == None:
            if self.config[AUDIOBOOKS][BROWSER_TRACK_FILENAME]:
                name = self.config[AUDIOBOOKS][BROWSER_TRACK_FILENAME]
                for t in self.playlist:
                    if t["title"].endswith(name):
                        url = t["mp3"]
            else:
                i = 0
                if s != None:
                    i = s.index
                t = self.playlist[i]
                url = t["mp3"]
                name = t["title"]
        else:
            if getattr(s, "track_filename", None):
                i = self.get_current_track_index(
                    {"file_name": s.track_filename})
            elif getattr(s, "playlist_track_number", None):
                i = s.playlist_track_number
            else:
                i = self.current_track_index

            t = self.playlist[i]
            url = t["mp3"]
            name = t["title"]

        self.config[PLAYER_SETTINGS][PAUSE] = False
        state.file_name = name
        self.config[AUDIOBOOKS][BROWSER_TRACK_FILENAME] = t["file_name"]
        state.mute = self.config[PLAYER_SETTINGS][MUTE]
        state.pause = self.config[PLAYER_SETTINGS][PAUSE]
        self.play_button.draw_default_state(None)

        if self.config[VOLUME_CONTROL][
                VOLUME_CONTROL_TYPE] == VOLUME_CONTROL_TYPE_PLAYER:
            state.volume = self.config[PLAYER_SETTINGS][VOLUME]
        else:
            state.volume = None

        state.file_type = FILE_AUDIO
        state.dont_notify = True
        state.source = FILE_AUDIO
        state.url = url
        state.mode = AUDIOBOOKS

        state.playback_mode = FILE_AUDIO
        state.music_folder = self.config[AUDIO][MUSIC_FOLDER]
        self.audio_files = self.get_audio_files_from_playlist()

        if self.config[AUDIOBOOKS][BROWSER_BOOK_TIME]:
            if new_track:
                state.track_time = "0"
            else:
                state.track_time = self.config[AUDIOBOOKS][BROWSER_BOOK_TIME]

        self.reset_loading()

        logging.debug(state.url)

        self.notify_play_listeners(state)
コード例 #14
0
ファイル: fileutil.py プロジェクト: thekismet/Peppy
    def get_folder_content(self,
                           folder_name,
                           store_folder_name=True,
                           load_images=True):
        """ Return the list representing folder content 
        
        :param folder_name: folder name
        :param store_folder_name: remember folder name

        :return:  
        """
        files = []

        if not os.path.exists(folder_name):
            return

        if folder_name.endswith(":") and WINDOWS in self.platform:
            folder_name += "\\"

        if store_folder_name:
            self.current_folder = folder_name

        if folder_name == self.ROOT and WINDOWS in self.platform:
            disks = self.get_windows_disks()
            for d in disks:
                state = State()
                state.folder = folder_name
                state.file_type = FOLDER
                state.file_name = d
                state.url = d
                files.append(state)
            return files

        for f in os.listdir(folder_name):
            file_path = os.path.join(folder_name, f)
            real_path = os.path.realpath(file_path)

            state = State()
            state.folder = folder_name
            state.file_type = FOLDER
            state.file_name = f
            state.url = real_path

            if os.path.isdir(file_path) and not re.match(
                    RE_HIDDEN_FOLDER_PREFIXES, f):  # folder
                try:
                    folder_image_path = self.util.get_folder_image_path(
                        real_path)
                    if folder_image_path:
                        state.file_type = FOLDER_WITH_ICON
                        state.file_image_path = folder_image_path
                    files.append(state)
                except PermissionError:
                    pass
            elif os.path.isfile(file_path) and not f.startswith("."):  # file
                if self.is_audio_file(f):
                    state.file_type = FILE_AUDIO
                    if load_images and self.image_util.get_image_from_audio_file(
                            file_path):
                        state.has_embedded_image = True
                    else:
                        state.has_embedded_image = False
                    files.append(state)
                elif self.is_playlist_file(f):
                    # had issues using cue playlists and vlc python binding
                    p = self.config[AUDIO][CLIENT_NAME]
                    if p == VLC and f.endswith(".cue"):
                        continue
                    state.file_type = FILE_PLAYLIST
                    files.append(state)

        if self.config[SORT_BY_TYPE]:
            files = sorted(files, key=attrgetter("file_type"), reverse=True)
        else:
            files = sorted(files, key=attrgetter("file_name"), reverse=False)

        for n, f in enumerate(files):
            f.comparator_item = n

        return files
コード例 #15
0
    def set_audio_file(self, new_track, s=None):
        """ Set new audio file
        
        :param new_track: True - new audio file
        "param s" button state object
        """
        state = State()

        if s:
            state.playback_mode = getattr(s, "playback_mode", FILE_AUDIO)
            state.playlist_track_number = getattr(s, "playlist_track_number",
                                                  None)
            if self.config[CURRENT][MODE] == CD_PLAYER and getattr(
                    s, "source", None) != INIT:
                image_base = getattr(s, "image_base", None)
                if image_base != None:
                    state.image_base = image_base
        else:
            m = self.config[FILE_PLAYBACK][CURRENT_FILE_PLAYBACK_MODE]
            if m:
                state.playback_mode = m
            else:
                state.playback_mode = FILE_AUDIO

        if self.config[CURRENT][MODE] == AUDIO_FILES:
            self.current_folder = self.config[FILE_PLAYBACK][CURRENT_FOLDER]
            if not self.current_folder:
                return
            state.folder = self.current_folder
            state.file_name = self.config[FILE_PLAYBACK][CURRENT_FILE]
            if state.folder[-1] == os.sep:
                state.folder = state.folder[:-1]

            if os.sep in state.file_name:
                state.url = "\"" + state.file_name + "\""
            else:
                state.url = "\"" + state.folder + os.sep + state.file_name + "\""

            state.music_folder = self.config[AUDIO][MUSIC_FOLDER]
        elif self.config[CURRENT][MODE] == CD_PLAYER:
            state.file_name = s.file_name
            state.url = getattr(s, "url", s.file_name)
            parts = s.file_name.split()
            self.config[CD_PLAYBACK][CD_DRIVE_NAME] = parts[0][len("cdda:///"
                                                                   ):]
            id = self.cdutil.get_cd_drive_id_by_name(
                self.config[CD_PLAYBACK][CD_DRIVE_NAME])
            self.config[CD_PLAYBACK][CD_DRIVE_ID] = int(id)
            self.config[CD_PLAYBACK][CD_TRACK] = int(parts[1].split("=")[1])

        self.config[PLAYER_SETTINGS][PAUSE] = False
        state.mute = self.config[PLAYER_SETTINGS][MUTE]
        state.pause = self.config[PLAYER_SETTINGS][PAUSE]
        state.file_type = FILE_AUDIO
        state.dont_notify = True
        state.source = FILE_AUDIO

        if self.config[FILE_PLAYBACK][
                CURRENT_FILE_PLAYBACK_MODE] == FILE_AUDIO or self.config[
                    CURRENT][MODE] == CD_PLAYER:
            self.audio_files = self.get_audio_files()
        elif self.config[FILE_PLAYBACK][
                CURRENT_FILE_PLAYBACK_MODE] == FILE_PLAYLIST:
            state.file_name = self.config[FILE_PLAYBACK][CURRENT_FILE_PLAYLIST]
            self.load_playlist(state)
            state.file_name = self.config[FILE_PLAYBACK][CURRENT_FILE]
            self.audio_files = self.get_audio_files_from_playlist()
            state.playback_mode = FILE_PLAYLIST
            n = getattr(s, "file_name", None)
            if n:
                state.file_name = n

            try:
                state.playlist_track_number = int(state.file_name) - 1
            except:
                state.playlist_track_number = self.get_current_track_index(
                    state)

        source = None
        if s:
            source = getattr(s, "source", None)

        if new_track:
            tt = 0.0
        else:
            if self.config[CURRENT][MODE] == CD_PLAYER:
                tt = self.config[CD_PLAYBACK][CD_TRACK_TIME]
            else:
                tt = self.config[FILE_PLAYBACK][CURRENT_TRACK_TIME]

        if (isinstance(tt, str) and len(tt) != 0) or (
                isinstance(tt, float) or
            (source and source == RESUME)) or isinstance(tt, int):
            state.track_time = tt

        self.time_control.slider.set_position(0)

        if self.file_button and self.file_button.components[
                1] and self.file_button.components[1].content:
            state.icon_base = self.file_button.components[1].content

        if s and s.volume:
            state.volume = s.volume

        if self.config[CURRENT][MODE] == CD_PLAYER and s and getattr(
                s, "source", None) == INIT:
            try:
                self.cd_album = self.util.cd_titles[self.config[CD_PLAYBACK]
                                                    [CD_DRIVE_NAME]]
                self.set_cd_album_art_image()
                state.image_base = self.file_button.components[1].content
            except:
                self.cd_album = None

        if getattr(s, "full_screen_image", None) != None:
            state.full_screen_image = s.full_screen_image

        song_name = self.get_song_name(s)
        if song_name != None:
            state.album = song_name

        self.notify_play_listeners(state)
コード例 #16
0
    def set_audio_file(self, new_track, s=None):
        """ Set new audio file
        
        :param new_track: True - new audio file
        "param s" button state object
        """
        state = State()
        state.playback_mode = FILE_AUDIO
        self.current_folder = s.folder
        state.folder = self.current_folder
        state.file_name = s.file_name
        state.url = s.url

        if state.folder[-1] == os.sep:
            state.folder = state.folder[:-1]

        state.full_screen_image = self.set_audio_file_image(
            state.url.replace('\"', ""), state.folder)
        self.config[PLAYER_SETTINGS][PAUSE] = False
        state.mute = self.config[PLAYER_SETTINGS][MUTE]
        state.pause = self.config[PLAYER_SETTINGS][PAUSE]
        self.play_button.draw_default_state(None)
        state.file_type = FILE_AUDIO
        state.dont_notify = True

        folder = self.config[COLLECTION_PLAYBACK][COLLECTION_FOLDER]
        self.audio_files = self.util.get_audio_files_in_folder(folder, False)
        source = None
        if s:
            source = getattr(s, "source", None)

        tt = 0.0

        if new_track and hasattr(s, "source") and s.source != INIT:
            tt = 0.0
        else:
            tt = self.config[COLLECTION_PLAYBACK][COLLECTION_TRACK_TIME]

        if (isinstance(tt, str) and len(tt) != 0) or (
                isinstance(tt, float) or
            (source and source == RESUME)) or isinstance(tt, int):
            state.track_time = tt

        if self.show_time_control:
            self.time_control.slider.set_position(0)

        if self.file_button and self.file_button.components[
                1] and self.file_button.components[1].content:
            state.icon_base = self.file_button.components[1].content

        if self.file_button and hasattr(s, "index"):
            self.file_button.state.index = s.index
        else:
            self.file_button.state.index = 0

        if s:
            if self.config[VOLUME_CONTROL][
                    VOLUME_CONTROL_TYPE] == VOLUME_CONTROL_TYPE_PLAYER:
                state.volume = s.volume
            else:
                state.volume = None

        if getattr(s, "full_screen_image", None) != None:
            state.full_screen_image = s.full_screen_image

        song_name = self.get_song_name(s)
        if song_name != None:
            state.album = song_name

        self.notify_play_listeners(state)
コード例 #17
0
    def turn_page(self):
        """ Turn page """

        topic = self.get_topic()

        self.current_page_items = self.selector.get_topic_detail_page(
            topic, self.selection, self.current_page, self.prev_page,
            self.first_item, self.last_item, PAGE_SIZE)
        self.prev_page = self.current_page

        if not self.current_page_items:
            self.current_page_items = []
            return

        self.current_item = self.current_page_items[0]
        self.first_item = self.current_item
        self.last_item = self.current_page_items[len(self.current_page_items) -
                                                 1]

        p = {}
        for i, f in enumerate(self.current_page_items):
            s = State()
            s.index = i
            s.folder = f
            if "\x00" in f:
                f = f.replace("\x00", "")
            if "/" in f:
                parts = f.split("/")
                if len(parts) > 1:
                    last = parts[len(parts) - 1]
                    if len(last) > 6:
                        f = last
                    else:
                        f = parts[len(parts) - 2] + "/" + last
            s.name = f
            s.l_name = s.name
            if self.filename:
                s.file_name = self.filename
            if self.title:
                s.title = self.title
            p[str(i)] = s

        self.collection_list_menu.set_items(p, 0, self.select_item, False)

        keys = list(p.keys())

        if len(keys) != 0 and self.navigator and self.total_pages > 1:
            self.navigator.left_button.change_label(str(self.current_page - 1))
            self.navigator.right_button.change_label(
                str(self.total_pages - self.current_page))

        self.collection_list_menu.clean_draw_update()

        if hasattr(self, "update_observer"):
            self.collection_list_menu.add_menu_observers(
                self.update_observer, self.redraw_observer)

        self.collection_list_menu.unselect()
        for i, b in enumerate(self.collection_list_menu.buttons.values()):
            if self.current_item[0] == b.state.name:
                self.collection_list_menu.select_by_index(b.state.index)
                return
        index = (self.current_page - 1) * PAGE_SIZE
        self.collection_list_menu.select_by_index(index)
コード例 #18
0
ファイル: filebrowser.py プロジェクト: GregoryWest501/Peppy
    def __init__(self, util, get_current_playlist, playlist_provider,
                 listeners, voice_assistant):
        """ Initializer
        
        :param util: utility object
        :param listeners: file browser listeners
        """
        self.util = util
        self.config = util.config
        self.factory = Factory(util)
        self.bounding_box = util.screen_rect
        layout = BorderLayout(self.bounding_box)
        layout.set_percent_constraints(PERCENT_TOP_HEIGHT,
                                       PERCENT_BOTTOM_HEIGHT, 0, 0)
        Screen.__init__(self, util, "", PERCENT_TOP_HEIGHT, voice_assistant,
                        "file_browser_screen_title", True, layout.TOP)
        current_folder = self.util.file_util.current_folder
        d = {"current_title": current_folder}

        if self.config[FILE_PLAYBACK][
                CURRENT_FILE_PLAYBACK_MODE] == FILE_PLAYLIST:
            f = self.config[FILE_PLAYBACK][CURRENT_FOLDER]
            p = self.config[FILE_PLAYBACK][CURRENT_FILE_PLAYLIST]
            d = f + os.sep + p

        self.screen_title.set_text(d)

        rows = self.config[FILE_BROWSER_ROWS]
        columns = self.config[FILE_BROWSER_COLUMNS]
        self.filelist = None
        playback_mode = self.config[FILE_PLAYBACK][CURRENT_FILE_PLAYBACK_MODE]

        if not playback_mode:
            self.config[FILE_PLAYBACK][
                CURRENT_FILE_PLAYBACK_MODE] = playback_mode = FILE_AUDIO

        button_box = pygame.Rect(0, 0, layout.CENTER.w / columns,
                                 layout.CENTER.h / rows)
        if self.config[ALIGN_BUTTON_CONTENT_X] == 'center':
            location = TOP
        else:
            location = self.config[ALIGN_BUTTON_CONTENT_X]
        icon_box = self.factory.get_icon_bounding_box(button_box, location,
                                                      self.config[IMAGE_AREA],
                                                      self.config[IMAGE_SIZE],
                                                      self.config[PADDING])
        icon_box_without_label = self.factory.get_icon_bounding_box(
            button_box, location, 100, 100, self.config[PADDING], False)

        if playback_mode == FILE_AUDIO or playback_mode == FILE_RECURSIVE:
            folder_content = self.util.load_folder_content(
                current_folder, rows, columns, icon_box,
                icon_box_without_label)
            self.filelist = Page(folder_content, rows, columns)
        elif playback_mode == FILE_PLAYLIST:
            s = State()
            s.folder = self.config[FILE_PLAYBACK][CURRENT_FOLDER]
            s.music_folder = self.config[AUDIO][MUSIC_FOLDER]
            s.file_name = self.config[FILE_PLAYBACK][CURRENT_FILE_PLAYLIST]

            pl = self.get_filelist_items(get_current_playlist)
            if len(pl) == 0:
                pl = self.util.load_playlist(s, playlist_provider, rows,
                                             columns, (icon_box.w, icon_box.h))
            else:
                pl = self.util.load_playlist_content(pl, rows, columns,
                                                     (icon_box.w, icon_box.h))
            self.filelist = Page(pl, rows, columns)

        self.file_menu = FileMenu(self.filelist, util, playlist_provider,
                                  layout.CENTER, location, icon_box,
                                  icon_box_without_label)
        self.file_menu.parent_screen = self
        self.file_menu.link_borders = self.link_borders

        self.file_menu.add_change_folder_listener(self.screen_title.set_text)
        self.file_menu.add_play_file_listener(listeners[KEY_PLAY_FILE])

        listeners[GO_LEFT_PAGE] = self.file_menu.page_down
        listeners[GO_RIGHT_PAGE] = self.file_menu.page_up
        listeners[GO_USER_HOME] = self.file_menu.switch_to_user_home
        listeners[GO_ROOT] = self.file_menu.switch_to_root
        listeners[GO_TO_PARENT] = self.file_menu.switch_to_parent_folder

        self.navigator = FileNavigator(util, layout.BOTTOM, listeners)
        left = str(self.filelist.get_left_items_number())
        right = str(self.filelist.get_right_items_number())
        left_button = self.navigator.get_button_by_name(KEY_PAGE_DOWN)
        right_button = self.navigator.get_button_by_name(KEY_PAGE_UP)
        self.back_button = self.navigator.get_button_by_name(KEY_BACK)
        left_button.change_label(left)
        right_button.change_label(right)

        self.file_menu.add_left_number_listener(left_button.change_label)
        self.file_menu.add_right_number_listener(right_button.change_label)
        self.add_navigator(self.navigator)
        self.page_turned = False
        self.animated_title = True

        self.file_menu.navigator = self.navigator
        self.add_menu(self.file_menu)
        self.link_borders()
        self.back_button.set_selected(True)
コード例 #19
0
 def __init__(self, util, get_current_playlist, playlist_provider, listeners, voice_assistant):
     """ Initializer
     
     :param util: utility object
     :param listeners: file browser listeners
     """
     self.util = util
     self.config = util.config
     self.factory = Factory(util)
     self.bounding_box = util.screen_rect
     layout = BorderLayout(self.bounding_box)
     layout.set_percent_constraints(PERCENT_TOP_HEIGHT, PERCENT_BOTTOM_HEIGHT, 0, 0)
     Screen.__init__(self, util, "", PERCENT_TOP_HEIGHT, voice_assistant, "file_browser_screen_title", True, layout.TOP)
     color_dark_light = self.config[COLORS][COLOR_DARK_LIGHT]
     current_folder = self.util.file_util.current_folder  
     d = {"current_title" : current_folder}
     
     if self.config[FILE_PLAYBACK][CURRENT_FILE_PLAYBACK_MODE] == FILE_PLAYLIST:
         f = self.config[FILE_PLAYBACK][CURRENT_FOLDER]
         p = self.config[FILE_PLAYBACK][CURRENT_FILE_PLAYLIST]
         d = f + os.sep + p
     
     self.screen_title.set_text(d)
     
     rows = 3
     columns = 3
     self.filelist = None
     playback_mode = self.config[FILE_PLAYBACK][CURRENT_FILE_PLAYBACK_MODE]
     
     if not playback_mode:
         self.config[FILE_PLAYBACK][CURRENT_FILE_PLAYBACK_MODE] = playback_mode = FILE_AUDIO
     
     if playback_mode == FILE_AUDIO or playback_mode == FILE_RECURSIVE:
         folder_content = self.util.load_folder_content(current_folder, rows, columns, layout.CENTER)  
         self.filelist = Page(folder_content, rows, columns)
     elif playback_mode == FILE_PLAYLIST:
         s = State()
         s.folder = self.config[FILE_PLAYBACK][CURRENT_FOLDER]
         s.music_folder = self.config[AUDIO][MUSIC_FOLDER]
         s.file_name = self.config[FILE_PLAYBACK][CURRENT_FILE_PLAYLIST]
         
         pl = self.get_filelist_items(get_current_playlist)
         if len(pl) == 0:            
             pl = self.util.load_playlist(s, playlist_provider, rows, columns)
         else:
             pl = self.util.load_playlist_content(pl, rows, columns)
         self.filelist = Page(pl, rows, columns)
     
     self.file_menu = FileMenu(self.filelist, util, playlist_provider, (0, 0, 0), layout.CENTER)
     
     Container.add_component(self, self.file_menu)
     self.file_menu.add_change_folder_listener(self.screen_title.set_text)
     self.file_menu.add_play_file_listener(listeners[KEY_PLAY_FILE])
     
     listeners[GO_LEFT_PAGE] = self.file_menu.page_down
     listeners[GO_RIGHT_PAGE] = self.file_menu.page_up
     listeners[GO_USER_HOME] = self.file_menu.switch_to_user_home
     listeners[GO_ROOT] = self.file_menu.switch_to_root
     listeners[GO_TO_PARENT] = self.file_menu.switch_to_parent_folder
     
     self.navigator = Navigator(util, layout.BOTTOM, listeners, color_dark_light)
     left = str(self.filelist.get_left_items_number())
     right = str(self.filelist.get_right_items_number())
     self.navigator.left_button.change_label(left)
     self.navigator.right_button.change_label(right)
     
     self.file_menu.add_left_number_listener(self.navigator.left_button.change_label)
     self.file_menu.add_right_number_listener(self.navigator.right_button.change_label)
     Container.add_component(self, self.navigator)
     self.page_turned = False