*
* wxbPanel for restoring files
*
- * Nicolas Boichat, April-May 2004
+ * Nicolas Boichat, April-July 2004
*
+ * Version $Id$
*/
/*
Copyright (C) 2004 Kern Sibbald and John Walker
SetStatus(choosing);
- wxbUtils::WaitForPrompt(wxString("restore") <<
+ wxbTableParser* tableparser = new wxbTableParser();
+ wxbDataTokenizer* dt = new wxbDataTokenizer(true);
+
+ wxbMainFrame::GetInstance()->Send(wxString("restore") <<
" client=\"" << configPanel->GetRowString("Client") <<
"\" fileset=\"" << configPanel->GetRowString("Fileset") <<
"\" pool=\"" << configPanel->GetRowString("Pool") <<
- "\" storage=\"" << configPanel->GetRowString("Storage") << "\"\n");
- wxbUtils::WaitForPrompt("6\n");
+ "\" storage=\"" << configPanel->GetRowString("Storage") <<
+ "\" before=\"" << configPanel->GetRowString("Before") <<
+ "\" select\n");
+ //wxbUtils::WaitForPrompt("6\n");
//WaitForEnd();
/*wxbPromptParser *pp = wxbUtils::WaitForPrompt(wxString() << configPanel->GetRowString("Before") << "\n", true);
int client = pp->getChoices()->Index(configPanel->GetRowString("Client"));
}
delete pp;*/
- wxbTableParser* tableparser = new wxbTableParser();
- wxbDataTokenizer* dt = new wxbDataTokenizer(true);
-
- wxbMainFrame::GetInstance()->Send(wxString() << configPanel->GetRowString("Before") << "\n");
+ //wxbMainFrame::GetInstance()->Send(wxString() << configPanel->GetRowString("Before") << "\n");
while (!tableparser->hasFinished() && !dt->hasFinished()) {
wxTheApp->Yield(true);
int var = 0;
- while (!dt->hasFinished()) {
+ int i1, i2;
+
+ while (true) {
newdate = wxDateTime::Now();
if (newdate.Subtract(base).GetMilliseconds() > 10 ) {
base = newdate;
for (; lastindex < dt->GetCount(); lastindex++) {
- if (((*dt)[lastindex].Find("Building directory tree for JobId ") == 0) &&
- ((i = (*dt)[lastindex].Find(" ...")) > 0)) {
- str = (*dt)[lastindex].Mid(34, i-34);
+ if (((i1 = (*dt)[lastindex].Find("Building directory tree for JobId ")) >= 0) &&
+ ((i2 = (*dt)[lastindex].Find(" ...")) > 0)) {
+ str = (*dt)[lastindex].Mid(i1+34, i2-(i1+34));
for (i = 0; i < tableparser->GetCount(); i++) {
if (str == (*tableparser)[i][0]) {
str = (*tableparser)[i][2];
gauge->SetValue(gauge->GetValue()+var);
+ if (dt->hasFinished()) {
+ break;
+ }
+
/*wxbMainFrame::GetInstance()->Print(
wxString("[") << gauge->GetValue() << "/" << done
<< "-" << willdo << "]", CS_DEBUG);*/
wxDateTime jobtime;
- if (jobname == (*tableparser)[tableparser->GetCount()-1][1]) {
- wxStringTokenizer jtkz((*tableparser)[tableparser->GetCount()-1][2], " ", wxTOKEN_STRTOK);
- if ((jobtime.ParseDate(jtkz.GetNextToken()) != NULL) && // Date
- (jobtime.ParseTime(jtkz.GetNextToken()) != NULL)) { // Time
- if (jobtime.IsLaterThan(currenttime)) {
- jobid = (*tableparser)[tableparser->GetCount()-1][0];
- cmd << jobid << "\n";
- delete tableparser;
- cancel->Enable(true);
- break;
+ for (i = 0; i < tableparser->GetCount(); i++) {
+ if (jobname == (*tableparser)[i][1]) {
+ wxStringTokenizer jtkz((*tableparser)[i][2], " ", wxTOKEN_STRTOK);
+ if ((jobtime.ParseDate(jtkz.GetNextToken()) != NULL) && // Date
+ (jobtime.ParseTime(jtkz.GetNextToken()) != NULL)) { // Time
+ if (jobtime.IsLaterThan(currenttime)) {
+ jobid = (*tableparser)[i][0];
+ cmd << jobid << "\n";
+ delete tableparser;
+ tableparser = NULL;
+ cancel->Enable(true);
+ break;
+ }
}
}
}
+ if (tableparser == NULL) { //The job was found
+ break;
+ }
+
delete tableparser;
wxStopWatch sw2;
configPanel->ClearRowChoices("Before");
wxbUtils::WaitForPrompt("query\n");
wxbUtils::WaitForPrompt("6\n");
- wxbTableParser* tableparser = wxbUtils::CreateAndWaitForParser(configPanel->GetRowString("Client") + "\n");
+ wxbTableParser* tableparser = new wxbTableParser();
+ wxbDataTokenizer* dt = wxbUtils::WaitForEnd(configPanel->GetRowString("Client") + "\n", true);
+
+ if (!tableparser->hasFinished()) {
+ for (unsigned int i = 0; i < dt->Count(); i++) {
+ if ((*dt)[i].Find("No results to list.") == 0) {
+ configPanel->AddRowChoice("Before", "No backup found for this client.");
+ configPanel->SetRowSelection("Before", 0);
+ configPanel->EnableApply(true); // Enabling the not existing apply button disables the ok button.
+ delete tableparser;
+ delete dt;
+ return;
+ }
+ else if (((*dt)[i].Find("ERROR") > -1) || ((*dt)[i].Find("Query failed") > -1)) {
+ configPanel->AddRowChoice("Before", "Cannot get previous backups list, see console.");
+ configPanel->SetRowSelection("Before", 0);
+ configPanel->EnableApply(true); // Enabling the not existing apply button disables the ok button.
+ delete tableparser;
+ delete dt;
+ return;
+ }
+ }
+ }
+
+ while (!tableparser->hasFinished()) {
+ wxTheApp->Yield(true);
+ ::wxUsleep(100);
+ }
+
+ delete dt;
for (int i = tableparser->GetCount()-1; i > -1; i--) {
wxString str = (*tableparser)[i][3];
jobChoice->Append("Invalid");
}*/
}
-
+
delete tableparser;
configPanel->SetRowSelection("Before", 0);
+ configPanel->EnableApply(false); // Disabling the not existing apply button enables the ok button.
}
}
/* Parse dir command results. */
wxString* wxbRestorePanel::ParseList(wxString line) {
- //drwx------ 11 1003 42949672 0 2001-07-30 16:45:14 *filename
- //+ 10 ++ 4++ 10 ++ 8 ++ 8 + + 19 + *+ ->
- //0 10 14 24 32 42 62
+ /* See ls_output in dird/ua_tree.c */
+
+ //drwxrwxrwx 1 root root 0 2004-04-03 14:35:21 f:/tocd/NVSU 1.00.00/
+ //+ 10 + ++ + 8 + + 8 ++ 8 + + 19 + *+ ->
+ //0 12 15 24 32 42 62
if (line.Length() < 63)
return NULL;
wxString* ret = new wxString[9];
ret[0] = line.Mid(0, 10).Trim();
- ret[1] = line.Mid(10, 4).Trim();
- ret[2] = line.Mid(14, 10).Trim();
+ ret[1] = line.Mid(12, 2).Trim();
+ ret[2] = line.Mid(15, 8).Trim();
ret[3] = line.Mid(24, 8).Trim();
ret[4] = line.Mid(32, 8).Trim();
ret[5] = line.Mid(42, 19).Trim();
CmdConfigCancel();
SetWorking(false);
}
-