Je vais essayer de ne pas répondre à côté de la question (si c'est le cas, dis le moi)
Attention, c'est long et c'est pas pour les fillettes.
D'abord, le menu d'appsnap est généré à partir de 2 fichiers "db.ini".
Le premier est en local, dans le dossier d'appsnap, et est utilisé si on est pas connecté.
Le second est en ligne (dans notre cas sur le portail Framakey) :
http://framakey.org/_flux/db.ini
Tu pourras voir ici le fichier original :
http://code.google.com/p/appsnap/source ... nap/db.ini
C'est donc ici qu'est géré le menu d'appsnap (via l'entrée "category")
Maintenant, ça se complique : comment appsnap sait-il qu'une application est présente ou pas ?
Pour l'instant, appsnap se base sur une recherche dans la base de registre.
Par exemple, dans le fichier original d'appsnap de db.ini, on a
- Code: Tout sélectionner
instversion = REGISTRY_SEARCH:DisplayName=PhotoShape Classic Version ([0-9]\.[0-9])
Si appsnap trouve la clef dans la BDR, le soft est installé (et on récupère même son n° de version). On retrouve alors l'appli dans la catégorie "installed"
Evidemment, ça ne nous arrange pas, puisque nous on veut des logiciels discrets, donc sans trace perso dans la BDR.
Nous avons donc plusieurs solutions, que je résumerai ici à 2 propositions :
A- on n'utilise appsnap QUE pour télécharger les applications, et on utilise un lanceur type Asuite à coté, construisant dynamiquement le menu (dans Asuite, donc). C'est la solution la plus simple et la plus rapide, mais elle oblige à jongler entre 2 applis, et n'est pas tres "extensible" (ainsi, appsnap ne sacahnt pas où et dans quelle version une appli est installée, il ne saura pas dire s'il y a des mises à jours)
B- on utilise Appsnap pour tout : télécharger/installer/supprimer (ça, on sait déjà faire), mais en plus pour lancer les applications déjà installées. Là, ça réclame un développement nettement plus poussé.
Plus haut, je détaillais (un peu) la méthode "A". Je peux revenir dessus si nécessaire pour les autres, car les specifications fonctionnelles sont assez simples.
Mais puisque tu as les mains dans le cambouis, voilà la traduction en VF de
ce que je demandais au développeur (attention, j'apporte ici quelques petites modifications à mon texte original en anglais)
La principale chose qui manque à appsnap est une methode de substitution à la vérification par base de registre.
Ainsi, je pense qu'en ajoutant une nouvelle variable au db.ini du genre :
- Code: Tout sélectionner
local_app_file = #local_app_dir#\AppInfo\appinfo.ini
et la possibilité de parser ce fichier pour y récupérer les infos de version, les détails, ou le chemin d'execution serait tout simplement ... fabuleux.
Par exemple :
- Code: Tout sélectionner
[PortableSumatraPDF]
category = Bureautique
describe = Lecteur PDF
website = http://www.framakey.org/Portables/PortableSumatraPDF
download = http://download.framakey.org/apps/
version = version:([0-9]\.[0-9]+)
scrape = http://www.framakey.org/Portables/PortableSumatraPDF
filename = PortableSumatraPDF-#VERSION#-fr-r01.zip
instparam = /S
upgrades = false
chinstdir = /D=#INSTALL_DIR#
local_app_dir = #INSTALL_DIR#\PortableSumatraPDF
local_app_file = #local_app_dir#\AppInfo\appinfo.ini
instversion = LOCAL_SEARCH:PackageVersion = ([0-9]\.[0-9]+)
details_file = LOCAL_SEARCH:Description = (.*)
start = LOCAL_SEARCH:Start=(.*)
Notes pour Mouss : la ligne importante ici, c'est "local_app_file = #local_app_dir#\PortableSumatraPDF\AppInfo\appinfo.ini". On a déjà #INSTALL_DIR# qui est connu et renseigné dans le fichier de conf d'appsnap et qui vaut "..\Apps", et "local_app_dir = #INSTALL_DIR#\PortableSumatraPDF" donc local_app_file = ..\Apps\PortableSumatraPDF\AppInfo\appinfo.ini
C'est le moment de faire une pause, et de relire 3 fois la phrase précédente

Donc Appsnap va télécharger, puis dézipper le fichier PortableSumatraPDF-#VERSION#-fr-r01.zip (#VERSION# étant remplacé par ce qu'appsnap aura trouvé sur la page web
http://www.framakey.org/Portables/PortableSumatraPDF (variable "webpage") en face de la chaine texte "version:" (variable "version). Là, tu n'a rien à faire, c'est appsnap qui gère.
Maintenant, dans ce fichier .zip, il va y avoir un fichier PortableSumatraPDF\AppInfo\appinfo.ini (qu'on aura pris soin de rajouter et qui contiendra par exemple :
- Code: Tout sélectionner
[Details]
Name=Portable Sumatra PDF
Publisher=Framakey.org
Homepage=http://www.framakey.org/Portables/PortableSumatraPDF
Category=Bureautique
Description=SumatraPDF, un lecteur PDF libre pour Windows que il est vachement bien
[Version]
PackageVersion=0.8
DisplayVersion=0.8 (fr)
[Control]
Start=PortableSumatraPDF.exe
Tu suis jusque là ?
Bon, on respire et on continue

Bon, Appsnap a pu accéder au fichier DONC l'application est installée.
Mon premier souhait, c'est donc d'ajouter cette variable de conf dans le fichier db.ini d'appsnap, qui dirait "Au lancement d'appsnap, va voir si tu trouve ..\Apps\PortableSumatraPDF\AppInfo\appinfo.ini et récupère moi son contenu"
S'il ne trouve pas le fichier, on peut en déduire que pSumatraPDF n'est pas installé, OK ?
S'il le trouve, c'est que le soft se trouve dans \Apps.
Ca, sans vouloir te faire mousser (Mouss, mousser... oui ? non ? pas drôle ? t'as raison, désolé, je fatigue

), je pense que c'est dans tes cordes.
Après, ça se complique un peu : il faut lire le fichier en question. Et récupérer le contenu des variables.
Pour cela, je propose d'utiliser ce que j'ai ajouté dans le db.ini (cf plus haut)
- Code: Tout sélectionner
instversion = LOCAL_SEARCH:PackageVersion=([0-9]\.[0-9]+)
details_file = LOCAL_SEARCH:Description=(.*)
start = LOCAL_SEARCH:Start=(.*)
Ainsi : le LOCAL_SEARCH indique qu'on veut faire une recherche locale (donc dans le fichier appinfo.ini, définit par "local_app_file").
Ensuite il s'agit de récupérer certaines valeurs de ce fichier.
Par exemple puisqu'on a
"instversion= LOCAL_SEARCH:PackageVersion=([0-9]\.[0-9]+)" dans db.ini
et
"PackageVersion=0.8" dans ..\Apps\PortableSumatraPDF\AppInfo\appinfo.ini
alors
instversion vaudra 0.8
Ca, c'est
mon second souhait : être capable de récupérer les valeurs définies dans le "local_app_file" (tout en gardant la compatibilité avec la version originale d'appsnap, puisqu'ici, on définit une méthode supplémentaire, mais rien n'empêche qui le souhaite d'utiliser instversion=REGISTRY_SEARCH:DisplayName=PhotoShape Classic Version ([0-9]\.[0-9])
dans le db.ini (on n'est pas sectaire, et on ne veut pas casser appsnap où le réécrire entièrement)
Le
troisième souhait, c'est de pouvoir exploiter ces valeurs récupérées.
Il s'agit d'un développement un peu plus spécifique, puisque ça revient notamment à ajouter à appsnap la possibilité d'executer le fichier.
Par exemple, toujours pour pSumatraPDF :
- on sait que le logiciel est installé (puisqu'on a trouvé le fichier renseigné dans "local_app_file",
- on sait qu'il est installé dans ..\Apps\PortableSumatraPDF (on le sait grâce à local_app_dir)
- on sait que pour le lancer, il faut executer "PortableSumatraPDF.exe" (grace à la valeur de "Start" dans le fichier local_app_file)
Donc, ce troisième souhait, c'est d'ajouter un bouton à l'interface d'appsnap qui permettrait d'executer ..\Apps\PortableSumatraPDF\PortableSumatraPDF.exe (= la concaténation de "local_app_dir" et de "start"
Voilà, là déjà, si tu en arrive là, c'est tout simplement génial

Après, viendra (plus tard) le 4eme souhait : celui de prendre en compte les mises à jour.
En effet, on saura quelle est la version installée (grace à "PackageVersion=0.8", dans le fichier .ini), mais Appsnap saura toujours récupérer le numéro de la dernière version en ligne (via "version"). La bonne nouvelle, c'est que ça devrait être peanuts à développer, puisqu'en fait Appsnap gère déjà cela (la différence, c'est que lui se basait sur la BDR, alors que nous on se base sur un fichier).
Enfin, dernier souhait éventuel : ajouter une option pour éviter de garder les .zip téléchargés.
Ainsi, dans
http://code.google.com/p/appsnap/source ... config.ini on trouve :
- Code: Tout sélectionner
# Location where downloaded installation files should be cached
cache_location = %%ALLUSERSPROFILE%%\Application Data\AppSnap\cache
et
- Code: Tout sélectionner
# Maximum downloads to perform in parallel
download = 5
On peut définir sans probleme un "cache_location" local sur la clef (ex: cache_location = ..\Apps\cache), mais, même en mettant
download = 0
il me garde les .zip au moins une journée. Et ça, saimal (c)
Donc, je souhaiterait une option du type
download = -1
que Appsnap interpreterait comme : "si download égal -1, alors efface le fichier .zip de l'application dès que celle ci est installée avec succès".
Mais bon, je peux très bien vivre sans.
Woualou, tu peux ouvrir le feu de questions...
Edit : les plus avertis auront noté que j'utilise ici le format "AppInfo/appinfo.ini" de portableApps plutot que les .xml générés par le FramaGenXML de notre ami Léviathan. En fait, ça m'est égal : j'aurais préféré utiliser le .xml, mais faut vivre avec son temps, et il me parait aujourd'hui évident que PortableApps a pris de l'avance et qu'il vaut mieux raccrocher les wagons avec eux que l'inverse...