Détecter fichiers placés dans la corbeille
helgrind
Membre
Bnojour,
Y a t-il un moyen de savoir (notifications, ...) lorsqu'un fichier est jetté à la corbeille?
Merci.
Y a t-il un moyen de savoir (notifications, ...) lorsqu'un fichier est jetté à la corbeille?
Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Si un fichier à toi est jeté à la corbeille alors que ton appli tourne ?
Ou n'importe quel fichier ?
Et c'est pour faire quoi au juste ?
.
Quand n'importe quel fichier est jeté à la corbeille, pour pouvoir ensuite les ouvrir avec une app.
Drole d'idée... Mais pourquoi pas.
S'il s'agit de faire quelque chose quand l'utilisateur dépose un fichier dans la corbeille, tu peux essayer d'utiliser les FSEvent afin de monitorer le répertoire ~/trash (je t'aurai bien dit d'essayer les "actions de dossier", mais je ne vois pas trop comment les configurer sur le rep Trash qui est invisible dans le Finder).
.
J'avais pensé à ça mais il me semble que c'est une API privée, mais si c'est le seul moyen...
J'ai déjà essayé les actions de dossier mais ça ne fonctionne pas très bien, c'est un peu aléatoire.
(Attention par contre, licence GPL, donc à ne pas inclure dans un produit non open-source)
Je crois que ça vient de quelqu'un de chez Apple...
Oui merci j'ai déjà trouver
Je crois que j'ai trouver la réponse moi-même:
http://developer.apple.com/technotes/tn2005/tn2083.html
man setuid
Et on fait comment pour récupérer l'uid de l'utilisateur ?
Ce daemon est en partie constitué du code gfslogger, et des notifications sont envoyées lorsqu'un fichier est jetté.
Comme les notifications prennent un certain temps à être envoyées, si on jette plusieurs fichiers à la fois, certains fichiers ne sont pas interceptés.
Comment remédier à ça?
- Utiliser un thread qui traite très vite les données reçues ; on ne peut pas se permettre de le bloquer trop longtemps sinon son buffer explose
- En cas de forte activité du FS (ex, dé-tarer un fichier qui contient des milliers d'éléments), il se bloque ; il faut le relancer
...
D'accord mais comment traiter ces données et les envoyé très rapidement avec des notifications?
Un thread qui socke ça dans un buffer FIFO, un thread qui lit le même buffer avec une section critique sur la lecture et l'écriture du buffer.
heu... ;D
Et en pratique ça donne quoi?
Un truc assez tordu :P
Si tu veux pas te faire chier, tu l'écris dans un fichier et tu lis le fichier derrière...
OK, mais alors comment mon helper sait quand le fichier à été modifié?
En essayant de le lire régulièrement...
Si je jette 4 fichiers d'un coup, seulement 2 ou 3 sont écrits dans le fichier.
Mais je pense que ton adaptation de code doit avoir quelques bugs s'il en manque quand ça fait quasi-rien... :P
Je vois pas trop ou peut se trouver le bug, c'est du copier-coller de gfslogger avec quelques trucs en moins
Je mets les source du daemon si quelqu'un veut jeter un coup d'oeil
Ah oui, aussi... Dans mon souvenir, souvent le nom du fichier passe par "FSE_ARG_INO" (enfin ça dépend de l'action ; en général la mise à la poubelle, c'est un RENAME).
Non, j'ai pas tenu compte des différentes corbeilles, mais pour l'instant je veux simplement interceptés tous les fichiers qui sont jetés, sans exceptions.
Et je demande de recevoir seulement les "RENAME".
Mais j'ai jamais pu récupérer le chmein du fichier avec FSE_ARG_INO.
Je fais ca pour avoir des retours à la ligne dans le fichier, sinon je vois pas trop comment le parser après.
Ecrire les données en xml serait mieux?
Oui, mais comment?
Mon daemon est lancé par launchd en root.
Comment je connecte mon helper à son stdout?
Pour ça que l'écriture dans un fichier c'est universel !