Quelque chose m’énerve dans le fonctionnement de rhythmbox : j’ai 8.534 morceaux à écouter et pourtant, même en lecture aléatoire, je retombe toujours sur les mêmes. En tout cas j’en ai l’impression (ce qui est totalement différent). Alors je voudrais faire deux choses :
- Modifier la règle de lecture aléatoire pour n’autoriser à la lecture que les fichiers les moins lus ;
- Éventuellement, vérifier la façon dont est fait le mélange des morceaux et le corriger pour éviter tout biais le cas échéant.
Comme mes études ont coûté beaucoup d’argent à mes parents en leur temps, et que je ne veux pas me prendre la tête à tout reconstruire de zéro, on va essayer de faire ça bien, à partir du SRPM de rhythmbox, pour en patcher le contenu, et produire un nouveau rpm qui sera dans mon propre dépôt, avec mon patch.
Télécharger un SRPM
yum n’est pas fait pour déployer les paquetages sources. Pour cela, il faut déjà avoir installé yumdownloader :
# yum install yum-utils
Grâce à ce petit utilitaire, on va pouvoir récupérer le paquetage source de rhythmbox à moindre frais :
# yumdownloader --source rhythmbox
Magie des nuits d’Arabie, un magnifique SRPM vient d’apparaître dans le répertoire courant :
# ls rhythmbox-0.12.8-4.fc13.src.rpm
Installer les dépendances du SRPM d’origine
Comme on va vouloir chercher à reproduire ce logiciel presque à l’identique, autant commencer par en installer les dépendances. rpmbuild les donne bien volontiers :
# rpmbuild --rebuild rhythmbox-0.12.8-4.fc13.src.rpm erreur: Dépendances de construction manquantes: libgpod-devel est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 gnome-media-devel est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 brasero-devel est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 gstreamer-plugins-base-devel >= 0.10 est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 totem-pl-parser-devel >= 2.21.1 est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 gnome-vfs2-devel >= 2.7.4 est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 avahi-glib-devel >= 0.6 est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 libmusicbrainz3-devel est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 dbus-devel >= 0.90 est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 dbus-glib-devel >= 0.70 est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 libnotify-devel est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 gstreamer-devel est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 gnome-doc-utils est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 pygtk2-devel est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 libsoup-devel >= 2.3.0 est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 lirc-devel est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 libmtp-devel est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 gstreamer-python-devel est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 libgudev-devel est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 libgnome-keyring-devel est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64 libSM-devel est nécessaire pour rhythmbox-0.12.8-4.fc13.x86_64
Ah ! oui, quand même ! Bon, on ne se décourage pas :
# rpmbuild --rebuild rhythmbox-0.12.8-4.fc13.src.rpm 2>&1 | grep est | cut -d ' ' -f 1 | xargs yum install -y
et tout ce petit monde est installé en deux temps, trois mouvements.
Déployer le contenu du SRPM pour le patcher
Ce n’est pas la partie la plus compliquée. D’abord, installer le rpm source :
# rpm -i rhythmbox-0.12.8-4.fc13.src.rpm
Puis déployer l’archive de code d’origine :
# tar xjf rhythmbox-0.12.8.tar.bz2
qui nous créé un joli répertoire rhythmbox-0.12.8.
Écriture du patch … et changement de plan
On rentre dans le vif du sujet ! En fouillant un peu le projet, on tombe rapidement sur tout un tas de fichiers qui prennent (déjà !) en charge différentes manières d’opérer la lecture aléatoire :
# ls shell/rb-play-order-random* shell/rb-play-order-random-by-age-and-rating.c shell/rb-play-order-random-by-age.c shell/rb-play-order-random-by-rating.c shell/rb-play-order-random.c shell/rb-play-order-random-equal-weights.c
Sac-à-papier ! C’est déjà tout fait ! Mais alors, pourquoi diable ce choix n’est-il pas disponible via l’interface graphique de rhythmbox ? Typiquement, ce que je souhaite, c’est appliquer la politique « random-by-age ».
Appliquer une politique donnée dans rhythmbox
On reprend les fondamentaux : je cherche « rhythmbox random age » dans Google, et paf ! Le premier lien m’instruit comment opérer une configuration moins immédiate de rhythmbox et de le régler enfin comme je le souhaite. Pour information, voici la marche à suivre :
# gconf-editor
Menu « /apps/rhythmbox/state », paramètre « play_order ». Il faut passer sa valeur de « shuffle » à « random-by-age » dans mon cas précis. Et le tour est joué.
Conclusion
L’investissement financier de mes parents n’est toujours pas rentabilisé. Même en cherchant à travailler intelligemment, je n’ai pas été suffisamment paresseux. À ma décharge, il n’était pas évident a priori que :
- rhythmbox propose en natif de modifier la politique qui régit la lecture aléatoire, vu que ce n’est pas dans l’interface du logiciel ;
- de connaître le nom de la politique qui correspond à mon besoin, et donc de trouver la bonne requête Google qui vient à mon secours.
Désolé donc, ce ne sera pas cette fois qu’on ira au bout de la manipulation, les développeurs de GNOME ont presque trop bien travaillé. Mais il y aura bientôt une autre occasion de reprendre ce thème et de l’adresser complètement !
Pingback: Fedora – Patcher un logiciel à partir de son SRPM finalement « Le confiseur