63 lines
1.7 KiB
Python
63 lines
1.7 KiB
Python
import asyncio
|
|
import time
|
|
import board
|
|
import adafruit_ssd1306
|
|
|
|
from mopidy_async_client import MopidyClient
|
|
from datetime import datetime
|
|
|
|
|
|
async def current_track():
|
|
mopidy = await MopidyClient().connect()
|
|
current_track_data = await mopidy.playback.get_current_track()
|
|
time_position = datetime.fromtimestamp(
|
|
await mopidy.playback.get_time_position() / 1000.0
|
|
).strftime("%M:%S")
|
|
|
|
if "ytmusic" in current_track_data["uri"]:
|
|
totalTime = current_track_data["length"]
|
|
track_total_length = datetime.fromtimestamp(totalTime / 1000.0).strftime(
|
|
"%M:%S"
|
|
)
|
|
current_data = {
|
|
"Artist": current_track_data["artists"][0]["name"],
|
|
"Album": current_track_data["album"]["name"],
|
|
"Song": current_track_data["name"],
|
|
"TrackTime": time_position + "/" + track_total_length,
|
|
}
|
|
else:
|
|
stream_title = await mopidy.playback.get_stream_title()
|
|
artist_and_song = stream_title.split(" - ")
|
|
current_data = {
|
|
"Artist": current_track_data["name"],
|
|
"Album": artist_and_song[0],
|
|
"Song": artist_and_song[1],
|
|
"TrackTime": "",
|
|
}
|
|
await mopidy.disconnect()
|
|
oled.text(current_data["Artist"], 0, 16, 1)
|
|
oled.text(current_data["Album"], 0, 26, 1)
|
|
oled.text(current_data["Song"], 0, 36, 1)
|
|
oled.text(current_data["TrackTime"], 0, 46, 1)
|
|
return
|
|
|
|
|
|
WIDTH = 128
|
|
HEIGHT = 64
|
|
|
|
# Use for I2C.
|
|
i2c = board.I2C()
|
|
oled = adafruit_ssd1306.SSD1306_I2C(WIDTH, HEIGHT, i2c, addr=0x3C)
|
|
|
|
|
|
async def main():
|
|
while True:
|
|
oled.fill(0)
|
|
oled.text("Floppy Player", 26, 0, 1)
|
|
await current_track()
|
|
oled.show()
|
|
time.sleep(10)
|
|
|
|
|
|
asyncio.run(main())
|