Skip to content

Commit 6771653

Browse files
committed
added debug logs + formatted
1 parent d74ea8e commit 6771653

6 files changed

Lines changed: 68 additions & 41 deletions

File tree

yami/control.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,28 +76,28 @@ def __init__(
7676
self.prev_button.grid(row=0, column=2, sticky="nsew", padx=5, pady=10)
7777
self.play_button.grid(row=0, column=3, sticky="nsew", padx=5, pady=10)
7878
self.next_button.grid(row=0, column=4, sticky="nsew", padx=5, pady=10)
79+
logging.debug("initialized control bar")
7980

8081
def play_pause(self, event=None):
8182
"""Plays Or Pauses The Music"""
8283

8384
if self.parent.music_list_player.get_state() == vlc.State.Playing:
8485
self.parent.music_list_player.pause()
85-
logging.info("paused")
86+
logging.debug("paused")
8687
else:
8788
self.parent.music_list_player.play()
88-
89-
logging.info("resumed")
89+
logging.debug("resumed")
9090
self.update_play_button()
9191

9292
def update_play_button(self):
9393
"""Switches Play/Pause Icon"""
9494

9595
if self.parent.music_list_player.get_state() == vlc.State.Playing:
9696
self.play_button.configure(image=self.pause_icon)
97+
logging.debug("updated play button to pause")
9798
else:
9899
self.play_button.configure(image=self.play_icon)
99-
100-
100+
logging.debug("updated play button to play")
101101

102102
# TRUNCATOR
103103
def set_music_title(self, title, artist):
@@ -107,6 +107,7 @@ def set_music_title(self, title, artist):
107107
truncated_title = title[: self.title_max_chars - 3] + "..."
108108
else:
109109
truncated_title = title
110+
logging.debug("truncated title been set to %s", title)
110111
self.music_title_label.configure(
111112
text=truncated_title + " - " + artist.replace("/", ",")
112113
)

yami/cover_art.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""Frame For Cover Art"""
22

33
import customtkinter as ctk
4+
import logging
45

56

67
class CoverArtFrame(ctk.CTkFrame):
@@ -22,3 +23,4 @@ def __init__(self, parent):
2223
self.cover_art_label.grid(
2324
sticky="nsew",
2425
)
26+
logging.debug("initialized covert art frame")

yami/music.py

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from .control import ControlBar
2020
from .cover_art import CoverArtFrame
2121
from .progress import BottomFrame
22-
from .util import GEOMETRY, TITLE, PlayerState, EVENT_INTERVAL,make_time_string
22+
from .util import GEOMETRY, TITLE, PlayerState, EVENT_INTERVAL, make_time_string
2323

2424

2525
ctk.set_default_color_theme("yami/data/theme.json")
@@ -49,30 +49,30 @@ def __init__(self: ctk.CTk, loop=None):
4949
)
5050

5151
self.initialize_vlc()
52-
52+
5353
# TKINTER SETUP
5454
self.setup_icons()
5555
self.setup_frames()
5656
self.setup_widget_packing()
5757

5858
self.setup_keybindings()
5959

60-
6160
self.event_manager = self.music_list_player.event_manager()
62-
self.event_manager.event_attach(vlc.EventType.MediaListPlayerNextItemSet, self.change_info)
61+
self.event_manager.event_attach(
62+
vlc.EventType.MediaListPlayerNextItemSet, self.change_info
63+
)
6364
self.update_loop()
6465
self.after(EVENT_INTERVAL, self.update)
6566

6667
def update(self, event=None):
6768
if self.music_list_player.get_state() == vlc.State.Playing:
6869

69-
song_position=self.music.get_position()
70+
song_position = self.music.get_position()
7071
self.bottom_frame.progress_bar.set(song_position)
71-
72-
self.control_bar.playback_label.configure(text=make_time_string(
73-
song_position,
74-
self.music.get_length() // 1000)
75-
)
72+
73+
self.control_bar.playback_label.configure(
74+
text=make_time_string(song_position, self.music.get_length() // 1000)
75+
)
7676
self.after(EVENT_INTERVAL, self.update)
7777

7878
def load_and_play_song(self, index):
@@ -86,12 +86,10 @@ def load_and_play_song(self, index):
8686

8787
logging.info("playing %s", self.get_song_title())
8888

89-
def change_info(self,event=None):
90-
89+
def change_info(self, event=None):
90+
9191
self.cover_art_frame.cover_art_label.configure(
92-
require_redraw=True,
93-
image=self.get_album_cover(),
94-
fg_color="#121212"
92+
require_redraw=True, image=self.get_album_cover(), fg_color="#121212"
9593
)
9694
self.control_bar.set_music_title( # truncates longer titles
9795
self.get_song_title(),
@@ -105,7 +103,7 @@ def play_next_song(self, _event=None):
105103
# UPDATE SELECTION
106104
self.playlist_frame.song_list.selection_clear(0, tk.END)
107105
self.playlist_frame.song_list.select_set(self.playlist_index)
108-
106+
109107
def play_previous(self, event=None):
110108
self.music_list_player.previous()
111109
self.change_info()
@@ -114,10 +112,12 @@ def play_previous(self, event=None):
114112
self.playlist_frame.song_list.select_set(self.playlist_index)
115113

116114
def get_song_length(self) -> int:
115+
logging.debug("got song length")
117116
return self.music.get_length()
118117

119118
def get_song_title(self) -> str:
120119
media = self.music_list_player.get_media_player().get_media()
120+
logging.debug("got song title")
121121
try:
122122
if media.is_parsed():
123123
return media.get_meta(0)
@@ -132,6 +132,7 @@ def get_album_cover(self) -> ctk.CTkImage | None:
132132
try:
133133
media = self.music_list_player.get_media_player().get_media()
134134
media.parse()
135+
logging.debug("got album cover")
135136
return ctk.CTkImage(
136137
self.round_corners(
137138
Image.open(
@@ -148,6 +149,7 @@ def get_album_cover(self) -> ctk.CTkImage | None:
148149

149150
def get_song_artist(self) -> str:
150151
media = self.music_list_player.get_media_player().get_media()
152+
logging.debug("got song artist")
151153
try:
152154
if media.is_parsed():
153155
return media.get_meta(1)
@@ -162,26 +164,28 @@ def get_song_position(self) -> float:
162164
return self.music.get_position()
163165

164166
def round_corners(self, image, radius) -> Image.Image:
165-
'''Rounds Album Cover'''
167+
"""Rounds Album Cover"""
166168
rounded_mask = Image.new("L", image.size, 0)
167169
draw = ImageDraw.Draw(rounded_mask)
168170
draw.rounded_rectangle((0, 0) + image.size, radius, fill=255)
169171

170172
rounded_image = Image.new("RGBA", image.size)
171173
rounded_image.paste(image, (0, 0), mask=rounded_mask)
174+
logging.debug("rounded album cover")
172175

173176
return rounded_image
174177

175178
def initialize_vlc(self):
176-
'''initializes and creates
177-
:param `self.music_list_player`: vlc.MediaListPlayer
178-
:param `self.music`: vlc.MediaPlayer
179-
:param `self.vlc_instance`: vlc.Instance
180-
:returns: some vlc attributes
181-
'''
179+
"""initializes and creates
180+
:param `self.music_list_player`: vlc.MediaListPlayer
181+
:param `self.music`: vlc.MediaPlayer
182+
:param `self.vlc_instance`: vlc.Instance
183+
:returns: some vlc attributes
184+
"""
182185
self.music_list_player: vlc.MediaListPlayer = vlc.MediaListPlayer()
183186
self.music: vlc.MediaPlayer = self.music_list_player.get_media_player()
184187
self.vlc_instance: vlc.Instance = self.music_list_player.get_instance()
188+
logging.debug("initialized vlc")
185189

186190
def setup_icons(self):
187191
self.play_icon = ctk.CTkImage(Image.open("yami/data/play_arrow.png"))
@@ -190,7 +194,7 @@ def setup_icons(self):
190194
self.next_icon = ctk.CTkImage(Image.open("yami/data/skip_next.png"))
191195
self.folder_icon = ctk.CTkImage(Image.open("yami/data/folder.png"))
192196
self.music_icon = ctk.CTkImage(Image.open("yami/data/music.png"))
193-
logging.info("icons setup")
197+
logging.debug("icons setup")
194198

195199
def setup_frames(self):
196200
self.topbar = TopBar(self)
@@ -200,23 +204,26 @@ def setup_frames(self):
200204
self.cover_art_frame = CoverArtFrame(self)
201205

202206
def setup_keybindings(self):
203-
'''
207+
"""
204208
:param `<F9>`: play next
205209
:param `<F8>`: play previous
206210
:param `<Space>`: play or pause
207-
'''
211+
"""
208212

209213
self.bind("<F10>", self.play_next_song)
210214
self.bind("<F8>", self.play_previous)
211215
self.bind("<F9>", self.control_bar.play_pause)
212216
self.bind("<space>", self.control_bar.play_pause)
217+
self.bind("<Control-o>", self.topbar.choose_folder)
218+
logging.debug("setup keybinds")
213219

214220
def setup_widget_packing(self):
215221
self.topbar.pack(side=tk.TOP, fill=tk.X)
216222
self.bottom_frame.pack(side=tk.BOTTOM, fill=tk.X)
217223
self.control_bar.pack(side=tk.BOTTOM, fill=tk.X)
218224
self.playlist_frame.pack(side=tk.RIGHT)
219225
self.cover_art_frame.pack(side=tk.LEFT, padx=10)
226+
logging.debug("widgets packed")
220227

221228
def update_loop(self):
222229
self.loop.call_soon(self.loop.stop)

yami/playlist.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import tkinter as tk
44
import customtkinter as ctk
5+
import logging
56

67

78
class PlaylistFrame(ctk.CTkFrame):
@@ -34,11 +35,13 @@ def __init__(self, parent):
3435
self.song_list.config(yscrollcommand=self.scrollbar.set)
3536
self.song_list.bind("<Double-1>", self.play)
3637
self.song_list.bind("<Return>", self.play)
38+
logging.debug("initialized playlist frame")
3739

3840
# SELECTION CALLBACK
3941
def play(self, event):
4042
try:
4143
index = event.widget.curselection()[0]
44+
logging.debug("selected index %s to play", index)
4245
self.parent.load_and_play_song(index)
43-
except IndexError:
44-
pass
46+
except Exception as e:
47+
logging.exception(e)

yami/topbar.py

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,13 @@ def __init__(self, parent):
5454
self.open_folder.grid(row=0, column=1, sticky="w", pady=5, padx=10)
5555
self.music_downloader.grid(row=0, column=2, sticky="w", pady=5, padx=10)
5656
self.yami.grid(row=0, column=3, sticky="w", pady=5, padx=10)
57-
58-
# BINDINGS
59-
self.parent.bind("<Control-o>", self.choose_folder)
57+
logging.debug("initialized topbar")
6058

6159
# FOR ADDING SONGS TO PLAYLIST
60+
"""TODO MAKE IT SMALLER AND SIMPLER"""
61+
6262
def choose_folder(self, _event=None):
63+
6364
self.parent.current_folder = filedialog.askdirectory(
6465
title="Select Music Folder"
6566
)
@@ -68,12 +69,11 @@ def choose_folder(self, _event=None):
6869

6970
# CLEAR PLAYLIST AND LISTBOX
7071
self.parent.playlist_frame.song_list.delete(0, tk.END)
71-
# self.parent.playlist.clear()
7272
self.parent.media_list: vlc.MediaList = (
7373
self.parent.vlc_instance.media_list_new()
7474
)
75+
7576
self.parent.music_list_player.set_media_list(self.parent.media_list)
76-
vlc.MediaList.add_media
7777

7878
# FILTER MUSIC FILES
7979
for root, _, files in os.walk(self.parent.current_folder):
@@ -82,9 +82,10 @@ def choose_folder(self, _event=None):
8282
for file in music_files:
8383
file_path = os.path.join(root, file)
8484
media = self.parent.vlc_instance.media_new(file_path)
85+
artistname, title = self.get_name_and_title_of_media(media)
8586
self.parent.media_list.add_media(media)
8687
self.parent.playlist_frame.song_list.insert(
87-
"end", f"• {Path(file).stem}"
88+
"end", f"• {title} - {artistname}"
8889
)
8990
os.chdir(self.parent.current_folder)
9091

@@ -97,6 +98,20 @@ def prompt_download(self):
9798
if song_url:
9899
self.parent.loop.create_task(self.download_song(song_url))
99100

101+
def get_name_and_title_of_media(self, media):
102+
"""gets song artist name and title of song"""
103+
104+
logging.debug("got song artist name + title of song for playlist")
105+
try:
106+
if media.is_parsed():
107+
return media.get_meta(1), media.get_meta(0)
108+
else:
109+
media.parse()
110+
return media.get_meta(1), media.get_meta(0)
111+
except Exception as e:
112+
logging.exception(e)
113+
return ""
114+
100115
async def download_song(self, song_url):
101116
try:
102117
logging.info("searching %s", song_url)

yami/util.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class PlayerState(Enum):
1313
STOPPED = 3
1414

1515

16-
def make_time_string(song_position,song_length):
16+
def make_time_string(song_position, song_length):
1717
curtime = song_position * song_length
1818

1919
cur_minutes = int(curtime // 60)
@@ -23,4 +23,3 @@ def make_time_string(song_position,song_length):
2323
song_sec = int(song_length % 60)
2424

2525
return f"{cur_minutes:02d}:{cur_seconds:02d} / {song_min:02d}:{song_sec:02d}"
26-

0 commit comments

Comments
 (0)