You've already forked RadioPlayer
mirror of
https://github.com/radio95-rnt/RadioPlayer.git
synced 2026-02-26 21:53:54 +01:00
update
This commit is contained in:
187
player.py
187
player.py
@@ -1,187 +0,0 @@
|
|||||||
import os
|
|
||||||
import random
|
|
||||||
import subprocess
|
|
||||||
import time
|
|
||||||
import sys
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
playlist_dir = '/home/user/playlists'
|
|
||||||
|
|
||||||
def get_current_hour():
|
|
||||||
return datetime.now().hour
|
|
||||||
|
|
||||||
def get_current_day():
|
|
||||||
return datetime.now().strftime('%A').lower()
|
|
||||||
|
|
||||||
def load_dict_from_custom_format(file_path: str) -> dict:
|
|
||||||
result_dict = {}
|
|
||||||
with open(file_path, 'r') as file:
|
|
||||||
for line in file:
|
|
||||||
if line.strip() == "":
|
|
||||||
continue
|
|
||||||
key, value = line.split(':', 1)
|
|
||||||
result_dict[key.strip()] = value.strip()
|
|
||||||
return result_dict
|
|
||||||
|
|
||||||
def update_rds(track_name):
|
|
||||||
try:
|
|
||||||
name_table = load_dict_from_custom_format("/home/user/mixes/name_table.txt")
|
|
||||||
try:
|
|
||||||
prt = f"Gramy: radio95 - {name_table[track_name]}"
|
|
||||||
except KeyError as e:
|
|
||||||
print("Unknown", e)
|
|
||||||
prt = "Gramy: radio95 - Program Godzinny"
|
|
||||||
|
|
||||||
with open("/home/user/RDS", "w") as f:
|
|
||||||
f.write(f"TEXT={prt}\r")
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open("/home/user/RDS", "w") as f:
|
|
||||||
f.write(f"RTP=4,7,7,1,17,{len(str(name_table[track_name]))-1}\r")
|
|
||||||
except KeyError:
|
|
||||||
with open("/home/user/RDS", "w") as f:
|
|
||||||
f.write(f"RTP=4,7,7,1,17,15\r")
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Error updating RDS: {e}")
|
|
||||||
|
|
||||||
def get_playlist_modification_time(playlist_path):
|
|
||||||
"""Get the modification time of the playlist file."""
|
|
||||||
try:
|
|
||||||
return os.path.getmtime(playlist_path)
|
|
||||||
except OSError:
|
|
||||||
return 0
|
|
||||||
|
|
||||||
def load_playlist(playlist_path):
|
|
||||||
"""Load tracks from playlist file."""
|
|
||||||
try:
|
|
||||||
with open(playlist_path, 'r') as f:
|
|
||||||
tracks = [line.strip() for line in f.readlines() if line.strip()]
|
|
||||||
return tracks
|
|
||||||
except FileNotFoundError:
|
|
||||||
print(f"Warning: Playlist not found: {playlist_path}")
|
|
||||||
return []
|
|
||||||
|
|
||||||
def get_newest_track(tracks):
|
|
||||||
"""Find the newest track (most recently modified) from the playlist."""
|
|
||||||
if not tracks:
|
|
||||||
return None
|
|
||||||
|
|
||||||
newest_track = None
|
|
||||||
newest_time = 0
|
|
||||||
|
|
||||||
for track in tracks:
|
|
||||||
track_path = os.path.expanduser(track)
|
|
||||||
try:
|
|
||||||
mod_time = os.path.getmtime(track_path)
|
|
||||||
if mod_time > newest_time:
|
|
||||||
newest_time = mod_time
|
|
||||||
newest_track = track
|
|
||||||
except OSError:
|
|
||||||
# Skip files that can't be accessed
|
|
||||||
continue
|
|
||||||
|
|
||||||
return newest_track
|
|
||||||
|
|
||||||
def play_playlist(playlist_path, play_newest_first=False):
|
|
||||||
last_modified_time = get_playlist_modification_time(playlist_path)
|
|
||||||
tracks = load_playlist(playlist_path)
|
|
||||||
if not tracks:
|
|
||||||
print(f"No tracks found in {playlist_path}, checking again in 30 seconds...")
|
|
||||||
time.sleep(30)
|
|
||||||
return
|
|
||||||
|
|
||||||
if play_newest_first:
|
|
||||||
newest_track = get_newest_track(tracks)
|
|
||||||
if newest_track:
|
|
||||||
print(f"Playing newest track first: {os.path.basename(newest_track)}")
|
|
||||||
# Remove the newest track from the list
|
|
||||||
tracks.remove(newest_track)
|
|
||||||
# Shuffle the remaining tracks
|
|
||||||
random.shuffle(tracks)
|
|
||||||
# Add the newest track back at the beginning
|
|
||||||
tracks.insert(0, newest_track)
|
|
||||||
else:
|
|
||||||
random.shuffle(tracks)
|
|
||||||
|
|
||||||
for track in tracks:
|
|
||||||
current_modified_time = get_playlist_modification_time(playlist_path)
|
|
||||||
if current_modified_time > last_modified_time:
|
|
||||||
print(f"Playlist {playlist_path} has been modified, reloading...")
|
|
||||||
return
|
|
||||||
|
|
||||||
current_hour = get_current_hour()
|
|
||||||
current_day = get_current_day()
|
|
||||||
day_playlist_path = os.path.join(playlist_dir, current_day, 'day')
|
|
||||||
night_playlist_path = os.path.join(playlist_dir, current_day, 'night')
|
|
||||||
late_night_playlist_path = os.path.join(playlist_dir, current_day, 'late_night')
|
|
||||||
|
|
||||||
if 8 <= current_hour < 20:
|
|
||||||
if playlist_path != day_playlist_path:
|
|
||||||
print("Time changed to day hours, switching playlist...")
|
|
||||||
return
|
|
||||||
elif 0 <= current_hour < 6:
|
|
||||||
if playlist_path != late_night_playlist_path:
|
|
||||||
print("Time changed to late night hours, switching playlist...")
|
|
||||||
return
|
|
||||||
else:
|
|
||||||
if playlist_path != night_playlist_path:
|
|
||||||
print("Time changed to night hours, switching playlist...")
|
|
||||||
return
|
|
||||||
|
|
||||||
track_path = os.path.expanduser(track)
|
|
||||||
track_name = os.path.basename(track_path)
|
|
||||||
print(f"Now playing: {track_name}")
|
|
||||||
update_rds(track_name)
|
|
||||||
|
|
||||||
subprocess.run(['ffplay', '-nodisp', '-stats', '-hide_banner', '-autoexit', track_path])
|
|
||||||
|
|
||||||
def main():
|
|
||||||
# Check if the "n" argument was provided
|
|
||||||
play_newest_first = len(sys.argv) > 1 and sys.argv[1].lower() == "n"
|
|
||||||
|
|
||||||
if play_newest_first:
|
|
||||||
print("Newest song will be played first")
|
|
||||||
|
|
||||||
while True:
|
|
||||||
current_hour = get_current_hour()
|
|
||||||
current_day = get_current_day()
|
|
||||||
|
|
||||||
day_playlist = os.path.join(playlist_dir, current_day, 'day')
|
|
||||||
night_playlist = os.path.join(playlist_dir, current_day, 'night')
|
|
||||||
late_night_playlist = os.path.join(playlist_dir, current_day, 'late_night')
|
|
||||||
|
|
||||||
day_dir = os.path.dirname(day_playlist)
|
|
||||||
night_dir = os.path.dirname(night_playlist)
|
|
||||||
late_night_dir = os.path.dirname(late_night_playlist)
|
|
||||||
|
|
||||||
if not os.path.exists(day_dir):
|
|
||||||
print(f"Creating directory: {day_dir}")
|
|
||||||
os.makedirs(day_dir, exist_ok=True)
|
|
||||||
|
|
||||||
if not os.path.exists(night_dir):
|
|
||||||
print(f"Creating directory: {night_dir}")
|
|
||||||
os.makedirs(night_dir, exist_ok=True)
|
|
||||||
|
|
||||||
if not os.path.exists(late_night_dir):
|
|
||||||
print(f"Creating directory: {late_night_dir}")
|
|
||||||
os.makedirs(late_night_dir, exist_ok=True)
|
|
||||||
|
|
||||||
for playlist_path in [day_playlist, night_playlist, late_night_playlist]:
|
|
||||||
if not os.path.exists(playlist_path):
|
|
||||||
print(f"Creating empty playlist: {playlist_path}")
|
|
||||||
with open(playlist_path, 'w') as f:
|
|
||||||
pass
|
|
||||||
|
|
||||||
if 8 <= current_hour < 20:
|
|
||||||
print(f"Playing {current_day} day playlist...")
|
|
||||||
play_playlist(day_playlist, play_newest_first)
|
|
||||||
elif 0 <= current_hour < 6:
|
|
||||||
print(f"Playing {current_day} late_night playlist...")
|
|
||||||
play_playlist(late_night_playlist, play_newest_first)
|
|
||||||
else:
|
|
||||||
print(f"Playing {current_day} night playlist...")
|
|
||||||
play_playlist(night_playlist, play_newest_first)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
if [ "$#" -ne 2 ]; then
|
|
||||||
echo "Usage: $0 <filename> <text>"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
FILENAME="$1"
|
|
||||||
TEXT="$2"
|
|
||||||
|
|
||||||
for dir in *; do
|
|
||||||
if [ -d "$dir" ]; then
|
|
||||||
echo "$TEXT" >> "$dir/$FILENAME"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Text added to all directories."
|
|
||||||
@@ -1,128 +0,0 @@
|
|||||||
/home/user/mixes/Grunge2.mp3
|
|
||||||
/home/user/mixes/Lata90_6.mp3
|
|
||||||
/home/user/mixes/Alternatywnie.mp3
|
|
||||||
/home/user/mixes/BonJovi.mp3
|
|
||||||
/home/user/mixes/Madonna.mp3
|
|
||||||
/home/user/mixes/Lata2010_4.mp3
|
|
||||||
/home/user/mixes/WithinTemptation.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/AliciaKeys.mp3
|
|
||||||
/home/user/mixes/Alternatywnie3.mp3
|
|
||||||
/home/user/mixes/Polskie60.mp3
|
|
||||||
/home/user/mixes/Blink182.mp3
|
|
||||||
/home/user/mixes/Polskie1.mp3
|
|
||||||
/home/user/mixes/Jamiroquai.mp3
|
|
||||||
/home/user/mixes/Finlandia.mp3
|
|
||||||
/home/user/mixes/Francuska.mp3
|
|
||||||
/home/user/mixes/Romania.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Polskie80.mp3
|
|
||||||
/home/user/mixes/Lata80_5.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Lata90_3.mp3
|
|
||||||
/home/user/mixes/Lata90.mp3
|
|
||||||
/home/user/mixes/Polskie70.mp3
|
|
||||||
/home/user/mixes/Abba.mp3
|
|
||||||
/home/user/mixes/Lata2010_3.mp3
|
|
||||||
/home/user/mixes/Polskie2010.mp3
|
|
||||||
/home/user/mixes/Blues2.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/Pop1.mp3
|
|
||||||
/home/user/mixes/Rock2.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/BruceSpringsteen.m4a
|
|
||||||
/home/user/mixes/Paramore.mp3
|
|
||||||
/home/user/mixes/Hiszpanka.mp3
|
|
||||||
/home/user/mixes/Synthwave2.mp3
|
|
||||||
/home/user/mixes/Lata2000.mp3
|
|
||||||
/home/user/mixes/BryanAdams.mp3
|
|
||||||
/home/user/mixes/Lata2000_3.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/Lata60.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/MariahCarey.mp3
|
|
||||||
/home/user/mixes/Hiszpanska2.m4a
|
|
||||||
/home/user/mixes/Wloszczyzna2.mp3
|
|
||||||
/home/user/mixes/Lata80_4.mp3
|
|
||||||
/home/user/mixes/LeonardCohen.m4a
|
|
||||||
/home/user/mixes/Lata70_3.mp3
|
|
||||||
/home/user/mixes/Polskie4.mp3
|
|
||||||
/home/user/mixes/Synthwave4.m4a
|
|
||||||
/home/user/mixes/Lata60_2.mp3
|
|
||||||
/home/user/mixes/Lata90_2.mp3
|
|
||||||
/home/user/mixes/Wloszczyzna.mp3
|
|
||||||
/home/user/mixes/Lata70_4.mp3
|
|
||||||
/home/user/mixes/Alternatywnie2.mp3
|
|
||||||
/home/user/mixes/Portugal.mp3
|
|
||||||
/home/user/mixes/Coldplay.mp3
|
|
||||||
/home/user/mixes/TheRollingStones.mp3
|
|
||||||
/home/user/mixes/Grunge3.mp3
|
|
||||||
/home/user/mixes/Blues.mp3
|
|
||||||
/home/user/mixes/Synthwave.mp3
|
|
||||||
/home/user/mixes/DamskoMeskieDuety.mp3
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/Greenday.m4a
|
|
||||||
/home/user/mixes/Lata2010_5.mp3
|
|
||||||
/home/user/mixes/Lata2000_2.mp3
|
|
||||||
/home/user/mixes/Dzem.m4a
|
|
||||||
/home/user/mixes/Polskie3.mp3
|
|
||||||
/home/user/mixes/Placebo.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Pop2.mp3
|
|
||||||
/home/user/mixes/Queen.mp3
|
|
||||||
/home/user/mixes/GunsNRoses.m4a
|
|
||||||
/home/user/mixes/Islandia.mp3
|
|
||||||
/home/user/mixes/KylieMinogue.mp3
|
|
||||||
/home/user/mixes/PinkFloyd.mp3
|
|
||||||
/home/user/mixes/JoeCocker.m4a
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Lata80_2.mp3
|
|
||||||
/home/user/mixes/Enigma.mp3
|
|
||||||
/home/user/mixes/Nostalgia3.m4a
|
|
||||||
/home/user/mixes/Blues3.mp3
|
|
||||||
/home/user/mixes/Blues4.mp3
|
|
||||||
/home/user/mixes/Lata90_5.mp3
|
|
||||||
/home/user/mixes/Lata2010.mp3
|
|
||||||
/home/user/mixes/Lata2000_4.mp3
|
|
||||||
/home/user/mixes/ChrisRea.mp3
|
|
||||||
/home/user/mixes/LedZeppelin.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Polskie6.m4a
|
|
||||||
/home/user/mixes/Rock3.mp3
|
|
||||||
/home/user/mixes/Dunska.mp3
|
|
||||||
/home/user/mixes/Norweska.mp3
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/Polskie2.mp3
|
|
||||||
/home/user/mixes/Oasis.mp3
|
|
||||||
/home/user/mixes/KatyPerry.mp3
|
|
||||||
/home/user/mixes/Lekkie5.m4a
|
|
||||||
/home/user/mixes/Niemieckie.mp3
|
|
||||||
/home/user/mixes/Blues5.mp3
|
|
||||||
/home/user/mixes/Polskie8.m4a
|
|
||||||
/home/user/mixes/MediumlistaPolskieLata80.m4a
|
|
||||||
/home/user/mixes/Lata2000_5.mp3
|
|
||||||
/home/user/mixes/Polskie7.m4a
|
|
||||||
/home/user/mixes/Korean.mp3
|
|
||||||
/home/user/mixes/Rock.mp3
|
|
||||||
/home/user/mixes/TheKellyFamily.mp3
|
|
||||||
/home/user/mixes/Prodigy.mp3
|
|
||||||
/home/user/mixes/Lata80_3.mp3
|
|
||||||
/home/user/mixes/Grunge.mp3
|
|
||||||
/home/user/mixes/Country2.mp3
|
|
||||||
/home/user/mixes/ProcolHarum.mp3
|
|
||||||
/home/user/mixes/Lata80.mp3
|
|
||||||
/home/user/mixes/Lata2010_2.mp3
|
|
||||||
/home/user/mixes/Szwedzka.mp3
|
|
||||||
/home/user/mixes/Akustycznie.mp3
|
|
||||||
/home/user/mixes/Lata70.mp3
|
|
||||||
/home/user/mixes/Lata90_4.mp3
|
|
||||||
/home/user/mixes/Aerosmith.mp3
|
|
||||||
/home/user/mixes/Country.mp3
|
|
||||||
/home/user/mixes/Polskie5.mp3
|
|
||||||
/home/user/mixes/TheBeatles.mp3
|
|
||||||
/home/user/mixes/Lata70_2.mp3
|
|
||||||
/home/user/mixes/Polskie9.m4a
|
|
||||||
/home/user/mixes/U2.mp3
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
/home/user/mixes/ShortlistaAkustycznie.m4a
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/Synthwave.mp3
|
|
||||||
/home/user/mixes/MuzykaCeltycka.m4a
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/Sade.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Synthwave3.mp3
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/Progresywnie.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa2.mp3
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
/home/user/mixes/ShortlistaAkustycznie.m4a
|
|
||||||
/home/user/mixes/VocalJazz2.mp3
|
|
||||||
/home/user/mixes/Alternatywnie.mp3
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Alternatywnie2.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/Soul3.mp3
|
|
||||||
/home/user/mixes/Polskie2.mp3
|
|
||||||
/home/user/mixes/MuzykaCeltycka.m4a
|
|
||||||
/home/user/mixes/WithinTemptation.mp3
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/Sade.mp3
|
|
||||||
/home/user/mixes/Alternatywnie3.mp3
|
|
||||||
/home/user/mixes/Lekkie5.m4a
|
|
||||||
/home/user/mixes/Polskie1.mp3
|
|
||||||
/home/user/mixes/Niemieckie.mp3
|
|
||||||
/home/user/mixes/Francuska.mp3
|
|
||||||
/home/user/mixes/Placebo.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/Progresywnie.mp3
|
|
||||||
/home/user/mixes/Progresywnie2.mp3
|
|
||||||
/home/user/mixes/Prodigy.mp3
|
|
||||||
/home/user/mixes/Grunge.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Nostalgia3.m4a
|
|
||||||
/home/user/mixes/ProcolHarum.mp3
|
|
||||||
/home/user/mixes/Soul.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Akustycznie.mp3
|
|
||||||
/home/user/mixes/VocalJazz3.mp3
|
|
||||||
/home/user/mixes/Ciezkie.mp3
|
|
||||||
/home/user/mixes/Soul2.mp3
|
|
||||||
/home/user/mixes/ChrisRea.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Polskie2010.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa2.mp3
|
|
||||||
@@ -1,129 +0,0 @@
|
|||||||
/home/user/mixes/Abba.mp3
|
|
||||||
/home/user/mixes/Aerosmith.mp3
|
|
||||||
/home/user/mixes/Akustycznie.mp3
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/AliciaKeys.mp3
|
|
||||||
/home/user/mixes/Alternatywnie.mp3
|
|
||||||
/home/user/mixes/Alternatywnie2.mp3
|
|
||||||
/home/user/mixes/Alternatywnie3.mp3
|
|
||||||
/home/user/mixes/Blink182.mp3
|
|
||||||
/home/user/mixes/Blues.mp3
|
|
||||||
/home/user/mixes/Blues2.mp3
|
|
||||||
/home/user/mixes/Blues3.mp3
|
|
||||||
/home/user/mixes/Blues4.mp3
|
|
||||||
/home/user/mixes/Blues5.mp3
|
|
||||||
/home/user/mixes/BonJovi.mp3
|
|
||||||
/home/user/mixes/BryanAdams.mp3
|
|
||||||
/home/user/mixes/ChrisRea.mp3
|
|
||||||
/home/user/mixes/Coldplay.mp3
|
|
||||||
/home/user/mixes/Country.mp3
|
|
||||||
/home/user/mixes/Country2.mp3
|
|
||||||
/home/user/mixes/DamskoMeskieDuety.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Dunska.mp3
|
|
||||||
/home/user/mixes/Enigma.mp3
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Finlandia.mp3
|
|
||||||
/home/user/mixes/Francuska.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Greenday.m4a
|
|
||||||
/home/user/mixes/Grunge.mp3
|
|
||||||
/home/user/mixes/Grunge2.mp3
|
|
||||||
/home/user/mixes/Grunge3.mp3
|
|
||||||
/home/user/mixes/GunsNRoses.m4a
|
|
||||||
/home/user/mixes/Hiszpanka.mp3
|
|
||||||
/home/user/mixes/Hiszpanska2.m4a
|
|
||||||
/home/user/mixes/Islandia.mp3
|
|
||||||
/home/user/mixes/Jamiroquai.mp3
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/KatyPerry.mp3
|
|
||||||
/home/user/mixes/Korean.mp3
|
|
||||||
/home/user/mixes/KylieMinogue.mp3
|
|
||||||
/home/user/mixes/Lata2000.mp3
|
|
||||||
/home/user/mixes/Lata2000_2.mp3
|
|
||||||
/home/user/mixes/Lata2000_3.mp3
|
|
||||||
/home/user/mixes/Lata2000_4.mp3
|
|
||||||
/home/user/mixes/Lata2000_5.mp3
|
|
||||||
/home/user/mixes/Lata2010.mp3
|
|
||||||
/home/user/mixes/Lata2010_2.mp3
|
|
||||||
/home/user/mixes/Lata2010_3.mp3
|
|
||||||
/home/user/mixes/Lata2010_4.mp3
|
|
||||||
/home/user/mixes/Lata2010_5.mp3
|
|
||||||
/home/user/mixes/Lata60.mp3
|
|
||||||
/home/user/mixes/Lata60_2.mp3
|
|
||||||
/home/user/mixes/Lata70.mp3
|
|
||||||
/home/user/mixes/Lata70_2.mp3
|
|
||||||
/home/user/mixes/Lata70_3.mp3
|
|
||||||
/home/user/mixes/Lata70_4.mp3
|
|
||||||
/home/user/mixes/Lata80.mp3
|
|
||||||
/home/user/mixes/Lata80_2.mp3
|
|
||||||
/home/user/mixes/Lata80_3.mp3
|
|
||||||
/home/user/mixes/Lata80_4.mp3
|
|
||||||
/home/user/mixes/Lata80_5.mp3
|
|
||||||
/home/user/mixes/Lata90.mp3
|
|
||||||
/home/user/mixes/Lata90_2.mp3
|
|
||||||
/home/user/mixes/Lata90_3.mp3
|
|
||||||
/home/user/mixes/Lata90_4.mp3
|
|
||||||
/home/user/mixes/Lata90_5.mp3
|
|
||||||
/home/user/mixes/Lata90_6.mp3
|
|
||||||
/home/user/mixes/LedZeppelin.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/Lekkie5.m4a
|
|
||||||
/home/user/mixes/LeonardCohen.m4a
|
|
||||||
/home/user/mixes/Madonna.mp3
|
|
||||||
/home/user/mixes/MariahCarey.mp3
|
|
||||||
/home/user/mixes/MediumlistaPolskieLata80.m4a
|
|
||||||
/home/user/mixes/Niemieckie.mp3
|
|
||||||
/home/user/mixes/Norweska.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Nostalgia3.m4a
|
|
||||||
/home/user/mixes/Oasis.mp3
|
|
||||||
/home/user/mixes/Paramore.mp3
|
|
||||||
/home/user/mixes/PinkFloyd.mp3
|
|
||||||
/home/user/mixes/Placebo.mp3
|
|
||||||
/home/user/mixes/Polskie1.mp3
|
|
||||||
/home/user/mixes/Polskie2.mp3
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/Polskie2010.mp3
|
|
||||||
/home/user/mixes/Polskie3.mp3
|
|
||||||
/home/user/mixes/Polskie4.mp3
|
|
||||||
/home/user/mixes/Polskie5.mp3
|
|
||||||
/home/user/mixes/Polskie6.m4a
|
|
||||||
/home/user/mixes/Polskie60.mp3
|
|
||||||
/home/user/mixes/Polskie7.m4a
|
|
||||||
/home/user/mixes/Polskie70.mp3
|
|
||||||
/home/user/mixes/Polskie8.m4a
|
|
||||||
/home/user/mixes/Polskie80.mp3
|
|
||||||
/home/user/mixes/Polskie9.m4a
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/Pop1.mp3
|
|
||||||
/home/user/mixes/Pop2.mp3
|
|
||||||
/home/user/mixes/Portugal.mp3
|
|
||||||
/home/user/mixes/ProcolHarum.mp3
|
|
||||||
/home/user/mixes/Prodigy.mp3
|
|
||||||
/home/user/mixes/Queen.mp3
|
|
||||||
/home/user/mixes/Rock.mp3
|
|
||||||
/home/user/mixes/Rock2.mp3
|
|
||||||
/home/user/mixes/Rock3.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/Romania.mp3
|
|
||||||
/home/user/mixes/Synthwave.mp3
|
|
||||||
/home/user/mixes/Synthwave2.mp3
|
|
||||||
/home/user/mixes/Synthwave4.m4a
|
|
||||||
/home/user/mixes/Szwedzka.mp3
|
|
||||||
/home/user/mixes/TheBeatles.mp3
|
|
||||||
/home/user/mixes/TheKellyFamily.mp3
|
|
||||||
/home/user/mixes/TheRollingStones.mp3
|
|
||||||
/home/user/mixes/U2.mp3
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/WithinTemptation.mp3
|
|
||||||
/home/user/mixes/Wloszczyzna.mp3
|
|
||||||
/home/user/mixes/Wloszczyzna2.mp3
|
|
||||||
/home/user/mixes/BruceSpringsteen.m4a
|
|
||||||
/home/user/mixes/JoeCocker.m4a
|
|
||||||
/home/user/mixes/Dzem.m4a
|
|
||||||
/home/user/mixes/Ciezkie.mp3
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/Progresywnie.mp3
|
|
||||||
/home/user/mixes/Sade.mp3
|
|
||||||
/home/user/mixes/ShortlistaAkustycznie.m4a
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/MuzykaCeltycka.m4a
|
|
||||||
/home/user/mixes/Muzykafilmowa.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa2.mp3
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/Synthwave.mp3
|
|
||||||
/home/user/mixes/Synthwave3.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
/home/user/mixes/Akustycznie.mp3
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/ChrisRea.mp3
|
|
||||||
/home/user/mixes/Ciezkie.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Francuska.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/Lekkie5.m4a
|
|
||||||
/home/user/mixes/Muzykafilmowa.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa2.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Nostalgia3.m4a
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/ProcolHarum.mp3
|
|
||||||
/home/user/mixes/Progresywnie.mp3
|
|
||||||
/home/user/mixes/Progresywnie2.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/Sade.mp3
|
|
||||||
/home/user/mixes/ShortlistaAkustycznie.m4a
|
|
||||||
/home/user/mixes/Soul.mp3
|
|
||||||
/home/user/mixes/Soul2.mp3
|
|
||||||
/home/user/mixes/Soul3.mp3
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/VocalJazz2.mp3
|
|
||||||
/home/user/mixes/VocalJazz3.mp3
|
|
||||||
/home/user/mixes/MuzykaCeltycka.m4a
|
|
||||||
/home/user/mixes/Muzykafilmowa.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa2.mp3
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Prodigy.mp3
|
|
||||||
/home/user/mixes/WithinTemptation.mp3
|
|
||||||
/home/user/mixes/Alternatywnie.mp3
|
|
||||||
/home/user/mixes/Alternatywnie2.mp3
|
|
||||||
/home/user/mixes/Alternatywnie3.mp3
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/Polskie2010.mp3
|
|
||||||
/home/user/mixes/Polskie1.mp3
|
|
||||||
/home/user/mixes/Polskie2.mp3
|
|
||||||
/home/user/mixes/Placebo.mp3
|
|
||||||
/home/user/mixes/Niemieckie.mp3
|
|
||||||
/home/user/mixes/Grunge.mp3
|
|
||||||
@@ -1,128 +0,0 @@
|
|||||||
/home/user/mixes/Grunge2.mp3
|
|
||||||
/home/user/mixes/Lata90_6.mp3
|
|
||||||
/home/user/mixes/Alternatywnie.mp3
|
|
||||||
/home/user/mixes/BonJovi.mp3
|
|
||||||
/home/user/mixes/Madonna.mp3
|
|
||||||
/home/user/mixes/Lata2010_4.mp3
|
|
||||||
/home/user/mixes/WithinTemptation.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/AliciaKeys.mp3
|
|
||||||
/home/user/mixes/Alternatywnie3.mp3
|
|
||||||
/home/user/mixes/Polskie60.mp3
|
|
||||||
/home/user/mixes/Blink182.mp3
|
|
||||||
/home/user/mixes/Polskie1.mp3
|
|
||||||
/home/user/mixes/Jamiroquai.mp3
|
|
||||||
/home/user/mixes/Finlandia.mp3
|
|
||||||
/home/user/mixes/Francuska.mp3
|
|
||||||
/home/user/mixes/Romania.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Polskie80.mp3
|
|
||||||
/home/user/mixes/Lata80_5.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Lata90_3.mp3
|
|
||||||
/home/user/mixes/Lata90.mp3
|
|
||||||
/home/user/mixes/Polskie70.mp3
|
|
||||||
/home/user/mixes/Abba.mp3
|
|
||||||
/home/user/mixes/Lata2010_3.mp3
|
|
||||||
/home/user/mixes/Polskie2010.mp3
|
|
||||||
/home/user/mixes/Blues2.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/Pop1.mp3
|
|
||||||
/home/user/mixes/Rock2.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/BruceSpringsteen.m4a
|
|
||||||
/home/user/mixes/Paramore.mp3
|
|
||||||
/home/user/mixes/Hiszpanka.mp3
|
|
||||||
/home/user/mixes/Synthwave2.mp3
|
|
||||||
/home/user/mixes/Lata2000.mp3
|
|
||||||
/home/user/mixes/BryanAdams.mp3
|
|
||||||
/home/user/mixes/Lata2000_3.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/Lata60.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/MariahCarey.mp3
|
|
||||||
/home/user/mixes/Hiszpanska2.m4a
|
|
||||||
/home/user/mixes/Wloszczyzna2.mp3
|
|
||||||
/home/user/mixes/Lata80_4.mp3
|
|
||||||
/home/user/mixes/LeonardCohen.m4a
|
|
||||||
/home/user/mixes/Lata70_3.mp3
|
|
||||||
/home/user/mixes/Polskie4.mp3
|
|
||||||
/home/user/mixes/Synthwave4.m4a
|
|
||||||
/home/user/mixes/Lata60_2.mp3
|
|
||||||
/home/user/mixes/Lata90_2.mp3
|
|
||||||
/home/user/mixes/Wloszczyzna.mp3
|
|
||||||
/home/user/mixes/Lata70_4.mp3
|
|
||||||
/home/user/mixes/Alternatywnie2.mp3
|
|
||||||
/home/user/mixes/Portugal.mp3
|
|
||||||
/home/user/mixes/Coldplay.mp3
|
|
||||||
/home/user/mixes/TheRollingStones.mp3
|
|
||||||
/home/user/mixes/Grunge3.mp3
|
|
||||||
/home/user/mixes/Blues.mp3
|
|
||||||
/home/user/mixes/Synthwave.mp3
|
|
||||||
/home/user/mixes/DamskoMeskieDuety.mp3
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/Greenday.m4a
|
|
||||||
/home/user/mixes/Lata2010_5.mp3
|
|
||||||
/home/user/mixes/Lata2000_2.mp3
|
|
||||||
/home/user/mixes/Dzem.m4a
|
|
||||||
/home/user/mixes/Polskie3.mp3
|
|
||||||
/home/user/mixes/Placebo.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Pop2.mp3
|
|
||||||
/home/user/mixes/Queen.mp3
|
|
||||||
/home/user/mixes/GunsNRoses.m4a
|
|
||||||
/home/user/mixes/Islandia.mp3
|
|
||||||
/home/user/mixes/KylieMinogue.mp3
|
|
||||||
/home/user/mixes/PinkFloyd.mp3
|
|
||||||
/home/user/mixes/JoeCocker.m4a
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Lata80_2.mp3
|
|
||||||
/home/user/mixes/Enigma.mp3
|
|
||||||
/home/user/mixes/Nostalgia3.m4a
|
|
||||||
/home/user/mixes/Blues3.mp3
|
|
||||||
/home/user/mixes/Blues4.mp3
|
|
||||||
/home/user/mixes/Lata90_5.mp3
|
|
||||||
/home/user/mixes/Lata2010.mp3
|
|
||||||
/home/user/mixes/Lata2000_4.mp3
|
|
||||||
/home/user/mixes/ChrisRea.mp3
|
|
||||||
/home/user/mixes/LedZeppelin.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Polskie6.m4a
|
|
||||||
/home/user/mixes/Rock3.mp3
|
|
||||||
/home/user/mixes/Dunska.mp3
|
|
||||||
/home/user/mixes/Norweska.mp3
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/Polskie2.mp3
|
|
||||||
/home/user/mixes/Oasis.mp3
|
|
||||||
/home/user/mixes/KatyPerry.mp3
|
|
||||||
/home/user/mixes/Lekkie5.m4a
|
|
||||||
/home/user/mixes/Niemieckie.mp3
|
|
||||||
/home/user/mixes/Blues5.mp3
|
|
||||||
/home/user/mixes/Polskie8.m4a
|
|
||||||
/home/user/mixes/MediumlistaPolskieLata80.m4a
|
|
||||||
/home/user/mixes/Lata2000_5.mp3
|
|
||||||
/home/user/mixes/Polskie7.m4a
|
|
||||||
/home/user/mixes/Korean.mp3
|
|
||||||
/home/user/mixes/Rock.mp3
|
|
||||||
/home/user/mixes/TheKellyFamily.mp3
|
|
||||||
/home/user/mixes/Prodigy.mp3
|
|
||||||
/home/user/mixes/Lata80_3.mp3
|
|
||||||
/home/user/mixes/Grunge.mp3
|
|
||||||
/home/user/mixes/Country2.mp3
|
|
||||||
/home/user/mixes/ProcolHarum.mp3
|
|
||||||
/home/user/mixes/Lata80.mp3
|
|
||||||
/home/user/mixes/Lata2010_2.mp3
|
|
||||||
/home/user/mixes/Szwedzka.mp3
|
|
||||||
/home/user/mixes/Akustycznie.mp3
|
|
||||||
/home/user/mixes/Lata70.mp3
|
|
||||||
/home/user/mixes/Lata90_4.mp3
|
|
||||||
/home/user/mixes/Aerosmith.mp3
|
|
||||||
/home/user/mixes/Country.mp3
|
|
||||||
/home/user/mixes/Polskie5.mp3
|
|
||||||
/home/user/mixes/TheBeatles.mp3
|
|
||||||
/home/user/mixes/Lata70_2.mp3
|
|
||||||
/home/user/mixes/Polskie9.m4a
|
|
||||||
/home/user/mixes/U2.mp3
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
/home/user/mixes/ShortlistaAkustycznie.m4a
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/Synthwave.mp3
|
|
||||||
/home/user/mixes/MuzykaCeltycka.m4a
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/Sade.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Synthwave3.mp3
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/Progresywnie.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa2.mp3
|
|
||||||
/home/user/mixes/Alternatywnie.mp3
|
|
||||||
/home/user/mixes/Alternatywnie2.mp3
|
|
||||||
/home/user/mixes/Alternatywnie3.mp3
|
|
||||||
/home/user/mixes/Grunge.mp3
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
/home/user/mixes/ShortlistaAkustycznie.m4a
|
|
||||||
/home/user/mixes/VocalJazz2.mp3
|
|
||||||
/home/user/mixes/Alternatywnie.mp3
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Alternatywnie2.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/Soul3.mp3
|
|
||||||
/home/user/mixes/Polskie2.mp3
|
|
||||||
/home/user/mixes/MuzykaCeltycka.m4a
|
|
||||||
/home/user/mixes/WithinTemptation.mp3
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/Sade.mp3
|
|
||||||
/home/user/mixes/Alternatywnie3.mp3
|
|
||||||
/home/user/mixes/Lekkie5.m4a
|
|
||||||
/home/user/mixes/Polskie1.mp3
|
|
||||||
/home/user/mixes/Niemieckie.mp3
|
|
||||||
/home/user/mixes/Francuska.mp3
|
|
||||||
/home/user/mixes/Placebo.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/Progresywnie.mp3
|
|
||||||
/home/user/mixes/Progresywnie2.mp3
|
|
||||||
/home/user/mixes/Prodigy.mp3
|
|
||||||
/home/user/mixes/Grunge.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Nostalgia3.m4a
|
|
||||||
/home/user/mixes/ProcolHarum.mp3
|
|
||||||
/home/user/mixes/Soul.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Akustycznie.mp3
|
|
||||||
/home/user/mixes/VocalJazz3.mp3
|
|
||||||
/home/user/mixes/Ciezkie.mp3
|
|
||||||
/home/user/mixes/Soul2.mp3
|
|
||||||
/home/user/mixes/ChrisRea.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Polskie2010.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa2.mp3
|
|
||||||
/home/user/mixes/Blink182.mp3
|
|
||||||
/home/user/mixes/Grunge2.mp3
|
|
||||||
/home/user/mixes/Grunge3.mp3
|
|
||||||
@@ -1,128 +0,0 @@
|
|||||||
/home/user/mixes/Grunge2.mp3
|
|
||||||
/home/user/mixes/Lata90_6.mp3
|
|
||||||
/home/user/mixes/Alternatywnie.mp3
|
|
||||||
/home/user/mixes/BonJovi.mp3
|
|
||||||
/home/user/mixes/Madonna.mp3
|
|
||||||
/home/user/mixes/Lata2010_4.mp3
|
|
||||||
/home/user/mixes/WithinTemptation.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/AliciaKeys.mp3
|
|
||||||
/home/user/mixes/Alternatywnie3.mp3
|
|
||||||
/home/user/mixes/Polskie60.mp3
|
|
||||||
/home/user/mixes/Blink182.mp3
|
|
||||||
/home/user/mixes/Polskie1.mp3
|
|
||||||
/home/user/mixes/Jamiroquai.mp3
|
|
||||||
/home/user/mixes/Finlandia.mp3
|
|
||||||
/home/user/mixes/Francuska.mp3
|
|
||||||
/home/user/mixes/Romania.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Polskie80.mp3
|
|
||||||
/home/user/mixes/Lata80_5.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Lata90_3.mp3
|
|
||||||
/home/user/mixes/Lata90.mp3
|
|
||||||
/home/user/mixes/Polskie70.mp3
|
|
||||||
/home/user/mixes/Abba.mp3
|
|
||||||
/home/user/mixes/Lata2010_3.mp3
|
|
||||||
/home/user/mixes/Polskie2010.mp3
|
|
||||||
/home/user/mixes/Blues2.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/Pop1.mp3
|
|
||||||
/home/user/mixes/Rock2.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/BruceSpringsteen.m4a
|
|
||||||
/home/user/mixes/Paramore.mp3
|
|
||||||
/home/user/mixes/Hiszpanka.mp3
|
|
||||||
/home/user/mixes/Synthwave2.mp3
|
|
||||||
/home/user/mixes/Lata2000.mp3
|
|
||||||
/home/user/mixes/BryanAdams.mp3
|
|
||||||
/home/user/mixes/Lata2000_3.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/Lata60.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/MariahCarey.mp3
|
|
||||||
/home/user/mixes/Hiszpanska2.m4a
|
|
||||||
/home/user/mixes/Wloszczyzna2.mp3
|
|
||||||
/home/user/mixes/Lata80_4.mp3
|
|
||||||
/home/user/mixes/LeonardCohen.m4a
|
|
||||||
/home/user/mixes/Lata70_3.mp3
|
|
||||||
/home/user/mixes/Polskie4.mp3
|
|
||||||
/home/user/mixes/Synthwave4.m4a
|
|
||||||
/home/user/mixes/Lata60_2.mp3
|
|
||||||
/home/user/mixes/Lata90_2.mp3
|
|
||||||
/home/user/mixes/Wloszczyzna.mp3
|
|
||||||
/home/user/mixes/Lata70_4.mp3
|
|
||||||
/home/user/mixes/Alternatywnie2.mp3
|
|
||||||
/home/user/mixes/Portugal.mp3
|
|
||||||
/home/user/mixes/Coldplay.mp3
|
|
||||||
/home/user/mixes/TheRollingStones.mp3
|
|
||||||
/home/user/mixes/Grunge3.mp3
|
|
||||||
/home/user/mixes/Blues.mp3
|
|
||||||
/home/user/mixes/Synthwave.mp3
|
|
||||||
/home/user/mixes/DamskoMeskieDuety.mp3
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/Greenday.m4a
|
|
||||||
/home/user/mixes/Lata2010_5.mp3
|
|
||||||
/home/user/mixes/Lata2000_2.mp3
|
|
||||||
/home/user/mixes/Dzem.m4a
|
|
||||||
/home/user/mixes/Polskie3.mp3
|
|
||||||
/home/user/mixes/Placebo.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Pop2.mp3
|
|
||||||
/home/user/mixes/Queen.mp3
|
|
||||||
/home/user/mixes/GunsNRoses.m4a
|
|
||||||
/home/user/mixes/Islandia.mp3
|
|
||||||
/home/user/mixes/KylieMinogue.mp3
|
|
||||||
/home/user/mixes/PinkFloyd.mp3
|
|
||||||
/home/user/mixes/JoeCocker.m4a
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Lata80_2.mp3
|
|
||||||
/home/user/mixes/Enigma.mp3
|
|
||||||
/home/user/mixes/Nostalgia3.m4a
|
|
||||||
/home/user/mixes/Blues3.mp3
|
|
||||||
/home/user/mixes/Blues4.mp3
|
|
||||||
/home/user/mixes/Lata90_5.mp3
|
|
||||||
/home/user/mixes/Lata2010.mp3
|
|
||||||
/home/user/mixes/Lata2000_4.mp3
|
|
||||||
/home/user/mixes/ChrisRea.mp3
|
|
||||||
/home/user/mixes/LedZeppelin.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Polskie6.m4a
|
|
||||||
/home/user/mixes/Rock3.mp3
|
|
||||||
/home/user/mixes/Dunska.mp3
|
|
||||||
/home/user/mixes/Norweska.mp3
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/Polskie2.mp3
|
|
||||||
/home/user/mixes/Oasis.mp3
|
|
||||||
/home/user/mixes/KatyPerry.mp3
|
|
||||||
/home/user/mixes/Lekkie5.m4a
|
|
||||||
/home/user/mixes/Niemieckie.mp3
|
|
||||||
/home/user/mixes/Blues5.mp3
|
|
||||||
/home/user/mixes/Polskie8.m4a
|
|
||||||
/home/user/mixes/MediumlistaPolskieLata80.m4a
|
|
||||||
/home/user/mixes/Lata2000_5.mp3
|
|
||||||
/home/user/mixes/Polskie7.m4a
|
|
||||||
/home/user/mixes/Korean.mp3
|
|
||||||
/home/user/mixes/Rock.mp3
|
|
||||||
/home/user/mixes/TheKellyFamily.mp3
|
|
||||||
/home/user/mixes/Prodigy.mp3
|
|
||||||
/home/user/mixes/Lata80_3.mp3
|
|
||||||
/home/user/mixes/Grunge.mp3
|
|
||||||
/home/user/mixes/Country2.mp3
|
|
||||||
/home/user/mixes/ProcolHarum.mp3
|
|
||||||
/home/user/mixes/Lata80.mp3
|
|
||||||
/home/user/mixes/Lata2010_2.mp3
|
|
||||||
/home/user/mixes/Szwedzka.mp3
|
|
||||||
/home/user/mixes/Akustycznie.mp3
|
|
||||||
/home/user/mixes/Lata70.mp3
|
|
||||||
/home/user/mixes/Lata90_4.mp3
|
|
||||||
/home/user/mixes/Aerosmith.mp3
|
|
||||||
/home/user/mixes/Country.mp3
|
|
||||||
/home/user/mixes/Polskie5.mp3
|
|
||||||
/home/user/mixes/TheBeatles.mp3
|
|
||||||
/home/user/mixes/Lata70_2.mp3
|
|
||||||
/home/user/mixes/Polskie9.m4a
|
|
||||||
/home/user/mixes/U2.mp3
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
/home/user/mixes/ShortlistaAkustycznie.m4a
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/Synthwave.mp3
|
|
||||||
/home/user/mixes/MuzykaCeltycka.m4a
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/Sade.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Synthwave3.mp3
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/Progresywnie.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa2.mp3
|
|
||||||
/home/user/mixes/Ciezkie.mp3
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
/home/user/mixes/ShortlistaAkustycznie.m4a
|
|
||||||
/home/user/mixes/VocalJazz2.mp3
|
|
||||||
/home/user/mixes/Alternatywnie.mp3
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Alternatywnie2.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/Soul3.mp3
|
|
||||||
/home/user/mixes/Polskie2.mp3
|
|
||||||
/home/user/mixes/MuzykaCeltycka.m4a
|
|
||||||
/home/user/mixes/WithinTemptation.mp3
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/Sade.mp3
|
|
||||||
/home/user/mixes/Alternatywnie3.mp3
|
|
||||||
/home/user/mixes/Lekkie5.m4a
|
|
||||||
/home/user/mixes/Polskie1.mp3
|
|
||||||
/home/user/mixes/Niemieckie.mp3
|
|
||||||
/home/user/mixes/Francuska.mp3
|
|
||||||
/home/user/mixes/Placebo.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/Progresywnie.mp3
|
|
||||||
/home/user/mixes/Progresywnie2.mp3
|
|
||||||
/home/user/mixes/Prodigy.mp3
|
|
||||||
/home/user/mixes/Grunge.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Nostalgia3.m4a
|
|
||||||
/home/user/mixes/ProcolHarum.mp3
|
|
||||||
/home/user/mixes/Soul.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Akustycznie.mp3
|
|
||||||
/home/user/mixes/VocalJazz3.mp3
|
|
||||||
/home/user/mixes/Ciezkie.mp3
|
|
||||||
/home/user/mixes/Soul2.mp3
|
|
||||||
/home/user/mixes/ChrisRea.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Polskie2010.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa2.mp3
|
|
||||||
@@ -1,128 +0,0 @@
|
|||||||
/home/user/mixes/Grunge2.mp3
|
|
||||||
/home/user/mixes/Lata90_6.mp3
|
|
||||||
/home/user/mixes/Alternatywnie.mp3
|
|
||||||
/home/user/mixes/BonJovi.mp3
|
|
||||||
/home/user/mixes/Madonna.mp3
|
|
||||||
/home/user/mixes/Lata2010_4.mp3
|
|
||||||
/home/user/mixes/WithinTemptation.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/AliciaKeys.mp3
|
|
||||||
/home/user/mixes/Alternatywnie3.mp3
|
|
||||||
/home/user/mixes/Polskie60.mp3
|
|
||||||
/home/user/mixes/Blink182.mp3
|
|
||||||
/home/user/mixes/Polskie1.mp3
|
|
||||||
/home/user/mixes/Jamiroquai.mp3
|
|
||||||
/home/user/mixes/Finlandia.mp3
|
|
||||||
/home/user/mixes/Francuska.mp3
|
|
||||||
/home/user/mixes/Romania.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Polskie80.mp3
|
|
||||||
/home/user/mixes/Lata80_5.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Lata90_3.mp3
|
|
||||||
/home/user/mixes/Lata90.mp3
|
|
||||||
/home/user/mixes/Polskie70.mp3
|
|
||||||
/home/user/mixes/Abba.mp3
|
|
||||||
/home/user/mixes/Lata2010_3.mp3
|
|
||||||
/home/user/mixes/Polskie2010.mp3
|
|
||||||
/home/user/mixes/Blues2.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/Pop1.mp3
|
|
||||||
/home/user/mixes/Rock2.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/BruceSpringsteen.m4a
|
|
||||||
/home/user/mixes/Paramore.mp3
|
|
||||||
/home/user/mixes/Hiszpanka.mp3
|
|
||||||
/home/user/mixes/Synthwave2.mp3
|
|
||||||
/home/user/mixes/Lata2000.mp3
|
|
||||||
/home/user/mixes/BryanAdams.mp3
|
|
||||||
/home/user/mixes/Lata2000_3.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/Lata60.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/MariahCarey.mp3
|
|
||||||
/home/user/mixes/Hiszpanska2.m4a
|
|
||||||
/home/user/mixes/Wloszczyzna2.mp3
|
|
||||||
/home/user/mixes/Lata80_4.mp3
|
|
||||||
/home/user/mixes/LeonardCohen.m4a
|
|
||||||
/home/user/mixes/Lata70_3.mp3
|
|
||||||
/home/user/mixes/Polskie4.mp3
|
|
||||||
/home/user/mixes/Synthwave4.m4a
|
|
||||||
/home/user/mixes/Lata60_2.mp3
|
|
||||||
/home/user/mixes/Lata90_2.mp3
|
|
||||||
/home/user/mixes/Wloszczyzna.mp3
|
|
||||||
/home/user/mixes/Lata70_4.mp3
|
|
||||||
/home/user/mixes/Alternatywnie2.mp3
|
|
||||||
/home/user/mixes/Portugal.mp3
|
|
||||||
/home/user/mixes/Coldplay.mp3
|
|
||||||
/home/user/mixes/TheRollingStones.mp3
|
|
||||||
/home/user/mixes/Grunge3.mp3
|
|
||||||
/home/user/mixes/Blues.mp3
|
|
||||||
/home/user/mixes/Synthwave.mp3
|
|
||||||
/home/user/mixes/DamskoMeskieDuety.mp3
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/Greenday.m4a
|
|
||||||
/home/user/mixes/Lata2010_5.mp3
|
|
||||||
/home/user/mixes/Lata2000_2.mp3
|
|
||||||
/home/user/mixes/Dzem.m4a
|
|
||||||
/home/user/mixes/Polskie3.mp3
|
|
||||||
/home/user/mixes/Placebo.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Pop2.mp3
|
|
||||||
/home/user/mixes/Queen.mp3
|
|
||||||
/home/user/mixes/GunsNRoses.m4a
|
|
||||||
/home/user/mixes/Islandia.mp3
|
|
||||||
/home/user/mixes/KylieMinogue.mp3
|
|
||||||
/home/user/mixes/PinkFloyd.mp3
|
|
||||||
/home/user/mixes/JoeCocker.m4a
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Lata80_2.mp3
|
|
||||||
/home/user/mixes/Enigma.mp3
|
|
||||||
/home/user/mixes/Nostalgia3.m4a
|
|
||||||
/home/user/mixes/Blues3.mp3
|
|
||||||
/home/user/mixes/Blues4.mp3
|
|
||||||
/home/user/mixes/Lata90_5.mp3
|
|
||||||
/home/user/mixes/Lata2010.mp3
|
|
||||||
/home/user/mixes/Lata2000_4.mp3
|
|
||||||
/home/user/mixes/ChrisRea.mp3
|
|
||||||
/home/user/mixes/LedZeppelin.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Polskie6.m4a
|
|
||||||
/home/user/mixes/Rock3.mp3
|
|
||||||
/home/user/mixes/Dunska.mp3
|
|
||||||
/home/user/mixes/Norweska.mp3
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/Polskie2.mp3
|
|
||||||
/home/user/mixes/Oasis.mp3
|
|
||||||
/home/user/mixes/KatyPerry.mp3
|
|
||||||
/home/user/mixes/Lekkie5.m4a
|
|
||||||
/home/user/mixes/Niemieckie.mp3
|
|
||||||
/home/user/mixes/Blues5.mp3
|
|
||||||
/home/user/mixes/Polskie8.m4a
|
|
||||||
/home/user/mixes/MediumlistaPolskieLata80.m4a
|
|
||||||
/home/user/mixes/Lata2000_5.mp3
|
|
||||||
/home/user/mixes/Polskie7.m4a
|
|
||||||
/home/user/mixes/Korean.mp3
|
|
||||||
/home/user/mixes/Rock.mp3
|
|
||||||
/home/user/mixes/TheKellyFamily.mp3
|
|
||||||
/home/user/mixes/Prodigy.mp3
|
|
||||||
/home/user/mixes/Lata80_3.mp3
|
|
||||||
/home/user/mixes/Grunge.mp3
|
|
||||||
/home/user/mixes/Country2.mp3
|
|
||||||
/home/user/mixes/ProcolHarum.mp3
|
|
||||||
/home/user/mixes/Lata80.mp3
|
|
||||||
/home/user/mixes/Lata2010_2.mp3
|
|
||||||
/home/user/mixes/Szwedzka.mp3
|
|
||||||
/home/user/mixes/Akustycznie.mp3
|
|
||||||
/home/user/mixes/Lata70.mp3
|
|
||||||
/home/user/mixes/Lata90_4.mp3
|
|
||||||
/home/user/mixes/Aerosmith.mp3
|
|
||||||
/home/user/mixes/Country.mp3
|
|
||||||
/home/user/mixes/Polskie5.mp3
|
|
||||||
/home/user/mixes/TheBeatles.mp3
|
|
||||||
/home/user/mixes/Lata70_2.mp3
|
|
||||||
/home/user/mixes/Polskie9.m4a
|
|
||||||
/home/user/mixes/U2.mp3
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
/home/user/mixes/ShortlistaAkustycznie.m4a
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/Synthwave.mp3
|
|
||||||
/home/user/mixes/MuzykaCeltycka.m4a
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/Sade.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Synthwave3.mp3
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/Progresywnie.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa2.mp3
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
/home/user/mixes/ShortlistaAkustycznie.m4a
|
|
||||||
/home/user/mixes/VocalJazz2.mp3
|
|
||||||
/home/user/mixes/Alternatywnie.mp3
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Alternatywnie2.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/Soul3.mp3
|
|
||||||
/home/user/mixes/Polskie2.mp3
|
|
||||||
/home/user/mixes/MuzykaCeltycka.m4a
|
|
||||||
/home/user/mixes/WithinTemptation.mp3
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/Sade.mp3
|
|
||||||
/home/user/mixes/Alternatywnie3.mp3
|
|
||||||
/home/user/mixes/Lekkie5.m4a
|
|
||||||
/home/user/mixes/Polskie1.mp3
|
|
||||||
/home/user/mixes/Niemieckie.mp3
|
|
||||||
/home/user/mixes/Francuska.mp3
|
|
||||||
/home/user/mixes/Placebo.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/Progresywnie.mp3
|
|
||||||
/home/user/mixes/Progresywnie2.mp3
|
|
||||||
/home/user/mixes/Prodigy.mp3
|
|
||||||
/home/user/mixes/Grunge.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Nostalgia3.m4a
|
|
||||||
/home/user/mixes/ProcolHarum.mp3
|
|
||||||
/home/user/mixes/Soul.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Akustycznie.mp3
|
|
||||||
/home/user/mixes/VocalJazz3.mp3
|
|
||||||
/home/user/mixes/Ciezkie.mp3
|
|
||||||
/home/user/mixes/Soul2.mp3
|
|
||||||
/home/user/mixes/ChrisRea.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Polskie2010.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa2.mp3
|
|
||||||
@@ -1,128 +0,0 @@
|
|||||||
/home/user/mixes/Grunge2.mp3
|
|
||||||
/home/user/mixes/Lata90_6.mp3
|
|
||||||
/home/user/mixes/Alternatywnie.mp3
|
|
||||||
/home/user/mixes/BonJovi.mp3
|
|
||||||
/home/user/mixes/Madonna.mp3
|
|
||||||
/home/user/mixes/Lata2010_4.mp3
|
|
||||||
/home/user/mixes/WithinTemptation.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/AliciaKeys.mp3
|
|
||||||
/home/user/mixes/Alternatywnie3.mp3
|
|
||||||
/home/user/mixes/Polskie60.mp3
|
|
||||||
/home/user/mixes/Blink182.mp3
|
|
||||||
/home/user/mixes/Polskie1.mp3
|
|
||||||
/home/user/mixes/Jamiroquai.mp3
|
|
||||||
/home/user/mixes/Finlandia.mp3
|
|
||||||
/home/user/mixes/Francuska.mp3
|
|
||||||
/home/user/mixes/Romania.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Polskie80.mp3
|
|
||||||
/home/user/mixes/Lata80_5.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Lata90_3.mp3
|
|
||||||
/home/user/mixes/Lata90.mp3
|
|
||||||
/home/user/mixes/Polskie70.mp3
|
|
||||||
/home/user/mixes/Abba.mp3
|
|
||||||
/home/user/mixes/Lata2010_3.mp3
|
|
||||||
/home/user/mixes/Polskie2010.mp3
|
|
||||||
/home/user/mixes/Blues2.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/Pop1.mp3
|
|
||||||
/home/user/mixes/Rock2.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/BruceSpringsteen.m4a
|
|
||||||
/home/user/mixes/Paramore.mp3
|
|
||||||
/home/user/mixes/Hiszpanka.mp3
|
|
||||||
/home/user/mixes/Synthwave2.mp3
|
|
||||||
/home/user/mixes/Lata2000.mp3
|
|
||||||
/home/user/mixes/BryanAdams.mp3
|
|
||||||
/home/user/mixes/Lata2000_3.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/Lata60.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/MariahCarey.mp3
|
|
||||||
/home/user/mixes/Hiszpanska2.m4a
|
|
||||||
/home/user/mixes/Wloszczyzna2.mp3
|
|
||||||
/home/user/mixes/Lata80_4.mp3
|
|
||||||
/home/user/mixes/LeonardCohen.m4a
|
|
||||||
/home/user/mixes/Lata70_3.mp3
|
|
||||||
/home/user/mixes/Polskie4.mp3
|
|
||||||
/home/user/mixes/Synthwave4.m4a
|
|
||||||
/home/user/mixes/Lata60_2.mp3
|
|
||||||
/home/user/mixes/Lata90_2.mp3
|
|
||||||
/home/user/mixes/Wloszczyzna.mp3
|
|
||||||
/home/user/mixes/Lata70_4.mp3
|
|
||||||
/home/user/mixes/Alternatywnie2.mp3
|
|
||||||
/home/user/mixes/Portugal.mp3
|
|
||||||
/home/user/mixes/Coldplay.mp3
|
|
||||||
/home/user/mixes/TheRollingStones.mp3
|
|
||||||
/home/user/mixes/Grunge3.mp3
|
|
||||||
/home/user/mixes/Blues.mp3
|
|
||||||
/home/user/mixes/Synthwave.mp3
|
|
||||||
/home/user/mixes/DamskoMeskieDuety.mp3
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/Greenday.m4a
|
|
||||||
/home/user/mixes/Lata2010_5.mp3
|
|
||||||
/home/user/mixes/Lata2000_2.mp3
|
|
||||||
/home/user/mixes/Dzem.m4a
|
|
||||||
/home/user/mixes/Polskie3.mp3
|
|
||||||
/home/user/mixes/Placebo.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Pop2.mp3
|
|
||||||
/home/user/mixes/Queen.mp3
|
|
||||||
/home/user/mixes/GunsNRoses.m4a
|
|
||||||
/home/user/mixes/Islandia.mp3
|
|
||||||
/home/user/mixes/KylieMinogue.mp3
|
|
||||||
/home/user/mixes/PinkFloyd.mp3
|
|
||||||
/home/user/mixes/JoeCocker.m4a
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Lata80_2.mp3
|
|
||||||
/home/user/mixes/Enigma.mp3
|
|
||||||
/home/user/mixes/Nostalgia3.m4a
|
|
||||||
/home/user/mixes/Blues3.mp3
|
|
||||||
/home/user/mixes/Blues4.mp3
|
|
||||||
/home/user/mixes/Lata90_5.mp3
|
|
||||||
/home/user/mixes/Lata2010.mp3
|
|
||||||
/home/user/mixes/Lata2000_4.mp3
|
|
||||||
/home/user/mixes/ChrisRea.mp3
|
|
||||||
/home/user/mixes/LedZeppelin.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Polskie6.m4a
|
|
||||||
/home/user/mixes/Rock3.mp3
|
|
||||||
/home/user/mixes/Dunska.mp3
|
|
||||||
/home/user/mixes/Norweska.mp3
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/Polskie2.mp3
|
|
||||||
/home/user/mixes/Oasis.mp3
|
|
||||||
/home/user/mixes/KatyPerry.mp3
|
|
||||||
/home/user/mixes/Lekkie5.m4a
|
|
||||||
/home/user/mixes/Niemieckie.mp3
|
|
||||||
/home/user/mixes/Blues5.mp3
|
|
||||||
/home/user/mixes/Polskie8.m4a
|
|
||||||
/home/user/mixes/MediumlistaPolskieLata80.m4a
|
|
||||||
/home/user/mixes/Lata2000_5.mp3
|
|
||||||
/home/user/mixes/Polskie7.m4a
|
|
||||||
/home/user/mixes/Korean.mp3
|
|
||||||
/home/user/mixes/Rock.mp3
|
|
||||||
/home/user/mixes/TheKellyFamily.mp3
|
|
||||||
/home/user/mixes/Prodigy.mp3
|
|
||||||
/home/user/mixes/Lata80_3.mp3
|
|
||||||
/home/user/mixes/Grunge.mp3
|
|
||||||
/home/user/mixes/Country2.mp3
|
|
||||||
/home/user/mixes/ProcolHarum.mp3
|
|
||||||
/home/user/mixes/Lata80.mp3
|
|
||||||
/home/user/mixes/Lata2010_2.mp3
|
|
||||||
/home/user/mixes/Szwedzka.mp3
|
|
||||||
/home/user/mixes/Akustycznie.mp3
|
|
||||||
/home/user/mixes/Lata70.mp3
|
|
||||||
/home/user/mixes/Lata90_4.mp3
|
|
||||||
/home/user/mixes/Aerosmith.mp3
|
|
||||||
/home/user/mixes/Country.mp3
|
|
||||||
/home/user/mixes/Polskie5.mp3
|
|
||||||
/home/user/mixes/TheBeatles.mp3
|
|
||||||
/home/user/mixes/Lata70_2.mp3
|
|
||||||
/home/user/mixes/Polskie9.m4a
|
|
||||||
/home/user/mixes/U2.mp3
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
/home/user/mixes/ShortlistaAkustycznie.m4a
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/Synthwave.mp3
|
|
||||||
/home/user/mixes/MuzykaCeltycka.m4a
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/Sade.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Synthwave3.mp3
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/Progresywnie.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa2.mp3
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
/home/user/mixes/ShortlistaAkustycznie.m4a
|
|
||||||
/home/user/mixes/VocalJazz2.mp3
|
|
||||||
/home/user/mixes/Alternatywnie.mp3
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Alternatywnie2.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/Soul3.mp3
|
|
||||||
/home/user/mixes/Polskie2.mp3
|
|
||||||
/home/user/mixes/MuzykaCeltycka.m4a
|
|
||||||
/home/user/mixes/WithinTemptation.mp3
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/Sade.mp3
|
|
||||||
/home/user/mixes/Alternatywnie3.mp3
|
|
||||||
/home/user/mixes/Lekkie5.m4a
|
|
||||||
/home/user/mixes/Polskie1.mp3
|
|
||||||
/home/user/mixes/Niemieckie.mp3
|
|
||||||
/home/user/mixes/Francuska.mp3
|
|
||||||
/home/user/mixes/Placebo.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/Progresywnie.mp3
|
|
||||||
/home/user/mixes/Progresywnie2.mp3
|
|
||||||
/home/user/mixes/Prodigy.mp3
|
|
||||||
/home/user/mixes/Grunge.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Nostalgia3.m4a
|
|
||||||
/home/user/mixes/ProcolHarum.mp3
|
|
||||||
/home/user/mixes/Soul.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Akustycznie.mp3
|
|
||||||
/home/user/mixes/VocalJazz3.mp3
|
|
||||||
/home/user/mixes/Ciezkie.mp3
|
|
||||||
/home/user/mixes/Soul2.mp3
|
|
||||||
/home/user/mixes/ChrisRea.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Polskie2010.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa2.mp3
|
|
||||||
399
playlists/tui.py
399
playlists/tui.py
@@ -1,399 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import termios
|
|
||||||
import tty
|
|
||||||
import signal
|
|
||||||
import shutil
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
def get_audio_files(directory):
|
|
||||||
"""Get all mp3 and m4a files from the specified directory"""
|
|
||||||
audio_files = []
|
|
||||||
try:
|
|
||||||
for file in os.listdir(directory):
|
|
||||||
if file.lower().endswith(('.mp3', '.m4a')):
|
|
||||||
audio_files.append(file)
|
|
||||||
return sorted(audio_files)
|
|
||||||
except FileNotFoundError:
|
|
||||||
print(f"Error: Directory '{directory}' not found.")
|
|
||||||
return []
|
|
||||||
except PermissionError:
|
|
||||||
print(f"Error: Permission denied for directory '{directory}'.")
|
|
||||||
return []
|
|
||||||
|
|
||||||
def get_char():
|
|
||||||
"""Get a single character from standard input"""
|
|
||||||
fd = sys.stdin.fileno()
|
|
||||||
old_settings = termios.tcgetattr(fd)
|
|
||||||
try:
|
|
||||||
tty.setraw(sys.stdin.fileno())
|
|
||||||
ch = sys.stdin.read(1)
|
|
||||||
finally:
|
|
||||||
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
|
|
||||||
return ch
|
|
||||||
|
|
||||||
def clear_screen():
|
|
||||||
"""Clear the terminal screen"""
|
|
||||||
print("\033c", end="")
|
|
||||||
|
|
||||||
def get_terminal_size():
|
|
||||||
"""Get the current terminal size"""
|
|
||||||
return shutil.get_terminal_size()
|
|
||||||
|
|
||||||
def get_days_of_week():
|
|
||||||
"""Get list of days of the week starting from today"""
|
|
||||||
days = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]
|
|
||||||
today = datetime.now().weekday() # 0 is Monday, 6 is Sunday
|
|
||||||
# Reorder days so today is first
|
|
||||||
return days[today:] + days[:today]
|
|
||||||
|
|
||||||
def ensure_playlist_dir(day):
|
|
||||||
"""Ensure playlist directory exists for the given day"""
|
|
||||||
playlist_dir = os.path.expanduser(f"~/playlists/{day}")
|
|
||||||
if not os.path.exists(playlist_dir):
|
|
||||||
os.makedirs(playlist_dir)
|
|
||||||
return playlist_dir
|
|
||||||
|
|
||||||
def update_playlist_file(day, period, filepath, add):
|
|
||||||
"""Add or remove a file from a playlist"""
|
|
||||||
# Ensure day directory exists
|
|
||||||
playlist_dir = ensure_playlist_dir(day)
|
|
||||||
playlist_file = os.path.join(playlist_dir, period)
|
|
||||||
|
|
||||||
# Get full path of the audio file
|
|
||||||
full_filepath = os.path.join("/home/user/mixes", filepath)
|
|
||||||
|
|
||||||
# Create file if it doesn't exist
|
|
||||||
if not os.path.exists(playlist_file):
|
|
||||||
with open(playlist_file, 'w') as f:
|
|
||||||
pass
|
|
||||||
|
|
||||||
# Read current playlist content
|
|
||||||
with open(playlist_file, 'r') as f:
|
|
||||||
lines = f.read().splitlines()
|
|
||||||
|
|
||||||
# Add or remove file
|
|
||||||
if add and full_filepath not in lines:
|
|
||||||
lines.append(full_filepath)
|
|
||||||
elif not add and full_filepath in lines:
|
|
||||||
lines.remove(full_filepath)
|
|
||||||
|
|
||||||
# Write updated playlist back to file
|
|
||||||
with open(playlist_file, 'w') as f:
|
|
||||||
f.write('\n'.join(lines) + ('\n' if lines else ''))
|
|
||||||
|
|
||||||
def load_playlists(days):
|
|
||||||
"""Load existing playlists for all days"""
|
|
||||||
playlists = {}
|
|
||||||
for day in days:
|
|
||||||
playlists[day] = {'day': set(), 'night': set(), 'late_night': set()}
|
|
||||||
playlist_dir = os.path.expanduser(f"~/playlists/{day}")
|
|
||||||
|
|
||||||
if os.path.exists(playlist_dir):
|
|
||||||
for period in ['day', 'night', 'late_night']:
|
|
||||||
playlist_file = os.path.join(playlist_dir, period)
|
|
||||||
if os.path.exists(playlist_file):
|
|
||||||
with open(playlist_file, 'r') as f:
|
|
||||||
for line in f:
|
|
||||||
line = line.strip()
|
|
||||||
if line:
|
|
||||||
# Extract filename only
|
|
||||||
filename = os.path.basename(line)
|
|
||||||
playlists[day][period].add(filename)
|
|
||||||
|
|
||||||
return playlists
|
|
||||||
|
|
||||||
def copy_day_to_all(playlists, source_day, days, audio_files):
|
|
||||||
"""Copy playlists from source day to all other days"""
|
|
||||||
periods = ['day', 'night', 'late_night']
|
|
||||||
|
|
||||||
for target_day in days:
|
|
||||||
if target_day == source_day:
|
|
||||||
continue
|
|
||||||
|
|
||||||
for period in periods:
|
|
||||||
# Clear target day's period playlist
|
|
||||||
target_dir = ensure_playlist_dir(target_day)
|
|
||||||
target_file = os.path.join(target_dir, period)
|
|
||||||
|
|
||||||
# Get files to write
|
|
||||||
filepaths = []
|
|
||||||
for filename in playlists[source_day][period]:
|
|
||||||
full_path = os.path.join("/home/user/mixes", filename)
|
|
||||||
filepaths.append(full_path)
|
|
||||||
|
|
||||||
# Update the target playlist file
|
|
||||||
with open(target_file, 'w') as f:
|
|
||||||
f.write('\n'.join(filepaths) + ('\n' if filepaths else ''))
|
|
||||||
|
|
||||||
# Update the playlists dictionary to match
|
|
||||||
playlists[target_day][period] = set(playlists[source_day][period])
|
|
||||||
|
|
||||||
return playlists
|
|
||||||
|
|
||||||
def copy_current_file_to_all(playlists, source_day, days, current_file):
|
|
||||||
"""Sync current file's presence in all days based on source_day's state"""
|
|
||||||
# Get the source day's state for each period
|
|
||||||
source_periods = {
|
|
||||||
'day': current_file in playlists[source_day]['day'],
|
|
||||||
'night': current_file in playlists[source_day]['night'],
|
|
||||||
'late_night': current_file in playlists[source_day]['late_night']
|
|
||||||
}
|
|
||||||
|
|
||||||
# If file isn't in any playlist of the source day, return
|
|
||||||
if not any(source_periods.values()):
|
|
||||||
return playlists, False
|
|
||||||
|
|
||||||
# Sync to all other days
|
|
||||||
for target_day in days:
|
|
||||||
if target_day == source_day:
|
|
||||||
continue
|
|
||||||
|
|
||||||
for period, is_present in source_periods.items():
|
|
||||||
target_set = playlists[target_day][period]
|
|
||||||
full_path = os.path.join("/home/user/mixes", current_file)
|
|
||||||
|
|
||||||
# Update the in-memory playlist
|
|
||||||
if is_present:
|
|
||||||
target_set.add(current_file)
|
|
||||||
else:
|
|
||||||
target_set.discard(current_file)
|
|
||||||
|
|
||||||
# Update the physical file
|
|
||||||
playlist_dir = ensure_playlist_dir(target_day)
|
|
||||||
playlist_file = os.path.join(playlist_dir, period)
|
|
||||||
|
|
||||||
# Read existing content
|
|
||||||
if os.path.exists(playlist_file):
|
|
||||||
with open(playlist_file, 'r') as f:
|
|
||||||
lines = [line.strip() for line in f.readlines()]
|
|
||||||
else:
|
|
||||||
lines = []
|
|
||||||
|
|
||||||
# Add or remove the file
|
|
||||||
if is_present and full_path not in lines:
|
|
||||||
lines.append(full_path)
|
|
||||||
elif not is_present:
|
|
||||||
while full_path in lines:
|
|
||||||
lines.remove(full_path)
|
|
||||||
|
|
||||||
# Write updated content
|
|
||||||
with open(playlist_file, 'w') as f:
|
|
||||||
f.write('\n'.join(lines) + ('\n' if lines else ''))
|
|
||||||
|
|
||||||
return playlists, True
|
|
||||||
|
|
||||||
def draw_interface(audio_files, playlists, selected_idx, current_day_idx, scroll_offset, message=None):
|
|
||||||
"""Draw the TUI interface with day-of-week sections"""
|
|
||||||
clear_screen()
|
|
||||||
term_width, term_height = get_terminal_size()
|
|
||||||
days = get_days_of_week()
|
|
||||||
current_day = days[current_day_idx]
|
|
||||||
|
|
||||||
# Calculate visible range with scrolling
|
|
||||||
available_lines = term_height - 5 # Header + status lines + message + footer
|
|
||||||
start_idx = max(0, min(scroll_offset, len(audio_files) - available_lines))
|
|
||||||
end_idx = min(start_idx + available_lines, len(audio_files))
|
|
||||||
|
|
||||||
# Day navigation bar
|
|
||||||
day_bar = ""
|
|
||||||
for i, day in enumerate(days):
|
|
||||||
if i == current_day_idx:
|
|
||||||
day_bar += f"\033[1;44m[{day}]\033[0m "
|
|
||||||
else:
|
|
||||||
day_bar += f"[{day}] "
|
|
||||||
print(day_bar.strip())
|
|
||||||
|
|
||||||
# Controls and info line
|
|
||||||
print(f"UP/DOWN: Navigate | D/N/L: Toggle | C: Copy day to all | F: Copy file to all | Q: Quit")
|
|
||||||
|
|
||||||
# Display scroll indicators if needed
|
|
||||||
if start_idx > 0:
|
|
||||||
print("↑", end="")
|
|
||||||
else:
|
|
||||||
print(" ", end="")
|
|
||||||
|
|
||||||
# Display position info in the middle
|
|
||||||
position_info = f" {current_day.capitalize()} | File {selected_idx + 1}/{len(audio_files)} "
|
|
||||||
padding = term_width - len(position_info) - 2 # 2 for scroll indicators
|
|
||||||
print(position_info.center(padding), end="")
|
|
||||||
|
|
||||||
# Display scroll indicator if more files below
|
|
||||||
if end_idx < len(audio_files):
|
|
||||||
print("↓")
|
|
||||||
else:
|
|
||||||
print(" ")
|
|
||||||
|
|
||||||
# Display message if provided
|
|
||||||
if message:
|
|
||||||
print(f"\033[1;32m{message}\033[0m")
|
|
||||||
else:
|
|
||||||
print() # Empty line for consistent spacing
|
|
||||||
|
|
||||||
# Display visible files
|
|
||||||
for idx in range(start_idx, end_idx):
|
|
||||||
file = audio_files[idx]
|
|
||||||
|
|
||||||
# Check if file is in playlists
|
|
||||||
in_day = file in playlists[current_day]['day']
|
|
||||||
in_night = file in playlists[current_day]['night']
|
|
||||||
in_late_night = file in playlists[current_day]['late_night']
|
|
||||||
|
|
||||||
d_color = "\033[1;32m" if in_day else "\033[1;30m"
|
|
||||||
n_color = "\033[1;32m" if in_night else "\033[1;30m"
|
|
||||||
l_color = "\033[1;32m" if in_late_night else "\033[1;30m"
|
|
||||||
|
|
||||||
# Row highlighting for current selection
|
|
||||||
if idx == selected_idx:
|
|
||||||
row_highlight = "\033[1;44m" # Blue background
|
|
||||||
else:
|
|
||||||
row_highlight = ""
|
|
||||||
|
|
||||||
# Truncate filename if too long for the terminal width
|
|
||||||
max_filename_length = term_width - 15 # Account for the selector buttons and spacing
|
|
||||||
if len(file) > max_filename_length:
|
|
||||||
file = file[:max_filename_length-3] + "..."
|
|
||||||
|
|
||||||
print(f"{row_highlight}[{d_color}D\033[0m{row_highlight}] [{n_color}N\033[0m{row_highlight}] [{l_color}L\033[0m{row_highlight}] {file}\033[0m")
|
|
||||||
|
|
||||||
def main():
|
|
||||||
"""Main function to run the TUI"""
|
|
||||||
directory = "/home/user/mixes"
|
|
||||||
audio_files = get_audio_files(directory)
|
|
||||||
|
|
||||||
if not audio_files:
|
|
||||||
print("No audio files found. Exiting.")
|
|
||||||
return
|
|
||||||
|
|
||||||
days_of_week = get_days_of_week()
|
|
||||||
playlists = load_playlists(days_of_week)
|
|
||||||
|
|
||||||
selected_idx = 0 # Currently selected file index
|
|
||||||
current_day_idx = 0 # Currently displayed day (0 = today)
|
|
||||||
scroll_offset = 0 # Starting scroll position
|
|
||||||
flash_message = None # Message to display
|
|
||||||
message_timer = 0 # Timer to clear the message
|
|
||||||
|
|
||||||
# Handle Ctrl+C gracefully
|
|
||||||
def signal_handler(sig, frame):
|
|
||||||
clear_screen()
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
signal.signal(signal.SIGINT, signal_handler)
|
|
||||||
|
|
||||||
# Main loop
|
|
||||||
while True:
|
|
||||||
term_width, term_height = get_terminal_size()
|
|
||||||
visible_lines = term_height - 5 # Adjust for header, message and footer
|
|
||||||
|
|
||||||
# Adjust scroll offset to keep selected item visible
|
|
||||||
if selected_idx < scroll_offset:
|
|
||||||
scroll_offset = selected_idx
|
|
||||||
elif selected_idx >= scroll_offset + visible_lines:
|
|
||||||
scroll_offset = selected_idx - visible_lines + 1
|
|
||||||
|
|
||||||
# Draw the interface
|
|
||||||
draw_interface(audio_files, playlists, selected_idx, current_day_idx, scroll_offset, flash_message)
|
|
||||||
|
|
||||||
# Clear message after a short time (faster)
|
|
||||||
if flash_message:
|
|
||||||
message_timer += 1
|
|
||||||
if message_timer > 1: # Clear after 2 renders (faster)
|
|
||||||
flash_message = None
|
|
||||||
message_timer = 0
|
|
||||||
|
|
||||||
# Get user input
|
|
||||||
key = get_char()
|
|
||||||
|
|
||||||
if key == 'q': # Quit
|
|
||||||
clear_screen()
|
|
||||||
break
|
|
||||||
elif key == '\x1b': # Escape sequence for arrow keys
|
|
||||||
next_key = get_char()
|
|
||||||
if next_key == '[':
|
|
||||||
arrow_key = get_char()
|
|
||||||
if arrow_key == 'A': # Up arrow
|
|
||||||
selected_idx = max(0, selected_idx - 1)
|
|
||||||
elif arrow_key == 'B': # Down arrow
|
|
||||||
selected_idx = min(len(audio_files) - 1, selected_idx + 1)
|
|
||||||
elif arrow_key == 'C': # Right arrow - next day
|
|
||||||
current_day_idx = (current_day_idx + 1) % len(days_of_week)
|
|
||||||
elif arrow_key == 'D': # Left arrow - previous day
|
|
||||||
current_day_idx = (current_day_idx - 1) % len(days_of_week)
|
|
||||||
elif arrow_key == '5': # Page Up
|
|
||||||
try:
|
|
||||||
next_key = get_char() # Consume the trailing ~ character
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
selected_idx = max(0, selected_idx - visible_lines)
|
|
||||||
elif arrow_key == '6': # Page Down
|
|
||||||
try:
|
|
||||||
next_key = get_char() # Consume the trailing ~ character
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
selected_idx = min(len(audio_files) - 1, selected_idx + visible_lines)
|
|
||||||
elif key == ' ': # Space for Page Down
|
|
||||||
selected_idx = min(len(audio_files) - 1, selected_idx + visible_lines)
|
|
||||||
elif key.lower() == 'd': # Toggle Day playlist
|
|
||||||
current_day = days_of_week[current_day_idx]
|
|
||||||
file = audio_files[selected_idx]
|
|
||||||
is_in_playlist = file in playlists[current_day]['day']
|
|
||||||
|
|
||||||
if is_in_playlist:
|
|
||||||
playlists[current_day]['day'].remove(file)
|
|
||||||
else:
|
|
||||||
playlists[current_day]['day'].add(file)
|
|
||||||
|
|
||||||
update_playlist_file(current_day, 'day', file, not is_in_playlist)
|
|
||||||
|
|
||||||
elif key.lower() == 'n': # Toggle Night playlist
|
|
||||||
current_day = days_of_week[current_day_idx]
|
|
||||||
file = audio_files[selected_idx]
|
|
||||||
is_in_playlist = file in playlists[current_day]['night']
|
|
||||||
|
|
||||||
if is_in_playlist:
|
|
||||||
playlists[current_day]['night'].remove(file)
|
|
||||||
else:
|
|
||||||
playlists[current_day]['night'].add(file)
|
|
||||||
|
|
||||||
update_playlist_file(current_day, 'night', file, not is_in_playlist)
|
|
||||||
|
|
||||||
elif key.lower() == 'l': # Toggle Late Night playlist
|
|
||||||
current_day = days_of_week[current_day_idx]
|
|
||||||
file = audio_files[selected_idx]
|
|
||||||
is_in_playlist = file in playlists[current_day]['late_night']
|
|
||||||
|
|
||||||
if is_in_playlist:
|
|
||||||
playlists[current_day]['late_night'].remove(file)
|
|
||||||
else:
|
|
||||||
playlists[current_day]['late_night'].add(file)
|
|
||||||
|
|
||||||
update_playlist_file(current_day, 'late_night', file, not is_in_playlist)
|
|
||||||
|
|
||||||
elif key.lower() == 'c': # Copy current day to all other days
|
|
||||||
current_day = days_of_week[current_day_idx]
|
|
||||||
playlists = copy_day_to_all(playlists, current_day, days_of_week, audio_files)
|
|
||||||
flash_message = f"Playlists from {current_day} copied to all other days!"
|
|
||||||
message_timer = 0
|
|
||||||
|
|
||||||
elif key.lower() == 'f': # Copy current file to all other days
|
|
||||||
current_day = days_of_week[current_day_idx]
|
|
||||||
current_file = audio_files[selected_idx]
|
|
||||||
|
|
||||||
# Try to copy the file to all days
|
|
||||||
playlists, success = copy_current_file_to_all(playlists, current_day, days_of_week, current_file)
|
|
||||||
|
|
||||||
if success:
|
|
||||||
flash_message = f"File '{current_file}' copied to all days!"
|
|
||||||
else:
|
|
||||||
flash_message = f"File not in any playlist! Add it first."
|
|
||||||
message_timer = 0
|
|
||||||
|
|
||||||
elif key == 'g': # Go to beginning
|
|
||||||
selected_idx = 0
|
|
||||||
elif key == 'G': # Go to end
|
|
||||||
selected_idx = len(audio_files) - 1
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,128 +0,0 @@
|
|||||||
/home/user/mixes/Grunge2.mp3
|
|
||||||
/home/user/mixes/Lata90_6.mp3
|
|
||||||
/home/user/mixes/Alternatywnie.mp3
|
|
||||||
/home/user/mixes/BonJovi.mp3
|
|
||||||
/home/user/mixes/Madonna.mp3
|
|
||||||
/home/user/mixes/Lata2010_4.mp3
|
|
||||||
/home/user/mixes/WithinTemptation.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/AliciaKeys.mp3
|
|
||||||
/home/user/mixes/Alternatywnie3.mp3
|
|
||||||
/home/user/mixes/Polskie60.mp3
|
|
||||||
/home/user/mixes/Blink182.mp3
|
|
||||||
/home/user/mixes/Polskie1.mp3
|
|
||||||
/home/user/mixes/Jamiroquai.mp3
|
|
||||||
/home/user/mixes/Finlandia.mp3
|
|
||||||
/home/user/mixes/Francuska.mp3
|
|
||||||
/home/user/mixes/Romania.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Polskie80.mp3
|
|
||||||
/home/user/mixes/Lata80_5.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Lata90_3.mp3
|
|
||||||
/home/user/mixes/Lata90.mp3
|
|
||||||
/home/user/mixes/Polskie70.mp3
|
|
||||||
/home/user/mixes/Abba.mp3
|
|
||||||
/home/user/mixes/Lata2010_3.mp3
|
|
||||||
/home/user/mixes/Polskie2010.mp3
|
|
||||||
/home/user/mixes/Blues2.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/Pop1.mp3
|
|
||||||
/home/user/mixes/Rock2.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/BruceSpringsteen.m4a
|
|
||||||
/home/user/mixes/Paramore.mp3
|
|
||||||
/home/user/mixes/Hiszpanka.mp3
|
|
||||||
/home/user/mixes/Synthwave2.mp3
|
|
||||||
/home/user/mixes/Lata2000.mp3
|
|
||||||
/home/user/mixes/BryanAdams.mp3
|
|
||||||
/home/user/mixes/Lata2000_3.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/Lata60.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/MariahCarey.mp3
|
|
||||||
/home/user/mixes/Hiszpanska2.m4a
|
|
||||||
/home/user/mixes/Wloszczyzna2.mp3
|
|
||||||
/home/user/mixes/Lata80_4.mp3
|
|
||||||
/home/user/mixes/LeonardCohen.m4a
|
|
||||||
/home/user/mixes/Lata70_3.mp3
|
|
||||||
/home/user/mixes/Polskie4.mp3
|
|
||||||
/home/user/mixes/Synthwave4.m4a
|
|
||||||
/home/user/mixes/Lata60_2.mp3
|
|
||||||
/home/user/mixes/Lata90_2.mp3
|
|
||||||
/home/user/mixes/Wloszczyzna.mp3
|
|
||||||
/home/user/mixes/Lata70_4.mp3
|
|
||||||
/home/user/mixes/Alternatywnie2.mp3
|
|
||||||
/home/user/mixes/Portugal.mp3
|
|
||||||
/home/user/mixes/Coldplay.mp3
|
|
||||||
/home/user/mixes/TheRollingStones.mp3
|
|
||||||
/home/user/mixes/Grunge3.mp3
|
|
||||||
/home/user/mixes/Blues.mp3
|
|
||||||
/home/user/mixes/Synthwave.mp3
|
|
||||||
/home/user/mixes/DamskoMeskieDuety.mp3
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/Greenday.m4a
|
|
||||||
/home/user/mixes/Lata2010_5.mp3
|
|
||||||
/home/user/mixes/Lata2000_2.mp3
|
|
||||||
/home/user/mixes/Dzem.m4a
|
|
||||||
/home/user/mixes/Polskie3.mp3
|
|
||||||
/home/user/mixes/Placebo.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Pop2.mp3
|
|
||||||
/home/user/mixes/Queen.mp3
|
|
||||||
/home/user/mixes/GunsNRoses.m4a
|
|
||||||
/home/user/mixes/Islandia.mp3
|
|
||||||
/home/user/mixes/KylieMinogue.mp3
|
|
||||||
/home/user/mixes/PinkFloyd.mp3
|
|
||||||
/home/user/mixes/JoeCocker.m4a
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Lata80_2.mp3
|
|
||||||
/home/user/mixes/Enigma.mp3
|
|
||||||
/home/user/mixes/Nostalgia3.m4a
|
|
||||||
/home/user/mixes/Blues3.mp3
|
|
||||||
/home/user/mixes/Blues4.mp3
|
|
||||||
/home/user/mixes/Lata90_5.mp3
|
|
||||||
/home/user/mixes/Lata2010.mp3
|
|
||||||
/home/user/mixes/Lata2000_4.mp3
|
|
||||||
/home/user/mixes/ChrisRea.mp3
|
|
||||||
/home/user/mixes/LedZeppelin.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Polskie6.m4a
|
|
||||||
/home/user/mixes/Rock3.mp3
|
|
||||||
/home/user/mixes/Dunska.mp3
|
|
||||||
/home/user/mixes/Norweska.mp3
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/Polskie2.mp3
|
|
||||||
/home/user/mixes/Oasis.mp3
|
|
||||||
/home/user/mixes/KatyPerry.mp3
|
|
||||||
/home/user/mixes/Lekkie5.m4a
|
|
||||||
/home/user/mixes/Niemieckie.mp3
|
|
||||||
/home/user/mixes/Blues5.mp3
|
|
||||||
/home/user/mixes/Polskie8.m4a
|
|
||||||
/home/user/mixes/MediumlistaPolskieLata80.m4a
|
|
||||||
/home/user/mixes/Lata2000_5.mp3
|
|
||||||
/home/user/mixes/Polskie7.m4a
|
|
||||||
/home/user/mixes/Korean.mp3
|
|
||||||
/home/user/mixes/Rock.mp3
|
|
||||||
/home/user/mixes/TheKellyFamily.mp3
|
|
||||||
/home/user/mixes/Prodigy.mp3
|
|
||||||
/home/user/mixes/Lata80_3.mp3
|
|
||||||
/home/user/mixes/Grunge.mp3
|
|
||||||
/home/user/mixes/Country2.mp3
|
|
||||||
/home/user/mixes/ProcolHarum.mp3
|
|
||||||
/home/user/mixes/Lata80.mp3
|
|
||||||
/home/user/mixes/Lata2010_2.mp3
|
|
||||||
/home/user/mixes/Szwedzka.mp3
|
|
||||||
/home/user/mixes/Akustycznie.mp3
|
|
||||||
/home/user/mixes/Lata70.mp3
|
|
||||||
/home/user/mixes/Lata90_4.mp3
|
|
||||||
/home/user/mixes/Aerosmith.mp3
|
|
||||||
/home/user/mixes/Country.mp3
|
|
||||||
/home/user/mixes/Polskie5.mp3
|
|
||||||
/home/user/mixes/TheBeatles.mp3
|
|
||||||
/home/user/mixes/Lata70_2.mp3
|
|
||||||
/home/user/mixes/Polskie9.m4a
|
|
||||||
/home/user/mixes/U2.mp3
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
/home/user/mixes/ShortlistaAkustycznie.m4a
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/Synthwave.mp3
|
|
||||||
/home/user/mixes/MuzykaCeltycka.m4a
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/Sade.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Synthwave3.mp3
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/Progresywnie.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa2.mp3
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
/home/user/mixes/ShortlistaAkustycznie.m4a
|
|
||||||
/home/user/mixes/VocalJazz2.mp3
|
|
||||||
/home/user/mixes/Alternatywnie.mp3
|
|
||||||
/home/user/mixes/Evanescence.mp3
|
|
||||||
/home/user/mixes/Alternatywnie2.mp3
|
|
||||||
/home/user/mixes/Lekkie4.mp3
|
|
||||||
/home/user/mixes/RockowoAlternatywnie.m4a
|
|
||||||
/home/user/mixes/Polskie2000.mp3
|
|
||||||
/home/user/mixes/VocalJazz.mp3
|
|
||||||
/home/user/mixes/Soul3.mp3
|
|
||||||
/home/user/mixes/Polskie2.mp3
|
|
||||||
/home/user/mixes/MuzykaCeltycka.m4a
|
|
||||||
/home/user/mixes/WithinTemptation.mp3
|
|
||||||
/home/user/mixes/Akustycznie2.mp3
|
|
||||||
/home/user/mixes/Lekkie3.mp3
|
|
||||||
/home/user/mixes/Sade.mp3
|
|
||||||
/home/user/mixes/Alternatywnie3.mp3
|
|
||||||
/home/user/mixes/Lekkie5.m4a
|
|
||||||
/home/user/mixes/Polskie1.mp3
|
|
||||||
/home/user/mixes/Niemieckie.mp3
|
|
||||||
/home/user/mixes/Francuska.mp3
|
|
||||||
/home/user/mixes/Placebo.mp3
|
|
||||||
/home/user/mixes/Nostalgia2.mp3
|
|
||||||
/home/user/mixes/Nostalgia1.mp3
|
|
||||||
/home/user/mixes/DepecheMode.mp3
|
|
||||||
/home/user/mixes/Japan.mp3
|
|
||||||
/home/user/mixes/Polskie90.mp3
|
|
||||||
/home/user/mixes/Progresywnie.mp3
|
|
||||||
/home/user/mixes/Progresywnie2.mp3
|
|
||||||
/home/user/mixes/Prodigy.mp3
|
|
||||||
/home/user/mixes/Grunge.mp3
|
|
||||||
/home/user/mixes/Lekkie2.mp3
|
|
||||||
/home/user/mixes/Nostalgia3.m4a
|
|
||||||
/home/user/mixes/ProcolHarum.mp3
|
|
||||||
/home/user/mixes/Soul.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa.mp3
|
|
||||||
/home/user/mixes/GloriaEstefan.mp3
|
|
||||||
/home/user/mixes/Akustycznie.mp3
|
|
||||||
/home/user/mixes/VocalJazz3.mp3
|
|
||||||
/home/user/mixes/Ciezkie.mp3
|
|
||||||
/home/user/mixes/Soul2.mp3
|
|
||||||
/home/user/mixes/ChrisRea.mp3
|
|
||||||
/home/user/mixes/Lekkie.mp3
|
|
||||||
/home/user/mixes/Polskie2010.mp3
|
|
||||||
/home/user/mixes/Muzykafilmowa2.mp3
|
|
||||||
199
radioPlayer.py
Normal file
199
radioPlayer.py
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
import os
|
||||||
|
import random
|
||||||
|
import subprocess
|
||||||
|
import time
|
||||||
|
import sys
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
playlist_dir = "/home/user/playlists"
|
||||||
|
name_table_dir = "/home/user/mixes/name_table.txt"
|
||||||
|
|
||||||
|
rds_base = "Gramy: radio95 - {}"
|
||||||
|
rds_default_name = "Program Godzinny"
|
||||||
|
rds_path = "/home/user/RDS"
|
||||||
|
rds_rtp_data = "4,7,7,1,17"
|
||||||
|
|
||||||
|
def get_current_hour():
|
||||||
|
return datetime.now().hour
|
||||||
|
|
||||||
|
def get_current_day():
|
||||||
|
return datetime.now().strftime('%A').lower()
|
||||||
|
|
||||||
|
def load_dict_from_custom_format(file_path: str) -> dict:
|
||||||
|
result_dict = {}
|
||||||
|
with open(file_path, 'r') as file:
|
||||||
|
for line in file:
|
||||||
|
if line.strip() == "":
|
||||||
|
continue
|
||||||
|
key, value = line.split(':', 1)
|
||||||
|
result_dict[key.strip()] = value.strip()
|
||||||
|
return result_dict
|
||||||
|
|
||||||
|
def update_rds(track_name):
|
||||||
|
try:
|
||||||
|
name_table = load_dict_from_custom_format(name_table_dir)
|
||||||
|
try:
|
||||||
|
prt = rds_base.format(name_table[track_name])
|
||||||
|
except KeyError as e:
|
||||||
|
print("Unknown", e)
|
||||||
|
prt = rds_base.format(rds_default_name)
|
||||||
|
|
||||||
|
f = open(rds_path, "w")
|
||||||
|
f.write(f"TEXT={prt}\r")
|
||||||
|
|
||||||
|
try:
|
||||||
|
f.write(f"RTP={rds_rtp_data},{len(str(name_table[track_name]))-1}\r")
|
||||||
|
except KeyError:
|
||||||
|
f.write(f"RTP={rds_rtp_data},{len(rds_default_name)-1}\r")
|
||||||
|
f.close()
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error updating RDS: {e}")
|
||||||
|
|
||||||
|
def get_playlist_modification_time(playlist_path):
|
||||||
|
try:
|
||||||
|
return os.path.getmtime(playlist_path)
|
||||||
|
except OSError:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def load_playlist(playlist_path):
|
||||||
|
try:
|
||||||
|
with open(playlist_path, 'r') as f:
|
||||||
|
tracks = [line.strip() for line in f.readlines() if line.strip()]
|
||||||
|
return tracks
|
||||||
|
except FileNotFoundError:
|
||||||
|
print(f"Warning: Playlist not found: {playlist_path}")
|
||||||
|
return []
|
||||||
|
|
||||||
|
def get_newest_track(tracks):
|
||||||
|
if not tracks:
|
||||||
|
return None
|
||||||
|
|
||||||
|
newest_track = None
|
||||||
|
newest_time = 0
|
||||||
|
|
||||||
|
for track in tracks:
|
||||||
|
track_path = os.path.expanduser(track)
|
||||||
|
try:
|
||||||
|
mod_time = os.path.getmtime(track_path)
|
||||||
|
if mod_time > newest_time:
|
||||||
|
newest_time = mod_time
|
||||||
|
newest_track = track
|
||||||
|
except OSError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
return newest_track
|
||||||
|
|
||||||
|
def play_playlist(playlist_path, play_newest_first=False):
|
||||||
|
last_modified_time = get_playlist_modification_time(playlist_path)
|
||||||
|
tracks = load_playlist(playlist_path)
|
||||||
|
if not tracks:
|
||||||
|
print(f"No tracks found in {playlist_path}, checking again in 15 seconds...")
|
||||||
|
time.sleep(15)
|
||||||
|
return
|
||||||
|
|
||||||
|
if play_newest_first:
|
||||||
|
newest_track = get_newest_track(tracks)
|
||||||
|
if newest_track:
|
||||||
|
print(f"Playing newest track first: {os.path.basename(newest_track)}")
|
||||||
|
tracks.remove(newest_track)
|
||||||
|
random.shuffle(tracks)
|
||||||
|
tracks.insert(0, newest_track)
|
||||||
|
else:
|
||||||
|
random.shuffle(tracks)
|
||||||
|
|
||||||
|
for track in tracks:
|
||||||
|
current_modified_time = get_playlist_modification_time(playlist_path)
|
||||||
|
if current_modified_time > last_modified_time:
|
||||||
|
print(f"Playlist {playlist_path} has been modified, reloading...")
|
||||||
|
return
|
||||||
|
|
||||||
|
current_hour = get_current_hour()
|
||||||
|
current_day = get_current_day()
|
||||||
|
morning_playlist_path = os.path.join(playlist_dir, current_day, 'morning')
|
||||||
|
day_playlist_path = os.path.join(playlist_dir, current_day, 'day')
|
||||||
|
night_playlist_path = os.path.join(playlist_dir, current_day, 'night')
|
||||||
|
late_night_playlist_path = os.path.join(playlist_dir, current_day, 'late_night')
|
||||||
|
|
||||||
|
if 10 <= current_hour < 20:
|
||||||
|
if playlist_path != day_playlist_path:
|
||||||
|
print("Time changed to day hours, switching playlist...")
|
||||||
|
return
|
||||||
|
elif 6 <= current_hour < 10:
|
||||||
|
if playlist_path != morning_playlist_path:
|
||||||
|
print("Time changed to morning hours, switching playlist...")
|
||||||
|
return
|
||||||
|
elif 0 <= current_hour < 6:
|
||||||
|
if playlist_path != late_night_playlist_path:
|
||||||
|
print("Time changed to late night hours, switching playlist...")
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
if playlist_path != night_playlist_path:
|
||||||
|
print("Time changed to night hours, switching playlist...")
|
||||||
|
return
|
||||||
|
|
||||||
|
track_path = os.path.expanduser(track)
|
||||||
|
track_name = os.path.basename(track_path)
|
||||||
|
print(f"Now playing: {track_name}")
|
||||||
|
update_rds(track_name)
|
||||||
|
|
||||||
|
subprocess.run(['ffplay', '-nodisp', '-stats', '-hide_banner', '-autoexit', track_path])
|
||||||
|
|
||||||
|
def main():
|
||||||
|
play_newest_first = len(sys.argv) > 1 and sys.argv[1].lower() == "n"
|
||||||
|
|
||||||
|
if play_newest_first:
|
||||||
|
print("Newest song will be played first")
|
||||||
|
|
||||||
|
while True:
|
||||||
|
current_hour = get_current_hour()
|
||||||
|
current_day = get_current_day()
|
||||||
|
|
||||||
|
morning_playlist = os.path.join(playlist_dir, current_day, 'morning')
|
||||||
|
day_playlist = os.path.join(playlist_dir, current_day, 'day')
|
||||||
|
night_playlist = os.path.join(playlist_dir, current_day, 'night')
|
||||||
|
late_night_playlist = os.path.join(playlist_dir, current_day, 'late_night')
|
||||||
|
|
||||||
|
morning_dir = os.path.dirname(morning_playlist)
|
||||||
|
day_dir = os.path.dirname(day_playlist)
|
||||||
|
night_dir = os.path.dirname(night_playlist)
|
||||||
|
late_night_dir = os.path.dirname(late_night_playlist)
|
||||||
|
|
||||||
|
if not os.path.exists(morning_dir):
|
||||||
|
print(f"Creating directory: {morning_dir}")
|
||||||
|
os.makedirs(morning_dir, exist_ok=True)
|
||||||
|
|
||||||
|
if not os.path.exists(day_dir):
|
||||||
|
print(f"Creating directory: {day_dir}")
|
||||||
|
os.makedirs(day_dir, exist_ok=True)
|
||||||
|
|
||||||
|
if not os.path.exists(night_dir):
|
||||||
|
print(f"Creating directory: {night_dir}")
|
||||||
|
os.makedirs(night_dir, exist_ok=True)
|
||||||
|
|
||||||
|
if not os.path.exists(late_night_dir):
|
||||||
|
print(f"Creating directory: {late_night_dir}")
|
||||||
|
os.makedirs(late_night_dir, exist_ok=True)
|
||||||
|
|
||||||
|
for playlist_path in [morning_playlist, day_playlist, night_playlist, late_night_playlist]:
|
||||||
|
if not os.path.exists(playlist_path):
|
||||||
|
print(f"Creating empty playlist: {playlist_path}")
|
||||||
|
with open(playlist_path, 'w') as f:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if 10 <= current_hour < 20:
|
||||||
|
print(f"Playing {current_day} day playlist...")
|
||||||
|
play_playlist(day_playlist, play_newest_first)
|
||||||
|
elif 6 <= current_hour < 10:
|
||||||
|
print(f"Playing {current_day} morning playlist...")
|
||||||
|
play_playlist(morning_playlist, play_newest_first)
|
||||||
|
elif 0 <= current_hour < 6:
|
||||||
|
print(f"Playing {current_day} late_night playlist...")
|
||||||
|
play_playlist(late_night_playlist, play_newest_first)
|
||||||
|
else:
|
||||||
|
print(f"Playing {current_day} night playlist...")
|
||||||
|
play_playlist(night_playlist, play_newest_first)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
381
radioPlaylist.py
Normal file
381
radioPlaylist.py
Normal file
@@ -0,0 +1,381 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import termios
|
||||||
|
import tty
|
||||||
|
import signal
|
||||||
|
import shutil
|
||||||
|
import libcache
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
files_dir = "/home/user/mixes/"
|
||||||
|
playlists_dir = "/home/user/playlists/"
|
||||||
|
|
||||||
|
formats = ('.mp3', '.m4a')
|
||||||
|
|
||||||
|
def get_audio_files(directory) -> list[str]:
|
||||||
|
audio_files = []
|
||||||
|
try:
|
||||||
|
for file in os.listdir(directory):
|
||||||
|
file: str
|
||||||
|
if file.lower().endswith(formats):
|
||||||
|
audio_files.append(file)
|
||||||
|
return sorted(audio_files)
|
||||||
|
except FileNotFoundError:
|
||||||
|
print(f"Error: Directory '{directory}' not found.")
|
||||||
|
return []
|
||||||
|
except PermissionError:
|
||||||
|
print(f"Error: Permission denied for directory '{directory}'.")
|
||||||
|
return []
|
||||||
|
|
||||||
|
def get_char() -> str:
|
||||||
|
fd = sys.stdin.fileno()
|
||||||
|
old_settings = termios.tcgetattr(fd)
|
||||||
|
try:
|
||||||
|
tty.setraw(sys.stdin.fileno())
|
||||||
|
ch = sys.stdin.read(1)
|
||||||
|
finally:
|
||||||
|
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
|
||||||
|
return ch
|
||||||
|
|
||||||
|
def clear_screen() -> None:
|
||||||
|
print("\033c", end="")
|
||||||
|
|
||||||
|
def get_terminal_size() -> os.terminal_size:
|
||||||
|
return shutil.get_terminal_size()
|
||||||
|
|
||||||
|
def get_days_of_week() -> list[str]:
|
||||||
|
days = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]
|
||||||
|
today = datetime.now().weekday()
|
||||||
|
return days[today:] + days[:today]
|
||||||
|
|
||||||
|
def ensure_playlist_dir(day: str) -> str:
|
||||||
|
playlist_dir = os.path.expanduser(os.path.join(playlists_dir, day))
|
||||||
|
if not os.path.exists(playlist_dir):
|
||||||
|
os.makedirs(playlist_dir)
|
||||||
|
return playlist_dir
|
||||||
|
|
||||||
|
def update_playlist_file(day: str, period: str, filepath: str, add: bool):
|
||||||
|
playlist_dir = ensure_playlist_dir(day)
|
||||||
|
playlist_file = os.path.join(playlist_dir, period)
|
||||||
|
|
||||||
|
full_filepath = os.path.join(files_dir, filepath)
|
||||||
|
|
||||||
|
if not os.path.exists(playlist_file):
|
||||||
|
with open(playlist_file, 'w') as f:
|
||||||
|
pass
|
||||||
|
|
||||||
|
with open(playlist_file, 'r') as f:
|
||||||
|
lines = f.read().splitlines()
|
||||||
|
|
||||||
|
if add and full_filepath not in lines:
|
||||||
|
lines.append(full_filepath)
|
||||||
|
elif not add and full_filepath in lines:
|
||||||
|
lines.remove(full_filepath)
|
||||||
|
|
||||||
|
with open(playlist_file, 'w') as f:
|
||||||
|
f.write('\n'.join(lines) + ('\n' if lines else ''))
|
||||||
|
|
||||||
|
def load_playlists(days: list[str]):
|
||||||
|
playlists = {}
|
||||||
|
for day in days:
|
||||||
|
playlists[day] = {'morning': set(), 'day': set(), 'night': set(), 'late_night': set()}
|
||||||
|
playlist_dir = os.path.expanduser(os.path.join(playlists_dir, day))
|
||||||
|
|
||||||
|
if os.path.exists(playlist_dir):
|
||||||
|
for period in ['morning', 'day', 'night', 'late_night']:
|
||||||
|
playlist_file = os.path.join(playlist_dir, period)
|
||||||
|
if os.path.exists(playlist_file):
|
||||||
|
with open(playlist_file, 'r') as f:
|
||||||
|
for line in f:
|
||||||
|
line = line.strip()
|
||||||
|
if line:
|
||||||
|
filename = os.path.basename(line)
|
||||||
|
playlists[day][period].add(filename)
|
||||||
|
|
||||||
|
return playlists
|
||||||
|
|
||||||
|
def copy_day_to_all(playlists: dict, source_day: str, days: list[str]):
|
||||||
|
periods = ['morning', 'day', 'night', 'late_night']
|
||||||
|
|
||||||
|
for target_day in days:
|
||||||
|
if target_day == source_day:
|
||||||
|
continue
|
||||||
|
|
||||||
|
for period in periods:
|
||||||
|
target_dir = ensure_playlist_dir(target_day)
|
||||||
|
target_file = os.path.join(target_dir, period)
|
||||||
|
|
||||||
|
filepaths = []
|
||||||
|
for filename in playlists[source_day][period]:
|
||||||
|
full_path = os.path.join(playlists_dir, filename)
|
||||||
|
filepaths.append(full_path)
|
||||||
|
|
||||||
|
with open(target_file, 'w') as f:
|
||||||
|
f.write('\n'.join(filepaths) + ('\n' if filepaths else ''))
|
||||||
|
|
||||||
|
playlists[target_day][period] = set(playlists[source_day][period])
|
||||||
|
|
||||||
|
return playlists
|
||||||
|
|
||||||
|
def copy_current_file_to_all(playlists: dict, source_day: str, days: list[str], current_file: str):
|
||||||
|
source_periods = {
|
||||||
|
'morning': current_file in playlists[source_day]['morning'],
|
||||||
|
'day': current_file in playlists[source_day]['day'],
|
||||||
|
'night': current_file in playlists[source_day]['night'],
|
||||||
|
'late_night': current_file in playlists[source_day]['late_night']
|
||||||
|
}
|
||||||
|
|
||||||
|
if not any(source_periods.values()):
|
||||||
|
return playlists, False
|
||||||
|
|
||||||
|
for target_day in days:
|
||||||
|
if target_day == source_day:
|
||||||
|
continue
|
||||||
|
|
||||||
|
for period, is_present in source_periods.items():
|
||||||
|
target_set = playlists[target_day][period]
|
||||||
|
full_path = os.path.join(playlists_dir, current_file)
|
||||||
|
|
||||||
|
if is_present:
|
||||||
|
target_set.add(current_file)
|
||||||
|
else:
|
||||||
|
target_set.discard(current_file)
|
||||||
|
|
||||||
|
playlist_dir = ensure_playlist_dir(target_day)
|
||||||
|
playlist_file = os.path.join(playlist_dir, period)
|
||||||
|
|
||||||
|
if os.path.exists(playlist_file):
|
||||||
|
with open(playlist_file, 'r') as f:
|
||||||
|
lines = [line.strip() for line in f.readlines()]
|
||||||
|
else:
|
||||||
|
lines = []
|
||||||
|
|
||||||
|
if is_present and full_path not in lines:
|
||||||
|
lines.append(full_path)
|
||||||
|
elif not is_present:
|
||||||
|
while full_path in lines:
|
||||||
|
lines.remove(full_path)
|
||||||
|
|
||||||
|
with open(playlist_file, 'w') as f:
|
||||||
|
f.write('\n'.join(lines) + ('\n' if lines else ''))
|
||||||
|
|
||||||
|
return playlists, True
|
||||||
|
|
||||||
|
def draw_interface(audio_files: list, playlists: dict, selected_idx: int, current_day_idx: int, scroll_offset: int, terminal_size_cache: libcache.Cache, message=None):
|
||||||
|
"""Draw the TUI interface with day-of-week sections"""
|
||||||
|
clear_screen()
|
||||||
|
term_width, term_height = terminal_size_cache.getElement("width", False), terminal_size_cache.getElement("height", False)
|
||||||
|
if term_width or term_height == 0:
|
||||||
|
term_width, term_height = get_terminal_size()
|
||||||
|
terminal_size_cache.saveElement("width", term_width, 30, False, True)
|
||||||
|
terminal_size_cache.saveElement("height", term_height, 30, False, True)
|
||||||
|
days = get_days_of_week()
|
||||||
|
current_day = days[current_day_idx]
|
||||||
|
|
||||||
|
available_lines = term_height - 5
|
||||||
|
start_idx = max(0, min(scroll_offset, len(audio_files) - available_lines))
|
||||||
|
end_idx = min(start_idx + available_lines, len(audio_files))
|
||||||
|
|
||||||
|
day_bar = ""
|
||||||
|
for i, day in enumerate(days):
|
||||||
|
if i == current_day_idx:
|
||||||
|
day_bar += f"\033[1;44m[{day}]\033[0m "
|
||||||
|
else:
|
||||||
|
day_bar += f"[{day}] "
|
||||||
|
print(day_bar.strip())
|
||||||
|
|
||||||
|
print("UP/DOWN: Navigate | D/N/L: Toggle | C: Copy day to all | F: Copy file to all | Q: Quit")
|
||||||
|
|
||||||
|
if start_idx > 0:
|
||||||
|
print("↑", end="")
|
||||||
|
else:
|
||||||
|
print(" ", end="")
|
||||||
|
|
||||||
|
position_info = f" {current_day.capitalize()} | File {selected_idx + 1}/{len(audio_files)} "
|
||||||
|
padding = term_width - len(position_info) - 2
|
||||||
|
print(position_info.center(padding), end="")
|
||||||
|
|
||||||
|
if end_idx < len(audio_files):
|
||||||
|
print("↓")
|
||||||
|
else:
|
||||||
|
print(" ")
|
||||||
|
|
||||||
|
if message:
|
||||||
|
print(f"\033[1;32m{message}\033[0m")
|
||||||
|
else:
|
||||||
|
print()
|
||||||
|
|
||||||
|
for idx in range(start_idx, end_idx):
|
||||||
|
file = audio_files[idx]
|
||||||
|
|
||||||
|
in_morning = file in playlists[current_day]['morning']
|
||||||
|
in_day = file in playlists[current_day]['day']
|
||||||
|
in_night = file in playlists[current_day]['night']
|
||||||
|
in_late_night = file in playlists[current_day]['late_night']
|
||||||
|
|
||||||
|
m_color = "\033[1;32m" if in_morning else "\033[1;30m"
|
||||||
|
d_color = "\033[1;32m" if in_day else "\033[1;30m"
|
||||||
|
n_color = "\033[1;32m" if in_night else "\033[1;30m"
|
||||||
|
l_color = "\033[1;32m" if in_late_night else "\033[1;30m"
|
||||||
|
|
||||||
|
if idx == selected_idx:
|
||||||
|
row_highlight = "\033[1;44m"
|
||||||
|
else:
|
||||||
|
row_highlight = ""
|
||||||
|
|
||||||
|
max_filename_length = term_width - 15
|
||||||
|
if len(file) > max_filename_length:
|
||||||
|
file = file[:max_filename_length-3] + "..."
|
||||||
|
|
||||||
|
print(f"{row_highlight}[{m_color}M\033[0m{row_highlight}] [{d_color}D\033[0m{row_highlight}] [{n_color}N\033[0m{row_highlight}] [{l_color}L\033[0m{row_highlight}] {file}\033[0m")
|
||||||
|
|
||||||
|
def main():
|
||||||
|
audio_files = get_audio_files(files_dir)
|
||||||
|
|
||||||
|
if not audio_files:
|
||||||
|
print("No audio files found. Exiting.")
|
||||||
|
return
|
||||||
|
|
||||||
|
days_of_week = get_days_of_week()
|
||||||
|
playlists = load_playlists(days_of_week)
|
||||||
|
|
||||||
|
selected_idx = 0
|
||||||
|
current_day_idx = 0
|
||||||
|
scroll_offset = 0
|
||||||
|
flash_message = None
|
||||||
|
message_timer = 0
|
||||||
|
|
||||||
|
def signal_handler(sig, frame):
|
||||||
|
clear_screen()
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
signal.signal(signal.SIGINT, signal_handler)
|
||||||
|
|
||||||
|
terminal_size_cache = libcache.Cache()
|
||||||
|
|
||||||
|
# Main loop
|
||||||
|
while True:
|
||||||
|
term_width, term_height = terminal_size_cache.getElement("width", False), terminal_size_cache.getElement("height", False)
|
||||||
|
if term_width or term_height == 0:
|
||||||
|
term_width, term_height = get_terminal_size()
|
||||||
|
terminal_size_cache.saveElement("width", term_width, 30, False, True)
|
||||||
|
terminal_size_cache.saveElement("height", term_height, 30, False, True)
|
||||||
|
visible_lines = term_height - 5
|
||||||
|
|
||||||
|
if selected_idx < scroll_offset:
|
||||||
|
scroll_offset = selected_idx
|
||||||
|
elif selected_idx >= scroll_offset + visible_lines:
|
||||||
|
scroll_offset = selected_idx - visible_lines + 1
|
||||||
|
|
||||||
|
draw_interface(audio_files, playlists, selected_idx, current_day_idx, scroll_offset, terminal_size_cache, flash_message)
|
||||||
|
|
||||||
|
if flash_message:
|
||||||
|
message_timer += 1
|
||||||
|
if message_timer > 1:
|
||||||
|
flash_message = None
|
||||||
|
message_timer = 0
|
||||||
|
|
||||||
|
key = get_char()
|
||||||
|
|
||||||
|
if key == 'q':
|
||||||
|
clear_screen()
|
||||||
|
break
|
||||||
|
elif key == '\x1b':
|
||||||
|
next_key = get_char()
|
||||||
|
if next_key == '[':
|
||||||
|
arrow_key = get_char()
|
||||||
|
if arrow_key == 'A':
|
||||||
|
selected_idx = max(0, selected_idx - 1)
|
||||||
|
elif arrow_key == 'B':
|
||||||
|
selected_idx = min(len(audio_files) - 1, selected_idx + 1)
|
||||||
|
elif arrow_key == 'C':
|
||||||
|
current_day_idx = (current_day_idx + 1) % len(days_of_week)
|
||||||
|
elif arrow_key == 'D':
|
||||||
|
current_day_idx = (current_day_idx - 1) % len(days_of_week)
|
||||||
|
elif arrow_key == '5':
|
||||||
|
try:
|
||||||
|
next_key = get_char()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
selected_idx = max(0, selected_idx - visible_lines)
|
||||||
|
elif arrow_key == '6':
|
||||||
|
try:
|
||||||
|
next_key = get_char()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
selected_idx = min(len(audio_files) - 1, selected_idx + visible_lines)
|
||||||
|
elif key == ' ':
|
||||||
|
selected_idx = min(len(audio_files) - 1, selected_idx + visible_lines)
|
||||||
|
elif key.lower() == 'm':
|
||||||
|
current_day = days_of_week[current_day_idx]
|
||||||
|
file = audio_files[selected_idx]
|
||||||
|
is_in_playlist = file in playlists[current_day]['morning']
|
||||||
|
|
||||||
|
if is_in_playlist:
|
||||||
|
playlists[current_day]['morning'].remove(file)
|
||||||
|
else:
|
||||||
|
playlists[current_day]['morning'].add(file)
|
||||||
|
|
||||||
|
update_playlist_file(current_day, 'morning', file, not is_in_playlist)
|
||||||
|
elif key.lower() == 'd':
|
||||||
|
current_day = days_of_week[current_day_idx]
|
||||||
|
file = audio_files[selected_idx]
|
||||||
|
is_in_playlist = file in playlists[current_day]['day']
|
||||||
|
|
||||||
|
if is_in_playlist:
|
||||||
|
playlists[current_day]['day'].remove(file)
|
||||||
|
else:
|
||||||
|
playlists[current_day]['day'].add(file)
|
||||||
|
|
||||||
|
update_playlist_file(current_day, 'day', file, not is_in_playlist)
|
||||||
|
|
||||||
|
elif key.lower() == 'n':
|
||||||
|
current_day = days_of_week[current_day_idx]
|
||||||
|
file = audio_files[selected_idx]
|
||||||
|
is_in_playlist = file in playlists[current_day]['night']
|
||||||
|
|
||||||
|
if is_in_playlist:
|
||||||
|
playlists[current_day]['night'].remove(file)
|
||||||
|
else:
|
||||||
|
playlists[current_day]['night'].add(file)
|
||||||
|
|
||||||
|
update_playlist_file(current_day, 'night', file, not is_in_playlist)
|
||||||
|
|
||||||
|
elif key.lower() == 'l':
|
||||||
|
current_day = days_of_week[current_day_idx]
|
||||||
|
file = audio_files[selected_idx]
|
||||||
|
is_in_playlist = file in playlists[current_day]['late_night']
|
||||||
|
|
||||||
|
if is_in_playlist:
|
||||||
|
playlists[current_day]['late_night'].remove(file)
|
||||||
|
else:
|
||||||
|
playlists[current_day]['late_night'].add(file)
|
||||||
|
|
||||||
|
update_playlist_file(current_day, 'late_night', file, not is_in_playlist)
|
||||||
|
|
||||||
|
elif key.lower() == 'c':
|
||||||
|
current_day = days_of_week[current_day_idx]
|
||||||
|
playlists = copy_day_to_all(playlists, current_day, days_of_week)
|
||||||
|
flash_message = f"Playlists from {current_day} copied to all other days!"
|
||||||
|
message_timer = 0
|
||||||
|
|
||||||
|
elif key.lower() == 'f':
|
||||||
|
current_day = days_of_week[current_day_idx]
|
||||||
|
current_file = audio_files[selected_idx]
|
||||||
|
|
||||||
|
playlists, success = copy_current_file_to_all(playlists, current_day, days_of_week, current_file)
|
||||||
|
|
||||||
|
if success:
|
||||||
|
flash_message = f"File '{current_file}' copied to all days!"
|
||||||
|
else:
|
||||||
|
flash_message = f"File not in any playlist! Add it first."
|
||||||
|
message_timer = 0
|
||||||
|
|
||||||
|
elif key == 'g':
|
||||||
|
selected_idx = 0
|
||||||
|
elif key == 'G':
|
||||||
|
selected_idx = len(audio_files) - 1
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
1
requirements.txt
Normal file
1
requirements.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
libcache
|
||||||
Reference in New Issue
Block a user