mytunes-pro 1.9.8__tar.gz → 2.0.0__tar.gz
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_pro-1.9.8/src/mytunes_pro.egg-info → mytunes_pro-2.0.0}/PKG-INFO +14 -5
- {mytunes_pro-1.9.8 → mytunes_pro-2.0.0}/README.md +13 -4
- {mytunes_pro-1.9.8 → mytunes_pro-2.0.0}/pyproject.toml +1 -1
- {mytunes_pro-1.9.8 → mytunes_pro-2.0.0}/src/mytunes/app.py +62 -22
- {mytunes_pro-1.9.8 → mytunes_pro-2.0.0/src/mytunes_pro.egg-info}/PKG-INFO +14 -5
- {mytunes_pro-1.9.8 → mytunes_pro-2.0.0}/LICENSE +0 -0
- {mytunes_pro-1.9.8 → mytunes_pro-2.0.0}/setup.cfg +0 -0
- {mytunes_pro-1.9.8 → mytunes_pro-2.0.0}/src/mytunes/__init__.py +0 -0
- {mytunes_pro-1.9.8 → mytunes_pro-2.0.0}/src/mytunes_pro.egg-info/SOURCES.txt +0 -0
- {mytunes_pro-1.9.8 → mytunes_pro-2.0.0}/src/mytunes_pro.egg-info/dependency_links.txt +0 -0
- {mytunes_pro-1.9.8 → mytunes_pro-2.0.0}/src/mytunes_pro.egg-info/entry_points.txt +0 -0
- {mytunes_pro-1.9.8 → mytunes_pro-2.0.0}/src/mytunes_pro.egg-info/requires.txt +0 -0
- {mytunes_pro-1.9.8 → mytunes_pro-2.0.0}/src/mytunes_pro.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mytunes-pro
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.0
|
|
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
|
|
@@ -19,9 +19,11 @@ Dynamic: license-file
|
|
|
19
19
|
|
|
20
20
|
# 🎵 MyTunes Pro (Korean)
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
## 🚀 Professional TUI Music Player v2.0.0
|
|
23
|
+
|
|
24
|
+
MyTunes Pro는 **Context7**의 심층 리서치를 기반으로 제작된 **Premium CLI Music Player**입니다.
|
|
25
|
+
Python `curses` 라이브러리를 사용하여 터미널 환경에서도 **GUI급의 유려한 UX**를 제공하며,
|
|
26
|
+
`mpv` 플레이어의 강력한 IPC 제어 기능을 통해 끊김 없는 백그라운드 재생을 지원합니다.
|
|
25
27
|
|
|
26
28
|
> **💡 개발 배경**
|
|
27
29
|
> 이 프로그램은 하루 종일 터미널을 보는 개발자들이 **작업 흐름을 끊지 않고** 편하게 음악을 듣기 위해 만들어졌습니다.
|
|
@@ -208,7 +210,7 @@ Windows 환경에서 한글 검색이 안 되거나 설치가 어려운 분들
|
|
|
208
210
|
|
|
209
211
|
# 🎵 MyTunes Pro (English)
|
|
210
212
|
|
|
211
|
-
**Modern CLI YouTube Music Player (v1.9.
|
|
213
|
+
**Modern CLI YouTube Music Player (v1.9.9)**
|
|
212
214
|
A lightweight, keyboard-centric terminal player for streaming YouTube music.
|
|
213
215
|
|
|
214
216
|
---
|
|
@@ -296,6 +298,13 @@ sudo apt install mpv python3 python3-pip pipx python3-venv -y
|
|
|
296
298
|
|
|
297
299
|
## 🔄 Changelog
|
|
298
300
|
|
|
301
|
+
### v1.9.9 (Domain Migration & Realtime Sync)
|
|
302
|
+
|
|
303
|
+
- **Domain Migration**: Updated all branding and internal links to support `mytunes-pro.com`.
|
|
304
|
+
- **Realtime Stability**: Fixed critical state-management bugs in the live dashboard that caused list clearing and duplicated track entries.
|
|
305
|
+
- **Pusher Channel Synchronization**: Unified communication across the transition to ensure zero-latency sharing on the new `mytunes-pro` channel.
|
|
306
|
+
- **Improved Empty State**: Redesigned the "SIGNAL LOST" screen into a more descriptive "READY TO RECEIVE" interface for better UX.
|
|
307
|
+
|
|
299
308
|
### v1.9.8 (Realtime Stabilization)
|
|
300
309
|
|
|
301
310
|
- **UI Refinement**: Implemented in-list "Now Playing" sticky behavior with auto-scroll synchronization for a seamless browsing experience.
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# 🎵 MyTunes Pro (Korean)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
## 🚀 Professional TUI Music Player v2.0.0
|
|
4
|
+
|
|
5
|
+
MyTunes Pro는 **Context7**의 심층 리서치를 기반으로 제작된 **Premium CLI Music Player**입니다.
|
|
6
|
+
Python `curses` 라이브러리를 사용하여 터미널 환경에서도 **GUI급의 유려한 UX**를 제공하며,
|
|
7
|
+
`mpv` 플레이어의 강력한 IPC 제어 기능을 통해 끊김 없는 백그라운드 재생을 지원합니다.
|
|
6
8
|
|
|
7
9
|
> **💡 개발 배경**
|
|
8
10
|
> 이 프로그램은 하루 종일 터미널을 보는 개발자들이 **작업 흐름을 끊지 않고** 편하게 음악을 듣기 위해 만들어졌습니다.
|
|
@@ -189,7 +191,7 @@ Windows 환경에서 한글 검색이 안 되거나 설치가 어려운 분들
|
|
|
189
191
|
|
|
190
192
|
# 🎵 MyTunes Pro (English)
|
|
191
193
|
|
|
192
|
-
**Modern CLI YouTube Music Player (v1.9.
|
|
194
|
+
**Modern CLI YouTube Music Player (v1.9.9)**
|
|
193
195
|
A lightweight, keyboard-centric terminal player for streaming YouTube music.
|
|
194
196
|
|
|
195
197
|
---
|
|
@@ -277,6 +279,13 @@ sudo apt install mpv python3 python3-pip pipx python3-venv -y
|
|
|
277
279
|
|
|
278
280
|
## 🔄 Changelog
|
|
279
281
|
|
|
282
|
+
### v1.9.9 (Domain Migration & Realtime Sync)
|
|
283
|
+
|
|
284
|
+
- **Domain Migration**: Updated all branding and internal links to support `mytunes-pro.com`.
|
|
285
|
+
- **Realtime Stability**: Fixed critical state-management bugs in the live dashboard that caused list clearing and duplicated track entries.
|
|
286
|
+
- **Pusher Channel Synchronization**: Unified communication across the transition to ensure zero-latency sharing on the new `mytunes-pro` channel.
|
|
287
|
+
- **Improved Empty State**: Redesigned the "SIGNAL LOST" screen into a more descriptive "READY TO RECEIVE" interface for better UX.
|
|
288
|
+
|
|
280
289
|
### v1.9.8 (Realtime Stabilization)
|
|
281
290
|
|
|
282
291
|
- **UI Refinement**: Implemented in-list "Now Playing" sticky behavior with auto-scroll synchronization for a seamless browsing experience.
|
|
@@ -23,7 +23,7 @@ warnings.filterwarnings("ignore", message=".*urllib3 v2 only supports OpenSSL 1.
|
|
|
23
23
|
import webbrowser
|
|
24
24
|
import tempfile
|
|
25
25
|
import shutil
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
import requests
|
|
28
28
|
|
|
29
29
|
|
|
@@ -36,7 +36,7 @@ MPV_SOCKET = "/tmp/mpv_socket"
|
|
|
36
36
|
LOG_FILE = "/tmp/mytunes_mpv.log"
|
|
37
37
|
PID_FILE = "/tmp/mytunes_mpv.pid"
|
|
38
38
|
APP_NAME = "MyTunes Pro"
|
|
39
|
-
APP_VERSION = "
|
|
39
|
+
APP_VERSION = "2.0.0"
|
|
40
40
|
|
|
41
41
|
# === [Strings & Localization] ===
|
|
42
42
|
STRINGS = {
|
|
@@ -442,16 +442,13 @@ class MyTunesApp:
|
|
|
442
442
|
signal.signal(signal.SIGHUP, self.handle_disconnect)
|
|
443
443
|
except: pass
|
|
444
444
|
|
|
445
|
-
#
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
ssl=True
|
|
453
|
-
)
|
|
454
|
-
except: self.pusher = None
|
|
445
|
+
# Enable Mouse Support
|
|
446
|
+
curses.mousemask(curses.ALL_MOUSE_EVENTS | curses.REPORT_MOUSE_POSITION)
|
|
447
|
+
print("\033[?1003h") # Enable mouse tracking
|
|
448
|
+
|
|
449
|
+
# Sharing Client (Serverless Proxy)
|
|
450
|
+
self.pusher = None # Deprecated: Direct Pusher client removed for security
|
|
451
|
+
self.share_api_url = "https://postgresql.co.kr/api/pusher/mytunes"
|
|
455
452
|
self.sent_history = {}
|
|
456
453
|
|
|
457
454
|
|
|
@@ -588,6 +585,34 @@ class MyTunesApp:
|
|
|
588
585
|
self.running = False
|
|
589
586
|
return
|
|
590
587
|
|
|
588
|
+
# Handle Mouse Click
|
|
589
|
+
if key == curses.KEY_MOUSE:
|
|
590
|
+
try:
|
|
591
|
+
_, mx, my, _, bstate = curses.getmouse()
|
|
592
|
+
if bstate & curses.BUTTON1_CLICKED or bstate & curses.BUTTON1_RELEASED:
|
|
593
|
+
h, w = self.stdscr.getmaxyx()
|
|
594
|
+
branding = "mytunes-pro.com/postgresql.co.kr"
|
|
595
|
+
branding_len = len(branding)
|
|
596
|
+
branding_x = w - 2 - branding_len
|
|
597
|
+
|
|
598
|
+
if my == h - 2 and branding_x <= mx < w - 2:
|
|
599
|
+
# Check which part was clicked
|
|
600
|
+
# mytunes-pro.com (first 15 chars)
|
|
601
|
+
# / (1 char)
|
|
602
|
+
# postgresql.co.kr (last 16 chars)
|
|
603
|
+
rel_x = mx - branding_x
|
|
604
|
+
if rel_x < 15:
|
|
605
|
+
url = "https://mytunes-pro.com"
|
|
606
|
+
self.status_msg = f"🌐 Opening {url}..."
|
|
607
|
+
threading.Thread(target=webbrowser.open, args=(url,), daemon=True).start()
|
|
608
|
+
elif rel_x > 15:
|
|
609
|
+
url = "https://postgresql.co.kr"
|
|
610
|
+
self.status_msg = f"🌐 Opening {url}..."
|
|
611
|
+
threading.Thread(target=webbrowser.open, args=(url,), daemon=True).start()
|
|
612
|
+
except:
|
|
613
|
+
pass
|
|
614
|
+
return
|
|
615
|
+
|
|
591
616
|
# Helper to normalize input for checking
|
|
592
617
|
k_char = str(key).lower() if isinstance(key, str) else ""
|
|
593
618
|
|
|
@@ -718,7 +743,7 @@ class MyTunesApp:
|
|
|
718
743
|
self.status_msg = "⚠️ Already Shared Recently!"
|
|
719
744
|
else:
|
|
720
745
|
try:
|
|
721
|
-
# Send to
|
|
746
|
+
# Send to Serverless Proxy (Secure)
|
|
722
747
|
payload = {
|
|
723
748
|
"title": title,
|
|
724
749
|
"url": url,
|
|
@@ -726,13 +751,28 @@ class MyTunesApp:
|
|
|
726
751
|
"country": self.dm.get_country(),
|
|
727
752
|
"timestamp": time.time()
|
|
728
753
|
}
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
754
|
+
|
|
755
|
+
# v1.9.9 Security Update: Use centralized API with Auth Header
|
|
756
|
+
try:
|
|
757
|
+
headers = {
|
|
758
|
+
"Content-Type": "application/json",
|
|
759
|
+
"x-mytunes-secret": "mytunes-v1-secret-8822"
|
|
760
|
+
}
|
|
761
|
+
resp = requests.post(
|
|
762
|
+
self.share_api_url,
|
|
763
|
+
json=payload,
|
|
764
|
+
headers=headers,
|
|
765
|
+
timeout=3
|
|
766
|
+
)
|
|
767
|
+
if resp.status_code == 200:
|
|
768
|
+
self.sent_history[url] = time.time()
|
|
769
|
+
safe_title = self.truncate(title, 50)
|
|
770
|
+
self.status_msg = f"🚀 Shared: {safe_title}..."
|
|
771
|
+
else:
|
|
772
|
+
self.status_msg = f"❌ Share Error: {resp.status_code}"
|
|
773
|
+
except:
|
|
774
|
+
self.status_msg = "❌ Network Error (API)"
|
|
775
|
+
|
|
736
776
|
except Exception as e:
|
|
737
777
|
self.status_msg = f"❌ Share Failed: {str(e)}"
|
|
738
778
|
|
|
@@ -780,7 +820,7 @@ class MyTunesApp:
|
|
|
780
820
|
# Optimized Flag Set (Context7 Research)
|
|
781
821
|
flags = [
|
|
782
822
|
f"--app={live_url}",
|
|
783
|
-
"--window-size=
|
|
823
|
+
"--window-size=600,900",
|
|
784
824
|
"--window-position=100,100",
|
|
785
825
|
f"--user-data-dir={temp_user_data}",
|
|
786
826
|
"--no-first-run",
|
|
@@ -1302,7 +1342,7 @@ class MyTunesApp:
|
|
|
1302
1342
|
self.stdscr.addstr(h - 3, 2, self.t("stopped"), curses.color_pair(1))
|
|
1303
1343
|
|
|
1304
1344
|
# Footer Line 3: System Message & Branding
|
|
1305
|
-
branding = "postgresql.co.kr
|
|
1345
|
+
branding = "mytunes-pro.com/postgresql.co.kr"
|
|
1306
1346
|
branding_x = w - 2 - len(branding)
|
|
1307
1347
|
|
|
1308
1348
|
# Draw Branding always - Bright/Bold White
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mytunes-pro
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.0
|
|
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
|
|
@@ -19,9 +19,11 @@ Dynamic: license-file
|
|
|
19
19
|
|
|
20
20
|
# 🎵 MyTunes Pro (Korean)
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
## 🚀 Professional TUI Music Player v2.0.0
|
|
23
|
+
|
|
24
|
+
MyTunes Pro는 **Context7**의 심층 리서치를 기반으로 제작된 **Premium CLI Music Player**입니다.
|
|
25
|
+
Python `curses` 라이브러리를 사용하여 터미널 환경에서도 **GUI급의 유려한 UX**를 제공하며,
|
|
26
|
+
`mpv` 플레이어의 강력한 IPC 제어 기능을 통해 끊김 없는 백그라운드 재생을 지원합니다.
|
|
25
27
|
|
|
26
28
|
> **💡 개발 배경**
|
|
27
29
|
> 이 프로그램은 하루 종일 터미널을 보는 개발자들이 **작업 흐름을 끊지 않고** 편하게 음악을 듣기 위해 만들어졌습니다.
|
|
@@ -208,7 +210,7 @@ Windows 환경에서 한글 검색이 안 되거나 설치가 어려운 분들
|
|
|
208
210
|
|
|
209
211
|
# 🎵 MyTunes Pro (English)
|
|
210
212
|
|
|
211
|
-
**Modern CLI YouTube Music Player (v1.9.
|
|
213
|
+
**Modern CLI YouTube Music Player (v1.9.9)**
|
|
212
214
|
A lightweight, keyboard-centric terminal player for streaming YouTube music.
|
|
213
215
|
|
|
214
216
|
---
|
|
@@ -296,6 +298,13 @@ sudo apt install mpv python3 python3-pip pipx python3-venv -y
|
|
|
296
298
|
|
|
297
299
|
## 🔄 Changelog
|
|
298
300
|
|
|
301
|
+
### v1.9.9 (Domain Migration & Realtime Sync)
|
|
302
|
+
|
|
303
|
+
- **Domain Migration**: Updated all branding and internal links to support `mytunes-pro.com`.
|
|
304
|
+
- **Realtime Stability**: Fixed critical state-management bugs in the live dashboard that caused list clearing and duplicated track entries.
|
|
305
|
+
- **Pusher Channel Synchronization**: Unified communication across the transition to ensure zero-latency sharing on the new `mytunes-pro` channel.
|
|
306
|
+
- **Improved Empty State**: Redesigned the "SIGNAL LOST" screen into a more descriptive "READY TO RECEIVE" interface for better UX.
|
|
307
|
+
|
|
299
308
|
### v1.9.8 (Realtime Stabilization)
|
|
300
309
|
|
|
301
310
|
- **UI Refinement**: Implemented in-list "Now Playing" sticky behavior with auto-scroll synchronization for a seamless browsing experience.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|