Volendo aiutare a creare un applecript che viene eseguito quando il contenuto di una cartella cambia

2

Apprezzerei molto l'assistenza con quanto segue.

Il mio scenario:

Ho un'app per Mac che genera file RTF. Ho un'app per Android che tratta i file MultiMarkdown / Markdown.

L'app Mac funziona con i progetti e questi contengono un numero qualsiasi di file. Può sincronizzare automaticamente i file di un determinato progetto in una cartella. Essenzialmente, inserisce nella cartella un mucchio di file ogni volta che si sincronizza (all'apertura, alla chiusura e manualmente). Qualsiasi modifica a tale cartella viene automaticamente sincronizzata sul mio dispositivo Android.

Tuttavia, ho bisogno che vengano convertiti in file .mmd prima che ciò accada e convertiti in formato RTF quando i file vengono modificati (o nuovi) dal dispositivo Android.

Quindi ecco quello che ho in mente. Quello che vorrei è impostare le cose in modo tale che quando i file vengono sincronizzati dall'app Mac alla loro cartella di destinazione, quei file vengono automaticamente convertiti da RTF a MMD. Ho già gli script che faranno la conversione effettiva. E quando i file MMD cambiano, saranno automaticamente convertiti in file RTF. Ho anche uno script per questo.

Le domande che ho sono queste:

  1. Come posso monitorare automaticamente una cartella per le modifiche al suo contenuto ed eseguire uno script se i file cambiano in quella cartella?
  2. Come potrei rendere questo lavoro a due vie, senza gettare tutto in un ciclo infinito? All'inizio pensavo di poter fare quanto segue:

Conversione a due vie:

  1. Crea due cartelle sul Mac. Uno è per i file RTF, l'altro è per i file MMD.
  2. Configura l'app Mac per sincronizzare i dati in entrata e in uscita dalla cartella RTF
  3. Imposta il Mac sul sistema di sincronizzazione Android (Dropbox, Bittorrent Sync, ecc.) per sincronizzare il contenuto della cartella MMD con una cartella sul dispositivo Android.
  4. Quando il contenuto delle cartelle RTF cambia, convertire i file in MMD e inserire l'output nella cartella MMD. E viceversa.

Ma, ovviamente, questo creerà un ciclo infinito, perché ogni azione attiverà l'azione inversa, all'infinito.

Un modo possibile per aggirare questo ciclo infinito potrebbe essere questo:

  • La cartella RTF ha assegnato lo script R. Quando il contenuto cambia, lo script R viene eseguito.
  • La cartella MMD ha assegnato lo script M. Quando il contenuto cambia, lo script M viene eseguito.
  • Quando viene rilevata una modifica nella cartella RTF, la prima cosa che lo script R fa è disabilitare lo script M dall'attivazione. L'ultima cosa che lo script R fa prima di uscire è abilitare nuovamente lo script M. In questo modo M non "noterà" che il contenuto della cartella cambia mentre R sta aggiornando il suo contenuto con i file appena convertiti.
  • Lo stesso si applica al contrario.

Ma forse c'è un modo migliore?

Sono desideroso di saperne di più sugli script e nel processo risolvo questo problema.

Ci sono persone con idee plausibili su come ottenere ciò che spero di risolvere qui?

    
posta inspirednz 17.05.2015 - 06:33
fonte

2 risposte

3

Creerei uno script che controlla entrambe le cartelle. Il mio linguaggio di scelta per questo è Python. AppleScript non è particolarmente adatto a questo tipo di operazione. L'idea di base è quella di ascoltare FSEvents sulle due cartelle in questione e, quando ciò si verifica, annullare rapidamente il flusso di eventi per l'altra cartella, eseguire alcune operazioni di conversione e sincronizzazione, quindi riprogrammare il flusso di eventi precedentemente non programmato.

Lo script completato, scaricato qui, con versioni modificate di quegli script che mi hai mostrato. L'installazione di MacFSEvents è ora automatica: link

Ecco i passaggi per utilizzarlo:

Estrai l'applet, fai clic con il pulsante destro del mouse su di esso e seleziona "Mostra contenuto pacchetto", apri Contenuti e Risorse, quindi modifica il plist all'interno con le coppie di cartelle RTF e MMD. Sarai in grado di specificare tutte le coppie necessarie per rimanere sincronizzati tra loro, basta attenersi allo stesso formato di quello che ho usato nel plist: una matrice per coppia, ciascuna contenente due elementi, il primo elemento è il percorso per la cartella RTF, la seconda è il percorso della cartella MMD. Vedrai questo quando apri il plist.

Questo dovrebbe funzionare senza problemi. Le cartelle verranno ora guardate per qualsiasi tipo di modifica e i file verranno convertiti e trasferiti nell'altra cartella.

    
risposta data 17.05.2015 - 09:44
fonte
1

Sono tutto per persone che imparano a scrivere cose, ma per uso quotidiano e flessibilità, reimplementando parti di Hazel by NoodleSoft è meno potente ed efficiente per una soluzione generica.

Ancora,complimentiper Froggard e Inspired Life per la risposta eccellente e la domanda pratica.

    
risposta data 20.05.2015 - 17:21
fonte

Leggi altre domande sui tag