Μόλις το δοκίμασα, και δεν έχει κανένα σταθμό. Εμφανίζει μόνο τα “Favorites” και “Exit”. Χρειάζεται κάτι άλλο εκτός το .py αρχείο?
UPDATE:
Και απαντάω μιας και το βρήκα. Φαίνεται ότι η εφαρμογή εξαρτάται από το shelldio(που δε νομίζω ότι χρειάζεται και θα έπρεπε). Χρειάστηκε λοιπόν να πάρω το αρχείο all_stations.txt και να το βάλω στο φάκελο trayfm στο .config. Επίσης να αλλάξω τις διαδρομές στο αρχείο .py ώστε να δείχνουν στο .config/trayfm μιας και δεν νομίζω ότι υπάρχει λόγος να υπάρχει ο κατάλογος .shelldio εφόσον δεν το χρησιμοποιώ. Γενικά νομίζω ότι θα έπρεπε να παρέχεται το αρχείο και να μπαίνει αυτόματα στον .trayfm και ίσως να υπάρχει και η επιλογή χρήσης του από τον .shelldio για περιπτώσεις που υπάρχει/χρησιμοποιείται το shelldio.
My bad, είχα χρόνια να δουλέψω το Github.
Ανέβασα τη νέα έκδοση (v 2.0.0). Λογικά, θα κάνει συγχρονισμό από το Github αλλά ακόμα καλύτερα κατέβασε το zip αρχείο, αποσυμπίεσε και έχε στον ίδιο φάκελο την λίστα των σταθμών και το .py.
Έχει απεξαρτηθεί από το Shelldio έχει κάποιους διαφορετικους και περισσότερους σταθμούς.
Δεν ξέρω αν φταίει κάτι άλλο ή το περιβάλλον που το χρησιμοποιώ(niri/wayland), αλλά δε λειτουργεί το play/pause με αριστερό κλικ στο εικονίδιο, ούτε κάνει scroll για αλλαγή έντασης. Επίσης δεν βλέπω τρόπο να σταματήσω την αναπαραγωγή απ’ το μενού, παρά μόνο αν αλλάξω σταθμό, οπότε εμφανίζεται η επιλογή “Διακοπή”.
Ευχαριστώ για το feeedback. Πάμε να τα δούμε επειδή είναι τρία διαφορετικά πράγματα:
Play/pause με αριστερό κλικ στο εικονίδιο δεν υπήρχε ποτέ, άρα δεν ειναι bug του niri.
Το AppIndicator/Ayatana δεν έχει ξεχωριστό σήμα του στυλ: “άνοιξε το μενού” vs “κάνε play/pause” ανάλογα με το κουμπί από σχεδιασμό. Οποιοδήποτε κλικ (αριστερό ή δεξί) ανοίγει το ίδιο μενού.
Δεν νομίζω να μπορεί να μπει, κοινώς μιλάμε για ένα χαρακτηριστικό που δεν υπάρχει.
Όσον αφορά το scroll, το niri είναι Wayland compositor χωρίς built-in tray. Το tray icon εκεί το αναλαμβάνει όποιο status bar χρησιμοποιεί και η προώθηση scroll events μέσω SNI protocol διαφέρει πολύ ανά υλοποίηση. Αναφέρεται και στο README αυτό.
Για το τρίτο έχεις δίκιο, είναι ένα από αυτά που έχω στα todo, επειδή είναι θέμα χρηστικότητας.
Τώρα, στη ουσία το pause λειτουργεί μόνο αν πας σε οποιοδήποτε σταθμό και ακουμπώντας επάνω του επιλέξεις “Διακοπή”.
Ήδη έχω μια έκδοση υπό δοκιμή όπου έχω συμπτύξει το μενού, έχοντας προσθέσει και pause.
Το τσεκάρω για κάποιες ημέρες, θα το δώσω και στο LLM να το ελέγξει για bugs και θα το δημοσιεύσω.
Αν θες, στο στέλνω από τώρα.
Μenu builders, DialogBuilder, αποσφαλμάτωση και ορισμένα refactor/helpers δημιουργήθηκαν με την συμβολή του τοπικού μοντέλου ΤΝ Qwen2.5-Coder 14B και του Claude.
Το Changlog (ο τύπος και η σύνταξη) βασίστηκε στο Keep a Changelog.
Επειδή μετά από τα fedback δημιουργήθηκαν δυο κοντινές εκδόσεις, βάζω το changlog και των δυο (v. 2.10 και v. 2.0.0).
Changelog:
Προστέθηκαν
Fallback στη βιβλιοθήκη indicator: δοκιμάζει πρώτα AyatanaAppIndicator3, μετά το παλιότερο AppIndicator3· αν λείπουν και τα δύο, εμφανίζει σαφές μήνυμα σφάλματος αντί να κρασάρει σιωπηλά.
Ενσωματωμένη (embedded) λίστα 18 δοκιμασμένων σταθμών μέσα στον ίδιο τον κώδικα, ως τελευταία γραμμή άμυνας όταν λείπει το εξωτερικό stations-default.txt.
Νέο section “Συμβατότητα ανά διανομή” στο README, με πίνακα υποστήριξης ανά desktop environment και packages για apt / dnf / pacman.
Επιμονή έντασης (volume) μεταξύ σταθμών και επανεκκινήσεων του app — αποθηκεύεται σε volume.json, εφαρμόζεται αυτόματα στην εκκίνηση κάθε νέου stream.
Ένδειξη τρέχοντος επιπέδου έντασης (%) μέσα στο submenu “ Ένταση”.
Προστασία μονού instance (flock σε lock file) — αν το app τρέχει ήδη, μια δεύτερη εκκίνηση δείχνει απλό μήνυμα αντί να ανοίξει δεύτερο tray icon.
Top-level “ Διακοπή” στην κορυφή του μενού όσο παίζει κάτι — δεν χρειάζεται πια να μπεις σε submenu σταθμού για να σταματήσεις την αναπαραγωγή.
Confirmation dialog πριν τη διαγραφή σταθμού (“Διαγραφή του «X»; Αυτή η ενέργεια δεν αναιρείται.”), ώστε ένα τυχαίο κλικ να μη σβήνει σταθμό χωρίς δεύτερη σκέψη.
Buffering flags στο mpv (--cache=yes --demuxer-max-bytes=5M) για καλύτερη απορρόφηση μικροδιακυμάνσεων δικτύου σε ασταθή streams.
Άλλαξαν
Τα 6 items διαχείρισης (Προσθήκη/Επεξεργασία/Διαγραφή/Επαναφορά/Εισαγωγή M3U/Έλεγχος GitHub) μαζεύτηκαν κάτω από ένα ενιαίο submenu “ Διαχείριση” αντί να είναι flat μέσα στο κύριο μενού.
Διορθώθηκαν
Το scroll στο tray icon για αλλαγή έντασης υπέθετε πάντα binary UP/DOWN κατεύθυνση· σε touchpad ή ορισμένα Wayland compositors η κατεύθυνση έρχεται ως SMOOTH, με αποτέλεσμα η ένταση να μειωνόταν πάντα ανεξαρτήτως φοράς. Τώρα χρησιμοποιείται το πρόσημο του scroll delta σε αυτή την περίπτωση.
[2.0.0]
Προστέθηκαν
Πλήρες αρχιτεκτονικό refactor σε OOP (StorageManager, DialogBuilder, TrayFM) αντί για global mutable state.
In-memory caching στο StorageManager — αποφυγή επαναλαμβανόμενου re-read/re-parse του stations.txt σε κάθε rebuild του μενού.
Κατηγοριοποίηση σταθμών (Music / News / Sports) με νέο format αρχείου Όνομα|Κατηγορία|URL· διατηρείται συμβατότητα με το παλιό Όνομα,URL (γίνεται αυτόματα Music).
Αναζήτηση σταθμών με live φιλτράρισμα.
/ / Προσθήκη, Επεξεργασία, Διαγραφή σταθμών από το ίδιο το μενού, με επιλογέα κατηγορίας.
Εισαγωγή σταθμών από M3U / M3U8 playlists.
Έλεγχος ενημερωμένης λίστας από το GitHub repo — προσθέτει μόνο νέους σταθμούς, ποτέ δεν αγγίζει/διαγράφει υπάρχοντες.
↺ Επαναφορά στην προεπιλεγμένη λίστα σταθμών.
Έλεγχος έντασης και mute μέσω του IPC socket του mpv (Unix domain socket στο XDG_RUNTIME_DIR, ασφαλέστερο από στατικό path στο /tmp).
Sleep timer (15/30/45/60/90 λεπτά).
Αυτόματη εκκίνηση με το σύστημα (δημιουργία .desktop στο autostart).
Ειδοποιήσεις (notify-send) για αναπαραγωγή, αποτυχία stream, sleep timer.
Καθαρισμός της λίστας σταθμών: αφαίρεση ~25 πραγματικών διπλότυπων (ίδιο stream μέσω διαφορετικού mirror/port/naming) — 153 → 128 μοναδικοί σταθμοί.
Το δοκίμασα, αλλά και πάλι, ειδικά η ρύθμιση/αλλαγή έντασης είναι πολύ άβολη. Κυρίως γι’αυτό το χρησιμοποιήσα ως βάση και(με τη βοήθεια του AI), δοκίμασα τη μετατροπή του σε qt/qtsystemtrayicon. Δυστυχώς κι εκεί φαίνεται να υπάρχει περιορισμός στη χρήση mouse events, αλλά δουλεύουν οι ενέργειες left/right κλικ τουλάχιστον. Οπότε έβαλα ένα παράθυρο διαλόγου για το αριστερό κλικ, όπου ανοίγει ένας διαλογος με ένα progress bar/slider για τη ρύθμιση έντασης, κουμπί play/pause και κουμπιά για αύξηση/μείωση της έντασης κατά 5 όπως γίνεται και στο μενού. Δεν είναι τέλειο, αλλά πιο εύχρηστο από το να πρέπει κάθε φορά να μπάινεις σε υπομενού το οποίο κλείνει σε κάθε ενέργεια. Αυτό το κάνει πολύ δύσχρηστο και αργό. Όσον αφορά το play/pause-stop του σταθμού, το έκανα ώστε να είναι toggle το header για το αν παίζει σταθμός, αλλά και αυτό που έχεις κάνει εσύ(προσθήκη καταχώρησης στοιχείου μενού “Διακοπή”), μια χαρά είναι.
Εξαιρετικό το feedback σου. Με βοήθησε να καταλάβω ότι το πρόβλημα δεν είναι το niri/Wayland συγκεκριμένα, είναι καθολικό χαρακτηριστικό του GTK/AppIndicator μενού, με κάθε κλικ σε menu item κλείνει ολόκληρο το μενού, σε όλα τα DE.
Άρα, όσο καταλαβαίνω, η λύση που λες (dialog με slider) είναι η σωστή προσέγγιση. Συνεπώς, μάλλον θα πρέπει να μπει ένα ελαφρύ change_volume_absolute() χωρίς πλήρες menu rebuild σε κάθε drag του slider και το dialog.
Δε είμαι βέβαιος πως μπορώ να το κάνω σωστά αυτό χωρίς να διαλύσω τα πάντα, άρα θα το δώσω στα llm να μου πούνε πως και να το δοκιμάσω για λίγες μέρες.
Περίεργο πάντως που δεν σου λειτουργεί η αυξομείωση του ήχου με την ροδέλα του mouse.