1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| (* Script d'action de dossier :
Lors de l'ajout de fichiers dans le dossier, on vérifie leur types et la taille cumulée d'un sous dossier
AVANT de les copier dans ce sous dossier
Si le type ou la taille ne le permet pas, les fichiers ajoutés restent dans le dossier où
ils ont été dropés, mais ne sont pas transférer au sous dossier
Dans ce dossier, on crée, si nécessaire le sous dossier avant de commencer
*)
on adding folder items to Mon_Dossier after receiving Liste_Fichiers
--nom du sous dossier qui sera controlé (en taille totale et types de fichiers)
set Dos_Controle to "Mon_Dossier Controlé"
-- liste des Extensions acceptées
set liste_Ext to {"psd", "jpg", "txt"}
-- taille maxi autorisé pour le Dos_Controle
set Taille_Maxi to 20000000
tell application "Finder"
-- pour éviter que l'ajout du dossier Dos_Controle ne crée aussi un évènement
-- on teste ce qui est ajouté et, éventuellement, on ne fait rien !
if name of first item of Liste_Fichiers is Dos_Controle then return
-- vérifie si le sous dossier existe déjà, sinon, le crée
if not (exists folder Dos_Controle of Mon_Dossier) then
make new folder at Mon_Dossier with properties {name:Dos_Controle}
-- attention, cet ajout génère encore un event add folder items !! -> d'où le premier test !
end if
-- évaluation de la taille actuelle du dossier Dos_Controle
set Taille_actuelle to 0
set Liste_actuelle to (items of ((folder Dos_Controle of Mon_Dossier) as alias))
repeat with Mon_Item in Liste_actuelle
set Taille_actuelle to Taille_actuelle + (size of Mon_Item)
end repeat
display dialog "taille actuelle du dossier = " & Taille_actuelle
-- évaluation des types de fichiers ajoutés et calcul de la taille à ajouter
-- on crée une liste de fichiers à ajouter qui ne contient que ceux dont le type est OK
-- si item OK on cumule sa taille
set Liste_OK to {}
set Taille_Ajout to 0
repeat with Mon_Item in Liste_Fichiers
if name extension of Mon_Item is in liste_Ext then
set end of Liste_OK to Mon_Item
set Taille_Ajout to Taille_Ajout + (size of Mon_Item)
end if
end repeat
-- vérifie le taille totale future
if (Taille_actuelle + Taille_Ajout) > Taille_Maxi then
display dialog "Désolé, cet ajout de fichiers excède la taille permise" & return & "il y a " & (Taille_actuelle + Taille_Ajout - Taille_Maxi) & " octets de trop !" buttons {"Annuler"}
end if
-- tout va bien, on peut effectivement transférer les fichiers dans le dossier_Controle
move Liste_OK to folder Dos_Controle of Mon_Dossier as alias
display dialog "Opération terminée"
end tell
end adding folder items to |