MainFrame: add zip creation feature.
This commit is contained in:
parent
95ab88a735
commit
cf3c7305c8
5 changed files with 115 additions and 2 deletions
|
@ -23,6 +23,8 @@
|
||||||
#include <wx/msgdlg.h>
|
#include <wx/msgdlg.h>
|
||||||
#include <wx/numdlg.h>
|
#include <wx/numdlg.h>
|
||||||
#include <wx/regex.h>
|
#include <wx/regex.h>
|
||||||
|
#include <wx/wfstream.h>
|
||||||
|
#include <wx/zipstrm.h>
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <shlobj.h>
|
#include <shlobj.h>
|
||||||
|
@ -190,6 +192,36 @@ void EvtMainFrame::deleteEvent(wxCommandEvent&) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EvtMainFrame::backupEvent(wxCommandEvent&) {
|
||||||
|
wxString current_timestamp = wxDateTime::Now().Format("%Y-%m-%d_%H-%M-%S");
|
||||||
|
|
||||||
|
wxFileDialog save_dialog{this, "Choose output location", _saveDirectory,
|
||||||
|
wxString::Format("backup_%s_%s.zip", _localSteamId, current_timestamp), "Zip archive (*zip)|*zip",
|
||||||
|
wxFD_SAVE|wxFD_OVERWRITE_PROMPT};
|
||||||
|
|
||||||
|
if(save_dialog.ShowModal() == wxID_CANCEL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxFFileOutputStream out{save_dialog.GetPath()};
|
||||||
|
wxZipOutputStream zip{out};
|
||||||
|
|
||||||
|
{
|
||||||
|
zip.PutNextEntry(wxString::Format("Profile%s.sav", _localSteamId));
|
||||||
|
wxFFileInputStream profile_stream{wxString::Format("%s\\Profile%s.sav", Utility::Directory::toNativeSeparators(_saveDirectory), _localSteamId), "rb"};
|
||||||
|
zip.Write(profile_stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < 32; ++i) {
|
||||||
|
std::string unit_file = Utility::formatString("Unit{:.2d}{}.sav", i, _localSteamId);
|
||||||
|
if(Utility::Directory::exists(Utility::Directory::join(_saveDirectory, unit_file))) {
|
||||||
|
zip.PutNextEntry(unit_file);
|
||||||
|
wxFFileInputStream unit_stream{Utility::Directory::toNativeSeparators(Utility::Directory::join(_saveDirectory, unit_file))};
|
||||||
|
zip.Write(unit_stream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void EvtMainFrame::openSaveDirEvent(wxCommandEvent&) {
|
void EvtMainFrame::openSaveDirEvent(wxCommandEvent&) {
|
||||||
wxExecute("explorer.exe " + Utility::Directory::toNativeSeparators(_saveDirectory));
|
wxExecute("explorer.exe " + Utility::Directory::toNativeSeparators(_saveDirectory));
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,7 @@ class EvtMainFrame: public MainFrame {
|
||||||
void importEvent(wxCommandEvent&);
|
void importEvent(wxCommandEvent&);
|
||||||
void moveEvent(wxCommandEvent&);
|
void moveEvent(wxCommandEvent&);
|
||||||
void deleteEvent(wxCommandEvent&);
|
void deleteEvent(wxCommandEvent&);
|
||||||
|
void backupEvent(wxCommandEvent&);
|
||||||
void openSaveDirEvent(wxCommandEvent&);
|
void openSaveDirEvent(wxCommandEvent&);
|
||||||
void installedSelectionEvent(wxListEvent&);
|
void installedSelectionEvent(wxListEvent&);
|
||||||
void listColumnDragEvent(wxListEvent&);
|
void listColumnDragEvent(wxListEvent&);
|
||||||
|
|
|
@ -49,8 +49,11 @@ MainFrame::MainFrame( wxWindow* parent, wxWindowID id, const wxString& title, co
|
||||||
|
|
||||||
bSizerSecondRow->Add( 0, 0, 1, wxEXPAND, 5 );
|
bSizerSecondRow->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
_zipButton = new wxButton( sbSizerInstalled->GetStaticBox(), wxID_ANY, wxT("Backup save files"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
bSizerSecondRow->Add( _zipButton, 2, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
_openSaveDirButton = new wxButton( sbSizerInstalled->GetStaticBox(), wxID_ANY, wxT("Open save directory"), wxDefaultPosition, wxDefaultSize, 0 );
|
_openSaveDirButton = new wxButton( sbSizerInstalled->GetStaticBox(), wxID_ANY, wxT("Open save directory"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
bSizerSecondRow->Add( _openSaveDirButton, 1, wxEXPAND|wxALL, 5 );
|
bSizerSecondRow->Add( _openSaveDirButton, 2, wxEXPAND|wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
bSizerSecondRow->Add( 0, 0, 1, wxEXPAND, 5 );
|
bSizerSecondRow->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||||
|
@ -104,6 +107,7 @@ MainFrame::MainFrame( wxWindow* parent, wxWindowID id, const wxString& title, co
|
||||||
_importButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::importEvent ), NULL, this );
|
_importButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::importEvent ), NULL, this );
|
||||||
_moveButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::moveEvent ), NULL, this );
|
_moveButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::moveEvent ), NULL, this );
|
||||||
_deleteButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::deleteEvent ), NULL, this );
|
_deleteButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::deleteEvent ), NULL, this );
|
||||||
|
_zipButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::backupEvent ), NULL, this );
|
||||||
_openSaveDirButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::openSaveDirEvent ), NULL, this );
|
_openSaveDirButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::openSaveDirEvent ), NULL, this );
|
||||||
this->Connect( wxID_ANY, wxEVT_TIMER, wxTimerEventHandler( MainFrame::gameCheckTimerEvent ) );
|
this->Connect( wxID_ANY, wxEVT_TIMER, wxTimerEventHandler( MainFrame::gameCheckTimerEvent ) );
|
||||||
}
|
}
|
||||||
|
@ -114,6 +118,7 @@ MainFrame::~MainFrame()
|
||||||
_importButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::importEvent ), NULL, this );
|
_importButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::importEvent ), NULL, this );
|
||||||
_moveButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::moveEvent ), NULL, this );
|
_moveButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::moveEvent ), NULL, this );
|
||||||
_deleteButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::deleteEvent ), NULL, this );
|
_deleteButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::deleteEvent ), NULL, this );
|
||||||
|
_zipButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::backupEvent ), NULL, this );
|
||||||
_openSaveDirButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::openSaveDirEvent ), NULL, this );
|
_openSaveDirButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::openSaveDirEvent ), NULL, this );
|
||||||
this->Disconnect( wxID_ANY, wxEVT_TIMER, wxTimerEventHandler( MainFrame::gameCheckTimerEvent ) );
|
this->Disconnect( wxID_ANY, wxEVT_TIMER, wxTimerEventHandler( MainFrame::gameCheckTimerEvent ) );
|
||||||
|
|
||||||
|
|
|
@ -394,10 +394,83 @@
|
||||||
<property name="width">0</property>
|
<property name="width">0</property>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxALL|wxEXPAND</property>
|
||||||
|
<property name="proportion">2</property>
|
||||||
|
<object class="wxButton" expanded="1">
|
||||||
|
<property name="BottomDockable">1</property>
|
||||||
|
<property name="LeftDockable">1</property>
|
||||||
|
<property name="RightDockable">1</property>
|
||||||
|
<property name="TopDockable">1</property>
|
||||||
|
<property name="aui_layer"></property>
|
||||||
|
<property name="aui_name"></property>
|
||||||
|
<property name="aui_position"></property>
|
||||||
|
<property name="aui_row"></property>
|
||||||
|
<property name="best_size"></property>
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="bitmap"></property>
|
||||||
|
<property name="caption"></property>
|
||||||
|
<property name="caption_visible">1</property>
|
||||||
|
<property name="center_pane">0</property>
|
||||||
|
<property name="close_button">1</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="current"></property>
|
||||||
|
<property name="default">0</property>
|
||||||
|
<property name="default_pane">0</property>
|
||||||
|
<property name="disabled"></property>
|
||||||
|
<property name="dock">Dock</property>
|
||||||
|
<property name="dock_fixed">0</property>
|
||||||
|
<property name="docking">Left</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="floatable">1</property>
|
||||||
|
<property name="focus"></property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="gripper">0</property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">Backup save files</property>
|
||||||
|
<property name="margins"></property>
|
||||||
|
<property name="markup">0</property>
|
||||||
|
<property name="max_size"></property>
|
||||||
|
<property name="maximize_button">0</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="min_size"></property>
|
||||||
|
<property name="minimize_button">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="moveable">1</property>
|
||||||
|
<property name="name">_zipButton</property>
|
||||||
|
<property name="pane_border">1</property>
|
||||||
|
<property name="pane_position"></property>
|
||||||
|
<property name="pane_size"></property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pin_button">1</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="position"></property>
|
||||||
|
<property name="pressed"></property>
|
||||||
|
<property name="resize">Resizable</property>
|
||||||
|
<property name="show">1</property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass">; ; forward_declare</property>
|
||||||
|
<property name="toolbar_pane">0</property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="validator_data_type"></property>
|
||||||
|
<property name="validator_style">wxFILTER_NONE</property>
|
||||||
|
<property name="validator_type">wxDefaultValidator</property>
|
||||||
|
<property name="validator_variable"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<event name="OnButtonClick">backupEvent</event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND|wxALL</property>
|
<property name="flag">wxEXPAND|wxALL</property>
|
||||||
<property name="proportion">1</property>
|
<property name="proportion">2</property>
|
||||||
<object class="wxButton" expanded="1">
|
<object class="wxButton" expanded="1">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
<property name="LeftDockable">1</property>
|
<property name="LeftDockable">1</property>
|
||||||
|
|
|
@ -40,6 +40,7 @@ class MainFrame : public wxFrame
|
||||||
wxButton* _importButton;
|
wxButton* _importButton;
|
||||||
wxButton* _moveButton;
|
wxButton* _moveButton;
|
||||||
wxButton* _deleteButton;
|
wxButton* _deleteButton;
|
||||||
|
wxButton* _zipButton;
|
||||||
wxButton* _openSaveDirButton;
|
wxButton* _openSaveDirButton;
|
||||||
wxStaticText* _riskLabel;
|
wxStaticText* _riskLabel;
|
||||||
wxStaticText* _gameStatusLabel;
|
wxStaticText* _gameStatusLabel;
|
||||||
|
@ -51,6 +52,7 @@ class MainFrame : public wxFrame
|
||||||
virtual void importEvent( wxCommandEvent& event ) { event.Skip(); }
|
virtual void importEvent( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void moveEvent( wxCommandEvent& event ) { event.Skip(); }
|
virtual void moveEvent( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void deleteEvent( wxCommandEvent& event ) { event.Skip(); }
|
virtual void deleteEvent( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
virtual void backupEvent( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void openSaveDirEvent( wxCommandEvent& event ) { event.Skip(); }
|
virtual void openSaveDirEvent( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void gameCheckTimerEvent( wxTimerEvent& event ) { event.Skip(); }
|
virtual void gameCheckTimerEvent( wxTimerEvent& event ) { event.Skip(); }
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue