lundi 28 janvier 2013

Commonist, tu feras ce que je veux.

C'est pas très amusant, quand on importe des photos en masse sur Commons de mettre tous les bandeaux qui vont bien sans trop se fatiguer sur toutes les pages de descriptions.
Personnellement, j'utilise commonist, qui a ça pour lui qu'on peut décrire les photos en deux parties : une première partie à gauche qui va se retrouver dans toutes les photos importées (pratique quand on importe une série) et une seconde partie à droite qui est spécifique à chaque photo (pratique si on veut détailler les choses).
Ça sera plus simple avec une photo :
Et ça marche pareil avec les catégories : à gauche les catégories pour l'ensemble du lot et à droite les catégories spécifiques à chaque photo.
Ça marche bien, c'est cool.

Ça marche bien, jusqu'au jour où on veut ajouter un bandeau, le genre de bandeau qu'il faut mettre quand on utilise le matériel de (au hasard) Wikimédia France. Parce que pour ça, il n'y a pas de case prévue.
On peut toujours le mettre en vrac un peu n'importe où, c'est sûr, ça se retrouvera quelque part sur la page de description.
Pour que ça ne fasse pas trop moche, on peut le mettre dans la case "coordonnées", à droite, ça se retrouvera proprement en-dessous du modèle {{Information}}. Mais quand on importe beaucoup de fichiers d'un coup, il y a le risque de rater une case. Après, il faut tout vérifier, c'est pas rigolo, ça prend du temps…

Ce soir, j'ai pris un coup de sang là-dessus, et je suis allé voir sous le capot ce que je voyais.
Il s'avère qu'il y a quelques fichiers texte dont le bricolage est à ma portée — quelqu'un m'a dit un jour que n'importe qui pouvait ajouter des fonctions aux logiciels libres, c'est faux : seuls les types qui savent faire peuvent le faire, c'est-à-dire pas moi (et c'est le truc qui m'intéresse, sinon j'en suis réduit à attendre qu'un type qui sait faire, et qui veuille bien faire, et qui ait le temps de faire… donc rien ne se passe).
D'abord, il faut avoir installé commonist (lire le fucking manuel), sinon ça marche pas.
Ensuite, ça se passe dans le dossier etc, il y a un fichier nommé image_wikimedia_commons.bpp qui contient en gros (et si j'ai bien compris) le modèle de la page de description, avec les champs qui viennent du formulaire (avec un pâté compliqué au niveau des coordonnées).
Le truc, c'est d'utiliser le champs "permission" qui ne sert à rien (si j'ai bien compris, on peut y mettre en version incompréhensible et avec des fautes d'orthographes ce qu'on met de façon tout aussi incompréhensible mais normalisée dans le bandeau de licence, ou bien on peut mettre le bandeau de licence directement dedans, bref, c'est pas très clair) et de le sortir du modèle :
Donc je commence par remplacer |Permission=$(common.permission) par |Permission= et puis je colle $(common.permission) sauvagement et sans pitié tout seul sur une ligne juste avant l'en-tête de chapitre du bandeau de licence. Si vous n'avez pas compris la manœuvre je mets le fichier en entier ici, copiez-collez comme des sagouins, faites-vous plaisir, baffrez-vous :
#
#// encoding: UTF-8
#// in: common:Common, upload:Upload
#
== {{int:filedesc}} ==
# if (!upload.description.startsWith("{{Information")) {
{{Information
|Description=$(common.description)
$(upload.description)
|Source=$(common.source)
|Date=$(upload.date.equals("") ? common.date : upload.date)
|Author=$(common.author)
|Permission=
|other_versions=
}}
# } else {
$(upload.description)   
#}
# if (upload.latitude != null && upload.longitude != null) {
{{Location dec|$(upload.latitude)|$(upload.longitude)|}}
# }
# else if (!upload.coordinates.equals("")) {
$(upload.coordinates)
# }
$(common.permission)
== {{int:license-header}} ==
$(common.licenseTemplate)
$(common.categories)
$(upload.categories)
Voila.
On pourrait aussi mettre la licence directement dans le {{Information}}, mais ça serait de la gourmandise.

Avec ça, il faut mettre le bandeau dans la case permission, et ça le colle sur toutes les images.

Peut-être qu'un jour je comprendrai comment ajouter des champs à cette putain d'interface proprement, mais pas aujourd'hui. Mais maintenant, grâce à mes dons de tripatouiller les trucs à moitié, vous vous retrouvez avec un logiciel qui est traduit dans 54 langues (sans blagues) mais dont l'interface ne correspond plus à ce qu'il fait.


PS. Commonist est paraît-il sous GNU GPL (j'arrive jamais à savoir… ça veut dire qu'il faut que je recopie la licence à la plume Sergent-Major et à l'encre violette sur feuilles volantes perforées et quadrillé avec une marge de 4 carreaux sans sauter de ligne et agrafées par trois, ou bien ça suffit en le disant ?)