Journal tmpc : un client minimaliste, et qimaptray : utiliser sa webcam pour être notifié des mails

Posté par . Licence CC by-sa
Tags :
23
14
mai
2014

Sommaire

Je viens présenter deux petits projets sans prétention que je développe sur mon temps libre, au cas où ils intéresseraient quelqu'un.

Le premier, tmpc, est encore un client mpd minimaliste, adapté à mes besoins particuliers (rechercher de la musique rapidement en ayant un temps de démarrage rapide).

Le second, qimaptray, permet de notifier des mails qui arrivent dans ma boîte aux lettres avec une icône dans la barre des tâches et en allumant la LED de ma webcam tant qu'un mail est non lu dans ma boîte de réception.

tmpc

tmpc est un petit client mpd pour parcourir rapidement sa bibliothèque et pouvoir ajouter des musiques à sa liste de lecture rapidement. L'interface est minimale et est prévue pour fonctionner sans trop de trafic réseau ou de ressources (je l'utilise personnellement beaucoup sur un netbook pas très puissant).

Au niveau des fonctionnalités, on a deux modes principaux :

Le mode visualisation

Il permet de voir la musique en cours de lecture (ou en pause) et éventuellement de se déplacer dans la musique.

Écran de visualisation

Le mode recherche

Le mode de recherche est un peu inspiré de mpdc présenté ici : https://linuxfr.org/users/nhrx/journaux/quelques-nouvelles-de-mpdc , j'avais d'ailleurs envisagé de l'utiliser plutôt que de parler directement à mpd.

Il permet de travailler sur la liste de lecture en cours. On a droit à une interface avec un champ texte et une liste de musiques. En fonction de ce qu'on tape dans le champ texte, on va avoir des comportements différents :

Lorsqu'on tape du texte « simple » dans la barre de recherche, une recherche est faite sur la liste de lecture courante. Les musiques qui correspondent à ce qu'on a rentré sont affichées. Par défaut, tous les tags sont utilisés pour la recherche, ainsi que le nom complet du fichier.

Pour affiner la recherche, il existe différentes altérations de la recherche :

Mot-clé Signification
@ Affiche la liste de lecture courante
!recherche Effectue la recherche recherche dans la base de données
:tag:valeur Recherche les musique ayant un tag tag contenant valeur
recherche1,recherche2 Recherche les musiques correspondant à recherche1 ET recherche2
+recherche Ajoute les musiques correspondant à recherche à la playlist

La liste des tags est celle fournie par mpd. Notez que pour rechercher dans le tag « comment », il faut d'abord l'ajouter dans les commentaires traités (champ metadata_to_use dans votre .mpdconf).

Exemples de recherches :

  • !:artist:red hot,:album:live
    Recherche les musiques des albums live des Red Hot.

  • red hot,live
    Même chose, mais les critères étant moins précis, on peut éventuellement retourner d'autres musiques.

Modification de la liste de lecture

Une fois une recherche effectuée, on peut modifier la liste de lecture. En admettant qu'une musique a été sélectionnée, les touches suivantes sont disponibles :

Touche Effet
Echap Ferme tmpc.
Entrée Lit la sélection, l'ajoute à la liste si besoin.
Espace Ajoute la sélection à la liste si besoin.
Suppr Supprime la sélection de la liste de lecture.
Ctrl O Ajoute toutes les musiques trouvées à la liste de lecture.
Ctrl P Vide la liste de lecture.
+ ou - Modifie le champ priorité de la musique sélectionnée.
F10 Affiche la zone de la musique courante dans la fenêtre de recherche.

Note : j'ai bien conscience que les raccourcis n'ont rien de cohérent, mais je m'y suis fait. Si j'ai un autre utilisateur, je peux les changer, voire les rendre paramétrables.

Note : La fonctionnalité de priorité n'est pas disponible sur debian stable (la libmpdclient étant trop ancienne).

Capture d'écran du mode recherche

Écran de recherche

Détails techniques

  • Il s'agit d'une application en C++ / Qt faite en deux parties : la première est une interface C++ à libmpdclient ; la deuxième est l'interface graphique à proprement parler. Il est possible d'extraire la lib C++ pour l'utiliser ailleurs.

  • La licence est GPLv2+ pour la partie interface Qt, et LGPLv2+ pour l'interface C++.

  • Le code est disponible sur github à l'adresse : https://github.com/guillaumecl/tmpc .

  • Pour l'instant, il n'y a pas d'installeur ou de package pour des distributions. Je peux en faire s'il y a un quelconque intérêt, par contre.

  • Les dépendances sont:

    • libmpdclient
    • Qt4
    • CMake pour la compilation
  • Pour l'installation :

git clone https://github.com/guillaumecl/tmpc
mkdir -p tmpc/build
cd build
cmake ..
make

qimaptray

Je voulais initialement une application minimale qui me prévenait des arrivées de mails avec une icône dans la barre des tâches, un message de notification, et éventuellement en lançant un programme.

Je voulais aussi pouvoir laisser l'application tourner en permanence, et comme je le disais plus haut, j'utilise beaucoup un netbook, il me fallait donc une application légère.

Plus tard, je me suis rendu compte qu'étant souvent en plein écran (donc sans barre des tâches visible), je ne voyais pas forcément les mails. Parallèlement, j'ai entendu parler de webcams qui filmaient alors que la led était éteinte. Je me suis dit que je pourrais faire exactement l'inverse, et indiquer de cette façon l'arrivée d'un mail.

Résultat : je vois bien plus facilement l'arrivée de mes mails, et j'ai enfin trouvé un intérêt à ma webcam ;)

qimaptray est donc une application qui permet tout ça.

Principes de base

Communication IMAP

Je n'ai pas trouvé de bibliothèque légère qui permette de faire une gestion de l'IMAP. J'ai vu curl, mais je n'arrivais pas à faire ce que je voulais… Malheureusement, je n'ai pas trouvé d'autre solution que de réimplémenter probablement un énième client IMAP.

L'idée de base était juste d'utiliser IDLE, et en cas de réception, de lancer une recherche sur le nombre de messages non lus. Pour ça, il n'y a pas besoin d'implémenter une grosse partie de la communication du protocole IMAP.

Note : Seul un dossier est surveillé (pour l'instant, il s'agit du dossier INBOX, ce n'est pas paramétrable parce que je n'en ai pas eu besoin). Il est possible en ajoutant du code de surveiller plusieurs répertoires IMAP, mais cela impliquera d'avoir plusieurs connexions ouvertes vers le serveur mail.

Allumage de la LED

Je pensais au départ que j'allais pouvoir juste modifier un fichier dans /sys/class/leds, mais ça n'était pas aussi simple. J'ai donc simplement ouvert le périphérique de capture vidéo, ce qui allume (au moins chez moi…) la LED en haut de mon écran.

La consommation de la batterie est un peu augmentée, mais pas drastiquement non plus (la caméra n'est pas en train d'émettre des données, mais elle n'est plus complètement éteinte). La consommation CPU pour garder la LED allumée est quant à elle nulle.

La webcam est une fonctionnalité optionnelle de qimaptray. Il est possible par exemple de l'utiliser sur un ordinateur de bureau sans webcam, ou simplement de ne pas avoir envie d'utiliser cette fonctionnalité. Il suffit pour cela de définir la variable d'environnement VIDEO_DEVICE à une valeur qui n'est pas un fichier de caméra.

Il n'y a pour l'instant pas la possibilité de compiler qimaptray complètement sans webcam_led mais il est possible de le faire simplement en cas de besoin.

Problèmes

Je bouge pas mal avec mon netbook, un des besoins était que qimaptray puisse se reconnecter en cas de coupure réseau, voire carrément en cas de changement de type de lien (passage de la 3G à du Wifi, par exemple).

Au départ, le mot de passe était passé par stdin et non stocké en RAM. J'ai voulu gérer les déconnexions sans redemander le mot de passe à l'utilisateur. Pour ça, j'ai dû finalement le stocker pour le redonner au serveur IMAP en cas de besoin. Je n'ai pas réussi à récupérer la session SSL, ce qui aurait été bien plus propre.

De plus, j'ai aussi du résoudre un problème gênant : en sortie de veille, mes connexions étaient mortes mais rien ne l'indiquait du côté d'openssl. poll ne renvoyait rien non plus, passer en socket non bloquantes n'a pas aidé… J'en suis venu à couper la connexion si je n'avais pas de réponse en 10 minutes (intervalle maximum de réponse à IDLE).

Le cas général était que la connexion était perdue après un passage en veille. J'ai géré ce cas en surveillant directement les écritures à /sys/power/state, ce qui marche chez moi, mais est vraiment crade (et ne marchera à coup sûr pas partout)

Si quelqu'un a une idée pour rendre tout ça plus propre (et portable), je suis preneur…

Installation

Comme tmpc, il n'y a pas de paquet ou de fichier d'installation. J'ai préféré séparer la partie webcam_led que j'ai faite en C, donc j'ai utilisé un sous module git, ce qui complexifie un peu les commandes à entrer :

git clone https://github.com/guillaumecl/qimaptray
cd qimaptray
git submodule init
git submodule update
make -C webcam_led libwebcam_led.a
mkdir build
cd build
cmake ..
make

Les dépendances sont :

  • webcam_led
    • libv4l2
  • qimaptray
    • webcam_led
    • Qt
    • openssl
    • Cmake (pour la compilation)

Utilisation

qimaptray accepte ses entrées utilisateur depuis stdin pour l'instant.

La forme requise est :

serveur mail pass

Pour ne pas avoir à rentrer mon mot de passe à chaque fois, j'utilise gpg :

gpg --batch -d ~/password.gpg | qimaptray

password.gpg étant le fichier contenant ma configuration, chiffrée par gpg.

Détails techniques

  • Il est possible d'utiliser webcam_led tout seul pour piloter la webcam par socket unix.

  • La licence n'est pour l'instant pas précisée dans les sources (je vais corriger ça dès que j'y pense), je vais probablement mettre les deux parties en GPLv2+.

  • # client imap

    Posté par (page perso) . Évalué à 4.

    Sans indiscrétion pourquoi ne pas utiliser c-client comme client IMAP ?
    http://www.washington.edu/imap/

    • [^] # Re: client imap

      Posté par . Évalué à 1.

      Simplement, je ne suis pas tombé dessus pendant mes recherches. Évidemment, maintenant que j'ai visité le site, mes recherches google me montrent toujours uwimap en première position…

      Je vais voir si ça vaut le coup d'y passer ou pas. Mais pour l'instant, les échos de cette librarie ne sont pas tous positifs. Après avoir installé le paquet, je ne vois pour l'instant pas comment faire un client imap juste en regardant les headers.

  • # nom

    Posté par . Évalué à 5.

    je trouve que le nom du soft prête un peu à confusion : la suite de caractère "tmp" est très fortement encré chez moi comme étant "temporaire".

    Sinon faut que je teste ça ;)

    • [^] # Re: nom

      Posté par . Évalué à 1.

      Je suis complètement d'accord : les noms des deux logiciels portent à confusion.

      Pour tmpc, au départ ça voulait dire Tiny Music Player Client, sauf que ça fait complètement doublon avec mpc (j'avais pas fait attention, en plus !). Je pense qu'un vrai nom, non lié au but du programme, pourrait mieux aller.

      Je pense que je changerai le nom quand j'en trouverai un plus adapté ;)

  • # led eteinte

    Posté par (page perso) . Évalué à 3.

    Parallèlement, j'ai entendu parler de webcams qui filmaient alors que la led était éteinte

    C'est une légende urbaine, ou c'est vraiment possible ?

    • [^] # Re: led eteinte

      Posté par (page perso) . Évalué à 6.

      Ça ne me semble pas improbable que certains fabricants active la led via le pilote et non pas de manière électronique, déjà pour des raisons de simplicité de conception. À partir de là, il suffit de modifier le pilote.

      « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

    • [^] # Re: led eteinte

      Posté par . Évalué à 1.

      Techniquement ça doit être possible pour certaines webcams en modifiant le firmware. En tous cas, c'est ça que j'avais lu.

      Par contre l'OS n'a apparemment pas la main directement dessus.

    • [^] # Re: led eteinte

      Posté par . Évalué à 2.

      Je ne savais même pas qu'il y'avait des leds sur les webcams, ça sert à quoi ?

      • [^] # Re: led eteinte

        Posté par (page perso) . Évalué à 6.

        À savoir quand elle est allumée pour éviter d'être enregistré à son insu.

        « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

  • # pomodoro

    Posté par . Évalué à 5.

    Merci d'avoir partager.
    Il y a pleins d'idées à reprendre.

    Petite remarque, pourquoi ne par faire deux journaux, sachant que les projets n'ont pas de lien si ce n'est toi ;)

    Pour les notifications mail, je vais faire mon donneur de leçon, genre faites ce que ce dis mais pas ce que je fais. Mais, être à l’affut des mails n'est pas bon pour la productivité, sauf si c'est ton boulot mais dans ce cas pas besoin de notifications. La méthode pomodoro préconise de rester concentré sur une tâche pendant 25 min (un pomodoro) puis de se relâcher pendant 5 min pour préparer le prochaine pomodoro. La consultation des mails devant intervenir pendant la pause.

    Je ne suis pas d'une grande discipline mais quand j'arrive à me l'appliquer, les effets sur ma productivité sont spectaculaires.

    • [^] # Re: pomodoro

      Posté par . Évalué à 3.

      Petite remarque, pourquoi ne par faire deux journaux, sachant que les projets n'ont pas de lien si ce n'est toi ;)

      J'ai hésité, l'avais l'impression que ça allait faire deux journaux bookmarks. Finalement chaque partie était assez grosse en elle-même, mais bon, je n'y ai pas repensé.

      Pour la productivité, moi j'ai plus tendance à ne pas regarder mes mails en à avoir le téléphone éteint en permanenc. Ce programme m'aide justement à penser à regarder mes mails au moins de temps en temps ;) et j'ai une boîte mail pour les mails non urgents qui est différente, en fait. Je reçois en moyenne moins d'un mail par jour.

      J'avais dans l'idée de plugger webcam_led à psi (c'est pour ça qu'avec la version webcam_led en programme séparé, la LED est allumée si au moins une source dit qu'elle doit être allumée).

      Au final, je me suis dit que ça allait trop me distraire, et qu'il valait mieux pour mon boulot que j'oublie ça ;)

      • [^] # Re: pomodoro

        Posté par . Évalué à 2.

        tu branches ça à tes mails, psi, fb et twitter et t'es sûr de griller ta led… et ton taf :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.