动态读取mpd的歌曲目录设置
							parent
							
								
									5312642c3e
								
							
						
					
					
						commit
						b27c816047
					
				
							
								
								
									
										18
									
								
								main.py
								
								
								
								
							
							
						
						
									
										18
									
								
								main.py
								
								
								
								
							|  | @ -1,6 +1,6 @@ | ||||||
| #!/usr/bin/env python3 | #!/usr/bin/env python3 | ||||||
| 
 | 
 | ||||||
| import gi, sys, os, threading, time | import gi, sys, os, threading, time, re | ||||||
| # import dbus | # import dbus | ||||||
| # import dbus.service, dbus.mainloop.glib | # import dbus.service, dbus.mainloop.glib | ||||||
| from pprint import pprint as print | from pprint import pprint as print | ||||||
|  | @ -16,6 +16,7 @@ from about_app import AboutWindow | ||||||
| from mpd.base import MPDClient | from mpd.base import MPDClient | ||||||
| 
 | 
 | ||||||
| app_id = 'fun.wkit.sonist' | app_id = 'fun.wkit.sonist' | ||||||
|  | home_dir = os.getenv('HOME') | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def run_async(func): | def run_async(func): | ||||||
|  | @ -27,6 +28,17 @@ def run_async(func): | ||||||
|   return wrapper |   return wrapper | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | def get_music_dir(): | ||||||
|  |   with open(f'{home_dir}/.mpd/mpd.conf', 'r') as f: | ||||||
|  |     data = f.read() | ||||||
|  | 
 | ||||||
|  |   matches = re.search('music_directory\s*"(.*)"', data).groups() | ||||||
|  |   if len(matches) > 0: | ||||||
|  |     return matches[0] | ||||||
|  |    | ||||||
|  |   return '/data/music' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| class Application(Gtk.Application): | class Application(Gtk.Application): | ||||||
| 
 | 
 | ||||||
|   __gsignals__ = { |   __gsignals__ = { | ||||||
|  | @ -44,6 +56,8 @@ class Application(Gtk.Application): | ||||||
| 
 | 
 | ||||||
|     self.mpd = MPDClient() |     self.mpd = MPDClient() | ||||||
| 
 | 
 | ||||||
|  |     self.music_dir = get_music_dir() | ||||||
|  | 
 | ||||||
|     self.connect('window-removed', self.on_window_removed) |     self.connect('window-removed', self.on_window_removed) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -97,7 +111,7 @@ class Application(Gtk.Application): | ||||||
|     self.about = AboutWindow() |     self.about = AboutWindow() | ||||||
|     self.add_window(self.window) |     self.add_window(self.window) | ||||||
|     self.window.show_all() |     self.window.show_all() | ||||||
|     self.about.show_all() |     # self.about.show_all() | ||||||
| 
 | 
 | ||||||
|     self.ping() |     self.ping() | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -35,6 +35,8 @@ class ImageButton(Gtk.Button): | ||||||
|       }} |       }} | ||||||
|       #ImageButton:hover {{ |       #ImageButton:hover {{ | ||||||
|         background-color: rgba(255,255,255,.1); |         background-color: rgba(255,255,255,.1); | ||||||
|  |         outline: transparent; | ||||||
|  |         box-shadow:none; | ||||||
|       }} |       }} | ||||||
|     """ |     """ | ||||||
|     css_provider.load_from_data(style.encode('UTF-8')) |     css_provider.load_from_data(style.encode('UTF-8')) | ||||||
|  |  | ||||||
|  | @ -32,8 +32,10 @@ class Timebar(Gtk.Fixed): | ||||||
|     self.curr = Gtk.Label() |     self.curr = Gtk.Label() | ||||||
|     self.duration = Gtk.Label() |     self.duration = Gtk.Label() | ||||||
| 
 | 
 | ||||||
|  |     self.curr.set_name('text') | ||||||
|     self.duration.set_justify(Gtk.Justification.RIGHT) |     self.duration.set_justify(Gtk.Justification.RIGHT) | ||||||
|     self.duration.set_xalign(1) |     self.duration.set_xalign(1) | ||||||
|  |     self.duration.set_name('text') | ||||||
| 
 | 
 | ||||||
|     self.slider.connect('change-value', self.on_timeupdate) |     self.slider.connect('change-value', self.on_timeupdate) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										46
									
								
								window.py
								
								
								
								
							
							
						
						
									
										46
									
								
								window.py
								
								
								
								
							|  | @ -80,6 +80,7 @@ class SonistWindow(Gtk.Window): | ||||||
| 
 | 
 | ||||||
|     # self.title_box = TextBox(256, 20) |     # self.title_box = TextBox(256, 20) | ||||||
|     self.title_box = Gtk.Label() |     self.title_box = Gtk.Label() | ||||||
|  |     self.title_box.set_name('text') | ||||||
|     self.title_box.set_text('mpd loading...') |     self.title_box.set_text('mpd loading...') | ||||||
| 
 | 
 | ||||||
|     layout.put(self.title_box, 27, 244) |     layout.put(self.title_box, 27, 244) | ||||||
|  | @ -129,6 +130,9 @@ class SonistWindow(Gtk.Window): | ||||||
|       background-size: 100% 100%; |       background-size: 100% 100%; | ||||||
|       background-position: center; |       background-position: center; | ||||||
|     }} |     }} | ||||||
|  |     #text {{ | ||||||
|  |       color: #f2f5fc; | ||||||
|  |     }} | ||||||
|     """ |     """ | ||||||
|     # 加载CSS样式 |     # 加载CSS样式 | ||||||
|     css_provider = Gtk.CssProvider() |     css_provider = Gtk.CssProvider() | ||||||
|  | @ -240,33 +244,33 @@ class SonistWindow(Gtk.Window): | ||||||
|       elif self.stat.get('random') == '1': |       elif self.stat.get('random') == '1': | ||||||
|         self.ctrl_box.toggle_mode_btn(mode = 'random') |         self.ctrl_box.toggle_mode_btn(mode = 'random') | ||||||
| 
 | 
 | ||||||
|     |  | ||||||
|     # 更新歌曲信息 |  | ||||||
|     self.title_box.set_text("%s - %s" % (song.get('artist'), song.get('title'))) |  | ||||||
|      |      | ||||||
|     self.update_playtime() |     if played != 'stop': | ||||||
|  |       # 更新歌曲信息 | ||||||
|  |       self.title_box.set_text("%s - %s" % (song.get('artist'), song.get('title'))) | ||||||
|  |       self.update_playtime() | ||||||
| 
 | 
 | ||||||
|     filepath = f"./album/{song['title']}.png" |       filepath = f"./album/{song['title']}.png" | ||||||
|     songpath = f"/data/music/{song['file']}" |       songpath = f"{self.app.music_dir}/{song['file']}" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     if os.path.isfile(filepath): |       if os.path.isfile(filepath): | ||||||
|       self.update_album(filepath) |         self.update_album(filepath) | ||||||
|     else: |       else: | ||||||
|    |      | ||||||
|       id3 = mutagen.File(songpath) |         id3 = mutagen.File(songpath) | ||||||
| 
 | 
 | ||||||
|       try: |         try: | ||||||
|         if id3.tags.get('APIC:'): |           if id3.tags.get('APIC:'): | ||||||
|           pic = id3.tags['APIC:'] |             pic = id3.tags['APIC:'] | ||||||
|         elif len(id3.pictures) > 0: |           elif len(id3.pictures) > 0: | ||||||
|           pic = id3.pictures[0] |             pic = id3.pictures[0] | ||||||
| 
 | 
 | ||||||
|         if pic is not None: |           if pic is not None: | ||||||
|           album = pic_to_pixbuf(pic) |             album = pic_to_pixbuf(pic) | ||||||
|           self.update_album(album) |             self.update_album(album) | ||||||
|       except: |         except: | ||||||
|         pass |           pass | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|   def update_album(self, filepath): |   def update_album(self, filepath): | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue