mytunes-pro 2.0.6__py3-none-any.whl → 2.0.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mytunes/app.py +28 -1
- {mytunes_pro-2.0.6.dist-info → mytunes_pro-2.0.7.dist-info}/METADATA +17 -4
- mytunes_pro-2.0.7.dist-info/RECORD +8 -0
- mytunes_pro-2.0.6.dist-info/RECORD +0 -8
- {mytunes_pro-2.0.6.dist-info → mytunes_pro-2.0.7.dist-info}/WHEEL +0 -0
- {mytunes_pro-2.0.6.dist-info → mytunes_pro-2.0.7.dist-info}/entry_points.txt +0 -0
- {mytunes_pro-2.0.6.dist-info → mytunes_pro-2.0.7.dist-info}/licenses/LICENSE +0 -0
- {mytunes_pro-2.0.6.dist-info → mytunes_pro-2.0.7.dist-info}/top_level.txt +0 -0
mytunes/app.py
CHANGED
|
@@ -44,7 +44,7 @@ MPV_SOCKET = "/tmp/mpv_socket"
|
|
|
44
44
|
LOG_FILE = "/tmp/mytunes_mpv.log"
|
|
45
45
|
PID_FILE = "/tmp/mytunes_mpv.pid"
|
|
46
46
|
APP_NAME = "MyTunes Pro"
|
|
47
|
-
APP_VERSION = "2.0.
|
|
47
|
+
APP_VERSION = "2.0.7"
|
|
48
48
|
|
|
49
49
|
# === [Strings & Localization] ===
|
|
50
50
|
STRINGS = {
|
|
@@ -171,6 +171,12 @@ class DataManager:
|
|
|
171
171
|
def set_progress(self, url, time_pos):
|
|
172
172
|
if "resume" not in self.data: self.data["resume"] = {}
|
|
173
173
|
self.data["resume"][url] = time_pos
|
|
174
|
+
# Limit resume data to 500 entries (FIFO cleanup)
|
|
175
|
+
if len(self.data["resume"]) > 500:
|
|
176
|
+
# Remove oldest entries (first 100)
|
|
177
|
+
keys = list(self.data["resume"].keys())
|
|
178
|
+
for k in keys[:100]:
|
|
179
|
+
del self.data["resume"][k]
|
|
174
180
|
|
|
175
181
|
def add_history(self, item):
|
|
176
182
|
self.data['history'] = [h for h in self.data['history'] if h['url'] != item['url']]
|
|
@@ -515,6 +521,7 @@ class MyTunesApp:
|
|
|
515
521
|
self.last_save_time = time.time()
|
|
516
522
|
self.status_set_time = 0
|
|
517
523
|
self.auto_preset_name = "Pop" # Default Auto detected genre
|
|
524
|
+
self._eq_cache = {} # Cache: {url: detected_genre} to avoid re-computation
|
|
518
525
|
|
|
519
526
|
# Throttling Counters
|
|
520
527
|
self.loop_count = 0
|
|
@@ -895,6 +902,20 @@ class MyTunesApp:
|
|
|
895
902
|
Smart genre detection using weighted scoring.
|
|
896
903
|
Analyzes Title and Author for keywords.
|
|
897
904
|
"""
|
|
905
|
+
# Cache check: return cached result if available
|
|
906
|
+
if not isinstance(item, str):
|
|
907
|
+
url = item.get('url', '')
|
|
908
|
+
if url and url in self._eq_cache:
|
|
909
|
+
cached = self._eq_cache[url]
|
|
910
|
+
self.auto_preset_name = cached
|
|
911
|
+
return cached
|
|
912
|
+
# Limit cache size to 200 entries
|
|
913
|
+
if len(self._eq_cache) > 200:
|
|
914
|
+
# Remove first 50 entries
|
|
915
|
+
keys = list(self._eq_cache.keys())
|
|
916
|
+
for k in keys[:50]:
|
|
917
|
+
del self._eq_cache[k]
|
|
918
|
+
|
|
898
919
|
# Prepare texts
|
|
899
920
|
title_text = ""
|
|
900
921
|
extra_text = ""
|
|
@@ -1059,10 +1080,16 @@ class MyTunesApp:
|
|
|
1059
1080
|
|
|
1060
1081
|
if scores[best_genre] > 0:
|
|
1061
1082
|
self.auto_preset_name = best_genre
|
|
1083
|
+
# Save to cache
|
|
1084
|
+
if not isinstance(item, str) and item.get('url'):
|
|
1085
|
+
self._eq_cache[item['url']] = best_genre
|
|
1062
1086
|
return best_genre
|
|
1063
1087
|
|
|
1064
1088
|
# Default Fallback
|
|
1065
1089
|
self.auto_preset_name = "Pop"
|
|
1090
|
+
# Cache fallback too
|
|
1091
|
+
if not isinstance(item, str) and item.get('url'):
|
|
1092
|
+
self._eq_cache[item['url']] = "Pop"
|
|
1066
1093
|
return "Pop"
|
|
1067
1094
|
|
|
1068
1095
|
def play_music(self, item, interactive=True, preserve_queue=False):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mytunes-pro
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.7
|
|
4
4
|
Summary: A lightweight, keyboard-centric terminal player for streaming YouTube music.
|
|
5
5
|
Author-email: loxo <loxo5432@gmail.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/postgresql-co-kr/mytunes
|
|
@@ -18,9 +18,9 @@ Requires-Dist: yt-dlp
|
|
|
18
18
|
Requires-Dist: pusher
|
|
19
19
|
Dynamic: license-file
|
|
20
20
|
|
|
21
|
-
# 🎵 MyTunes Pro - Professional TUI Edition v2.0.
|
|
21
|
+
# 🎵 MyTunes Pro - Professional TUI Edition v2.0.7
|
|
22
22
|
|
|
23
|
-
## 🚀 Terminal-based Media Workflow Experiment v2.0.
|
|
23
|
+
## 🚀 Terminal-based Media Workflow Experiment v2.0.7
|
|
24
24
|
|
|
25
25
|
> [!IMPORTANT]
|
|
26
26
|
> **Legal Disclaimer:** This project is a personal, non-commercial research experiment for developer education.
|
|
@@ -187,6 +187,7 @@ Executes immediately without worrying about input language status.
|
|
|
187
187
|
| **`+`** | **Vol UP** | Volume +5% (Same as `=`) |
|
|
188
188
|
| **`-`** | **Vol DOWN** | Volume -5% (Same as `_`) |
|
|
189
189
|
| **`F7`** | **Open YouTube** | View current track in browser |
|
|
190
|
+
| **`E`** | **Equalizer** | Cycle EQ presets (Auto/Flat/Pop/Rock/Jazz/etc.) |
|
|
190
191
|
| **`6`** | **Back** | Go to previous screen (Same as `Q`, `h`) |
|
|
191
192
|
| **`L`** | **Forward** | Go forward to previous screen (`Right Arrow`) |
|
|
192
193
|
| **`ESC`** | **Background** | **Exit without stopping music** (Background Play) |
|
|
@@ -215,7 +216,7 @@ Executes immediately without worrying about input language status.
|
|
|
215
216
|
|
|
216
217
|
# 🎵 MyTunes Pro (Experimental Media Tool - KR)
|
|
217
218
|
|
|
218
|
-
## 🚀 터미널 기반 미디어 워크플로우 실험 v2.0.
|
|
219
|
+
## 🚀 터미널 기반 미디어 워크플로우 실험 v2.0.7
|
|
219
220
|
|
|
220
221
|
> [!IMPORTANT]
|
|
221
222
|
> **법적 면책 고지:** 본 프로젝트는 개발자 교육 및 연구를 목적으로 하는 개인적, 비상업적 실험입니다.
|
|
@@ -360,6 +361,7 @@ Windows 환경에서 한글 검색이 안 되거나 설치가 어려운 분들
|
|
|
360
361
|
| **`+`** | **볼륨 UP** | 볼륨 +5% (단축키 `=`와 동일) |
|
|
361
362
|
| **`-`** | **볼륨 DOWN** | 볼륨 -5% (단축키 `_`와 동일) |
|
|
362
363
|
| **`F7`** | **유튜브 열기** | 현재 곡을 브라우저에서 보기 |
|
|
364
|
+
| **`E`** | **이퀄라이저** | EQ 프리셋 전환 (Auto/Flat/Pop/Rock/Jazz 등) |
|
|
363
365
|
| **`6`** | **뒤로가기** | 이전 화면으로 이동 (단축키 `Q`, `h`와 동일) |
|
|
364
366
|
| **`L`** | **앞으로** | 이전 화면에서 앞화면으로 다시 이동 (`Right Arrow`) |
|
|
365
367
|
| **`ESC`** | **배경재생** | **음악 끄지 않고 나가기** (백그라운드 재생) |
|
|
@@ -388,6 +390,17 @@ Windows 환경에서 한글 검색이 안 되거나 설치가 어려운 분들
|
|
|
388
390
|
|
|
389
391
|
## 🔄 Changelog
|
|
390
392
|
|
|
393
|
+
### v2.0.7 (2026-02-02)
|
|
394
|
+
- **Performance Optimization**: Improved keyboard responsiveness on Windows/WSL by implementing EQ detection caching.
|
|
395
|
+
- **Data Management**: Limited resume data to 500 entries with automatic FIFO cleanup to prevent JSON bloat.
|
|
396
|
+
- **Cache System**: Added 200-entry EQ genre cache to skip redundant keyword matching for repeated tracks.
|
|
397
|
+
|
|
398
|
+
### v2.0.6 (2026-02-02)
|
|
399
|
+
- **10-Band Equalizer**: Added professional-grade 10-band EQ with presets (Flat, Pop, Rock, Jazz, Classical, Full Bass, Dance, Club, Live, Soft).
|
|
400
|
+
- **Auto EQ Detection**: Intelligent genre detection from track title/channel info automatically applies optimal EQ preset.
|
|
401
|
+
- **Keyboard Shortcut**: Press `E` to cycle through EQ presets in real-time without interrupting playback.
|
|
402
|
+
- **Multilingual Genre Keywords**: Auto EQ supports genre detection in 12 languages including Korean, Japanese, Chinese, Spanish, and more.
|
|
403
|
+
|
|
391
404
|
### v2.0.5 (2026-02-01)
|
|
392
405
|
- **Input Feedback Refinement**: Transitioned from blinking warnings to a static Bold Yellow status message for better accessibility and premium feel.
|
|
393
406
|
- **Auto-clear Optimization**: Implemented a 5-second auto-clear timer for all transient status messages.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
mytunes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
mytunes/app.py,sha256=TMTcxZyBga5IYkJQPRiDKpZ6nEn5OCd62jySxTfmMd8,81539
|
|
3
|
+
mytunes_pro-2.0.7.dist-info/licenses/LICENSE,sha256=lOrP0EIjxcgJia__W3f3PVDZkRd2oRzFkyH2g3LRRCg,1063
|
|
4
|
+
mytunes_pro-2.0.7.dist-info/METADATA,sha256=zXK3JFIv8PpoLquQF0Xh17ebRmMCSMSDCJP0mUHEtvk,28648
|
|
5
|
+
mytunes_pro-2.0.7.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
6
|
+
mytunes_pro-2.0.7.dist-info/entry_points.txt,sha256=6-MsC13nIgzLvrREaGotc32FgxHx_Iuu1z2qCzJs1_4,65
|
|
7
|
+
mytunes_pro-2.0.7.dist-info/top_level.txt,sha256=KWzdFyNNG_sO7GT83-sN5fYArP4_DL5I8HYIwgazXyY,8
|
|
8
|
+
mytunes_pro-2.0.7.dist-info/RECORD,,
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
mytunes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
mytunes/app.py,sha256=uZUIV2dCPFZh0ONTazup5wwP6dqEOthtgOITA99iFrk,80327
|
|
3
|
-
mytunes_pro-2.0.6.dist-info/licenses/LICENSE,sha256=lOrP0EIjxcgJia__W3f3PVDZkRd2oRzFkyH2g3LRRCg,1063
|
|
4
|
-
mytunes_pro-2.0.6.dist-info/METADATA,sha256=r_WP429frS7K5SRuLiWpYAq70DHchDu_v_YzSYPPnjs,27583
|
|
5
|
-
mytunes_pro-2.0.6.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
6
|
-
mytunes_pro-2.0.6.dist-info/entry_points.txt,sha256=6-MsC13nIgzLvrREaGotc32FgxHx_Iuu1z2qCzJs1_4,65
|
|
7
|
-
mytunes_pro-2.0.6.dist-info/top_level.txt,sha256=KWzdFyNNG_sO7GT83-sN5fYArP4_DL5I8HYIwgazXyY,8
|
|
8
|
-
mytunes_pro-2.0.6.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|