Forum openmoko-fr.org

Forum de la communauté francophone autour du projet OpenMoko

Vous n'êtes pas identifié.

#1 05-10-2010 14:19:43

mossroy
Addicted-Moko
Date d'inscription: 26-06-2009
Messages: 107

Synchro de calendrier format iCal -> QtMoko

Bonjour à tous,

j'utilise QtMoko sur mon FreeRunner, et j'aimerais pouvoir consulter mon agenda dessus.
Mon agenda est au format iCal (extension .ics), et je voudrais pouvoir le transférer sur le calendrier de QtMoko.

Après pas mal de recherches, je n'ai pas trouvé d'outil tout prêt pour faire ça, mais uniquement quelques guidelines là : http://wiki.openmoko.org/wiki/PIM_Stora … IM-Storage
Du coup, je me suis lancé dans le développement du script Perl dont ils parlent sur cette page.

Ca commence à marcher, mais c'est certainement encore buggé et largement perfectible : je ne suis pas un expert Perl
Vous trouverez tout ça à l'adresse http://mossroy.free.fr/ics2qtcal/
Pour l'instant, ics2qtcal prend en entrée un fichier ics, et un fichier qtopia_db.sqlite (celui qui se trouve dans /home/root/Applications/Qtopia), et ça insère les rendez-vous du premier fichier dans le second fichier.

Ca se lance en ligne de commande : rien de packagé pour l'instant.
Il y a besoin de dépendances perl : libdbd-sqlite3-perl, libtie-ical-perl, libdate-ical-perl et perl-doc sous debian/ubuntu

Pour l'instant, je le fais tourner sur mon PC, en enchainant les commandes ainsi :

Code:

scp root@192.168.0.202:/home/root/Applications/Qtopia/qtopia_db.sqlite .
perl deleteqtcalappointments.pl qtopia_db.sqlite
./ics2qtcal.sh calendar.ics
scp qtopia_db.sqlite root@192.168.0.202:/home/root/Applications/Qtopia/

Ca prend la base de données sur le téléphone, la copie en local, y supprime les rendez-vous, ajoute ceux du fichier ics, puis retransfère la base de données sur le téléphone.

Mon principal problème est que mon script est trèèèès lent à s'exécuter : autour de 8 minutes sur un Core i5, pour moins de 500Ko répartis sur 3 fichiers ics...
Je pense que ça vient de la couche Tie::iCal. Apparemment le temps est pris à la ligne :

Code:

while (my($uid,$event) = each(%my_events))

qui parcourt les évènements du fichier ics : cette ligne est de + en + longue à exécuter quand on avance dans le fichier .ics : j'ai peur qu'il re-parcourt à chaque fois tous le fichier depuis le début, ou qqc comme ça.

D'autre part, je suis en train d'essayer de compléter ce script pour que les commentaires iCal (zones DESCRIPTION) soient transférés : ce n'est pas si simple parce que ce n'est apparemment pas stocké dans la base de données elle-même, mais dans des fichiers à part dans un format difficilement interprétable (il s'agit des fichiers dans /home/root/Applications/Annotator)


Bref, considérez ça comme du work-in-progress, sur lequel toute aide serait la bienvenue

Hors ligne

 

#2 06-10-2010 16:28:48

misc
Addicted-Moko
Lieu: Paris
Date d'inscription: 10-04-2009
Messages: 724
Site web

Re: Synchro de calendrier format iCal -> QtMoko

Regarde en utilisant ce module : http://code.google.com/p/perl-devel-nytprof/

J'ai vite fait regardé ton script, il a l'air correct, et pour un non expert perl, tu te débrouilles pas mal.

Hors ligne

 

#3 11-10-2010 15:17:54

mossroy
Addicted-Moko
Date d'inscription: 26-06-2009
Messages: 107

Re: Synchro de calendrier format iCal -> QtMoko

Merci pour l'idée misc, je vais essayer avec ton outil.
En parallèle, je travaille sur l'implémentation des commentaires iCal. Ca commence à marcher, mais j'ai des difficultés avec le format des fichiers générés par Annotator. Il s'agit apparemment d'objets C++ directement sérialisés sur disque (ou qqc comme ça).
J'arrive à générer des fichiers qu'il arrive à peu près à lire, mais c'est par des méthodes assez malpropres (en recopiant les octets d'un fichier exemple, en hexadécimal). Et d'ailleurs ça pose qqs problèmes sur la prise en compte des caractères accentués (encodage), et sur certains octets qui contiennent a priori une longueur de zone que je n'arrive pas à reproduire correctement.

Si qqn a une meilleure idée sur comment générer proprement ce type de fichier, je suis preneur

Hors ligne

 

#4 12-10-2010 15:26:25

mossroy
Addicted-Moko
Date d'inscription: 26-06-2009
Messages: 107

Re: Synchro de calendrier format iCal -> QtMoko

nytprof a confirmé mes soupçons : l'essentiel du temps est passé dans la méthode Tie::iCal::NEXTKEY
Cette méthode est appelée à chaque fois que je passe à l'événement ical suivant.
Or cette méthode semble bien reparcourir à chaque fois le fichier depuis le début.

Je pense que mon utilisation de Tie::iCal n'est pas bien adaptée à mon besoin de parcourt séquentiel et exhaustif du fichier ics. Malheureusement, je n'ai pas trouvé d'exemple d'utilisation autre. Je pense que ce re-parcourt systématique du fichier est obligatoire dans la mesure où ils s'appuient sur Tie::File
Sauf que, dans mon cas, je n'ai a priori pas besoin de Tie::File (qui permet de mettre à jour le fichier iCal).
Je vais essayer de réutiliser les méthodes qui sont dans Tie::iCal (elles sont bien pratiques pour interpréter le format ical), mais en ne faisant qu'un seul parcourt du fichier... Pas sûr que j'y arrive

Hors ligne

 

#5 12-10-2010 18:10:34

mossroy
Addicted-Moko
Date d'inscription: 26-06-2009
Messages: 107

Re: Synchro de calendrier format iCal -> QtMoko

Yes! J'ai pu modifier mon code pour éviter les parcours inutiles du fichier : au lieu de m'appuyer sur Tie::File, j'ai simplement réutilisé les méthodes de Tie::iCal, en codant moi-même le parcours du fichier.
Résultat : je passe de 8 minutes de traitement à 8 secondes...
Revers de la médaille : Tie::File aurait été très pratique pour faire une synchronisation dans les deux sens, c'est-à-dire une fusion des évènements saisis sur le FreeRunner et de ceux saisis dans les fichiers ics. Mais ce n'est pas dans mes objectifs pour l'instant.

Reste la partie commentaires iCal, qui n'est pas encore au point. Il y a en particulier 2 * 2 octets dans les fichiers de l'Annotator qui sont variables en fonction de la longueur du texte. Et je ne trouve pour l'instant pas l'algo pour les calculer. En copiant ces octets depuis un autre fichier, ça marche à moitié : les textes longs sont tronqués, et les + courts sont a priori ignorés.
S'il y a des spécialistes C++ dans la salle pour me trouver l'algo ça serait cool...

Hors ligne

 

#6 12-10-2010 19:55:45

Epy
Addicted-Moko
Lieu: Saint Maximin la Sainte Beaume
Date d'inscription: 08-07-2008
Messages: 418
Site web

Re: Synchro de calendrier format iCal -> QtMoko

Question bête de 'à peine débutant amateur en développement" est-ce que le fait qu'il parcoure le fichier ne te permettrai pas de récupérer les données, les stocker dans un "tableau" (à plusieurs dimensions si nécessaire) et de ne plus faire appel à lui, tu pioches directement dans ton tableau pour lire et écrire (et donc à l'inverse, quand tu as besoin d'écrire tu ne le fais qu'une fois en lui faisant lire le tableau)

C'est peut être des grosses bêtises que je dis là hein, c'est une simple idée en l'air venant de mes connaissances de base en dev et en algo smile

Hors ligne

 

#7 12-10-2010 20:16:07

mossroy
Addicted-Moko
Date d'inscription: 26-06-2009
Messages: 107

Re: Synchro de calendrier format iCal -> QtMoko

@Epy : en fait c'est déjà le cas, que ce soit avec la méthode Tie::File ou avec la nouvelle méthode que je viens de mettre en place.
Dans les 2 cas, l'ensemble du fichier est d'abord lu et mis dans un tableau contenant chacune des lignes. Puis ce tableau est reparcouru.
Le pb que j'avais avec Tie::File, c'est que, pour passer d'un évènement à l'autre, il appelait la méthode NEXTKEY, qui est implémentée en reparcourant tout le tableau depuis le début.
Du coup ça prenait de + en + de temps

Hors ligne

 

#8 12-10-2010 21:22:59

Epy
Addicted-Moko
Lieu: Saint Maximin la Sainte Beaume
Date d'inscription: 08-07-2008
Messages: 418
Site web

Re: Synchro de calendrier format iCal -> QtMoko

Ah d'accord, j'avais pas tout suivi alors. désolé

Dernière modification par Epy (12-10-2010 21:23:30)

Hors ligne

 

#9 13-10-2010 12:46:33

mossroy
Addicted-Moko
Date d'inscription: 26-06-2009
Messages: 107

Re: Synchro de calendrier format iCal -> QtMoko

J'ai mis en ligne une version 0.2 du script sur http://mossroy.free.fr/ics2qtcal/
Elle contient l'amélioration de perfs, et le début d'implémentation des descriptions d'événements.

Hors ligne

 

#10 01-11-2010 10:38:21

mossroy
Addicted-Moko
Date d'inscription: 26-06-2009
Messages: 107

Re: Synchro de calendrier format iCal -> QtMoko

J'ai réussi à gérer correctement les descriptions d’évènements (longueur et encoding).
C'est du reverse-engineering, donc peut-être encore incomplet, mais ça fonctionne très bien chez moi.
Ca donne une version 0.3, en ligne au même endroit : http://mossroy.free.fr/ics2qtcal/

Hors ligne

 

#11 18-11-2010 17:52:19

mossroy
Addicted-Moko
Date d'inscription: 26-06-2009
Messages: 107

Re: Synchro de calendrier format iCal -> QtMoko

Une version 0.4 est en ligne, toujours au même endroit.
J'y ai un peu généralisé les scripts, pour qu'ils acceptent plusieurs options, et ai ajouté un script qui automatise l'usage que j'en ai : télécharger en HTTP plusieurs fichiers .ics, puis en insérer le contenu sur le téléphone.
Ca peut maintenant tourner soit sur un ordinateur classique, soit sur le téléphone lui-même : on peut donc lancer la synchro quand on est en ballade avec un accès Internet (en ligne de commande pour l'instant)

Hors ligne

 

#12 18-11-2010 19:29:29

mossroy
Addicted-Moko
Date d'inscription: 26-06-2009
Messages: 107

Re: Synchro de calendrier format iCal -> QtMoko

Au passage, si quelqu'un sait comment ajouter une icône dans QtMoko : ça serait + pratique que de lancer le Terminal...
J'ai essayé de mettre un .desktop dans /usr/share/applications mais ça doit pas marcher comme ça dans QtMoko

D'autre part, au cas où je trouve le temps et le courage de m'y lancer (ce qui n'est pas gagné), ce serait quoi la bonne manière de packager le tout? Faire un .deb ou plutôt un package d'application à la QtMoko?
Je ne sais actuellement faire aucun des deux. Je me dis que le .deb est + universel, et certainement mieux documenté/outillé (typiquement pour tirer les dépendances de packages Perl), mais j'ai l'impression qu'il n'y a pas d'IHM pour installer des .deb, contrairement aux applications QtMoko.
Après, il me semble qu'il existe des applications QtMoko qui installent elles-mêmes des .deb... Peut-être que ce serait la meilleure solution, mais probablement pas la + simple!

Hors ligne

 

#13 07-02-2013 08:05:06

Trim
Addicted-Moko
Lieu: Suisse :)
Date d'inscription: 02-12-2009
Messages: 233

Re: Synchro de calendrier format iCal -> QtMoko

Hello!

Je me suis permis de toucher un peu à ton code pour pouvoir l'utiliser dans Debian Wheezy (QtMoko v52-armhf utilise Wheezy) et pour appliquer un peu ce que j'ai vu en cours l'année passée pour le shell.

J'y ai également ajouter l'option "-s" pour préciser le serveur une seule fois.

Tout est là : https://github.com/Trim/qtmoko-ics2qtcal
Je n'ai pas testé sur Squeeze, mais comme la libraire est présente et à la même version, ça devrait marcher.


GTA04 avec QtMoko compilé maison

Hors ligne

 

#14 09-02-2013 23:13:59

mossroy
Addicted-Moko
Date d'inscription: 26-06-2009
Messages: 107

Re: Synchro de calendrier format iCal -> QtMoko

Salut Trim,

Tu t'es permis de le faire ... et tu as bien fait! (d'ailleurs, la licence GPL te le permet sans même demander mon avis ;-) )

Je suis bien content de voir que ce script rend service à quelques autres personnes que moi.
J'ai regardé tes commits et je n'ai rien à y redire, au contraire. Tu sembles avoir corrigé/amélioré pas mal de points.

Je n'ai pas eu l'occasion de tester ta version sur mon téléphone : il n'a pas apprécié sa dernière chute, et déconne tellement depuis que j'ai dû revenir à mon vieux téléphone à clapet pas-smart-phone et pas libre...
Il y a donc des chances que tu contribues plus à ce script que moi-même, à présent.

Si tu es d'accord, je serais pour rajouter un lien (dans un fichier v0.7/README.txt) depuis http://mossroy.free.fr/ics2qtcal/ vers ton code source sur github
De sorte que github devienne la version officielle (c'est bien + adapté pour du collaboratif)
Ca te donnerait aussi + ou - le rôle de mainteneur : si ça te va, ça me va aussi

Hors ligne

 

#15 10-02-2013 18:14:32

Trim
Addicted-Moko
Lieu: Suisse :)
Date d'inscription: 02-12-2009
Messages: 233

Re: Synchro de calendrier format iCal -> QtMoko

Salut mossroy,

J'ai eu la chance d'avoir des cours shell et perl l'année passée et, du coup, ça m'a bien motivé de pouvoir les réutiliser pour une application utile smile

Si j'ai mis le code sur github, c'est simplement parce que j'utilise mon propre serveur git pour développer et que du coup, après, c'est très facile de le diffuser par les serveurs de github (mon eeepc ne supporterait pas la charge).

En fait, j'étais prêt à supprimer le code de github si tu aurais préféré centraliser le code sur ton serveur, pour éviter de disperser les quelques utilisateurs. Mais, effectivement, si ton openmoko est défectueux, ça serait peut-être mieux que je maintienne moi-même le code (puisque je vais sûrement encore l'utiliser pendant quelques jours smile) et donc il n'y a pas de soucis pour ajouter ce fichier readme sur ton serveur.

Ah et merci pour ton code, il était bien écrit et bien commenté, j'ai pu rapidement le prendre en main pour l'améliorer wink


GTA04 avec QtMoko compilé maison

Hors ligne

 

#16 10-02-2013 21:02:06

mossroy
Addicted-Moko
Date d'inscription: 26-06-2009
Messages: 107

Re: Synchro de calendrier format iCal -> QtMoko

Je stockais jusqu'ici le code source sur un serveur subversion chez moi, mais github me parait clairement plus pratique aujourd'hui, si on travaille à plusieurs dessus.
Après, j'ai hésité à le mettre sur mon compte github, mais si tu continues à travailler dessus, autant le laisser sur ton compte.

Donc j'ai mis à jour la page Free pour pointer vers ton github

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.20
Traduction par FluxBB.fr

Hébergé par :
Bearstech