Index: frmRestore.h =================================================================== RCS file: /projects/pgadmin3/src/include/frmRestore.h,v retrieving revision 1.2 retrieving revision 1.3 diff -Lsrc/include/frmRestore.h -Lsrc/include/frmRestore.h -u -w -r1.2 -r1.3 --- src/include/frmRestore.h +++ src/include/frmRestore.h @@ -35,6 +35,7 @@ private: wxString GetHelpPage() const; + void OnChangeName(wxCommandEvent &ev); void OnChange(wxCommandEvent &ev); void OnSelectFilename(wxCommandEvent &ev); void OnView(wxCommandEvent &ev); @@ -46,7 +47,7 @@ frmMain *form; pgObject *object; - bool viewRunning; + bool viewRunning, filenameValid; DECLARE_EVENT_TABLE() }; Index: frmRestore.cpp =================================================================== RCS file: /projects/pgadmin3/src/ui/frmRestore.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -Lsrc/ui/frmRestore.cpp -Lsrc/ui/frmRestore.cpp -u -w -r1.2 -r1.3 --- src/ui/frmRestore.cpp +++ src/ui/frmRestore.cpp @@ -22,6 +22,7 @@ #include "pgTable.h" #include #include +#include // Icons #include "images/restore.xpm" @@ -43,7 +44,7 @@ BEGIN_EVENT_TABLE(frmRestore, ExternProcessDialog) - EVT_TEXT(XRCID("txtFilename"), frmRestore::OnChange) + EVT_TEXT(XRCID("txtFilename"), frmRestore::OnChangeName) EVT_BUTTON(XRCID("btnFilename"), frmRestore::OnSelectFilename) EVT_BUTTON(XRCID("btnOK"), frmRestore::OnOK) EVT_BUTTON(XRCID("btnView"), frmRestore::OnView) @@ -72,6 +73,7 @@ txtMessages = CTRL_TEXT("txtMessages"); txtMessages->SetMaxLength(0L); btnOK->Disable(); + filenameValid=false; wxCommandEvent ev; OnChange(ev); @@ -107,9 +109,40 @@ } +void frmRestore::OnChangeName(wxCommandEvent &ev) +{ + wxString name=txtFilename->GetValue(); + if (name.IsEmpty() || !wxFile::Exists(name)) + filenameValid=false; + else + { + wxFile file(name, wxFile::read); + if (file.IsOpened()) + { + char buffer[8]; + off_t size=file.Read(buffer, 8); + if (size == 8) + { + if (memcmp(buffer, "PGDMP", 5) && !memcmp(buffer, "toc.dat", 8)) + { + // tar format? + file.Seek(512); + size=file.Read(buffer, 8); + } + if (size == 8 && !memcmp(buffer, "PGDMP", 5)) + { + // check version here? + filenameValid=true; + } + } + } + } + OnChange(ev); +} + + void frmRestore::OnChange(wxCommandEvent &ev) { - bool filenameValid=!txtFilename->GetValue().IsEmpty(); btnOK->Enable(filenameValid); btnView->Enable(filenameValid); }