diff --git a/stepmania/src/RageFileManager.cpp b/stepmania/src/RageFileManager.cpp index 91633567cc..84873f3b17 100644 --- a/stepmania/src/RageFileManager.cpp +++ b/stepmania/src/RageFileManager.cpp @@ -896,6 +896,23 @@ void GetDirListingRecursive( RageFileDriver *prfd, const RString &sDir, const RS } } +bool DeleteRecursive( RageFileDriver *prfd, const RString &sDir ) +{ + ASSERT( sDir.Right(1) == "/" ); + + vector vsFiles; + prfd->GetDirListing( sDir+"*", vsFiles, false, true ); + FOREACH_CONST( RString, vsFiles, s ) + { + if( IsADirectory(*s) ) + DeleteRecursive( *s+"/" ); + else + FILEMAN->Remove( *s ); + } + + return FILEMAN->Remove( sDir ); +} + bool DeleteRecursive( const RString &sDir ) { ASSERT( sDir.Right(1) == "/" ); diff --git a/stepmania/src/RageUtil.h b/stepmania/src/RageUtil.h index e9b1e2e4e7..0ab42ee7ca 100644 --- a/stepmania/src/RageUtil.h +++ b/stepmania/src/RageUtil.h @@ -439,6 +439,7 @@ void GetDirListing( const RString &sPath, vector &AddTo, bool bOnlyDirs void GetDirListingRecursive( const RString &sDir, const RString &sMatch, vector &AddTo ); /* returns path too */ void GetDirListingRecursive( RageFileDriver *prfd, const RString &sDir, const RString &sMatch, vector &AddTo ); /* returns path too */ bool DeleteRecursive( const RString &sDir ); /* delete the dir and all files/subdirs inside it */ +bool DeleteRecursive( RageFileDriver *prfd, const RString &sDir ); /* delete the dir and all files/subdirs inside it */ bool DoesFileExist( const RString &sPath ); bool IsAFile( const RString &sPath ); bool IsADirectory( const RString &sPath ); diff --git a/stepmania/src/smpackage/SMPackageInstallDlg.cpp b/stepmania/src/smpackage/SMPackageInstallDlg.cpp index acd2ae02c6..0f7e7eb6c4 100644 --- a/stepmania/src/smpackage/SMPackageInstallDlg.cpp +++ b/stepmania/src/smpackage/SMPackageInstallDlg.cpp @@ -19,6 +19,7 @@ #include "LocalizedString.h" #include "RageLog.h" #include "arch/Dialog/Dialog.h" +#include "RageFileDriverDirect.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -183,7 +184,7 @@ static bool CheckPackages( RageFileDriverZip &fileDriver ) int cnt = 0; ini.GetValue( "Packages", "NumPackages", cnt ); - vector Directories; + vector vsDirectories; for( int i = 0; i < cnt; ++i ) { RString path; @@ -197,15 +198,15 @@ static bool CheckPackages( RageFileDriverZip &fileDriver ) if( !SMPackageUtil::IsValidPackageDirectory(path) ) continue; - Directories.push_back(path); + vsDirectories.push_back(path); } - if( Directories.empty() ) + if( vsDirectories.empty() ) return true; { UninstallOld UninstallOldDlg; - UninstallOldDlg.m_sPackages = join("\r\n", Directories); + UninstallOldDlg.m_sPackages = join("\r\n", vsDirectories); int nResponse = UninstallOldDlg.DoModal(); if( nResponse == IDCANCEL ) return false; // cancelled @@ -219,9 +220,10 @@ static bool CheckPackages( RageFileDriverZip &fileDriver ) if( cwd[cwd.size()-1] != '\\' ) cwd += "\\"; - for( i = 0; i < (int) Directories.size(); ++i ) + for( i = 0; i < (int)vsDirectories.size(); ++i ) { - RString sDir = Directories[i]; + RString sDir = vsDirectories[i]; + sDir += "/"; if( !DeleteRecursive(sDir) ) // error deleting { return false; @@ -279,6 +281,9 @@ void CSMPackageInstallDlg::OnOK() exit(1); // better way to abort? } + RageFileDriverDirect dir( sInstallDir ); + // handle error? + // Show comment (if any) { RString sComment = zip.GetGlobalComment(); @@ -344,19 +349,23 @@ retry_unzip: goto show_error; } - RageFile fileTo; - if( !fileTo.Open(sFile, RageFile::WRITE) ) + int iError; + RageFileBasic *pFileTo = dir.Open( sFile, RageFile::WRITE, iError ); + if( pFileTo == NULL ) { - sError = ssprintf( ERROR_OPENING_DESTINATION_FILE.GetValue(), sFile.c_str(), fileTo.GetError().c_str() ); + sError = ssprintf( ERROR_OPENING_DESTINATION_FILE.GetValue(), sFile.c_str(), pFileTo->GetError().c_str() ); goto show_error; } RString sErr; - if( !FileCopy(*pFileFrom, fileTo, sErr) ) + if( !FileCopy(*pFileFrom, *pFileTo, sErr) ) { sError = ssprintf( ERROR_COPYING_FILE.GetValue(), sFile.c_str(), sErr.c_str() ); goto show_error; } + + SAFE_DELETE( pFileFrom ); + SAFE_DELETE( pFileTo ); } goto done_with_file; diff --git a/stepmania/src/smpackage/UninstallOld.cpp b/stepmania/src/smpackage/UninstallOld.cpp index e683f02c90..ec06b8efcd 100644 --- a/stepmania/src/smpackage/UninstallOld.cpp +++ b/stepmania/src/smpackage/UninstallOld.cpp @@ -21,18 +21,14 @@ UninstallOld::~UninstallOld() { } -void UninstallOld::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); - DDX_Text(pDX, IDC_PACKAGES, m_sPackages); -} - BOOL UninstallOld::OnInitDialog() { CDialog::OnInitDialog(); DialogUtil::LocalizeDialogAndContents( *this ); + GetDlgItem(IDC_PACKAGES)->SetWindowText( m_sPackages ); + return TRUE; // return TRUE unless you set the focus to a control } diff --git a/stepmania/src/smpackage/UninstallOld.h b/stepmania/src/smpackage/UninstallOld.h index a83cd17192..49db9f5c71 100644 --- a/stepmania/src/smpackage/UninstallOld.h +++ b/stepmania/src/smpackage/UninstallOld.h @@ -14,7 +14,6 @@ public: enum { IDD = IDD_UNINSTALL_OLD_PACKAGES }; protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support virtual BOOL OnInitDialog(); void OnOK(); void OnCancel(); diff --git a/stepmania/src/smpackage/smpackage.rc b/stepmania/src/smpackage/smpackage.rc index 34bbd38584..126217175f 100644 --- a/stepmania/src/smpackage/smpackage.rc +++ b/stepmania/src/smpackage/smpackage.rc @@ -232,20 +232,20 @@ BEGIN "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,149,145,11 END -IDD_UNINSTALL_OLD_PACKAGES DIALOG 0, 0, 277, 161 +IDD_UNINSTALL_OLD_PACKAGES DIALOGEX 0, 0, 228, 152 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Uninstall Old Packages" -FONT 8, "MS Shell Dlg" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - DEFPUSHBUTTON "&Yes",IDOK,55,132,50,14 - PUSHBUTTON "Cancel",IDCANCEL,171,132,50,14 + DEFPUSHBUTTON "&Yes",IDOK,31,131,50,14 + PUSHBUTTON "Cancel",IDCANCEL,147,131,50,14 LTEXT "The following packages are already installed. It is strongly recommended that they be deleted before installing this package.", - IDC_STATIC,32,11,214,19 - EDITTEXT IDC_PACKAGES,56,37,165,77,ES_MULTILINE | ES_AUTOHSCROLL | + IDC_STATIC,7,7,214,27 + EDITTEXT IDC_PACKAGES,31,36,165,77,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY | WS_VSCROLL - PUSHBUTTON "&No",IDC_BUTTON1,111,132,49,14 - CTEXT "Delete old packages?",IDC_STATIC,55,119,166,12 + PUSHBUTTON "&No",IDC_BUTTON1,87,131,49,14 + CTEXT "Delete old packages?",IDC_STATIC,31,117,166,12 END IDD_CHANGE_GAME_SETTINGS DIALOGEX 0, 0, 162, 298 @@ -435,9 +435,9 @@ BEGIN IDD_UNINSTALL_OLD_PACKAGES, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 270 + RIGHTMARGIN, 221 TOPMARGIN, 7 - BOTTOMMARGIN, 154 + BOTTOMMARGIN, 145 END IDD_CHANGE_GAME_SETTINGS, DIALOG