Newsgroup: it.comp.software.newsreader
Titolo: [Dialog] Script e filtri. Si riesce, forse.

Avvertimento: questo post contiene uno script che va ben oltre il "lurido
hack". Sono partito da alcuni script di MLC (MettiPunti in particolare), ho
tagliato, incollato e aggiunto comandi a caso finchè ho ottenuto qualcosa
che fa *quasi* quello che voglio. Forse. Se provate lo script e vi formatta
l'Hard disk sono fatti vostri.
Ora, lo sapete, io volevo premere un tasto e automagicamente trovarmi un
filtro con paramentri predefiniti aggiunto ai filtri esistenti.
Lo script che segue mette "a mano" lo score predefinito a tutti i post nel
thread già scaricati, poi mette un filtro sul subject con lo stesso
punteggio. Non è ottimale per varie ragioni, ma per me è già un gran passo
in avanti. 
Adesso vorrei mettere l'expire e da solo non riesco, anche se ho un'idea.
Innanzitutto servirebbe una funzione che guarda la data corrente, aggiunge
un numero (configurabile se possibile, se no va bene un mese tondo)di
giorni e mette il risultato nella clipboard. Qualcuno la sa scrivere?
Poi bisognerebbe sostituire le due seguenti righe di commento
// vai a fine riga
// incolla la stringa di Expire
con le azioni equivalenti, ma non so i parametri per il primo PostKey (a
proposito, dove si trova un elenco completo dei codici?).
Credo che non dovendo gestire un box di dialogo si possa semplificare lo
script (non ho la più pallida idea di cosa significhino TForm e TMemo), io
ho solo commentato alcune linee.
Program MettiPunti;
uses
	Forms, StdCtrls;
var
	s:string;
	myForm : TForm;
	myMemo : TMemo;
Begin
	s:='400';
	myForm:=TForm.Create(nil);
	//myForm.Width:=80;
	//myForm.Height:=40;
	myMemo:=TMemo.Create(myForm);
	myMemo.Parent:=myForm;
	//myMemo.Width:=50;
	//s:=Readln('Quanti punti?');
	//if s='' then exit;
	myMemo.Text:=s;
	myMemo.SelectAll;
	myMemo.CopyToClipboard;
	PostKey(80, false, true, false, false, false, false, false, false);
		//Alt+P per v.italiana; mettere 77 invece di 80 per v.inglese;
	PostKey(9, false, false, false, false, false, false, false, false);
		//Tab
	PostKey(86, false, false, true, false, false, false, false, false);
		//Ctrl+V
	PostKey(82, false, true, false, false, false, false, false, false);
		//Alt+R
	PostKey(13, false, false, false, false, false, false, false, false);
		//Invio
try
	lockdisplay;
 
	// ricordati dove sei
	ADo('AddMarker');
	ADo('CollapseThread');    
	ADo('MessageProperties');
	myForm.free;  
finally
 
	PostKey(86, false, false, true, false, false, false, false, false);
		//Ctrl+V (scrive il punteggio)
	PostKey(75, false, true, false, false, false, false, false, false);
		//Alt-K (Preme OK)
	ADo('AddSubjectPlonkFilter');
 
// calcola data
// vai a fine riga
// incolla la stringa di Expire
	// Torna dov'eri...
	ADo('ExpandThread');
	ADo('GoToPreviousMarker');    
	// ...e non sporcare
	ADo('ClearMarkerList');    
 
	unlockdisplay;
end;
End.
-- 
Fact of life #15: Heads bleed, walls don't.

 giorni e mette il risultato nella clipboard. Qualcuno la sa scrivere?
Ho fatto questo script che aggiunge una regola di plonk per subject del
tipo:
|| [it.comp.software.newsreader]
|| !markread Subject "[Dialog] Script e filtri. Si riesce, forse." Expire:20040511
dove l'expire è fissato a un mese dalla data corrente.
Non ti consiglio di mescolarlo con i postkey per lo score in Proprietà del
messaggio, perché con tutti quei postkey poi capitano pasticci.
Tieni conto poi che se fai un Riapplica punteggi e azioni e hai delle regole
che ti mettono punteggi diversi, quelli che hai messo tu con Proprietà del
messaggio vengono persi. Perciò la parte dello score mi pare abbastanza
inutile. Inoltre credo di aver verificato che anche se collassi il thread lo
score si applica solo sul messaggio evidenziato in quel momento, quindi
anche in questo senso quella tua idea non andrebbe, IMHO.
Invece mi è sembrata bella l'idea di avere da hotkey l'aggiunta di un plonk
con expire. Ho anche messo la cancellazione automatica degli expire scaduti,
così non  bisogna farla a mano.
Program Expire1M;
uses
 Forms, StdCtrls;
var
 myForm : TForm;
 myMemo : TMemo;
 
function ExpireTraUnMese: string;
 var oggi, traUnMese: TDateTime;
begin
 oggi:=Now;
 traUnMese:=IncMonth(oggi, 1);
 result:=' Expire:'+(FormatDateTime('yyyymmdd', traUnMese)); 
end;
begin
 myForm:=TForm.Create(nil);
 myForm.Width:=80;
 myForm.Height:=40;
 myMemo:=TMemo.Create(myForm);
 myMemo.Parent:=myForm;
 myMemo.Width:=50;
 myMemo.Text:=ExpireTraUnMese;
 myMemo.SelectAll;
 myMemo.CopyToClipboard;
 myForm.free;
 PostKey(35, false, false, false, false, false, false, false, false);
 PostKey(86, false, false, true, false, false, false, false, false); 
 //Ctrl+V
 PostKey(67, false, true, false, false, false, false, false, false);
 //Alt+C
 PostKey(75, false, true, false, false, false, false, false, false); 
 //Alt+K
 ADo('AddSubjectPlonkFilter');
End.
-- 
Maria Luisa C - 11/04/04 14.59.11

 [...]
*SMACK*.
Adesso lo provo.  :)
