Patch level :10.0 cd

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :infighito a bomba l'aggiornamento in presenza di personalizzazioni. Adesso produce la lista dei files problematici!


git-svn-id: svn://10.65.10.50/trunk@17838 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2008-12-09 16:45:34 +00:00
parent 38b2d276ca
commit 2565a8607b

View File

@ -21,7 +21,7 @@ protected:
void AddLabel(wxSizer* pSizer, const wxChar* label);
void AddLabel(wxGridBagSizer* pSizer, const wxChar* label, unsigned int row, unsigned int column);
bool CheckDataDir(wxString strDataPath) const;
bool CheckCustomDir(const wxString strCustomPath, const wxString& strPrgPath) const;
void CheckCustomDir(const wxString strCustomPath, const wxString& strPrgPath, wxArrayString& asPersonalizedFiles) const;
bool CheckPrgDir(const wxString& strPrgPath) const;
public:
@ -138,59 +138,58 @@ bool CampoWizardPage::CheckDataDir(wxString strDataPath) const
return bOkData;
}
//metodo per il controllo di eventuali personalizzazioni presenti nelle custom e relative ad una versione..
//..antecedente la 209110 (prima versione 10.0)
bool CampoWizardPage::CheckCustomDir(const wxString strCustomPath, const wxString& strPrgPath) const
void CampoWizardPage::CheckCustomDir(const wxString strCustomPath, const wxString& strPrgPath,
wxArrayString& asPersonalizedFiles) const
{
//parametro di controllo generale sulla bontà della custom
bool bOkCustom = true;
//se la directory non c'è ciao ciciuz!!
if (!::wxDirExists(strCustomPath))
return;
//controlla la directory custom che gli viene passata alla ricerca del file custver.ini che contiene le info..
//..necessarie per sapere se le personalizzazioni sono a posto o meno
if (::wxDirExists(strCustomPath))
CampoIniFile ciCustomVer(strCustomPath + "/custver.ini", "Main");
const long lCustomVer = ciCustomVer.GetInt("Versione"); //il dio dei programmatori perdoni il type mismatch!
//se le personalizzazioni sono a posto esce felicemente
if (lCustomVer >= 209110)
return;
//se le personalizzazioni non sono a posto (file custver.ini non esiste o è di una vecchia versione)...
//riempie la lista delle personalizzazioni da controllare
wxArrayString asFileList;
const size_t uFiles = wxDir::GetAllFiles(strCustomPath, &asFileList, "*.*");
for (size_t i = 0; i < uFiles; i++)
{
//solo i file di tipo .msk possono creare casini
wxArrayString asMaskList;
const wxString strFile = asFileList[i].Lower();
//per prima cosa cerca i files che abbiano un'omonimo tra gli eseguibili: ad es. sono maschere che,..
//..ad aggiornamento concluso,non potrebbero funzionare
const wxFileName fnFileCurr(strFile);
const wxString strExt = fnFileCurr.GetExt();
//parametro di controllo sulla bontà della personalizzazione;se trova almeno 1 file personalizzato che crea..
//..la necessità di controllare la versione della custom
bool bPersonalized = false;
const size_t uMaskFiles = wxDir::GetAllFiles(strCustomPath, &asMaskList, "*.msk");
for (size_t i = 0; i < uMaskFiles; i++)
{
const wxString strMask = asMaskList[i].Lower();
//se c'è un verig.msk è sicuramente una personalizzazione e quindi esce per bloccare l'installazione
if (strMask.StartsWith("verig"))
{
bPersonalized = true;
break;
}
//solo le maschere che hanno un omonimo .ini possono dare errore
wxFileName fnIni(strMask);
fnIni.SetExt("ini");
//per prima cosa cerca l'ini nella custom corrente
if (fnIni.FileExists())
{
bPersonalized = true;
break;
}
//poi lo prova a cercare sotto i programmi (ci vuole un matto a fare una cosa simile)
fnIni.SetPath(strPrgPath);
if (fnIni.FileExists())
{
bPersonalized = true;
break;
}
}
if (bPersonalized)
wxFileName fnPrgDual = fnFileCurr;
fnPrgDual.SetPath(strPrgPath);
if (fnPrgDual.FileExists())
{
CampoIniFile ciCustomVer(strCustomPath + "/custver.ini", "Main");
const long lCustomVer = ciCustomVer.GetInt("Versione"); //il dio dei programmatori perdoni il type mismatch!
if (lCustomVer < 209110)
bOkCustom = false;
asPersonalizedFiles.Add(strFile);
}
}
return bOkCustom;
//poi controlla se c'è un ??rig*.ini/msk è sicuramente una personalizzazione
if (strFile.Mid(2,3) == "rig" && (strExt == "ini" || strExt == "msk"))
{
asPersonalizedFiles.Add(strFile);
}
//poi controlla che non vi sia un .exe, che potrebbe non funzionare con le nuove .dll
if (strExt == "exe")
{
asPersonalizedFiles.Add(strFile);
}
} //for(size_t i=0...
}
//metodo per il controllo della validita' di un'area programmi
@ -367,10 +366,11 @@ bool CampoWizardPage3::ForwardValidate()
if (!CheckDataDir(strStudy))
return ErrorBox("La cartella indicata come area dati NON e' valida!\nInterrompere l'installazione e selezionare un'area dati valida\ncon il programma");
//custom directories
wxArrayString asPersonalizedFiles;
//a) custom di studio
if (!CheckCustomDir(strStudy + "custom", strPrgPath))
return ErrorBox("Sono presenti personalizzazioni relative ai documenti di vendita.\n"
"Richiedere l'intervento dell'assistenza tecnica.\nImpossibile proseguire l'aggiornamento.");
CheckCustomDir(strStudy + "custom", strPrgPath, asPersonalizedFiles);
//b) custom di ditta
wxDir dirStudy(strStudy);
wxString strDir;
@ -380,14 +380,47 @@ bool CampoWizardPage3::ForwardValidate()
strDir.MakeLower();
if (strDir.EndsWith("a") && atol(strDir) > 0)
{
if (!CheckCustomDir(strStudy + strDir + "/custom", strPrgPath))
{
wxString strMsg = "Sono presenti personalizzazioni relative ai documenti di vendita nella ditta ";
strMsg << strDir << ".\nRichiedere l'intervento dell'assistenza tecnica.\nImpossibile proseguire l'aggiornamento.";
return ErrorBox(strMsg);
}
CheckCustomDir(strStudy + strDir + "/custom", strPrgPath, asPersonalizedFiles);
}
}
//se ci sono files personalizzati pericolosi avverte l'utente ed interrompe l'aggiornamento!!
if (asPersonalizedFiles.GetCount() > 0)
{
//finestra con la lista dei files personalizzati
wxDialog dlgList(NULL, wxID_ANY, wxString("Lista files personalizzati"), wxDefaultPosition);
wxBoxSizer* pSizer = new wxBoxSizer(wxVERTICAL);
//testo con il fatale annuncio per l'utonto
wxStaticText* stText = new wxStaticText (&dlgList, 100, "Sono presenti personalizzazioni create per una "
"precedente versione del programma.\nE' necessario richiedere l'intervento dell'assistenza tecnica"
".\nImpossibile proseguire l'aggiornamento! Salvare la lista e ANNULLARE l'aggiornamento");
pSizer->Add(stText, 0, wxALL, 5);
//lista dei file pericolosi
wxListBox* lbList = new wxListBox(&dlgList, 101, wxDefaultPosition, wxSize(480, 320), asPersonalizedFiles);
pSizer->Add(lbList, 0, wxALL, 5);
//bottone di conferma
wxButton* buOk = new wxButton(&dlgList, wxID_OK, "Salva lista", wxDefaultPosition, wxSize(96,-1));
pSizer->Add(buOk, 0, wxALL|wxALIGN_CENTRE, 5);
dlgList.SetSizerAndFit(pSizer);
dlgList.Centre();
dlgList.ShowModal();
//finestra per il salvataggio della lista in un file di testo
wxFileDialog fdSave(NULL, "Selezionare la cartella dove salvare la lista", wxEmptyString,
"listapers.txt", "*.txt", wxFD_SAVE|wxFD_OVERWRITE_PROMPT);
if (fdSave.ShowModal() == wxID_OK)
{
const wxString strFileName = fdSave.GetPath();
wxTextFile tfLista(strFileName);
//aggiunge i files della lista al file di testo
for (size_t i = 0; i < asPersonalizedFiles.GetCount(); i++)
tfLista.AddLine(asPersonalizedFiles[i]);
//scrive 'sto benedetto file di testo!
tfLista.Write();
}
//blocca l'aggiornamento
return false;
}
//se ha superato i severi controlli prosegue
GetWizard().SetDataPath(strStudy);