Patch level :

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :


git-svn-id: svn://10.65.10.50/trunk@15732 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2007-10-25 15:48:37 +00:00
parent 9f480c4a3f
commit 851dbcdcd5
4 changed files with 195 additions and 67 deletions

View File

@ -110,6 +110,7 @@ protected:
const wxString GetSourceDir(const wxString strDirName) const; const wxString GetSourceDir(const wxString strDirName) const;
void UnzipSystem(const wxString& strPrgLocPath) const; void UnzipSystem(const wxString& strPrgLocPath) const;
bool CopyFilesAndDirs(const wxString& FilesListI, wxString strFileCurr, const bool bIni) const; bool CopyFilesAndDirs(const wxString& FilesListI, wxString strFileCurr, const bool bIni) const;
void UpdateSyInstallIni(const wxString strSourcePath, const wxString strDestPath) const;
int UpdateModule(const wxString& strLocalPath, const wxString& strRemotePath, const wxString strModule) const; int UpdateModule(const wxString& strLocalPath, const wxString& strRemotePath, const wxString strModule) const;
@ -338,6 +339,26 @@ const wxString CampoSetup::GetSourceDir(const wxString strDirName) const
return strSrc; return strSrc;
} }
//metodo per aggiornare il modulo SY in install.ini
void CampoSetup::UpdateSyInstallIni(const wxString strSourcePath, const wxString strDestPath) const
{
for (int j = 0; j < 2; j++)
{
wxString strParagraph = "sy";
if (j > 0)
strParagraph << j;
CampoIniFile InstallIniSource(strSourcePath, strParagraph);
CampoIniFile InstallIniDest(strDestPath, strParagraph);
wxString strWrk;
long nIndex;
for (bool ok = InstallIniSource.GetFirstEntry(strWrk, nIndex); ok; ok = InstallIniSource.GetNextEntry(strWrk, nIndex))
{
InstallIniDest.Set(strWrk, InstallIniSource.Get(strWrk));
}
}
}
void CampoSetup::UnzipSystem(const wxString& strPrgLocPath) const void CampoSetup::UnzipSystem(const wxString& strPrgLocPath) const
{ {
wxArrayString asFilesList; wxArrayString asFilesList;
@ -365,19 +386,7 @@ void CampoSetup::UnzipSystem(const wxString& strPrgLocPath) const
//adesso che ha trovato quello sporco ultimo .ini prende versione e patch e le copia nell'install.ini.. //adesso che ha trovato quello sporco ultimo .ini prende versione e patch e le copia nell'install.ini..
//..nella dir dei programmi; lo fa paragrafo x paragrafo ([sy],[sy1]..) //..nella dir dei programmi; lo fa paragrafo x paragrafo ([sy],[sy1]..)
//potrebbe sembrare assurdo un for, ma e' per futuri sottomoduli con numero > 1 //potrebbe sembrare assurdo un for, ma e' per futuri sottomoduli con numero > 1
for (int j = 0; j < 2; j++) UpdateSyInstallIni(strWrk, strPrgLocPath + "/install.ini");
{
wxString strParagraph = "sy";
if (j > 0)
strParagraph << j;
CampoIniFile SyLastPatch(strWrk, strParagraph);
const wxString strVersion = SyLastPatch.Get("Versione");
const wxString strPatch = SyLastPatch.Get("Patch");
CampoIniFile InstallIni(strPrgLocPath + "/install.ini", strParagraph);
InstallIni.Set("Versione", strVersion);
InstallIni.Set("Patch", strPatch);
}
} }
} }
@ -463,12 +472,17 @@ int CampoSetup::UpdateModule(const wxString& strLocalPath, const wxString& strRe
{ {
const wxString& strParagraph = asGroups[i]; const wxString& strParagraph = asGroups[i];
CampoIniFile iniRemoteInstallModule(strRemotePath + "/install.ini", strParagraph); CampoIniFile iniRemoteInstallModule(strRemotePath + "/install.ini", strParagraph);
//install.ini locale che deve essere aggiornato durante la copia dei files!
CampoIniFile iniLocalInstall(strLocalPath + "/install.ini", strParagraph);
//ogni file dell'elenco del sottomodulo corrente va copiato //ogni file dell'elenco del sottomodulo corrente va copiato
for (int j = 0;; j++) for (int j = 0;; j++)
{ {
pi.Pulse(); //magica barra modello supercar! pi.Pulse(); //magica barra modello supercar!
wxString strCurrFile = iniRemoteInstallModule.Get(wxString::Format("File(%d)", j)); const wxString strVarName = wxString::Format("File(%d)", j);
wxString strCurrFile = iniRemoteInstallModule.Get(strVarName);
if (strCurrFile.IsEmpty()) if (strCurrFile.IsEmpty())
break; break;
@ -501,11 +515,15 @@ int CampoSetup::UpdateModule(const wxString& strLocalPath, const wxString& strRe
{ {
UnzipFile(strDstPath, strLocalPath + "/res"); UnzipFile(strDstPath, strLocalPath + "/res");
} }
//se riesce la copia del file aggiorna l'install.ini sul file (se non lo facesse non comparirebbero...
//...eventuali nuovi files
iniLocalInstall.Set(strVarName, strCurrFile);
} //for(int j... } //for(int j...
//una volta termiata la copia dei files del sottmodulo[i] scatta l'aggiornamento dell'install.ini locale... //una volta termiata la copia dei files del sottmodulo[i] scatta l'aggiornamento dell'install.ini locale...
//...al livello versione/patch appena copiate sempre del sottomodulo[i] //...al livello versione/patch appena copiate sempre del sottomodulo[i]
CampoIniFile iniLocalInstall(strLocalPath + "/install.ini", strParagraph);
iniLocalInstall.Set("Versione", nRemVer); iniLocalInstall.Set("Versione", nRemVer);
iniLocalInstall.Set("Patch", nRemPatch); iniLocalInstall.Set("Patch", nRemPatch);
@ -655,8 +673,19 @@ void CampoSetup::NormalSetup()
//per ogni file da copiare controlla i path sorgente e destinazione(problema con sottodirectory tipo.. //per ogni file da copiare controlla i path sorgente e destinazione(problema con sottodirectory tipo..
//..dati); strFileCurr va lasciato qui perche' DEVE ESSERE AZZERATO ad ogni cambio file!!!!!! //..dati); strFileCurr va lasciato qui perche' DEVE ESSERE AZZERATO ad ogni cambio file!!!!!!
wxString strFileCurr; wxString strFileCurr;
//controlla se il file corrente e' dentro una sottodirectory (tipo dati,servers,setup...) oppure e' al..
//..primo livello (quindi e' un file di programma)
wxString strSourceFile = asFilesList[i].Lower();
strSourceFile.Replace("\\", "/");
//e' in una subdir se la lunghezza del suo path prima dell'ultimo '/' e' > della lunghezza del path di root
const bool bIsSubDir = strSourceFile.Find('/', true) > (int)nPathLenght;
//2A) files con subdirectory
if (bIsSubDir)
{
//files dei dati standard! solo in caso di nuova installazione!! //files dei dati standard! solo in caso di nuova installazione!!
if (asFilesList[i].Lower().Find("\\dati\\") > 0) if (strSourceFile.Find("\\dati\\") > 0)
{ {
//i DATI NON VANNO MAI installati in caso di aggiornamento!!! //i DATI NON VANNO MAI installati in caso di aggiornamento!!!
//e nemmeno in caso si scelga di installare i dati demo (senno' sporca la dir dati e i datidemo non si installano) //e nemmeno in caso si scelga di installare i dati demo (senno' sporca la dir dati e i datidemo non si installano)
@ -667,11 +696,8 @@ void CampoSetup::NormalSetup()
strFileCurr = strDataPath; strFileCurr = strDataPath;
strFileCurr += asFilesList[i].Mid(nPathLenght + 5); strFileCurr += asFilesList[i].Mid(nPathLenght + 5);
} }
} } else
else if (strSourceFile.Find("\\servers\\") > 0) //che fare con i servers? copiare la directory...
{
//che fare con i servers? copiare la directory...
if (asFilesList[i].Lower().Find("\\servers\\") > 0)
{ {
if (bInstallLurch) //..ma solo se devi installare i servers if (bInstallLurch) //..ma solo se devi installare i servers
{ {
@ -680,12 +706,18 @@ void CampoSetup::NormalSetup()
strFileCurr += asFilesList[i].Mid(nPathLenght + 8); strFileCurr += asFilesList[i].Mid(nPathLenght + 8);
} }
} }
else //files dei programmi else //files vari di altre subdirectory che si installano sempre (es. setup)
{ {
strFileCurr = strPrgLocPath; strFileCurr = strPrgLocPath;
strFileCurr += asFilesList[i].Mid(nPathLenght); strFileCurr += asFilesList[i].Mid(nPathLenght);
} }
} }
//2B) files senza subdirectory (programmi!)
else
{
strFileCurr = strPrgLocPath;
strFileCurr += asFilesList[i].Mid(nPathLenght);
}
//copia i files nella cartella di destinazione (programmi,dati,cazzi e mazzi);se il nome del file.. //copia i files nella cartella di destinazione (programmi,dati,cazzi e mazzi);se il nome del file..
//..di destinazione e' vuoto significa che non lo deve copiare!! (es. dati in aggiornamento) //..di destinazione e' vuoto significa che non lo deve copiare!! (es. dati in aggiornamento)
if (!strFileCurr.IsEmpty()) if (!strFileCurr.IsEmpty())
@ -700,6 +732,8 @@ void CampoSetup::NormalSetup()
} //if (!strFileCurr.IsEmpty().. } //if (!strFileCurr.IsEmpty()..
} //for(size_t... } //for(size_t...
UpdateSyInstallIni(strSrc + "/install.ini", strPrgLocPath + "/install.ini");
// 3) INSTALLAZIONE DATI DEMO // 3) INSTALLAZIONE DATI DEMO
//--------------------------- //---------------------------
//installazione dei dati dimostrativi (che schifo!).Non si puo' fare in aggiornamento! //installazione dei dati dimostrativi (che schifo!).Non si puo' fare in aggiornamento!
@ -777,7 +811,6 @@ void CampoSetup::NormalSetup()
CampoInstall.Set("DiskPath", m_pWizard->GetPrgNetPath()); CampoInstall.Set("DiskPath", m_pWizard->GetPrgNetPath());
else //e' il path assoluto dell'install.ini che sta in 'program' (es. D:\program) else //e' il path assoluto dell'install.ini che sta in 'program' (es. D:\program)
{ {
wxFileName strSourcePath(m_strSetupPath + "/install.ini");
const wxString strSrc = GetSourceDir("program"); const wxString strSrc = GetSourceDir("program");
CampoInstall.Set("DiskPath", strSrc); CampoInstall.Set("DiskPath", strSrc);
} }

View File

@ -98,43 +98,115 @@ bool WarningBox(const wxString str)
//classe per gestire i .Ini di campo //classe per gestire i .Ini di campo
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
CampoIniFile::CampoIniFile(const wxString strIniPath, const wxString strParagraph) bool CampoIniFile::GetFirstGroup(wxString& strGroup, long& nIndex)
: wxFileConfig (wxEmptyString, wxEmptyString, strIniPath, wxEmptyString,
wxCONFIG_USE_LOCAL_FILE|wxCONFIG_USE_NO_ESCAPE_CHARACTERS)
{ {
if (!strParagraph.IsEmpty()) m_asGroups.Clear();
SetPath(strParagraph);
char bufferone[1024*16];
::GetPrivateProfileSectionNames(bufferone, sizeof(bufferone), m_strIniName);
const char* inizio = bufferone;
for (const char* b = bufferone; ; b++) if (*b == '\0')
{
if (*inizio)
{
m_asGroups.Add(inizio);
inizio = b+1;
}
else
break;
}
nIndex = 0;
return GetNextGroup(strGroup, nIndex);
}
bool CampoIniFile::GetNextGroup(wxString& strGroup, long& nIndex)
{
const bool ok = nIndex >= 0 && nIndex < (long)m_asGroups.GetCount();
if (ok)
strGroup = m_asGroups[nIndex++];
return ok;
}
bool CampoIniFile::DeleteGroup(const wxString strGroup)
{
return WritePrivateProfileString(m_strGroup, NULL, NULL, m_strIniName) != 0;
}
bool CampoIniFile::GetFirstEntry(wxString& strEntry, long& nIndex)
{
m_asEntries.Clear();
char bufferone[1024*32];
::GetPrivateProfileSection(m_strGroup, bufferone, sizeof(bufferone), m_strIniName);
const char* pInizio = bufferone;
for (const char* b = bufferone; ; b++) if (*b == '\0')
{
if (*pInizio)
{
wxString strWrk = pInizio;
strWrk = strWrk.BeforeFirst('=');
strWrk.Trim();
//prende solo il nome della variabile per completare la lista! dopo l'= ci sarebbe il valore
m_asEntries.Add(strWrk);
pInizio = b+1;
}
else
break;
}
nIndex = 0;
return GetNextEntry(strEntry, nIndex);
}
bool CampoIniFile::GetNextEntry(wxString& strEntry, long& nIndex)
{
const bool ok = nIndex >= 0 && nIndex < (long)m_asEntries.GetCount();
if (ok)
strEntry = m_asEntries[nIndex++];
return ok;
} }
wxString CampoIniFile::Get(const wxString strVariable) const wxString CampoIniFile::Get(const wxString strVariable) const
{ {
return Read(strVariable); wxString strOutString;
char* buffer = strOutString.GetWriteBuf(256);
GetPrivateProfileString(m_strGroup, strVariable, "", buffer, 256, m_strIniName);
strOutString.UngetWriteBuf(); //sblocca la memoria senno' la stringa resta per sempre!!!
return strOutString;
} }
bool CampoIniFile::GetBool(const wxString strVariable) const bool CampoIniFile::GetBool(const wxString strVariable) const
{ {
wxString strBool = Get(strVariable); const char chVal = Get(strVariable)[0];
return strBool == "X" || strBool == "Y"; return chVal == 'X' || chVal == 'Y' || chVal == '1';
} }
int CampoIniFile::GetInt(const wxString strVariable) const int CampoIniFile::GetInt(const wxString strVariable) const
{ {
wxString str = Get(strVariable); return atoi(Get(strVariable));
long val = 0;
str.ToLong(&val);
return val;
} }
bool CampoIniFile::Set(const wxString strVariable, const wxString strValue)//, const wxString strParagraph) const bool CampoIniFile::Set(const wxString strVariable, const wxString strValue)
{ {
return Write(strVariable, strValue); return WritePrivateProfileString(m_strGroup, strVariable, strValue, m_strIniName) != 0;
} }
bool CampoIniFile::Set(const wxString strVariable, const int uValue)//, const wxString strParagraph) const bool CampoIniFile::Set(const wxString strVariable, const int uValue)
{ {
return Write(strVariable, uValue); wxString strValue;
strValue << uValue;
return WritePrivateProfileString(m_strGroup, strVariable, strValue, m_strIniName) != 0;
} }
//costruttore
CampoIniFile::CampoIniFile(const wxString strIniPath, wxString strGroup)
: m_strIniName(strIniPath), m_strGroup(strGroup)
{
}
//metodo per sapere che cavolo di tipo di installazione sta esaminando (serve per leggere e scrivere... //metodo per sapere che cavolo di tipo di installazione sta esaminando (serve per leggere e scrivere...
//...correttamente il campo.ini //...correttamente il campo.ini
InstallationType CampoIniFile::GetInstallationType() const InstallationType CampoIniFile::GetInstallationType() const

View File

@ -7,6 +7,28 @@ enum InstallationType { it_none, it_standalone, it_server, it_client, it_upgrade
enum LurchMode {lm_none, lm_service, lm_autostart}; enum LurchMode {lm_none, lm_service, lm_autostart};
//////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////
//Classe per la gestione dei files di configurazione tipo campo.ini //Classe per la gestione dei files di configurazione tipo campo.ini
class CampoIniFile : public wxObject
{
wxString m_strIniName, m_strGroup;
wxArrayString m_asGroups, m_asEntries;
public:
bool GetFirstGroup(wxString& strGroup, long& nIndex);
bool GetNextGroup(wxString& strGroup, long& nIndex);
bool DeleteGroup(const wxString strGroup);
bool GetFirstEntry(wxString& strEntry, long& nIndex);
bool GetNextEntry(wxString& strEntry, long& nIndex);
wxString Get(const wxString strVariable) const;
bool GetBool(const wxString strVariable) const;
int GetInt (const wxString strVariable) const;
bool Set(const wxString strVariable, const wxString strValue);
InstallationType GetInstallationType() const;
bool Set(const wxString strVariable, const int uValue);
CampoIniFile(const wxString strIniPath, wxString strGroup);
};
/*
class CampoIniFile : public wxFileConfig class CampoIniFile : public wxFileConfig
{ {
protected: protected:
@ -20,6 +42,7 @@ public:
CampoIniFile(const wxString strIniPath, wxString strValue); CampoIniFile(const wxString strIniPath, wxString strValue);
}; };
*/
bool ErrorBox(const wxString str); bool ErrorBox(const wxString str);

View File

@ -424,7 +424,7 @@ CampoWizardPage3::CampoWizardPage3(wxWizard* parent) : CampoWizardPage(parent)
asCampi.Add("Nuova installazione"); asCampi.Add("Nuova installazione");
m_pRadioBox = new wxRadioBox(this, 301, "Selezionare l'installazione da aggiornare (consigliato) o Nuova installazione", m_pRadioBox = new wxRadioBox(this, 301, "Selezionare l'installazione da aggiornare (consigliato) o Nuova installazione",
wxDefaultPosition, wxDefaultSize, asCampi, 0, wxRA_SPECIFY_ROWS); wxDefaultPosition, wxDefaultSize, asCampi, 0, wxRA_SPECIFY_ROWS);
if (prechecked > 0) if (prechecked >= 0)
m_pRadioBox->SetSelection(prechecked); m_pRadioBox->SetSelection(prechecked);
} }