feat(local): 优化本地歌曲搜索和播放功能
- 修复删除歌曲时未删除对应歌词文件的问题 - 优化本地歌曲搜索功能,支持模糊搜索 - 添加双击播放歌曲的功能 - 重构部分代码以提高可读性和可维护性
This commit is contained in:
43
NFLmusic.py
43
NFLmusic.py
@ -1,4 +1,5 @@
|
||||
import time
|
||||
from functools import total_ordering
|
||||
from tkinter import *
|
||||
import threading
|
||||
import pygame
|
||||
@ -146,9 +147,15 @@ def download_music(song_name, choose):
|
||||
resp.close()
|
||||
id = resp.json()["data"]["rid"].replace("MUSIC_", "")
|
||||
try:
|
||||
resp_lrc = requests.get(f"https://api.jkyai.top/API/yyjhss.php?id={id}&type=kw")
|
||||
resp_lrc = requests.get(f"http://m.kuwo.cn/newh5/singles/songinfoandlrc?musicId={id}")
|
||||
resp_lrc.close()
|
||||
lrc = resp_lrc.json()["data"]["lrc"]
|
||||
lrc = ""
|
||||
lrclist = resp_lrc.json()["data"]["lrclist"]
|
||||
for i in lrclist:
|
||||
total_time = i["time"]
|
||||
min = total_time // 60
|
||||
sec = total_time % 60
|
||||
lrc += f'[{min}:{sec}]{i["lineLyric"]}\n'
|
||||
except Exception as e:
|
||||
print(f"download_kw_lrc: {e}")
|
||||
lrc = ""
|
||||
@ -160,9 +167,9 @@ def download_music(song_name, choose):
|
||||
resp.close()
|
||||
id = resp.json()["data"]["id"]
|
||||
try:
|
||||
resp_lrc = requests.get(f"https://api.jkyai.top/API/yyjhss.php?id={id}&type=wy")
|
||||
resp_lrc = requests.get(f"https://music.163.com/api/song/lyric?id={id}&lv=-1&kv=-1&tv=-1")
|
||||
resp_lrc.close()
|
||||
lrc = resp_lrc.json()["data"]["lrc"]
|
||||
lrc = resp_lrc.json()["lrc"]["lyric"]
|
||||
except Exception as e:
|
||||
print(f"download_wyy_lrc: {e}")
|
||||
lrc = ""
|
||||
@ -329,12 +336,17 @@ def refresh():
|
||||
|
||||
|
||||
def delete():
|
||||
global music_dir
|
||||
global listbox1
|
||||
global music_dir, listbox1, music_dir_without_endswith, filtered_list
|
||||
try:
|
||||
if tkinter.messagebox.askokcancel(lang.get(la, "mbox.title.delete"), lang.get(la, "mbox.text.delete", )):
|
||||
abs_path = path + "/" + music_dir[listbox1.curselection()[0]]
|
||||
abs_path_lrc = path + "/" + music_dir_without_endswith[listbox1.curselection()[0]] + ".lrc"
|
||||
music_dir_without_endswith.remove(filtered_list[listbox1.curselection()[0] - 1])
|
||||
os.remove(abs_path)
|
||||
try:
|
||||
os.remove(abs_path_lrc)
|
||||
except:
|
||||
pass
|
||||
music_dir.remove(music_dir[listbox1.curselection()[0]])
|
||||
listbox1.delete(listbox1.curselection()[0])
|
||||
except IndexError:
|
||||
@ -363,13 +375,21 @@ def pausesound():
|
||||
|
||||
|
||||
def playsound(*event):
|
||||
global music_playing, music_file_name, music_file_without_endswith, lyric, song_list, song_list_limit
|
||||
global music_playing, music_file_name, music_file_without_endswith, lyric, song_list, song_list_limit, music_dir
|
||||
if not music_player.get_finished():
|
||||
music_player.stop_music()
|
||||
lyric = ""
|
||||
music_dir_without_endswith = [os.path.splitext(file)[0] for file in os.listdir(path) if
|
||||
file.endswith(('.mp3', '.flac', '.ogg', '.m4a'))]
|
||||
music_dir = [file for file in os.listdir(path) if file.endswith(('.mp3', '.flac', '.ogg', '.m4a'))]
|
||||
if var7.get() not in ["", lang.get(la, "ui.download.entry.song_name")]:
|
||||
music_dir_filtered = []
|
||||
for file in music_dir:
|
||||
if search_words in os.path.splitext(file)[0]:
|
||||
music_dir_filtered.append(file)
|
||||
music_dir = music_dir_filtered
|
||||
music_dir_without_endswith = [os.path.splitext(file)[0] for file in music_dir if
|
||||
file.endswith(('.mp3', '.flac', '.ogg', '.m4a'))]
|
||||
abs_path = path + "/" + music_dir[listbox1.curselection()[0]]
|
||||
if abs_path not in song_list:
|
||||
song_list.append(abs_path)
|
||||
@ -1187,7 +1207,7 @@ def download_version():
|
||||
|
||||
|
||||
def search_local_song():
|
||||
global music_dir_without_endswith, search_words
|
||||
global search_words, filtered_list
|
||||
while True:
|
||||
if focused:
|
||||
former_words = var7.get()
|
||||
@ -1196,6 +1216,10 @@ def search_local_song():
|
||||
if former_words != current_words and entry1.get() != lang.get(la, "ui.download.entry.song_name"):
|
||||
search_words = current_words
|
||||
filtered_list = [song for song in music_dir_without_endswith if search_words in song]
|
||||
if not filtered_list:
|
||||
listbox1.unbind("<Double-1>")
|
||||
else:
|
||||
listbox1.bind("<Double-1>", playsound)
|
||||
print(filtered_list)
|
||||
listbox1.delete(0, END)
|
||||
for song in filtered_list:
|
||||
@ -1204,7 +1228,7 @@ def search_local_song():
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
version = "4.1.4"
|
||||
version = "4.1.5"
|
||||
poem = ""
|
||||
appdata = os.getenv("APPDATA")
|
||||
make_resource()
|
||||
@ -1396,6 +1420,7 @@ scrollbar1.config(command=listbox1.yview)
|
||||
scrollbar1.place(x=227, y=0, height=292)
|
||||
|
||||
refresh()
|
||||
filtered_list = music_dir_without_endswith
|
||||
|
||||
labelframe_download = ttk.Labelframe(homepage_frame, text=lang.get(la, "frame.download"), height=354, width=510)
|
||||
labelframe_download.place(x=280, y=20)
|
||||
|
Reference in New Issue
Block a user