diff --git a/MIRRORS b/MIRRORS index 67df9ce..c55944e 100644 --- a/MIRRORS +++ b/MIRRORS @@ -1,6 +1,5 @@ # Avalaible mirrors -https://inex.dev/localhost_frssoft/funkwhale-cli.git -|- https://git.vector1.dev/localhost_frssoft/funkwhale-cli -https://git.macaw.me/localhost_frssoft/funkwhale-cli.git -https://code.criminallycute.fi/localhost_frssoft/funkwhale-cli.git -https://git.poridge.club/localhost_frssoft/funkwhale-cli.git +https://inex.dev/localhost_frssoft/funkwlmpv.git +|- https://git.vector1.dev/localhost_frssoft/funkwlmpv +https://git.macaw.me/localhost_frssoft/funkwlmpv.git +https://code.criminallycute.fi/localhost_frssoft/funkwlmpv.git diff --git a/README.md b/README.md index 142e200..ae24622 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# funkwhale-cli +# funkwlmpv Just for fun. A simple TUI media player for FunkWhale instances. Writen on python Features: @@ -21,7 +21,7 @@ Python dependencies: Optional: brotli ### About cache folder -funkwhale-cli has to cache tracks before playing (default disabled "enable_persistent_cache"). Cache is persistent and you should manage it manually because the (script/program) can't clean it automatically. +funkwlmpv has to cache tracks before playing (default disabled "enable_persistent_cache"). Cache is persistent and you should manage it manually because the (script/program) can't clean it automatically. Cache structure: cache/domain.tld/[track uuid] You can play tracks offline, example: mpv --shuffle cache/*/* cache_helper.sh - it might be useful for compression cache (lossy: vorbis 128 kbps, no thumbnail) diff --git a/funkwhale_cli.py b/funkwlmpv similarity index 99% rename from funkwhale_cli.py rename to funkwlmpv index d4235b8..eede962 100755 --- a/funkwhale_cli.py +++ b/funkwlmpv @@ -94,7 +94,7 @@ def main(): print(f''' If You want sign in, please visit: https://{current_instance.instance}/settings/applications/new -And fill Name funkwhale-cli +And fill Name funkwlmpv Scopes: Read | Write (optional): write:libraries diff --git a/src/android_termux_api.py b/src/android_termux_api.py new file mode 100644 index 0000000..b5b38d7 --- /dev/null +++ b/src/android_termux_api.py @@ -0,0 +1,39 @@ +import subprocess +import os +import json +import threading +import time +from src.mpv_control import player +from loguru import logger +'''Warning! This module can be very battery drain''' + + +@logger.catch +def handle_vol_lvl_as_switch_track(): + volume_diff = [] + while True: + debug_time = time.time() + volume = subprocess.Popen("termux-volume", stdout=subprocess.PIPE).stdout + json_volume = json.loads(volume.read()) + for i in json_volume: + if i['stream'] == 'music': + volume_diff.append(i['volume']) + if len(volume_diff) == 2: + before, after = volume_diff + difference = after - before + if difference == 2: + try: + player.playlist_next() + except: + pass + os.system(f'termux-volume music {before}') + volume_diff = [] + debug_time2 = time.time() + total = debug_time2 - debug_time + print(total) + time.sleep(0.300) + + +handle_vol_lvl = threading.Thread( + target=handle_vol_lvl_as_switch_track, daemon=True) +handle_vol_lvl.start() diff --git a/src/fw_api.py b/src/fw_api.py index 1789fb0..09a237f 100644 --- a/src/fw_api.py +++ b/src/fw_api.py @@ -32,7 +32,7 @@ class current_instance: s = requests.Session() s.headers.update({ "Accept-encoding": 'gzip, br, deflate', - "User-Agent": "funkwhale-cli/latest-commit; +https://git.phreedom.club/localhost_frssoft/funkwhale-cli" + "User-Agent": "funkwlmpv/latest-commit; +https://git.phreedom.club/localhost_frssoft/funkwlmpv" }) instance = get_config('instance') token = auth.get(instance) diff --git a/src/fw_instances.py b/src/fw_instances.py index 2fd1d65..4161e87 100644 --- a/src/fw_instances.py +++ b/src/fw_instances.py @@ -77,7 +77,7 @@ def fetch_instances_nodeinfo_and_avalaibility(instances): return requests.get('https://' + instance + '/api/v1/instance/nodeinfo/2.0/', headers={ 'Accept-Encoding': 'gzip, brotli, deflate', - 'User-Agent': 'funkwhale-cli/latest-commit; +https://git.phreedom.club/localhost_frssoft/funkwhale-cli'}, + 'User-Agent': 'funkwlmpv/latest-commit; +https://git.phreedom.club/localhost_frssoft/funkwlmpv'}, timeout=10).json() with concurrent.futures.ThreadPoolExecutor() as executor: # optimally defined number of threads diff --git a/src/fw_recents.py b/src/fw_recents.py index 4e75b9b..0c64702 100644 --- a/src/fw_recents.py +++ b/src/fw_recents.py @@ -1,6 +1,6 @@ from src.fw_api import get_favorires_tracks, get_recently_listened, get_audio_file from src.fw_api_hints import hint_scope -from src.mpv_control import player, player_menu, track_url_to_uuid, player_fw_storage +from src.mpv_control import player, player_menu, track_url_to_uuid, player_fw_storage, play_track from pyfzf.pyfzf import FzfPrompt from loguru import logger @@ -54,14 +54,3 @@ def list_fav_or_history(pg=None, search=None, scope=None, is_history_view=False) else: play_track(track=tracks_results[int( select[0].split('.', 1)[0])]['track']) - - -def play_track(track, multi=False): - listen_url = get_audio_file(track['listen_url'], True) - player_fw_storage.storage[track_url_to_uuid(listen_url)] = track - if multi: - player.loadfile(listen_url, 'append-play') - else: - player.loadfile(listen_url, 'append-play') - track_name = track.get('title') - player_menu(f"{track_name} playing...", player_fw_storage.storage) diff --git a/src/fw_tracks.py b/src/fw_tracks.py index e56876b..3c297d1 100644 --- a/src/fw_tracks.py +++ b/src/fw_tracks.py @@ -49,10 +49,13 @@ def list_tracks(pg=None, search=None, tag=None, library=None): for i in tracks_results: play_track(track=i, multi=True) elif select == 'Play all pages': - if tracks_count > 1000: - yn = input('WARNING: you really want add more than 1000 tracks? (y/[n])\n').lower() - if yn != 'y': - return + if tracks_count > 500: + yn = input('WARNING: you really want add more than 500 tracks? (y/[n] or number of tracks)\n').lower() + try: + tracks_count = int(yn) + except: + if yn != 'y': + return count_loaded = 0 while tracks_count > count_loaded: for i in tracks_results: diff --git a/src/mpv_control.py b/src/mpv_control.py index 37aed01..c78b77b 100644 --- a/src/mpv_control.py +++ b/src/mpv_control.py @@ -23,11 +23,13 @@ player.ytdl = False # Prevent attempts load track with yt-dlp player.volume = get_config('mpv_volume') player.prefetch_playlist = get_config('prefetch_playlist') show_like_button = get_config('show_like_button') -track_activity_history = get_config('track_activity_history') share_to_fediverse_token = get_config('share_to_fediverse_token') share_to_fediverse_instance = get_config('share_to_fediverse_instance') shuffle = False +if get_config('termux_handle_track_switch_by_volume'): + import src.android_termux_api + class player_fw_storage: storage = {} @@ -70,7 +72,7 @@ def send_listen_activity(): tags = ' '.join(tags) if tags == []: tags = '' - status_obj = {'spoiler_text': 'funkwhale-cli music share', + status_obj = {'spoiler_text': 'funkwlmpv music share', 'visibility': 'unlisted', 'status': f'🎧 {artist} - {album} - {title}\n{fid}\n#NowPlaying {tags}'} requests.post(f'https://{share_to_fediverse_instance}/api/v1/statuses', diff --git a/src/settings.py b/src/settings.py index 1cc9c81..7fd9b2a 100644 --- a/src/settings.py +++ b/src/settings.py @@ -44,7 +44,8 @@ default_conf = { 'enable_persistent_cache': False, 'mpv_volume': 100, 'show_like_button': True, - 'show_artist_name_in_albums': False + 'show_artist_name_in_albums': False, + 'termux_handle_track_switch_by_volume': False }