Newsgroup: it.comp.software.newsreader
Titolo: [DIALOG] Soluzione al problema del troncamento del Subject

Salve!
Il  problema  è  questo:  se  si risponde a un articolo che ha un Sbj della
forma "xxx (was: yyy)", Dialog tronca automaticamente il (was: yyy). Questo
è male.
Ho scritto due scriptini con cui si risolve.
Il primo script intercetta ogni articolo quando ne viene scaricato il corpo
(OnBeforeSavingMessage). Se il Subject  contiene  la  stringa  "(was:",  la
sostitisce  con "§was:". Si badi bene: ciò non influisce sulla finestra dei
thread, che viene riempita (relativamente al Sbj e ad altri  campi)  quando
vengono  scaricate le intestazioni (OnXOver), ma solo sulla visualizzazione
degli header che avvenga nella finestra del corpi (per esempio, premendo il
tasto H). 
In  questo  modo,  Dialog  non  troncherà il Sbj di una eventuale risposta,
perché non ci trova "(was:...)" ma "§was:...)".
Il  secondo  script  intercetta  le  risposte,  prima  che  siano   inviate
(OnBeforeSendingMessage), cambiando l'eventuale stringa "§was:" in "(was:".
Ho scelto il carattere § perché mi pare sufficientemente raro da  eliminare
il rischio che in un Subject si trovi davvero la stringa "§was:", senza che
sia stato il primo script a introdurla.
Considerando che il Subject è un mandatory header, ho impostato gli  script
per  la  massima  velocità  -  e  mi  pare  che  la  velocità  ottenuta sia
accettabile.
Primo script:
program OnBeforeSavingMessage;
procedure OnBeforeSavingMessage(var Message: TStringlist;
                     Servername: string; IsEmail: boolean);
var
i: integer;
p: Longint;
l: Longint;
Soggetto: string;
begin
 if not IsEmail then begin
    i := 0;
    while copy (message[i], 1, 9) <> 'Subject: ' do i := i + 1;
    p := pos ('(was:', message[i]); 
    if p > 0 then begin
            l := Length (message[i]);
            Soggetto := copy (message[i], 1, l);
            delete (Soggetto, p, 1);
            insert ('§', Soggetto, p);
            message.delete (i);
            message.insert (i, Soggetto);
    end; //end if p
 end; //end if not
end;
begin
end.
Secondo script:
program OnBeforeSendingMessage;
function OnBeforeSendingMessage(var Message    : TStringlist; 
                                    Servername : string;
                                    IsEmail    : boolean
):boolean;
var
  i: integer;
  p: Longint;
  l: Longint;
  Soggetto: string;
begin
  result := true;
  if not IsEmail then begin
   i := 0;
   while copy (message[i], 1, 9) = 'Subject: ' do i := i + 1;
      p := pos ('§was:', message[i]); 
      if p > 0 then begin
            l := Length (message[i]);
            Soggetto := copy (message[i], 1, l);
            delete (Soggetto, p, 1);
            insert ('(', Soggetto, p);
            message.delete (i);
            message.insert (i, Soggetto);
      end; //end if p
  end; //end if not 
end;
begin
end.
Ovviamente, se avete già qualcosa nello script collegato all'evento, dovete
inserire le sole parti necessarie.
Qui, dopo brevi prove, funziona.
Se non ho fatto errori di copia e incolla, dovrebbe essere tutto ok.
-- 
Bye, Ghost of Lem Novantotto
Informazioni su it.*: 
http://www.news.nic.it
Archivio news: 
http://groups.google.it/advanced_search?hl=it
Linee guida della netiquette: 
http://www.faqs.org/rfcs/rfc1855.html

 
It's not a bug, it's a feature.
Purtroppo certe cappellate non le fa solo Microsoft.
-- 
Ciao, Massimo | ICQ# 57669970 | Jabber: 
pet...@jabber.linux.it
- La bellezza salverà il mondo. -