#1 Le 06/02/2007, à 23:20
- Sploutchy
[Nautilus] Script icones de dossiers, folder.jpg (comme WinXP)
Salut à tous,
N'ayant trouvé que des sujets irrésolus à ce sujet, je requiers votre aide.
Pouvez vous traduire ce HowTo ? (ne parle pas anglais !) (pour peut-être le mettre dans le wiki)
http://ubuntuforums.org/showthread.php?p=1319473
Ok, here's what I did. First I went to my music directory and made a text file of all of my folders using the following commands (things in capitals means use some common sense
):
cd /NAVIGATE/TO/YOUR/MUSIC/DIRECTORY ls > music.txt
That should make a nice text file, seperated by linebreaks (\n) for the next step.
The next step: Make your script. Since I am comfortable with PHP I used PHP and executed the file using the command line (make sure you have the appropriate packages to run php files from the commandline......php-cli or something):
php icons.php > /home/aashay/.nautilus/metafiles/YOURMETAFILE.xml
Again, since my Directory is called /media/fat/My Music, my file was called file:%2F%2F%2Fmedia%2Ffat%2FMy%2520Music.xml
(Note: If you are having trouble finding your metafile, make some changes by hand to your music directory, ie maybe replace one of the folders, or change the view of it.....then navigate to the .nautilus/metafile directory and organize it by dates modifed, you should see the appropriate file as being one of the most recent ones modified)
Finally, here is my PHP code. It's a bit disgusting and noob but that's because I catered it specifically to my own setup, so don't forget to tailor it to your own setup. Again, you can use any sort of script that loops through a list of your music folders and outputs the data in the following format:
<file name="THE FOLDER WHOSE ICON YOU ARE MODIFYING" timestamp="UNIXTIMESTAMP" custom_icon="ICON NAME SUCH AS FOLDER.JPG"/>
Again, use some common sense and replace all the appropriate stuff
So here is my code:
<?php /* Used in conjunction with nautilus metafile for music folder Folder.jpg replacement! */ $time = mktime(); $dir = "/media/fat/My Music/"; $filename = $dir . "music.txt"; $handle = fopen($filename, "r"); $contents = fread($handle, filesize($filename)); fclose($handle); $lines = explode ("\n", $contents); echo "<?xml version=\"1.0\"?>\n<directory>"; foreach ($lines as $value) { if ($value) { //replace special characters.....this is kind of a dumb way to do things, I bet a more leet php coder would be able to find a better function to do this $newval = str_replace(" ", "%20", $value); //replace spaces $newval = str_replace(",", "%2C", $newval); //i have some commas in my album names $newval = str_replace("&", "%26", $newval); //i noticed an ampersand (&) in certain album titles such as Outkast - Speakerboxxx & The Love Below $filename = $dir . $value . "/Folder.jpg"; $time = mktime(); //Unix time! if (file_exists($filename)) //we only want to do this if there is actually a Folder.jpg file in there { $size = filesize($filename); if ($size && $size < 1048576) //if the Folder.jpg file is too big we might have problems, so lets limit it to 1 MB { echo "<file name=\"" . $newval . "\" timestamp=\"". $time . "\" custom_icon=\"Folder.jpg\"/>"; } }//end if statment: file_exists } } //end foreach echo "</directory>\n"; clearstatcache(); //not really sure if we need this exit (); ?>
Finally make sure to restart nautilus with:
nautilus -q
Load up your music directory and you should be good to go! Again, sometimes it takes forever to load the directory (I do believe they are working on a fix that makes nautilus more efficient when it comes to icons).
If anyone wants more details or would like me to do more work for them along the lines of the php script and such, let me know and I'll make things more automagic when I have time. Otherwise, have fun! ;-)
Merci !
P.S.: Je n'ai pas compris ce que l'on mettait dans le music.txt, dans le icons.php et comment lancer la machine !
Hors ligne
#2 Le 07/02/2007, à 21:44
- beecher
Re : [Nautilus] Script icones de dossiers, folder.jpg (comme WinXP)
Voilà une traduction avec peut-être des fautes (mais à priori cela me semble bon) :
Ok, voilà ce que j'ai fait. D'abord je suis allé dans mon dossier "Ma Musique" et j'ai crée un fichier texte de tous mes dossiers en utilisant les commandes suivantes (les choses en capitales veulent dire qu'il faut utiliser un peu de bon sens ):
cd /NAVIGATE/TO/YOUR/MUSIC/DIRECTORY
ls > music.txt
Ceci devrait donner un beau fichier texte, séparer par les fins de ligne (\n) pour la prochaine étape.
La prochaine étape: Faire votre script. Étant donné que je suis à l'aise avec le PHP, j'ai utilisé PHP et exécuté le fichier en utilisant la ligne de commande (assurez-vous d'avoir les paquets appropriés pour exécuter les fichiers php à partir de la ligne de commande....php-cli ou quelque chose dans le genre)
php icons.php > /home/aashay/.nautilus/metafiles/YOURMETAFILE.xml
Encore une fois, puisque mon Dossier s'appelle /media/fat/Ma Musique, mon fichier a été nommé:%2F%2F%2Fmedia%2Ffat%2FMy%2520Music.xml
(Note: Si vous avez des difficultés à trouver votre metafile, faites quelques changements à la main à votre dossier musique, ie peut-être remplacer un des dossiers, ou changer sa visualisation... puis naviguez jusqu'au dossier .nautilus/metafile et l'organiser par date de modification, vous devriez voir le fichier approprié comme étant un de ceux les plus récemment modifiés)
Finalement, vient mon code PHP. Ce n'est pas très propre et plutôt débutant mais c'est parce que je l'ai conçue spécifiquement pour ma configuration, donc n'oubliez pas de le modifier pour votre propre configuration. Encore une fois, vous pouvez utiliser n'importe quel genre de script qui scanne une liste de vos dossiers musicaux et renvoie les données dans le format suivant:
<file name="LE DOSSIER DONT VOUS MODIFIEZ L'ICONE" timestamp="UNIXTIMESTAMP" custom_icon="NOM DE L'ICONE TEL QUE FOLDER.JPG"/>
Encore une fois, faites preuve de bon sens et remplacez les choses appropriées
Donc voilà mon code:
<?php
/*
Utilisé en conjonction de nautilus metafile pour le remplacement du dossier musical Folder.jpg!
*/
$time = mktime();
$dir = "/media/fat/My Music/";
$filename = $dir . "music.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
$lines = explode ("\n", $contents);
echo "<?xml version=\"1.0\"?>\n<directory>";
foreach ($lines as $value)
{
if ($value)
{
//remplaçe les caractères spéciaux.....c'est un peu une manière débile de faire les choses, je pense un qu'un bon codeur php serait capable de trouver une meilleure fonction pour faire ceci
$newval = str_replace(" ", "%20", $value); //remplace les espaces
$newval = str_replace(",", "%2C", $newval); //j'ai quelques virgules dans le nom de mes albums
$newval = str_replace("&", "%26", $newval); //j'ai remarqué une esperluette (&) dans certains titres d'albums tels que Outkast - Speakerboxxx & The Love Below
$filename = $dir . $value . "/Folder.jpg";
$time = mktime(); //Unix time!
if (file_exists($filename)) //on ne veut faire ceci que si il y a un fichier Folder.jpg dedans.
{
$size = filesize($filename);
if ($size && $size < 1048576) //si le fichier Folder.jpg file est trop gros on pourrait avoir des problèmes, on le limite donc à 1 MB
{
echo "<file name=\"" . $newval . "\" timestamp=\"". $time . "\" custom_icon=\"Folder.jpg\"/>";
}
}//end if statment: file_exists
}
} //end foreach
echo "</directory>\n";
clearstatcache(); //not really sure if we need this
exit ();
?>
Finalement assurez-vous de relancer nautilus avec:
nautilus -q
Chargez votre dossier musicale et vous devriez être prêt à y aller. Encore une chose, parfois cela prend beaucoup de temps pour charger le dossier (mais je crois savoir qu'il travaille sur une correction qui permette à nautilus d'être plus efficace dans la gestion des icônes).
Si quelqu'un veut plus de détails ou voudrait me faire faire plus de travails pour eux concernant les lignes de php et autres, faites le moi savoir et je rendrais les choses plus "automagic" quand j'aurais du temps. Sinon, amusez-vous bien! ;-)
Dernière modification par beecher (Le 07/02/2007, à 22:11)
Hors ligne
#3 Le 07/02/2007, à 23:16
- Sploutchy
Re : [Nautilus] Script icones de dossiers, folder.jpg (comme WinXP)
Merci beaucoup !
En résumé :
1. Rendez-vous dans le dossier :
cd /CHEMIN/JUSQUA/VOTRE/DOSSIER/
2. Lister les dossier et écrivez dans un fichier music.txt :
ls > music.txt
3. Créer un fichier icons.php avec ce code :
<?php
/*
Script pour changer, dans nautilus, les icônes de dossiers musicaux par un fichier Folder.jpg
*/
$time = mktime();
$dir = "/media/fat/My Music/"; /* A MODIFIER par l'emplacement de votre dossier */
$filename = $dir . "music.txt"; /* Si votre listing ne s'appelle pas music.txt, modifiez */
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
$lines = explode ("\n", $contents);
echo "<?xml version=\"1.0\"?>\n<directory>";
foreach ($lines as $value)
{
if ($value)
{
$newval = str_replace(" ", "%20", $value); //remplace les espaces
$newval = str_replace(",", "%2C", $newval); //remplace les virgules
$newval = str_replace("&", "%26", $newval); //remplace les esperluettes (&)
$filename = $dir . $value . "/Folder.jpg"; /* A MODIFIER par le nom du fichier image de votre pochette (même nom pour tous les dossiers !) */
$time = mktime(); //Unix time!
if (file_exists($filename)) //on ne veut faire ceci que si il y a un fichier Folder.jpg dedans.
{
$size = filesize($filename);
if ($size && $size < 1048576) //si le fichier Folder.jpg est trop gros on pourrait avoir des problèmes, on le limite donc à 1 MB
{
echo "<file name=\"" . $newval . "\" timestamp=\"". $time . "\" custom_icon=\"Folder.jpg\"/>"; // A MODIFIER si le fichier image n'est pas Folder.jpg
}
}//end if statment: file_exists
}
} //end foreach
echo "</directory>\n";
clearstatcache(); //peut-être pas nécéssaire
exit ();
?>
Ou votre propre code qui renvoie :
<file name="LE DOSSIER DONT VOUS MODIFIEZ L'ICONE" timestamp="UNIXTIMESTAMP" custom_icon="NOM DE L'ICONE TEL QUE FOLDER.JPG"/>
4. Executez votre script sur le fichier XML de votre dossier :
php icons.php > /home/PSEUDO/.nautilus/metafiles/LEFICHIERMETAFILE.xml
Sachant que vous avez besoin du paquet php-cli,
sudo apt-get install php-cli
Et que votre fichier metafile sera nommé "file:%2F%2F%2Fmedia%2Ffat%2FMy%2520Music.xml" si votre dossier est /media/fat/My Music/
5. Rechargez Nautilus :
nautilus -q
Allez à votre dossier et appréciez !
Hors ligne
#4 Le 21/10/2007, à 16:57
- TheKind
Re : [Nautilus] Script icones de dossiers, folder.jpg (comme WinXP)
Et moi je trouve ça trop compliqué alors j'ai fait un autre script php
Fichier mettre_images.php (mettez le nom que vous voulez mais modifiez la commande après):
<?php
function encode_filename ( $string ) {
return str_replace("%252F", "%2F", urlencode(rawurlencode($string)));
}
$dossier_travail = dirname(__FILE__);
$dossier = opendir($dossier_travail);
$liste_images = null;
$liste_dossiers = null;
$i = 0;
// On liste lez contenu du dossier où se trouve le php
while ($fichier = readdir($dossier)) {
if ( is_dir($fichier) ) {
// Si ce sur quoi on tombe est un dossier, on s'y intéresse
// Et on reliste le dossier à la recherche de folder.jpg
$dossier2 = opendir($dossier_travail."/".$fichier);
while ($fichier2 = readdir($dossier2)) {
if ( strtolower($fichier2) == strtolower("folder.jpg") ) {
$i++;
$liste_images[$i] = $fichier2;
$liste_dossiers[$i] = $fichier;
}
}
closedir($dossier2);
}
}
closedir($dossier);
// On a la liste des dossiers et images, créons le texte à mettre dans le XML:
$output = "";
$f = 0;
$output .= "<?xml version=\"1.0\"?>\n<directory>";
while ( $f < $i ) {
$f++;
$output .= "<file name=\"".rawurlencode($liste_dossiers[$f])."\" timestamp=\"".mktime()."\" custom_icon=\"".rawurlencode($liste_images[$f])."\"/>";
}
$output .= "</directory>";
clearstatcache();
// Maintenant le contenu du XML est dans $output, enregistrons le fichier
$path = $_ENV['HOME']."/.nautilus/metafiles/file:".encode_filename("//".$dossier_travail).".xml";
file_put_contents($path, $output);
exec("nautilus -q");
?>
Pour utiliser ce code:
1) Mettez mettre_images.php dans le dossier que vous voulez traiter
2) Ouvrez la console, allez dans ce dossier avec cd, puis faites "php mettre_images.php"
Le script va chercher tout seul les fichiers folder.jpg (ou Folder.jpg, pas de problèmes de casse) dans les dossiers et écrire le fichier XML comme un grand, et redémarrer nautilus.
Dernière modification par TheKind (Le 21/10/2007, à 16:58)
Hors ligne
#5 Le 09/03/2010, à 11:25
- mikstar
Re : [Nautilus] Script icones de dossiers, folder.jpg (comme WinXP)
Bonjour,
Je suis super interessé par ce script, mais je n'y connais rien. J'ai bien recopier le script dans le dossier où se trouve tout tout mes dossiers contenant des fichiers "folder.jpg" ; Je l'ai renommé "disco". Mais quand je lance la commande "php disco.php" il me dit :
"Could not open input file: disco.php"
Faut-il changer quelque chose dans le script en fonction de mes dossiers?
D'avance merci.
Hors ligne
#6 Le 19/04/2010, à 07:28
- Bazoo
Re : [Nautilus] Script icones de dossiers, folder.jpg (comme WinXP)
@mikstar: Il faut surement donner les droits d'exécution au fichier disco.php :
- Clic droit sur le fichier > Propriétés > Permissions > Autoriser l'exécution du fichier comme un programme.
Hors ligne
#7 Le 22/07/2013, à 18:02
- hadlvrz
Re : [Nautilus] Script icones de dossiers, folder.jpg (comme WinXP)
Bonjour à tous !
Quelqu'un pourrait t-il mettre ce script à jour ? Je n'arrive pas à le faire fonctionner avec la nouvelle architecture des dossiers HOME sur Ubuntu 13.04...
Le script renvoie :
root@xxxx-Satellite-P200:/media/xxxxxxx/DATA/musique/FLAC# php mettre_images.php
PHP Notice: Undefined index: HOME in /media/xxxxxxxx/DATA/musique/FLAC/mettre_images.php on line 38
PHP Warning: file_put_contents(/.nautilus/metafiles/file:%2F%2F%2Fmedia%2Fxxxxxxxxx%2FDATA%2Fmusique%2FFLAC.xml): failed to open stream: No such file or directory in /media/xxxxxxxxx/DATA/musique/FLAC/mettre_images.php on line 39
Merci d'avance
Hors ligne