mirror of
https://github.com/uroni/urbackup_frontend_wx.git
synced 2025-10-26 11:19:28 +00:00
Windows component restore
This commit is contained in:
parent
0d35b97ea7
commit
576a594ffe
File diff suppressed because it is too large
Load Diff
@ -1,85 +1,95 @@
|
||||
#pragma once
|
||||
|
||||
#include "gui/GUIRestoreWindowsComponents.h"
|
||||
#include "SelectWindowsComponents.h"
|
||||
#include <wx/timer.h>
|
||||
#include <wx/thread.h>
|
||||
#include "Connector.h"
|
||||
#include "SelectWindowsComponents.h"
|
||||
|
||||
wxString accessErrorToString(Connector::EAccessError access_error);
|
||||
|
||||
class RetrieveComponentBackups : public wxThread
|
||||
struct SFileSpec
|
||||
{
|
||||
public:
|
||||
RetrieveComponentBackups();
|
||||
~RetrieveComponentBackups();
|
||||
std::string path;
|
||||
std::string spec;
|
||||
bool recursive;
|
||||
std::string altPath;
|
||||
|
||||
bool hasSuccess() { return success; }
|
||||
std::vector<SBackupFile>& getFileList() { return filelist; }
|
||||
Connector::EAccessError getAccessError() {
|
||||
return access_error;
|
||||
bool operator==(const SFileSpec& other) const
|
||||
{
|
||||
return path == other.path
|
||||
&& spec == other.spec
|
||||
&& recursive == other.recursive;
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual ExitCode Entry();
|
||||
|
||||
private:
|
||||
Connector::EAccessError access_error;
|
||||
bool success;
|
||||
std::vector<SBackupFile> filelist;
|
||||
};
|
||||
|
||||
class RetrieveComponentConfig : public wxThread
|
||||
struct SRestoreComponent
|
||||
{
|
||||
SFileSpec currspec;
|
||||
std::vector<SFileSpec> redirected_locations;
|
||||
std::string writerName;
|
||||
VSS_ID writerId;
|
||||
UINT componentIdx;
|
||||
std::string componentName;
|
||||
std::string filesPrefix;
|
||||
UINT filesIdx;
|
||||
std::string logicalPath;
|
||||
VSS_COMPONENT_TYPE type;
|
||||
};
|
||||
|
||||
class RestoreWindowsComponentsThread : public wxThread
|
||||
{
|
||||
public:
|
||||
RetrieveComponentConfig();
|
||||
~RetrieveComponentConfig();
|
||||
RestoreWindowsComponentsThread(int backupid,
|
||||
std::vector<SComponent> selected_components, wxString componentConfigDir);
|
||||
~RestoreWindowsComponentsThread();
|
||||
|
||||
void reset(int pbackupid) {
|
||||
backupid = pbackupid;
|
||||
success = false; }
|
||||
bool hasSuccess() { return success; }
|
||||
Connector::EAccessError getAccessError() {
|
||||
return access_error;
|
||||
}
|
||||
void log(const std::string& message);
|
||||
void log(const wxString& message);
|
||||
void log(const char* message) { log(std::string(message)); }
|
||||
|
||||
SComponent* getRoot() { return &root; }
|
||||
std::vector<std::string> getNewLogMessages();
|
||||
|
||||
std::string getErrMsg() { return errmsg; }
|
||||
wxString getMessage1();
|
||||
wxString getMessage2();
|
||||
|
||||
void setMessage1(wxString msg);
|
||||
void setMessage2(wxString msg);
|
||||
|
||||
int getProgressBarPc();
|
||||
void setProgressBarPc(int pc);
|
||||
|
||||
protected:
|
||||
virtual ExitCode Entry();
|
||||
|
||||
private:
|
||||
bool restoreFiles(const SRestoreComponent& comp);
|
||||
|
||||
bool getFilespec(IVssWMFiledesc* wmFile, SFileSpec& filespec);
|
||||
|
||||
bool readAltLocations(std::vector<SFileSpec> alt_locations);
|
||||
|
||||
int backupid;
|
||||
Connector::EAccessError access_error;
|
||||
bool success;
|
||||
SComponent root;
|
||||
std::vector<SComponent*> components;
|
||||
std::string errmsg;
|
||||
std::vector<SComponent> selected_components;
|
||||
wxString componentConfigDir;
|
||||
wxCriticalSection log_section;
|
||||
std::vector<std::string> log_messages;
|
||||
|
||||
std::vector<SRestoreComponent> restore_components;
|
||||
|
||||
int progress_bar_pc;
|
||||
|
||||
wxString message1;
|
||||
wxString message2;
|
||||
};
|
||||
|
||||
class SelectRestoreComponents : public GUISelectRestoreComponents, public wxTimer
|
||||
class RestoreWindowsComponents : public GUIRestoreComponents, public wxTimer
|
||||
{
|
||||
public:
|
||||
SelectRestoreComponents(wxWindow* parent);
|
||||
RestoreWindowsComponents(wxWindow* parent, int backupid,
|
||||
std::vector<SComponent> selected_components, wxString componentConfigDir);
|
||||
|
||||
protected:
|
||||
virtual void Notify(void);
|
||||
virtual void onListBoxSelected(wxCommandEvent& event);
|
||||
virtual void onStartRestore(wxCommandEvent& event);
|
||||
virtual void evtOnTreeStateImageClick(wxTreeEvent& event);
|
||||
virtual void onCancel(wxCommandEvent& event);
|
||||
virtual void onOkClick(wxCommandEvent& event);
|
||||
|
||||
private:
|
||||
RetrieveComponentBackups retrieveComponentBackups;
|
||||
std::auto_ptr<RetrieveComponentConfig> retrieveComponentConfig;
|
||||
wxImageList* iconList;
|
||||
wxImageList* selectList;
|
||||
|
||||
bool canSelectBackup;
|
||||
bool retrievingBackupConfig;
|
||||
|
||||
std::map<wxTreeItemId, SComponent*> tree_components;
|
||||
std::map<SComponent*, wxTreeItemId> tree_items;
|
||||
RestoreWindowsComponentsThread restoreComponentsThread;
|
||||
};
|
||||
402
SelectRestoreWindowsComponents.cpp
Normal file
402
SelectRestoreWindowsComponents.cpp
Normal file
@ -0,0 +1,402 @@
|
||||
#include "SelectRestoreWindowsComponents.h"
|
||||
#include "checked.xpm"
|
||||
#include "unchecked.xpm"
|
||||
#include <wx/filename.h>
|
||||
#include <wx/dir.h>
|
||||
#include <random>
|
||||
#include "stringtools.h"
|
||||
#include "SelectWindowsComponents.h"
|
||||
#include "json/json.h"
|
||||
#include "RestoreWindowsComponents.h"
|
||||
|
||||
extern wxString res_path;
|
||||
extern wxString ico_ext;
|
||||
extern wxBitmapType ico_type;
|
||||
extern std::string g_res_path;
|
||||
|
||||
RetrieveComponentBackups::RetrieveComponentBackups()
|
||||
: wxThread(wxTHREAD_JOINABLE), success(false)
|
||||
{
|
||||
}
|
||||
|
||||
RetrieveComponentBackups::~RetrieveComponentBackups()
|
||||
{
|
||||
}
|
||||
|
||||
wxThread::ExitCode RetrieveComponentBackups::Entry()
|
||||
{
|
||||
filelist = Connector::getFileList("windows_components_config", access_error);
|
||||
|
||||
if (Connector::hasError())
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
success = true;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
SelectRestoreComponents::SelectRestoreComponents(wxWindow * parent)
|
||||
: GUISelectRestoreComponents(parent), canSelectBackup(false), retrievingBackupConfig(false), backupid(0)
|
||||
{
|
||||
retrieveComponentBackups.Run();
|
||||
|
||||
Start(200);
|
||||
|
||||
m_listBox1->Append(_("Loading..."));
|
||||
|
||||
wxIcon icons[2];
|
||||
icons[0] = wxIcon(unchecked_xpm);
|
||||
icons[1] = wxIcon(checked_xpm);
|
||||
|
||||
int width = icons[0].GetWidth(),
|
||||
height = icons[0].GetHeight();
|
||||
|
||||
selectList = new wxImageList(width, height, true);
|
||||
iconList = new wxImageList(width, height, true);
|
||||
|
||||
for (size_t i = 0; i < WXSIZEOF(icons); i++)
|
||||
selectList->Add(icons[i]);
|
||||
|
||||
m_treeCtrl1->AssignStateImageList(selectList);
|
||||
m_treeCtrl1->AddRoot(_("Loading..."));
|
||||
}
|
||||
|
||||
void SelectRestoreComponents::Notify(void)
|
||||
{
|
||||
if (!retrieveComponentBackups.IsAlive()
|
||||
&& !canSelectBackup)
|
||||
{
|
||||
retrieveComponentBackups.Wait();
|
||||
canSelectBackup = true;
|
||||
|
||||
if (!retrieveComponentBackups.hasSuccess())
|
||||
{
|
||||
Stop();
|
||||
wxMessageBox(_("Error retrieving Windows component backups: ") +
|
||||
accessErrorToString(retrieveComponentBackups.getAccessError()), wxT("UrBackup"), wxOK | wxICON_ERROR);
|
||||
Start(200);
|
||||
return;
|
||||
}
|
||||
|
||||
m_listBox1->Clear();
|
||||
|
||||
for (size_t i = 0; i < retrieveComponentBackups.getFileList().size(); ++i)
|
||||
{
|
||||
wxDateTime logtime_dt((wxLongLong)(retrieveComponentBackups.getFileList()[i].backuptime * 1000));
|
||||
|
||||
m_listBox1->Append(logtime_dt.Format());
|
||||
}
|
||||
|
||||
if (!retrieveComponentBackups.getFileList().empty())
|
||||
{
|
||||
m_listBox1->Select(0);
|
||||
wxCommandEvent evt;
|
||||
onListBoxSelected(evt);
|
||||
}
|
||||
}
|
||||
|
||||
if (retrievingBackupConfig
|
||||
&& retrieveComponentConfig.get()
|
||||
&& !retrieveComponentConfig->IsAlive())
|
||||
{
|
||||
retrieveComponentConfig->Wait();
|
||||
retrievingBackupConfig = false;
|
||||
|
||||
if (!retrieveComponentConfig->hasSuccess())
|
||||
{
|
||||
wxString errmsg = accessErrorToString(retrieveComponentConfig->getAccessError());
|
||||
if (!retrieveComponentConfig->getErrMsg().empty())
|
||||
{
|
||||
errmsg = retrieveComponentConfig->getErrMsg();
|
||||
}
|
||||
Stop();
|
||||
wxMessageBox(_("Error retrieving Windows component configuration: ") +
|
||||
errmsg, wxT("UrBackup"), wxOK | wxICON_ERROR);
|
||||
Start(200);
|
||||
retrieveComponentConfig.reset();
|
||||
return;
|
||||
}
|
||||
|
||||
m_treeCtrl1->Delete(m_treeCtrl1->GetRootItem());
|
||||
wxTreeItemId rootId = m_treeCtrl1->AddRoot(_("Windows components"));
|
||||
|
||||
m_treeCtrl1->SetItemState(rootId, 0);
|
||||
|
||||
SComponent* root = retrieveComponentConfig->getRoot();
|
||||
|
||||
tree_components[rootId] = root;
|
||||
tree_items[root] = rootId;
|
||||
|
||||
SelectWindowsComponents::addComponents(m_treeCtrl1, iconList, rootId, root, tree_components,
|
||||
tree_items);
|
||||
|
||||
m_treeCtrl1->SetImageList(iconList);
|
||||
|
||||
SelectWindowsComponents::selectTreeItems(m_treeCtrl1, tree_items,
|
||||
retrieveComponentConfig->getRoot(), retrieveComponentConfig->getRoot(), true);
|
||||
|
||||
for (std::map<SComponent*, wxTreeItemId>::iterator it = tree_items.begin();
|
||||
it != tree_items.end(); ++it)
|
||||
{
|
||||
m_treeCtrl1->Toggle(it->second);
|
||||
}
|
||||
|
||||
backupid = retrieveComponentConfig->getBackupid();
|
||||
componentConfigDir = retrieveComponentConfig->getComponentConfigDir();
|
||||
}
|
||||
}
|
||||
|
||||
void SelectRestoreComponents::onListBoxSelected(wxCommandEvent & event)
|
||||
{
|
||||
if (!canSelectBackup)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int sel = m_listBox1->GetSelection();
|
||||
if (sel >= 0)
|
||||
{
|
||||
while (retrievingBackupConfig
|
||||
&& retrieveComponentConfig.get()
|
||||
&& retrieveComponentConfig->IsAlive() )
|
||||
{
|
||||
Sleep(100);
|
||||
wxTheApp->SafeYield(NULL, false);
|
||||
}
|
||||
|
||||
m_treeCtrl1->DeleteAllItems();
|
||||
tree_components.clear();
|
||||
tree_items.clear();
|
||||
m_treeCtrl1->SetImageList(NULL);
|
||||
iconList->RemoveAll();
|
||||
|
||||
m_treeCtrl1->AddRoot(_("Loading..."));
|
||||
|
||||
retrieveComponentConfig.reset(new RetrieveComponentConfig);
|
||||
retrieveComponentConfig->reset(retrieveComponentBackups.getFileList()[sel].backupid);
|
||||
|
||||
retrieveComponentConfig->Run();
|
||||
retrievingBackupConfig = true;
|
||||
}
|
||||
}
|
||||
|
||||
void SelectRestoreComponents::onStartRestore(wxCommandEvent & event)
|
||||
{
|
||||
if (backupid == 0)
|
||||
{
|
||||
wxMessageBox(_("No backup was selected"), wxT("UrBackup"), wxOK | wxICON_ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
std::vector<SComponent> selected_components;
|
||||
|
||||
for (std::map<SComponent*, wxTreeItemId>::iterator it = tree_items.begin();
|
||||
it != tree_items.end(); ++it)
|
||||
{
|
||||
if (!it->first->is_root)
|
||||
{
|
||||
int state = m_treeCtrl1->GetItemState(it->second);
|
||||
if (state == 1)
|
||||
{
|
||||
selected_components.push_back(*it->first);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (selected_components.empty())
|
||||
{
|
||||
wxMessageBox(_("No components selected"), wxT("UrBackup"), wxOK | wxICON_ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
Close();
|
||||
|
||||
RestoreWindowsComponents* rwc = new RestoreWindowsComponents(NULL,
|
||||
backupid, selected_components, componentConfigDir);
|
||||
|
||||
wxTheApp->SetTopWindow(rwc);
|
||||
rwc->ShowModal();
|
||||
rwc->Destroy();
|
||||
}
|
||||
|
||||
void SelectRestoreComponents::evtOnTreeStateImageClick(wxTreeEvent & event)
|
||||
{
|
||||
SComponent* component = tree_components[event.GetItem()];
|
||||
|
||||
if (component == NULL
|
||||
|| retrieveComponentConfig.get()==NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
bool select = m_treeCtrl1->GetItemState(event.GetItem()) == 0;
|
||||
|
||||
SelectWindowsComponents::selectTreeItems(m_treeCtrl1, tree_items,
|
||||
retrieveComponentConfig->getRoot(), component, select);
|
||||
}
|
||||
|
||||
void SelectRestoreComponents::onCancel(wxCommandEvent & event)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
RetrieveComponentConfig::RetrieveComponentConfig()
|
||||
: wxThread(wxTHREAD_JOINABLE), success(false)
|
||||
{
|
||||
root.is_root = true;
|
||||
}
|
||||
|
||||
RetrieveComponentConfig::~RetrieveComponentConfig()
|
||||
{
|
||||
for (size_t i = 0; i < components.size(); ++i)
|
||||
{
|
||||
delete components[i];
|
||||
}
|
||||
|
||||
if (!componentConfigDir.empty())
|
||||
{
|
||||
wxFileName::Rmdir(componentConfigDir, wxPATH_RMDIR_RECURSIVE);
|
||||
}
|
||||
}
|
||||
|
||||
wxThread::ExitCode RetrieveComponentConfig::Entry()
|
||||
{
|
||||
wxMilliClock_t now = wxGetLocalTimeMillis();
|
||||
std::random_device rd;
|
||||
|
||||
componentConfigDir = wxFileName::GetTempDir().Append(wxString::Format(wxT("\\urb_win_comps_%llu_%lu"), now, rd()));
|
||||
if (!wxFileName::Mkdir(componentConfigDir))
|
||||
{
|
||||
componentConfigDir.clear();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
SPathMap path_map;
|
||||
path_map.source = "C:\\windows_components_config";
|
||||
path_map.target = componentConfigDir.ToStdString();
|
||||
|
||||
std::vector<SPathMap> path_maps;
|
||||
path_maps.push_back(path_map);
|
||||
|
||||
SStartRestore restore_info = Connector::startRestore("windows_components_config", backupid,
|
||||
path_maps, access_error, false, true, false);
|
||||
|
||||
if (!restore_info.ok)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
SConnection connection;
|
||||
bool restore_finished = false;
|
||||
while (!restore_finished)
|
||||
{
|
||||
Sleep(100);
|
||||
|
||||
SStatusDetails status = Connector::getStatusDetails(&connection);
|
||||
|
||||
if (status.ok)
|
||||
{
|
||||
for (size_t i = 0; i < status.finished_processes.size(); ++i)
|
||||
{
|
||||
if (status.finished_processes[i].id == restore_info.process_id)
|
||||
{
|
||||
restore_finished = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
std::string data = getFile((componentConfigDir + wxT("\\backupcom.xml")).ToStdWstring());
|
||||
|
||||
if (data.empty())
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
std::string info = getFile((componentConfigDir + wxT("\\info.json")).ToStdWstring());
|
||||
|
||||
if (info.empty())
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
wxDir dir(componentConfigDir);
|
||||
if (!dir.IsOpened())
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
std::vector<std::string> componentXmls;
|
||||
wxString filename;
|
||||
bool cont = dir.GetFirst(&filename);
|
||||
while (cont)
|
||||
{
|
||||
if ( filename != "backupcom.xml"
|
||||
&& filename != "info.json" )
|
||||
{
|
||||
componentXmls.push_back(getFile((componentConfigDir + wxT("\\") + filename).ToStdWstring()));
|
||||
}
|
||||
cont = dir.GetNext(&filename);
|
||||
}
|
||||
|
||||
Json::Value info_root;
|
||||
Json::Reader reader;
|
||||
if (!reader.parse(info, info_root, false))
|
||||
{
|
||||
return NULL;
|
||||
};
|
||||
|
||||
std::vector<SComponent> filter_except;
|
||||
try
|
||||
{
|
||||
Json::Value selected_components = info_root["selected_components"];
|
||||
|
||||
for (Json::ArrayIndex i = 0; i < selected_components.size(); ++i)
|
||||
{
|
||||
Json::Value compInfo = selected_components[i];
|
||||
|
||||
SComponent comp;
|
||||
HRESULT hr = IIDFromString(ConvertToUnicode(compInfo["writerId"].asString()).c_str(),
|
||||
&comp.writerId);
|
||||
|
||||
comp.logicalPath = compInfo["logicalPath"].asString();
|
||||
comp.name = compInfo["componentName"].asString();
|
||||
|
||||
filter_except.push_back(comp);
|
||||
}
|
||||
}
|
||||
catch (std::runtime_error&)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
if (!WindowsComponentReader::readComponents(data, componentXmls, filter_except, root, components, errmsg))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
success = true;
|
||||
|
||||
return ExitCode();
|
||||
}
|
||||
|
||||
wxString accessErrorToString(Connector::EAccessError access_error)
|
||||
{
|
||||
switch (access_error)
|
||||
{
|
||||
case Connector::EAccessError_Ok:
|
||||
return _("Unknown access error");
|
||||
case Connector::EAccessError_NoServer:
|
||||
return _("Currently not connected to a backup server. No backup server found.");
|
||||
case Connector::EAccessError_NoTokens:
|
||||
return _("No file backup access tokens found. Did you run a file backup yet?");
|
||||
}
|
||||
}
|
||||
95
SelectRestoreWindowsComponents.h
Normal file
95
SelectRestoreWindowsComponents.h
Normal file
@ -0,0 +1,95 @@
|
||||
#pragma once
|
||||
|
||||
#include "gui/GUIRestoreWindowsComponents.h"
|
||||
#include <wx/timer.h>
|
||||
#include <wx/thread.h>
|
||||
#include "Connector.h"
|
||||
#include "SelectWindowsComponents.h"
|
||||
|
||||
wxString accessErrorToString(Connector::EAccessError access_error);
|
||||
|
||||
class RetrieveComponentBackups : public wxThread
|
||||
{
|
||||
public:
|
||||
RetrieveComponentBackups();
|
||||
~RetrieveComponentBackups();
|
||||
|
||||
bool hasSuccess() { return success; }
|
||||
std::vector<SBackupFile>& getFileList() { return filelist; }
|
||||
Connector::EAccessError getAccessError() {
|
||||
return access_error;
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual ExitCode Entry();
|
||||
|
||||
private:
|
||||
Connector::EAccessError access_error;
|
||||
bool success;
|
||||
std::vector<SBackupFile> filelist;
|
||||
};
|
||||
|
||||
class RetrieveComponentConfig : public wxThread
|
||||
{
|
||||
public:
|
||||
RetrieveComponentConfig();
|
||||
~RetrieveComponentConfig();
|
||||
|
||||
void reset(int pbackupid) {
|
||||
backupid = pbackupid;
|
||||
success = false; }
|
||||
bool hasSuccess() { return success; }
|
||||
Connector::EAccessError getAccessError() {
|
||||
return access_error;
|
||||
}
|
||||
|
||||
SComponent* getRoot() { return &root; }
|
||||
|
||||
std::string getErrMsg() { return errmsg; }
|
||||
|
||||
wxString getComponentConfigDir() {
|
||||
return componentConfigDir;
|
||||
}
|
||||
|
||||
int getBackupid() { return backupid; }
|
||||
|
||||
protected:
|
||||
virtual ExitCode Entry();
|
||||
|
||||
private:
|
||||
int backupid;
|
||||
Connector::EAccessError access_error;
|
||||
bool success;
|
||||
SComponent root;
|
||||
std::vector<SComponent*> components;
|
||||
std::string errmsg;
|
||||
wxString componentConfigDir;
|
||||
};
|
||||
|
||||
class SelectRestoreComponents : public GUISelectRestoreComponents, public wxTimer
|
||||
{
|
||||
public:
|
||||
SelectRestoreComponents(wxWindow* parent);
|
||||
|
||||
protected:
|
||||
virtual void Notify(void);
|
||||
virtual void onListBoxSelected(wxCommandEvent& event);
|
||||
virtual void onStartRestore(wxCommandEvent& event);
|
||||
virtual void evtOnTreeStateImageClick(wxTreeEvent& event);
|
||||
virtual void onCancel(wxCommandEvent& event);
|
||||
|
||||
private:
|
||||
RetrieveComponentBackups retrieveComponentBackups;
|
||||
std::auto_ptr<RetrieveComponentConfig> retrieveComponentConfig;
|
||||
wxImageList* iconList;
|
||||
wxImageList* selectList;
|
||||
|
||||
bool canSelectBackup;
|
||||
bool retrievingBackupConfig;
|
||||
|
||||
std::map<wxTreeItemId, SComponent*> tree_components;
|
||||
std::map<SComponent*, wxTreeItemId> tree_items;
|
||||
|
||||
wxString componentConfigDir;
|
||||
int backupid;
|
||||
};
|
||||
@ -15,84 +15,6 @@ extern wxString res_path;
|
||||
extern wxString ico_ext;
|
||||
extern wxBitmapType ico_type;
|
||||
|
||||
namespace
|
||||
{
|
||||
template<typename T>
|
||||
class ReleaseIUnknown
|
||||
{
|
||||
public:
|
||||
ReleaseIUnknown(T*& unknown)
|
||||
: unknown(unknown) {}
|
||||
|
||||
~ReleaseIUnknown() {
|
||||
if (unknown != NULL) {
|
||||
unknown->Release();
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
T*& unknown;
|
||||
};
|
||||
|
||||
#define TOKENPASTE2(x, y) x ## y
|
||||
#define TOKENPASTE(x, y) TOKENPASTE2(x, y)
|
||||
|
||||
#define SCOPED_DECLARE_RELEASE_IUNKNOWN(t, x) t* x = NULL; ReleaseIUnknown<t> TOKENPASTE(ReleaseIUnknown_,__LINE__) (x)
|
||||
|
||||
class FreeBStr
|
||||
{
|
||||
public:
|
||||
FreeBStr(BSTR& bstr)
|
||||
: bstr(bstr)
|
||||
{}
|
||||
|
||||
~FreeBStr() {
|
||||
if (bstr != NULL) {
|
||||
SysFreeString(bstr);
|
||||
}
|
||||
}
|
||||
private:
|
||||
BSTR bstr;
|
||||
};
|
||||
|
||||
#define SCOPED_DECLARE_FREE_BSTR(x) BSTR x = NULL; FreeBStr TOKENPASTE(FreeBStr_, __LINE__) (x)
|
||||
|
||||
class FreeComponentInfo
|
||||
{
|
||||
public:
|
||||
FreeComponentInfo(IVssWMComponent* wmComponent, PVSSCOMPONENTINFO& componentInfo)
|
||||
: wmComponent(wmComponent), componentInfo(componentInfo)
|
||||
{}
|
||||
|
||||
~FreeComponentInfo() {
|
||||
if (wmComponent != NULL && componentInfo != NULL) {
|
||||
wmComponent->FreeComponentInfo(componentInfo);
|
||||
}
|
||||
}
|
||||
private:
|
||||
IVssWMComponent* wmComponent;
|
||||
PVSSCOMPONENTINFO componentInfo;
|
||||
};
|
||||
|
||||
#define SCOPED_DECLARE_FREE_COMPONENTINFO(c, i) PVSSCOMPONENTINFO i = NULL; FreeComponentInfo TOKENPASTE(FreeComponentInfo_,__LINE__) (c, i);
|
||||
|
||||
std::string convert(VSS_ID id)
|
||||
{
|
||||
WCHAR GuidStr[128] = {};
|
||||
int rc = StringFromGUID2(id, GuidStr, 128);
|
||||
if (rc > 0)
|
||||
{
|
||||
return wxString(std::wstring(GuidStr, rc - 1)).ToStdString();
|
||||
}
|
||||
return std::string();
|
||||
}
|
||||
|
||||
std::string ConvertFromWchar(std::wstring str)
|
||||
{
|
||||
return ConvertToUTF8(str);
|
||||
}
|
||||
}
|
||||
|
||||
SelectWindowsComponents::SelectWindowsComponents(wxWindow * parent)
|
||||
: GUIWindowsComponents(parent)
|
||||
{
|
||||
@ -902,7 +824,7 @@ wxThread::ExitCode WindowsComponentReader::Entry()
|
||||
return ExitCode();
|
||||
}
|
||||
|
||||
std::string WindowsComponentReader::GetErrorHResErrStr(HRESULT res)
|
||||
std::string GetErrorHResErrStr(HRESULT res)
|
||||
{
|
||||
#define CASE_VSS_ERROR(x) case x: return #x
|
||||
switch (res)
|
||||
|
||||
@ -29,6 +29,8 @@ struct SComponent
|
||||
std::vector<SComponent*> dependencies;
|
||||
};
|
||||
|
||||
std::string GetErrorHResErrStr(HRESULT res);
|
||||
|
||||
class WindowsComponentReader : public wxThread
|
||||
{
|
||||
public:
|
||||
@ -40,13 +42,12 @@ public:
|
||||
static bool readComponents(const std::string& restoreXml, const std::vector<std::string>& componentXmls,
|
||||
const std::vector<SComponent>& filter_except, SComponent& root, std::vector<SComponent*>& components, std::string& errmsg);
|
||||
|
||||
static bool wait_for(IVssAsync *vsasync, const std::string& error_prefix, std::string& errmsg);
|
||||
|
||||
protected:
|
||||
virtual ExitCode Entry();
|
||||
|
||||
private:
|
||||
static std::string GetErrorHResErrStr(HRESULT res);
|
||||
|
||||
static bool wait_for(IVssAsync *vsasync, const std::string& error_prefix, std::string& errmsg);
|
||||
|
||||
std::string errmsg;
|
||||
SComponent root;
|
||||
@ -92,4 +93,82 @@ private:
|
||||
|
||||
std::map<wxTreeItemId, SComponent*> tree_components;
|
||||
std::map<SComponent*, wxTreeItemId> tree_items;
|
||||
};
|
||||
};
|
||||
|
||||
namespace
|
||||
{
|
||||
template<typename T>
|
||||
class ReleaseIUnknown
|
||||
{
|
||||
public:
|
||||
ReleaseIUnknown(T*& unknown)
|
||||
: unknown(unknown) {}
|
||||
|
||||
~ReleaseIUnknown() {
|
||||
if (unknown != NULL) {
|
||||
unknown->Release();
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
T*& unknown;
|
||||
};
|
||||
|
||||
#define TOKENPASTE2(x, y) x ## y
|
||||
#define TOKENPASTE(x, y) TOKENPASTE2(x, y)
|
||||
|
||||
#define SCOPED_DECLARE_RELEASE_IUNKNOWN(t, x) t* x = NULL; ReleaseIUnknown<t> TOKENPASTE(ReleaseIUnknown_,__LINE__) (x)
|
||||
|
||||
class FreeBStr
|
||||
{
|
||||
public:
|
||||
FreeBStr(BSTR& bstr)
|
||||
: bstr(bstr)
|
||||
{}
|
||||
|
||||
~FreeBStr() {
|
||||
if (bstr != NULL) {
|
||||
SysFreeString(bstr);
|
||||
}
|
||||
}
|
||||
private:
|
||||
BSTR bstr;
|
||||
};
|
||||
|
||||
#define SCOPED_DECLARE_FREE_BSTR(x) BSTR x = NULL; FreeBStr TOKENPASTE(FreeBStr_, __LINE__) (x)
|
||||
|
||||
class FreeComponentInfo
|
||||
{
|
||||
public:
|
||||
FreeComponentInfo(IVssWMComponent* wmComponent, PVSSCOMPONENTINFO& componentInfo)
|
||||
: wmComponent(wmComponent), componentInfo(componentInfo)
|
||||
{}
|
||||
|
||||
~FreeComponentInfo() {
|
||||
if (wmComponent != NULL && componentInfo != NULL) {
|
||||
wmComponent->FreeComponentInfo(componentInfo);
|
||||
}
|
||||
}
|
||||
private:
|
||||
IVssWMComponent* wmComponent;
|
||||
PVSSCOMPONENTINFO componentInfo;
|
||||
};
|
||||
|
||||
#define SCOPED_DECLARE_FREE_COMPONENTINFO(c, i) PVSSCOMPONENTINFO i = NULL; FreeComponentInfo TOKENPASTE(FreeComponentInfo_,__LINE__) (c, i);
|
||||
|
||||
std::string convert(VSS_ID id)
|
||||
{
|
||||
WCHAR GuidStr[128] = {};
|
||||
int rc = StringFromGUID2(id, GuidStr, 128);
|
||||
if (rc > 0)
|
||||
{
|
||||
return wxString(std::wstring(GuidStr, rc - 1)).ToStdString();
|
||||
}
|
||||
return std::string();
|
||||
}
|
||||
|
||||
std::string ConvertFromWchar(std::wstring str)
|
||||
{
|
||||
return ConvertToUTF8(str);
|
||||
}
|
||||
}
|
||||
@ -31,3 +31,11 @@ wxString trans_2( wxString str, const wxString& ins1, const wxString& ins2 )
|
||||
return str;
|
||||
}
|
||||
|
||||
wxString trans_3(wxString str, const wxString & ins1, const wxString & ins2, const wxString & ins3)
|
||||
{
|
||||
str.Replace(wxT("_1_"), ins1);
|
||||
str.Replace(wxT("_2_"), ins2);
|
||||
str.Replace(wxT("_3_"), ins3);
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
#include <wx/string.h>
|
||||
|
||||
wxString trans_1(wxString str, const wxString& ins1);
|
||||
wxString trans_2(wxString str, const wxString& ins1, const wxString& ins2);
|
||||
wxString trans_2(wxString str, const wxString& ins1, const wxString& ins2);
|
||||
wxString trans_3(wxString str, const wxString& ins1, const wxString& ins2, const wxString& ins3);
|
||||
@ -220,6 +220,7 @@
|
||||
<ClCompile Include="Logs.cpp" />
|
||||
<ClCompile Include="main.cpp" />
|
||||
<ClCompile Include="RestoreWindowsComponents.cpp" />
|
||||
<ClCompile Include="SelectRestoreWindowsComponents.cpp" />
|
||||
<ClCompile Include="SelectWindowsComponents.cpp" />
|
||||
<ClCompile Include="Settings.cpp" />
|
||||
<ClCompile Include="SetupWizard.cpp" />
|
||||
@ -246,6 +247,7 @@
|
||||
<ClInclude Include="main.h" />
|
||||
<ClInclude Include="resource.h" />
|
||||
<ClInclude Include="RestoreWindowsComponents.h" />
|
||||
<ClInclude Include="SelectRestoreWindowsComponents.h" />
|
||||
<ClInclude Include="SelectWindowsComponents.h" />
|
||||
<ClInclude Include="Settings.h" />
|
||||
<ClInclude Include="SetupWizard.h" />
|
||||
@ -256,6 +258,7 @@
|
||||
<ClInclude Include="TranslationHelper.h" />
|
||||
<ClInclude Include="TrayIcon.h" />
|
||||
<ClInclude Include="gui\GUI.h" />
|
||||
<ClInclude Include="types.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="icon1.ico" />
|
||||
|
||||
@ -87,6 +87,9 @@
|
||||
<ClCompile Include="gui\GUIRestoreWindowsComponents.cpp">
|
||||
<Filter>GUI</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SelectRestoreWindowsComponents.cpp">
|
||||
<Filter>Quelldateien</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="RestoreWindowsComponents.cpp">
|
||||
<Filter>Quelldateien</Filter>
|
||||
</ClCompile>
|
||||
@ -161,9 +164,15 @@
|
||||
<ClInclude Include="gui\GUIRestoreWindowsComponents.h">
|
||||
<Filter>GUI</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SelectRestoreWindowsComponents.h">
|
||||
<Filter>Headerdateien</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="RestoreWindowsComponents.h">
|
||||
<Filter>Headerdateien</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="types.h">
|
||||
<Filter>Headerdateien</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="icon1.ico">
|
||||
|
||||
@ -65,3 +65,56 @@ GUISelectRestoreComponents::~GUISelectRestoreComponents()
|
||||
m_button2->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GUISelectRestoreComponents::onCancel ), NULL, this );
|
||||
|
||||
}
|
||||
|
||||
GUIRestoreComponents::GUIRestoreComponents( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
|
||||
{
|
||||
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
|
||||
|
||||
wxBoxSizer* bSizer4;
|
||||
bSizer4 = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
m_staticText1 = new wxStaticText( this, wxID_ANY, _("Starting restore operation..."), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText1->Wrap( -1 );
|
||||
bSizer4->Add( m_staticText1, 0, wxALL, 5 );
|
||||
|
||||
m_staticText2 = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText2->Wrap( -1 );
|
||||
bSizer4->Add( m_staticText2, 0, wxALL, 5 );
|
||||
|
||||
m_gauge1 = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxDefaultSize, wxGA_HORIZONTAL );
|
||||
m_gauge1->SetValue( 0 );
|
||||
bSizer4->Add( m_gauge1, 0, wxALL|wxEXPAND, 5 );
|
||||
|
||||
m_textCtrl1 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY );
|
||||
bSizer4->Add( m_textCtrl1, 20, wxALL|wxEXPAND, 5 );
|
||||
|
||||
wxBoxSizer* bSizer5;
|
||||
bSizer5 = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
|
||||
bSizer5->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||
|
||||
m_button3 = new wxButton( this, wxID_ANY, _("OK"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_button3->Enable( false );
|
||||
|
||||
bSizer5->Add( m_button3, 0, wxALL, 5 );
|
||||
|
||||
|
||||
bSizer4->Add( bSizer5, 1, wxEXPAND, 5 );
|
||||
|
||||
|
||||
this->SetSizer( bSizer4 );
|
||||
this->Layout();
|
||||
|
||||
this->Centre( wxBOTH );
|
||||
|
||||
// Connect Events
|
||||
m_button3->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GUIRestoreComponents::onOkClick ), NULL, this );
|
||||
}
|
||||
|
||||
GUIRestoreComponents::~GUIRestoreComponents()
|
||||
{
|
||||
// Disconnect Events
|
||||
m_button3->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GUIRestoreComponents::onOkClick ), NULL, this );
|
||||
|
||||
}
|
||||
|
||||
@ -21,6 +21,9 @@
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/dialog.h>
|
||||
#include <wx/stattext.h>
|
||||
#include <wx/gauge.h>
|
||||
#include <wx/textctrl.h>
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@ -52,4 +55,29 @@ class GUISelectRestoreComponents : public wxDialog
|
||||
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/// Class GUIRestoreComponents
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class GUIRestoreComponents : public wxDialog
|
||||
{
|
||||
private:
|
||||
|
||||
protected:
|
||||
wxStaticText* m_staticText1;
|
||||
wxStaticText* m_staticText2;
|
||||
wxGauge* m_gauge1;
|
||||
wxTextCtrl* m_textCtrl1;
|
||||
wxButton* m_button3;
|
||||
|
||||
// Virtual event handlers, overide them in your derived class
|
||||
virtual void onOkClick( wxCommandEvent& event ) { event.Skip(); }
|
||||
|
||||
|
||||
public:
|
||||
|
||||
GUIRestoreComponents( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Restoring Windows components"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 836,570 ), long style = wxDEFAULT_DIALOG_STYLE );
|
||||
~GUIRestoreComponents();
|
||||
|
||||
};
|
||||
|
||||
#endif //__GUIRESTOREWINDOWSCOMPONENTS_H__
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
<property name="ui_table">UI</property>
|
||||
<property name="use_enum">0</property>
|
||||
<property name="use_microsoft_bom">0</property>
|
||||
<object class="Dialog" expanded="1">
|
||||
<object class="Dialog" expanded="0">
|
||||
<property name="aui_managed">0</property>
|
||||
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
|
||||
<property name="bg"></property>
|
||||
@ -88,25 +88,25 @@
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<object class="wxBoxSizer" expanded="0">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizer1</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">20</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<object class="wxBoxSizer" expanded="0">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizer2</property>
|
||||
<property name="orient">wxHORIZONTAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxEXPAND</property>
|
||||
<property name="proportion">15</property>
|
||||
<object class="wxListBox" expanded="1">
|
||||
<object class="wxListBox" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
@ -190,11 +190,11 @@
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxEXPAND</property>
|
||||
<property name="proportion">85</property>
|
||||
<object class="wxTreeCtrl" expanded="1">
|
||||
<object class="wxTreeCtrl" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
@ -294,30 +294,30 @@
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<object class="wxBoxSizer" expanded="0">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizer3</property>
|
||||
<property name="orient">wxHORIZONTAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="spacer" expanded="1">
|
||||
<object class="spacer" expanded="0">
|
||||
<property name="height">0</property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="width">0</property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxButton" expanded="1">
|
||||
<object class="wxButton" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
@ -401,11 +401,11 @@
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxButton" expanded="1">
|
||||
<object class="wxButton" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
@ -493,5 +493,527 @@
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="Dialog" expanded="1">
|
||||
<property name="aui_managed">0</property>
|
||||
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
|
||||
<property name="bg"></property>
|
||||
<property name="center">wxBOTH</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="event_handler">impl_virtual</property>
|
||||
<property name="extra_style"></property>
|
||||
<property name="fg"></property>
|
||||
<property name="font"></property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">GUIRestoreComponents</property>
|
||||
<property name="pos"></property>
|
||||
<property name="size">836,570</property>
|
||||
<property name="style">wxDEFAULT_DIALOG_STYLE</property>
|
||||
<property name="subclass"></property>
|
||||
<property name="title">Restoring Windows components</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnActivate"></event>
|
||||
<event name="OnActivateApp"></event>
|
||||
<event name="OnAuiFindManager"></event>
|
||||
<event name="OnAuiPaneButton"></event>
|
||||
<event name="OnAuiPaneClose"></event>
|
||||
<event name="OnAuiPaneMaximize"></event>
|
||||
<event name="OnAuiPaneRestore"></event>
|
||||
<event name="OnAuiRender"></event>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnClose"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnHibernate"></event>
|
||||
<event name="OnIconize"></event>
|
||||
<event name="OnIdle"></event>
|
||||
<event name="OnInitDialog"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizer4</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" 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="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="default_pane">0</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="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Starting restore operation...</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">m_staticText1</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="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" 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="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="default_pane">0</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="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label"></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">m_staticText2</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="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxGauge" 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="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="default_pane">0</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="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</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">m_gauge1</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="range">100</property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style">wxGA_HORIZONTAL</property>
|
||||
<property name="subclass"></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="value">0</property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxEXPAND</property>
|
||||
<property name="proportion">20</property>
|
||||
<object class="wxTextCtrl" 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="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="default_pane">0</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="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="maxlength"></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">m_textCtrl1</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="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style">wxTE_MULTILINE|wxTE_READONLY</property>
|
||||
<property name="subclass"></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="value"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnText"></event>
|
||||
<event name="OnTextEnter"></event>
|
||||
<event name="OnTextMaxLen"></event>
|
||||
<event name="OnTextURL"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizer5</property>
|
||||
<property name="orient">wxHORIZONTAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="spacer" expanded="1">
|
||||
<property name="height">0</property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="width">0</property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</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="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="default">0</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">0</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">OK</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">m_button3</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="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></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">onOkClick</event>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</wxFormBuilder_Project>
|
||||
|
||||
2
main.cpp
2
main.cpp
@ -40,7 +40,7 @@
|
||||
|
||||
#ifdef _WIN32
|
||||
#include "SelectWindowsComponents.h"
|
||||
#include "RestoreWindowsComponents.h"
|
||||
#include "SelectRestoreWindowsComponents.h"
|
||||
#endif
|
||||
|
||||
#include <wx/apptrait.h>
|
||||
|
||||
@ -1149,6 +1149,32 @@ unsigned long hexToULong(const std::string &data)
|
||||
return return_value;
|
||||
}
|
||||
|
||||
std::string byteToHex(unsigned char ch)
|
||||
{
|
||||
std::string r;
|
||||
r.resize(2);
|
||||
r[0] = hex_array[ch / 16];
|
||||
r[1] = hex_array[ch % 16];
|
||||
return r;
|
||||
}
|
||||
|
||||
std::string bytesToHex(const unsigned char *b, size_t bsize)
|
||||
{
|
||||
std::string r;
|
||||
r.reserve(bsize * 2);
|
||||
for (size_t i = 0; i<bsize; ++i)
|
||||
{
|
||||
r += byteToHex(b[i]);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
std::string bytesToHex(const std::string& data)
|
||||
{
|
||||
return bytesToHex(reinterpret_cast<const unsigned char*>(data.data()), data.size());
|
||||
}
|
||||
|
||||
|
||||
|
||||
string htmldecode(string str, bool html, char xc)
|
||||
{
|
||||
|
||||
226
stringtools.h
226
stringtools.h
@ -22,6 +22,7 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include "types.h"
|
||||
|
||||
std::string getafter(const std::string &str,const std::string &data);
|
||||
std::string getafterinc(const std::string &str,const std::string &data);
|
||||
@ -92,6 +93,9 @@ std::wstring UnescapeSQLString(std::wstring pStr);
|
||||
void ParseParamStrHttp(const std::string &pStr, std::map<std::string, std::string> *pMap);
|
||||
std::string FormatTime(int timeins);
|
||||
bool IsHex(const std::string &str);
|
||||
std::string byteToHex(unsigned char ch);
|
||||
std::string bytesToHex(const unsigned char *b, size_t bsize);
|
||||
std::string bytesToHex(const std::string& data);
|
||||
unsigned long hexToULong(const std::string &data);
|
||||
std::wstring htmldecode(std::string str, bool html=true, char xc='%');
|
||||
bool checkhtml(const std::string &str);
|
||||
@ -112,4 +116,226 @@ void replaceNonAlphaNumeric(std::string &str, char rch);
|
||||
std::string conv_filename(std::string fn);
|
||||
std::string EscapeParamString(const std::string &pStr);
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
bool is_big_endian(void)
|
||||
{
|
||||
union {
|
||||
unsigned int i;
|
||||
char c[4];
|
||||
} bint = { 0x01020304 };
|
||||
|
||||
return bint.c[0] == 1;
|
||||
}
|
||||
|
||||
unsigned int endian_swap(unsigned int x)
|
||||
{
|
||||
return (x >> 24) |
|
||||
((x << 8) & 0x00FF0000) |
|
||||
((x >> 8) & 0x0000FF00) |
|
||||
(x << 24);
|
||||
}
|
||||
|
||||
unsigned short endian_swap(unsigned short x)
|
||||
{
|
||||
return x = (x >> 8) |
|
||||
(x << 8);
|
||||
}
|
||||
|
||||
std::string endian_swap_utf16(std::string str)
|
||||
{
|
||||
for (size_t i = 0; i<str.size(); i += 2)
|
||||
{
|
||||
unsigned short *t = (unsigned short*)&str[i];
|
||||
*t = endian_swap(*t);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
unsigned long long int endian_swap(unsigned long long int x)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
return (x >> 56) |
|
||||
((x << 40) & 0x00FF000000000000) |
|
||||
((x << 24) & 0x0000FF0000000000) |
|
||||
((x << 8) & 0x000000FF00000000) |
|
||||
((x >> 8) & 0x00000000FF000000) |
|
||||
((x >> 24) & 0x0000000000FF0000) |
|
||||
((x >> 40) & 0x000000000000FF00) |
|
||||
(x << 56);
|
||||
#else
|
||||
return (x >> 56) |
|
||||
((x << 40) & 0x00FF000000000000LLU) |
|
||||
((x << 24) & 0x0000FF0000000000LLU) |
|
||||
((x << 8) & 0x000000FF00000000LLU) |
|
||||
((x >> 8) & 0x00000000FF000000LLU) |
|
||||
((x >> 24) & 0x0000000000FF0000LLU) |
|
||||
((x >> 40) & 0x000000000000FF00LLU) |
|
||||
(x << 56);
|
||||
#endif
|
||||
}
|
||||
|
||||
unsigned int little_endian(unsigned int x)
|
||||
{
|
||||
if (is_big_endian())
|
||||
{
|
||||
return endian_swap(x);
|
||||
}
|
||||
else
|
||||
{
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned short little_endian(unsigned short x)
|
||||
{
|
||||
if (is_big_endian())
|
||||
{
|
||||
return endian_swap(x);
|
||||
}
|
||||
else
|
||||
{
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
int little_endian(int x)
|
||||
{
|
||||
if (is_big_endian())
|
||||
{
|
||||
return static_cast<int>(endian_swap(static_cast<unsigned int>(x)));
|
||||
}
|
||||
else
|
||||
{
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
uint64 little_endian(uint64 x)
|
||||
{
|
||||
if (is_big_endian())
|
||||
{
|
||||
return endian_swap(x);
|
||||
}
|
||||
else
|
||||
{
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
int64 little_endian(int64 x)
|
||||
{
|
||||
if (is_big_endian())
|
||||
{
|
||||
return static_cast<int64>(endian_swap(static_cast<uint64>(x)));
|
||||
}
|
||||
else
|
||||
{
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
float little_endian(float x)
|
||||
{
|
||||
if (is_big_endian())
|
||||
{
|
||||
unsigned int* ptr = reinterpret_cast<unsigned int*>(&x);
|
||||
unsigned int ret = endian_swap(*ptr);
|
||||
return *reinterpret_cast<float*>(&ret);
|
||||
}
|
||||
else
|
||||
{
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int big_endian(unsigned int x)
|
||||
{
|
||||
if (!is_big_endian())
|
||||
{
|
||||
return endian_swap(x);
|
||||
}
|
||||
else
|
||||
{
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned short big_endian(unsigned short x)
|
||||
{
|
||||
if (!is_big_endian())
|
||||
{
|
||||
return endian_swap(x);
|
||||
}
|
||||
else
|
||||
{
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
int big_endian(int x)
|
||||
{
|
||||
if (!is_big_endian())
|
||||
{
|
||||
return static_cast<int>(endian_swap(static_cast<unsigned int>(x)));
|
||||
}
|
||||
else
|
||||
{
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
uint64 big_endian(uint64 x)
|
||||
{
|
||||
if (!is_big_endian())
|
||||
{
|
||||
return endian_swap(x);
|
||||
}
|
||||
else
|
||||
{
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
int64 big_endian(int64 x)
|
||||
{
|
||||
if (!is_big_endian())
|
||||
{
|
||||
return static_cast<int64>(endian_swap(static_cast<uint64>(x)));
|
||||
}
|
||||
else
|
||||
{
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
float big_endian(float x)
|
||||
{
|
||||
if (!is_big_endian())
|
||||
{
|
||||
unsigned int* ptr = reinterpret_cast<unsigned int*>(&x);
|
||||
unsigned int ret = endian_swap(*ptr);
|
||||
return *reinterpret_cast<float*>(&ret);
|
||||
}
|
||||
else
|
||||
{
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
std::string big_endian_utf16(std::string str)
|
||||
{
|
||||
if (!is_big_endian())
|
||||
{
|
||||
return endian_swap_utf16(str);
|
||||
}
|
||||
else
|
||||
{
|
||||
return str;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
23
types.h
Normal file
23
types.h
Normal file
@ -0,0 +1,23 @@
|
||||
#pragma once
|
||||
|
||||
#ifdef __linux__
|
||||
typedef long long int __int64;
|
||||
typedef unsigned long long int uint64;
|
||||
#elif _WIN32
|
||||
typedef unsigned __int64 uint64;
|
||||
#else
|
||||
typedef long long int __int64;
|
||||
typedef unsigned long long int uint64;
|
||||
#endif
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
||||
|
||||
typedef __int64 int64;
|
||||
typedef unsigned char uchar;
|
||||
typedef int _i32;
|
||||
typedef __int64 _i64;
|
||||
typedef unsigned int _u32;
|
||||
typedef unsigned short _u16;
|
||||
typedef short _i16;
|
||||
Loading…
Reference in New Issue
Block a user