Patch level : 10.0

Files correlati     : ba7.exe
Ricompilazione Demo : [ ]
Commento            :
Convertita maschera di gestione postino e migliorata gestione transazioni di inserimento


git-svn-id: svn://10.65.10.50/trunk@19360 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2009-09-30 14:56:48 +00:00
parent e130c6af43
commit b307763864
2 changed files with 106 additions and 55 deletions

View File

@ -472,6 +472,7 @@ class TMailer_mask : public TAutomask
int _mail_semaphore;
TMail_messages _box;
bool _sequential;
clock_t _last_use;
TString_array _key1; // Elenco dei campi della chiave principale dei files
TAssoc_array _apps; // Elenco delle applicazioni per processare i files
@ -488,13 +489,14 @@ protected:
void load_sheet(TConfig& ini, short dlg, const char* var);
TToken_string& get_key1(int lf) const;
bool build_key1(int lf, const TString& body, TToken_string& key) const;
bool build_key1(const TMail_message& msg, TToken_string& key) const;
bool build_key1(int lf, const TString& body, TToken_string& key, TString& action) const;
bool build_key1(const TMail_message& msg, TToken_string& key, TString& action) const;
void find_redundant_messages();
void track(const TMail_message& msg, const TString& app, const TString& action, int err);
bool exec_app(int & err, const TString& appname, TMail_message & msg, TToken_string & sh_row);
void scan_dir(const TFilename& dir, TMail_messages& box) const;
bool unattended() const;
public:
void test_delete();
@ -688,6 +690,8 @@ void TMailer_mask::fill_messages()
return;
_mail_semaphore = 1;
disable(DLG_DELREC);
TWait_cursor hourglass;
TFilename server(get(F_SERVER));
@ -880,6 +884,7 @@ void adjust_long_lines(const TFilename& tmp)
void TMailer_mask::track(const TMail_message& msg, const TString& app, const TString& action, int err)
{
const TString& fname = get(F_TRACKING);
if (fname.full())
{
const char fldsep = '\t';
@ -893,7 +898,9 @@ void TMailer_mask::track(const TMail_message& msg, const TString& app, const TSt
const real t = msg.time();
log << t.string("@@:@@:@@") << fldsep;
TToken_string k1; build_key1(msg, k1);
TToken_string k1;
TString act;
build_key1(msg, k1, act);
log << k1.get(0) << fldsep;
const int pipe = k1.find(k1.separator());
@ -1078,7 +1085,7 @@ TToken_string& TMailer_mask::get_key1(int lf) const
return *key;
}
bool TMailer_mask::build_key1(int lf, const TString& body, TToken_string& key) const
bool TMailer_mask::build_key1(int lf, const TString& body, TToken_string& key, TString& action) const
{
key.format("%d", lf);
@ -1107,10 +1114,21 @@ bool TMailer_mask::build_key1(int lf, const TString& body, TToken_string& key) c
}
key.add(value);
}
const int act = body.find("\nAction");
const int ugu = body.find('=', act);
const int nwl = body.find('\n', ugu);
if (act > 0 && ugu > act && ugu < nwl)
{
action = body.sub(ugu+1,nwl);
action.trim();
action.upper();
}
return true;
}
bool TMailer_mask::build_key1(const TMail_message& msg, TToken_string& key) const
bool TMailer_mask::build_key1(const TMail_message& msg, TToken_string& key, TString& action) const
{
TString body;
FOR_EACH_ARRAY_ROW(msg, r, row)
@ -1127,7 +1145,7 @@ bool TMailer_mask::build_key1(const TMail_message& msg, TToken_string& key) cons
else
lfile = atoi(subj);
return build_key1(lfile, body, key);
return build_key1(lfile, body, key, action);
}
void TMailer_mask::find_redundant_messages()
@ -1136,11 +1154,11 @@ void TMailer_mask::find_redundant_messages()
TAssoc_array andreotti;
TSheet_field& sf = sfield(F_MESSAGES);
TString subj, body;
TString subj, body, action;
TToken_string key1;
// Scorro tutti i messaggi non ancora elaborati
FOR_EACH_SHEET_ROW_BACK(sf, nrow, row) if (*row->get(0) != 'X')
FOR_EACH_SHEET_ROW_BACK(sf, nrow, row) if (row->get_char(0) != 'X')
{
row->get(sf.cid2index(F_BODY), body);
if (body.find("[Transaction]") < 0) // Scarto i messaggi che non siano transazioni
@ -1158,9 +1176,9 @@ void TMailer_mask::find_redundant_messages()
else
lfile = atoi(subj);
if (build_key1(lfile, body, key1))
if (build_key1(lfile, body, key1, action))
{
if (andreotti.is_key(key1))
if (andreotti.is_key(key1) && action != "INSERT") // Non considero ridondanti gli inserimenti!
row->add("R", 0); // Messaggio ridondante!
else
andreotti.add(key1); // Messaggio da processare!
@ -1245,13 +1263,16 @@ void TMailer_mask::save_all_lines()
vv.goto_end();
sf.force_update(); // Fai apparire tutte le X
_mail_semaphore = 0;
enable(DLG_DELREC);
enable(DLG_DELLOG, bf.lines() > 0);
#ifdef DBG
if (one_saved && yesno_box("Si desidera eliminare i messaggi processati?"))
#else
if (one_saved)
one_saved &= yesno_box("Si desidera eliminare i messaggi processati?");
#endif
_mail_semaphore = 0;
if (one_saved)
{
test_delete();
fill_messages();
@ -1394,6 +1415,9 @@ bool TMailer_mask::on_field_event(TOperable_field& o, TField_event e, long jolly
default:
break;
}
_last_use = clock();
return true;
}
@ -1417,23 +1441,28 @@ void TMailer_mask::auto_save_all()
if (_mail_semaphore == 0)
{
TSheet_field& sf = sfield(F_MESSAGES);
#ifdef DBG
if (sf.items() > 0 && yesno_box(TR("Si desidera eliminare i messaggi processati?")))
#endif
test_delete();
if (sf.items() == 0)
fill_messages();
if (_interval > 0)
{
if (sf.items() > 0)
save_all_lines();
}
if (_interval > 0 && sf.items() > 0)
save_all_lines();
}
else
NFCHECK("Can't save locked mail");
}
bool TMailer_mask::unattended() const
{
if (!xvt_vobj_is_focusable(win()))
return true;
RCT r; xvt_vobj_get_outer_rect(TASK_WIN, &r);
if (r.bottom - r.top < 64)
return true; // Finestra principale iconizzata
return (clock()-_last_use) > 10*CLOCKS_PER_SEC;
}
void TMailer_mask::handler(WINDOW win, EVENT* ep)
{
if (ep->type == E_TIMER)
@ -1444,7 +1473,7 @@ void TMailer_mask::handler(WINDOW win, EVENT* ep)
if (_secs >= _interval)
{
_secs = 0L;
if (_mail_semaphore == 0)
if (_mail_semaphore == 0 && unattended())
auto_save_all();
}
}
@ -1484,7 +1513,7 @@ void TMailer_mask::load()
}
TMailer_mask::TMailer_mask()
: TAutomask("ba7100a"), _timer_id(XVT_TIMER_ERROR), _mail_semaphore(0)
: TAutomask("ba7100a"), _timer_id(XVT_TIMER_ERROR), _mail_semaphore(0), _last_use(0)
{
load();

View File

@ -4,16 +4,59 @@ TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_SAVEREC 10 2
BEGIN
PROMPT -12 -11 ""
PICTURE BMP_SAVEREC
PICTURE BMP_SAVERECDN
PROMPT -12 -11 "Elabora"
PICTURE TOOL_ELABORA
END
BUTTON DLG_QUIT 10 2
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT -22 -11 ""
PICTURE BMP_QUIT
PICTURE BMP_QUITDN
PROMPT -11 -1 "Transazioni"
PICTURE BMP_DELREC
END
BUTTON DLG_NULL 2 2
BEGIN
PROMPT -1 1 ""
PICTURE 0
END
BUTTON DLG_PRINT 10 2
BEGIN
PROMPT -22 -1 ""
PICTURE BMP_PRINT
END
BUTTON DLG_DELLOG 10 2
BEGIN
PROMPT -12 -1 "Log"
PICTURE TOOL_DELREC
END
BUTTON DLG_NULL 2 2
BEGIN
PROMPT -1 1 ""
PICTURE 0
END
BUTTON DLG_INFO 2 2
BEGIN
PROMPT 1 1 "Info"
MESSAGE EXIT,K_F2
PICTURE TOOL_INFO
END
BUTTON DLG_HELP 2 2
BEGIN
PROMPT 2 1 "Help"
MESSAGE EXIT,K_F1
PICTURE TOOL_HELP
END
BUTTON DLG_QUIT 2 2
BEGIN
PROMPT 4 1 "Fine"
MESSAGE EXIT,K_QUIT
PICTURE TOOL_QUIT
END
ENDPAGE
@ -73,7 +116,7 @@ BEGIN
PROMPT 55 3 "Elimina transazioni annullate"
END
SPREADSHEET F_MESSAGES 0 -3
SPREADSHEET F_MESSAGES 0 -1
BEGIN
PROMPT 0 4 ""
ITEM "@1"
@ -88,13 +131,6 @@ BEGIN
FLAGS "|"
END
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT -11 -1 ""
PICTURE BMP_DELREC
PICTURE BMP_DELRECDN
END
ENDPAGE
PAGE "Spedizione" 0 0 0 -2
@ -132,24 +168,11 @@ ENDPAGE
PAGE "Log" 0 0 0 -2
BROWSEFILE F_LOG -1 -2
BROWSEFILE F_LOG -3 -1
BEGIN
PROMPT 0 1 ""
END
BUTTON DLG_DELLOG 10 2
BEGIN
PROMPT -12 -1 ""
PICTURE BMP_DELREC
PICTURE BMP_DELRECDN
END
BUTTON DLG_PRINT 10 2
BEGIN
PROMPT -22 -1 ""
PICTURE BMP_PRINT
END
ENDPAGE
ENDMASK
@ -287,7 +310,6 @@ BUTTON DLG_DELREC 10 2
BEGIN
PROMPT -23 -1 ""
PICTURE BMP_DELREC
PICTURE BMP_DELRECDN
END
BUTTON DLG_CANCEL 10 2