예제 #1
0
파일: lyrics.py 프로젝트: valrus/alfred-mpd
def main():
    with open_mpd_client() as client:
        music_dir = Path(client.config())
        data = client.currentsong()

    audiofile = TaggedAudioFile(music_dir / Path(data['file']))
    tag_lyrics = audiofile.lyrics

    if tag_lyrics:
        print(alfred_json('\n'.join([frame for frame in tag_lyrics])))

    elif os.environ.get('GENIUS_ACCESS_TOKEN', '').strip():
        genius = lyricsgenius.Genius(os.environ['GENIUS_ACCESS_TOKEN'],
                                     verbose=False)
        song = genius.search_song(data['title'], data['albumartist']
                                  or data['artist'])
        if song:
            audiofile.lyrics = song.lyrics
            audiofile.save()
            print(alfred_json(song.lyrics, variables={'error': False}))
        else:
            print(
                alfred_json(f'''Couldn't find lyrics for
                    "{data['title']}" by {data['albumartist']}''',
                            variables={'error': True}), )
    else:
        print(
            alfred_json(f"No lyrics in song file or Genius access token",
                        variables={'error': True}), )
예제 #2
0
def main():
    with open_mpd_client() as client:
        print(json.dumps({
            'items': [
                make_artist_item(item['albumartist'])
                for item in client.list('albumartist')
            ]
        }))
예제 #3
0
def albums_shorter_than(seconds_limit):
    with open_mpd_client() as client:
        album_counts = client.count('group', 'album')

        return islice(
            sorted((AlbumInfo(album_name, album_playtime, client)
                    for album_name, album_playtime in zip(
                        album_counts['album'], album_counts['playtime'])
                    if int(album_playtime) < seconds_limit),
                   key=lambda album_info: seconds_limit - album_info.
                   length_in_seconds), 50)
예제 #4
0
파일: toggle.py 프로젝트: valrus/alfred-mpd
def main():
    with open_mpd_client() as client:
        state = play_state(client)
        if state == 'play':
            client.pause()
            print(alfred_json('pause'))
        elif state == 'pause':
            client.play()
            print(alfred_json('play'))
        else:
            print(alfred_json('stop'))
예제 #5
0
파일: status.py 프로젝트: valrus/alfred-mpd
def main():
    # volume, album, songid, repeat, consume, song, track, random, pos,
    # elapsed, playlistlength, date, single, albumartist, file, duration,
    # bitrate, nextsongid, nextsong, mixrampdb, playlist, artist, title, id,
    # state, disc, time, lastmodified, audio, genre
    with open_mpd_client() as client:
        data = client.currentsong()
        data.update(client.status())
    data.update({
        'duration':
        format_time(data['duration']) if data.get('duration') else 'N/A',
        'elapsed':
        format_time(data['elapsed']) if data.get('elapsed') else 'N/A',
        'lastmodified':
        data.get('last-modified', 'N/A'),
    })
    print(alfred_json(data.get('title', ''), variables=data))
예제 #6
0
파일: query.py 프로젝트: valrus/alfred-mpd
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('query', nargs='+')
    args = parser.parse_args()

    query_args = args.query

    with open_mpd_client() as client:
        album = os.environ.get('ALFRED_MPD_ALBUM')
        if album:
            query_args = ['album', album]

        artist = os.environ.get('ALFRED_MPD_ARTIST')
        if artist:
            query_args += ['albumartist', artist]

        print(
            json.dumps({
                'items': [
                    make_song_item(item['title'], int(item['time']))
                    for item in client.find(*query_args)
                ]
            }))
예제 #7
0
파일: play.py 프로젝트: valrus/alfred-mpd
def main():
    with open_mpd_client() as client:
        action = 'Queued'

        # state is play, pause or stop
        state = play_state(client)
        if (state == 'pause'
                or state == 'stop') and not os.environ.get('ALFRED_MPD_QUEUE'):
            action = 'Playing'
            client.clear()

        variables = {}
        album = os.environ['ALFRED_MPD_ALBUM']
        query_args = ['album', album]

        artist = os.environ.get('ALFRED_MPD_ARTIST')
        if artist:
            query_args += ['albumartist', artist]
            variables['artist'] = artist

        track = os.environ.get('ALFRED_MPD_TRACK')
        if track:
            query_args += ['title', track]
            variables['track'] = track

        client.findadd(*[normalize('NFC', arg) for arg in query_args])

        if os.environ.get('ALFRED_MPD_SHUFFLE'):
            client.shuffle()

        if not os.environ.get('ALFRED_MPD_QUEUE'):
            client.play()

        print(
            alfred_json(' '.join([action, track or album]),
                        variables=variables))
예제 #8
0
파일: prev.py 프로젝트: valrus/alfred-mpd
def main():
    with open_mpd_client() as client:
        client.previous()
예제 #9
0
def main():
    with open_mpd_client() as client:
        client.next()
예제 #10
0
파일: album.py 프로젝트: valrus/alfred-mpd
def main():
    with open_mpd_client() as client:
        print(json.dumps({'items': all_albums(client)}))