diff --git a/ba/ba7100.cpp b/ba/ba7100.cpp index 1c06a8222..7ee82b018 100755 --- a/ba/ba7100.cpp +++ b/ba/ba7100.cpp @@ -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(); diff --git a/ba/ba7100a.uml b/ba/ba7100a.uml index 79f82ef7b..bdb40bdc8 100755 --- a/ba/ba7100a.uml +++ b/ba/ba7100a.uml @@ -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