diff --git a/CMakeLists.txt b/CMakeLists.txt index 4522b6f3..a1535c02 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -125,13 +125,13 @@ list(APPEND SOURCE_LIST ${SOURCEDIR}/gui/ReorderFieldsDialog.cpp ${SOURCEDIR}/gui/RestoreFrame.cpp ${SOURCEDIR}/gui/ServerRegistrationDialog.cpp + ${SOURCEDIR}/gui/ServiceBaseFrame.cpp ${SOURCEDIR}/gui/ShutdownStartupBaseFrame.cpp ${SOURCEDIR}/gui/ShutdownFrame.cpp ${SOURCEDIR}/gui/SimpleHtmlFrame.cpp ${SOURCEDIR}/gui/StatementHistoryDialog.cpp ${SOURCEDIR}/gui/StartupFrame.cpp ${SOURCEDIR}/gui/StyleGuide.cpp - ${SOURCEDIR}/gui/ThreadBaseFrame.cpp ${SOURCEDIR}/gui/UserDialog.cpp ${SOURCEDIR}/gui/UsernamePasswordDialog.cpp ${SOURCEDIR}/logger.cpp @@ -242,13 +242,13 @@ list(APPEND HEADER_LIST ${SOURCEDIR}/gui/ReorderFieldsDialog.h ${SOURCEDIR}/gui/RestoreFrame.h ${SOURCEDIR}/gui/ServerRegistrationDialog.h + ${SOURCEDIR}/gui/ServiceBaseFrame.h ${SOURCEDIR}/gui/ShutdownStartupBaseFrame.h ${SOURCEDIR}/gui/ShutdownFrame.h ${SOURCEDIR}/gui/SimpleHtmlFrame.h ${SOURCEDIR}/gui/StatementHistoryDialog.h ${SOURCEDIR}/gui/StartupFrame.h ${SOURCEDIR}/gui/StyleGuide.h - ${SOURCEDIR}/gui/ThreadBaseFrame.h ${SOURCEDIR}/gui/UserDialog.h ${SOURCEDIR}/gui/UsernamePasswordDialog.h ${SOURCEDIR}/Isaac.h diff --git a/GNUmakefile b/GNUmakefile index b80600e6..332c59a9 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -113,13 +113,13 @@ FLAMEROBIN_OBJECTS = \ flamerobin_ReorderFieldsDialog.o \ flamerobin_RestoreFrame.o \ flamerobin_ServerRegistrationDialog.o \ + flamerobin_ServiceBaseFrame.o \ flamerobin_ShutdownStartupBaseFrame.o \ flamerobin_ShutdownFrame.o \ flamerobin_SimpleHtmlFrame.o \ flamerobin_StatementHistoryDialog.o \ flamerobin_StartupFrame.o \ flamerobin_StyleGuide.o \ - flamerobin_ThreadBaseFrame.o \ flamerobin_UserDialog.o \ flamerobin_UsernamePasswordDialog.o \ flamerobin_logger.o \ @@ -422,6 +422,9 @@ flamerobin_RestoreFrame.o: ./src/gui/RestoreFrame.cpp flamerobin_ServerRegistrationDialog.o: ./src/gui/ServerRegistrationDialog.cpp $(CXX) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(CPPDEPS) $< +flamerobin_ServiceBaseFrame.o: ./${SOURCEDIR}/gui/ServiceBaseFrame.cpp + $(CXX) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(CPPDEPS) $< + flamerobin_ShutdownStartupBaseFrame.o: ./${SOURCEDIR}/gui/ShutdownStartupBaseFrame.cpp $(CXX) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(CPPDEPS) $< @@ -440,9 +443,6 @@ flamerobin_StartupFrame.o: ./${SOURCEDIR}/gui/StartupFrame.cpp flamerobin_StyleGuide.o: ./src/gui/StyleGuide.cpp $(CXX) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(CPPDEPS) $< -flamerobin_ThreadBaseFrame.o: ./${SOURCEDIR}/gui/ThreadBaseFrame.cpp - $(CXX) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(CPPDEPS) $< - flamerobin_UserDialog.o: ./src/gui/UserDialog.cpp $(CXX) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(CPPDEPS) $< diff --git a/Makefile.in b/Makefile.in index 58f62385..9be27c02 100644 --- a/Makefile.in +++ b/Makefile.in @@ -107,13 +107,13 @@ FLAMEROBIN_OBJECTS = \ flamerobin_ReorderFieldsDialog.o \ flamerobin_RestoreFrame.o \ flamerobin_ServerRegistrationDialog.o \ + flamerobin_ServiceBaseFrame.o \ flamerobin_ShutdownStartupBaseFrame.o \ flamerobin_ShutdownFrame.o \ flamerobin_SimpleHtmlFrame.o \ flamerobin_StatementHistoryDialog.o \ flamerobin_StartupFrame.o \ flamerobin_StyleGuide.o \ - flamerobin_ThreadBaseFrame.o \ flamerobin_UserDialog.o \ flamerobin_UsernamePasswordDialog.o \ flamerobin_logger.o \ @@ -515,6 +515,9 @@ flamerobin_RestoreFrame.o: $(srcdir)/src/gui/RestoreFrame.cpp $(FLAMEROBIN_ODEP) flamerobin_ServerRegistrationDialog.o: $(srcdir)/src/gui/ServerRegistrationDialog.cpp $(FLAMEROBIN_ODEP) $(CXXC) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(srcdir)/src/gui/ServerRegistrationDialog.cpp +flamerobin_ServiceBaseFrame.o: $(srcdir)/${SOURCEDIR}/gui/ServiceBaseFrame.cpp $(FLAMEROBIN_ODEP) + $(CXXC) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(srcdir)/${SOURCEDIR}/gui/ServiceBaseFrame.cpp + flamerobin_ShutdownStartupBaseFrame.o: $(srcdir)/${SOURCEDIR}/gui/ShutdownStartupBaseFrame.cpp $(FLAMEROBIN_ODEP) $(CXXC) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(srcdir)/${SOURCEDIR}/gui/ShutdownStartupBaseFrame.cpp @@ -533,9 +536,6 @@ flamerobin_StartupFrame.o: $(srcdir)/${SOURCEDIR}/gui/StartupFrame.cpp $(FLAMERO flamerobin_StyleGuide.o: $(srcdir)/src/gui/StyleGuide.cpp $(FLAMEROBIN_ODEP) $(CXXC) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(srcdir)/src/gui/StyleGuide.cpp -flamerobin_ThreadBaseFrame.o: $(srcdir)/${SOURCEDIR}/gui/ThreadBaseFrame.cpp $(FLAMEROBIN_ODEP) - $(CXXC) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(srcdir)/${SOURCEDIR}/gui/ThreadBaseFrame.cpp - flamerobin_UserDialog.o: $(srcdir)/src/gui/UserDialog.cpp $(FLAMEROBIN_ODEP) $(CXXC) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(srcdir)/src/gui/UserDialog.cpp diff --git a/Makefile.suncc b/Makefile.suncc index 8ae2af92..0e5c6f09 100644 --- a/Makefile.suncc +++ b/Makefile.suncc @@ -116,13 +116,13 @@ FLAMEROBIN_OBJECTS = \ flamerobin_ReorderFieldsDialog.o \ flamerobin_RestoreFrame.o \ flamerobin_ServerRegistrationDialog.o \ + flamerobin_ServiceBaseFrame.o \ flamerobin_ShutdownStartupBaseFrame.o \ flamerobin_ShutdownFrame.o \ flamerobin_SimpleHtmlFrame.o \ flamerobin_StatementHistoryDialog.o \ flamerobin_StartupFrame.o \ flamerobin_StyleGuide.o \ - flamerobin_ThreadBaseFrame.o \ flamerobin_UserDialog.o \ flamerobin_UsernamePasswordDialog.o \ flamerobin_logger.o \ @@ -419,6 +419,9 @@ flamerobin_RestoreFrame.o: ./src/gui/RestoreFrame.cpp flamerobin_ServerRegistrationDialog.o: ./src/gui/ServerRegistrationDialog.cpp $(CXX) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(CPPDEPS) $< +flamerobin_ServiceBaseFrame.o: ./${SOURCEDIR}/gui/ServiceBaseFrame.cpp + $(CXX) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(CPPDEPS) $< + flamerobin_ShutdownStartupBaseFrame.o: ./${SOURCEDIR}/gui/ShutdownStartupBaseFrame.cpp $(CXX) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(CPPDEPS) $< @@ -437,9 +440,6 @@ flamerobin_StartupFrame.o: ./${SOURCEDIR}/gui/StartupFrame.cpp flamerobin_StyleGuide.o: ./src/gui/StyleGuide.cpp $(CXX) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(CPPDEPS) $< -flamerobin_ThreadBaseFrame.o: ./${SOURCEDIR}/gui/ThreadBaseFrame.cpp - $(CXX) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(CPPDEPS) $< - flamerobin_UserDialog.o: ./src/gui/UserDialog.cpp $(CXX) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(CPPDEPS) $< diff --git a/flamerobin.bkl b/flamerobin.bkl index e6f240f3..55a913c1 100644 --- a/flamerobin.bkl +++ b/flamerobin.bkl @@ -292,13 +292,13 @@ Accepted values: AMD64, IA64. $(SOURCEDIR)/gui/ReorderFieldsDialog.h $(SOURCEDIR)/gui/RestoreFrame.h $(SOURCEDIR)/gui/ServerRegistrationDialog.h + ${SOURCEDIR}/gui/ServiceBaseFrame.h ${SOURCEDIR}/gui/ShutdownStartupBaseFrame.h ${SOURCEDIR}/gui/ShutdownFrame.h $(SOURCEDIR)/gui/SimpleHtmlFrame.h $(SOURCEDIR)/gui/StatementHistoryDialog.h ${SOURCEDIR}/gui/StartupFrame.h $(SOURCEDIR)/gui/StyleGuide.h - ${SOURCEDIR}/gui/ThreadBaseFrame.h $(SOURCEDIR)/gui/UserDialog.h $(SOURCEDIR)/gui/UsernamePasswordDialog.h $(SOURCEDIR)/Isaac.h @@ -420,13 +420,13 @@ Accepted values: AMD64, IA64. $(SOURCEDIR)/gui/ReorderFieldsDialog.cpp $(SOURCEDIR)/gui/RestoreFrame.cpp $(SOURCEDIR)/gui/ServerRegistrationDialog.cpp + ${SOURCEDIR}/gui/ServiceBaseFrame.cpp ${SOURCEDIR}/gui/ShutdownStartupBaseFrame.cpp ${SOURCEDIR}/gui/ShutdownFrame.cpp $(SOURCEDIR)/gui/SimpleHtmlFrame.cpp $(SOURCEDIR)/gui/StatementHistoryDialog.cpp ${SOURCEDIR}/gui/StartupFrame.cpp $(SOURCEDIR)/gui/StyleGuide.cpp - ${SOURCEDIR}/gui/ThreadBaseFrame.cpp $(SOURCEDIR)/gui/UserDialog.cpp $(SOURCEDIR)/gui/UsernamePasswordDialog.cpp $(SOURCEDIR)/logger.cpp diff --git a/flamerobin.cbp b/flamerobin.cbp index 967b5aeb..03550f75 100644 --- a/flamerobin.cbp +++ b/flamerobin.cbp @@ -185,20 +185,20 @@ - + + - + + - + - - diff --git a/flamerobin.xcodeproj/project.pbxproj b/flamerobin.xcodeproj/project.pbxproj index 200c2ba1..6a1228b8 100644 --- a/flamerobin.xcodeproj/project.pbxproj +++ b/flamerobin.xcodeproj/project.pbxproj @@ -888,37 +888,37 @@ }; 0000000000000000000000a3 = { isa = PBXFileReference; - path = ShutdownStartupBaseFrame.cpp; + path = ServiceBaseFrame.cpp; sourceTree = ""; }; 0000000000000000000000a5 = { isa = PBXFileReference; - path = ShutdownFrame.cpp; + path = ShutdownStartupBaseFrame.cpp; sourceTree = ""; }; 0000000000000000000000a7 = { isa = PBXFileReference; - path = SimpleHtmlFrame.cpp; + path = ShutdownFrame.cpp; sourceTree = ""; }; 0000000000000000000000a9 = { isa = PBXFileReference; - path = StatementHistoryDialog.cpp; + path = SimpleHtmlFrame.cpp; sourceTree = ""; }; 0000000000000000000000ab = { isa = PBXFileReference; - path = StartupFrame.cpp; + path = StatementHistoryDialog.cpp; sourceTree = ""; }; 0000000000000000000000ad = { isa = PBXFileReference; - path = StyleGuide.cpp; + path = StartupFrame.cpp; sourceTree = ""; }; 0000000000000000000000af = { isa = PBXFileReference; - path = ThreadBaseFrame.cpp; + path = StyleGuide.cpp; sourceTree = ""; }; 0000000000000000000000b1 = { @@ -1458,37 +1458,37 @@ }; 00000000000000000000014c = { isa = PBXFileReference; - path = ShutdownStartupBaseFrame.h; + path = ServiceBaseFrame.h; sourceTree = ""; }; 00000000000000000000014d = { isa = PBXFileReference; - path = ShutdownFrame.h; + path = ShutdownStartupBaseFrame.h; sourceTree = ""; }; 00000000000000000000014e = { isa = PBXFileReference; - path = SimpleHtmlFrame.h; + path = ShutdownFrame.h; sourceTree = ""; }; 00000000000000000000014f = { isa = PBXFileReference; - path = StatementHistoryDialog.h; + path = SimpleHtmlFrame.h; sourceTree = ""; }; 000000000000000000000150 = { isa = PBXFileReference; - path = StartupFrame.h; + path = StatementHistoryDialog.h; sourceTree = ""; }; 000000000000000000000151 = { isa = PBXFileReference; - path = StyleGuide.h; + path = StartupFrame.h; sourceTree = ""; }; 000000000000000000000152 = { isa = PBXFileReference; - path = ThreadBaseFrame.h; + path = StyleGuide.h; sourceTree = ""; }; 000000000000000000000153 = { @@ -2095,9 +2095,9 @@ 00000000000000000000009d, 00000000000000000000009f, 0000000000000000000000a1, - 0000000000000000000000a7, 0000000000000000000000a9, - 0000000000000000000000ad, + 0000000000000000000000ab, + 0000000000000000000000af, 0000000000000000000000b1, 0000000000000000000000b3, 00000000000000000000011f, @@ -2134,9 +2134,9 @@ 000000000000000000000149, 00000000000000000000014a, 00000000000000000000014b, - 00000000000000000000014e, 00000000000000000000014f, - 000000000000000000000151, + 000000000000000000000150, + 000000000000000000000152, 000000000000000000000153, 000000000000000000000154, ); @@ -2176,13 +2176,13 @@ 00000000000000000000008d, 0000000000000000000000a3, 0000000000000000000000a5, - 0000000000000000000000ab, - 0000000000000000000000af, + 0000000000000000000000a7, + 0000000000000000000000ad, 000000000000000000000142, 00000000000000000000014c, 00000000000000000000014d, - 000000000000000000000150, - 000000000000000000000152, + 00000000000000000000014e, + 000000000000000000000151, ); path = "${SOURCEDIR}/gui"; sourceTree = ""; diff --git a/flamerobin_flamerobin.vcxproj b/flamerobin_flamerobin.vcxproj index 179f7b9b..54b84a55 100644 --- a/flamerobin_flamerobin.vcxproj +++ b/flamerobin_flamerobin.vcxproj @@ -1068,7 +1068,7 @@ - + @@ -1184,7 +1184,7 @@ - + diff --git a/flamerobin_flamerobin.vcxproj.filters b/flamerobin_flamerobin.vcxproj.filters index d6e1b6c2..209c0833 100644 --- a/flamerobin_flamerobin.vcxproj.filters +++ b/flamerobin_flamerobin.vcxproj.filters @@ -357,7 +357,7 @@ Source Files - + Source Files @@ -704,7 +704,7 @@ Header Files - + Header Files diff --git a/makefile.bcc b/makefile.bcc index 9ea9cd58..5485741c 100644 --- a/makefile.bcc +++ b/makefile.bcc @@ -130,13 +130,13 @@ FLAMEROBIN_OBJECTS = \ bccu$(R_OPT)$(D_OPT)\flamerobin_ReorderFieldsDialog.obj \ bccu$(R_OPT)$(D_OPT)\flamerobin_RestoreFrame.obj \ bccu$(R_OPT)$(D_OPT)\flamerobin_ServerRegistrationDialog.obj \ + bccu$(R_OPT)$(D_OPT)\flamerobin_ServiceBaseFrame.obj \ bccu$(R_OPT)$(D_OPT)\flamerobin_ShutdownStartupBaseFrame.obj \ bccu$(R_OPT)$(D_OPT)\flamerobin_ShutdownFrame.obj \ bccu$(R_OPT)$(D_OPT)\flamerobin_SimpleHtmlFrame.obj \ bccu$(R_OPT)$(D_OPT)\flamerobin_StatementHistoryDialog.obj \ bccu$(R_OPT)$(D_OPT)\flamerobin_StartupFrame.obj \ bccu$(R_OPT)$(D_OPT)\flamerobin_StyleGuide.obj \ - bccu$(R_OPT)$(D_OPT)\flamerobin_ThreadBaseFrame.obj \ bccu$(R_OPT)$(D_OPT)\flamerobin_UserDialog.obj \ bccu$(R_OPT)$(D_OPT)\flamerobin_UsernamePasswordDialog.obj \ bccu$(R_OPT)$(D_OPT)\flamerobin_logger.obj \ @@ -473,6 +473,9 @@ bccu$(R_OPT)$(D_OPT)\flamerobin_RestoreFrame.obj: .\src\gui\RestoreFrame.cpp bccu$(R_OPT)$(D_OPT)\flamerobin_ServerRegistrationDialog.obj: .\src\gui\ServerRegistrationDialog.cpp $(CXX) -q -c -P -o$@ $(FLAMEROBIN_CXXFLAGS) .\src\gui\ServerRegistrationDialog.cpp +bccu$(R_OPT)$(D_OPT)\flamerobin_ServiceBaseFrame.obj: .\${SOURCEDIR}\gui\ServiceBaseFrame.cpp + $(CXX) -q -c -P -o$@ $(FLAMEROBIN_CXXFLAGS) .\${SOURCEDIR}\gui\ServiceBaseFrame.cpp + bccu$(R_OPT)$(D_OPT)\flamerobin_ShutdownStartupBaseFrame.obj: .\${SOURCEDIR}\gui\ShutdownStartupBaseFrame.cpp $(CXX) -q -c -P -o$@ $(FLAMEROBIN_CXXFLAGS) .\${SOURCEDIR}\gui\ShutdownStartupBaseFrame.cpp @@ -491,9 +494,6 @@ bccu$(R_OPT)$(D_OPT)\flamerobin_StartupFrame.obj: .\${SOURCEDIR}\gui\StartupFram bccu$(R_OPT)$(D_OPT)\flamerobin_StyleGuide.obj: .\src\gui\StyleGuide.cpp $(CXX) -q -c -P -o$@ $(FLAMEROBIN_CXXFLAGS) .\src\gui\StyleGuide.cpp -bccu$(R_OPT)$(D_OPT)\flamerobin_ThreadBaseFrame.obj: .\${SOURCEDIR}\gui\ThreadBaseFrame.cpp - $(CXX) -q -c -P -o$@ $(FLAMEROBIN_CXXFLAGS) .\${SOURCEDIR}\gui\ThreadBaseFrame.cpp - bccu$(R_OPT)$(D_OPT)\flamerobin_UserDialog.obj: .\src\gui\UserDialog.cpp $(CXX) -q -c -P -o$@ $(FLAMEROBIN_CXXFLAGS) .\src\gui\UserDialog.cpp diff --git a/makefile.gcc b/makefile.gcc index fef5bfb4..0a693047 100644 --- a/makefile.gcc +++ b/makefile.gcc @@ -112,13 +112,13 @@ FLAMEROBIN_OBJECTS = \ gccu$(R_OPT)$(D_OPT)\flamerobin_ReorderFieldsDialog.o \ gccu$(R_OPT)$(D_OPT)\flamerobin_RestoreFrame.o \ gccu$(R_OPT)$(D_OPT)\flamerobin_ServerRegistrationDialog.o \ + gccu$(R_OPT)$(D_OPT)\flamerobin_ServiceBaseFrame.o \ gccu$(R_OPT)$(D_OPT)\flamerobin_ShutdownStartupBaseFrame.o \ gccu$(R_OPT)$(D_OPT)\flamerobin_ShutdownFrame.o \ gccu$(R_OPT)$(D_OPT)\flamerobin_SimpleHtmlFrame.o \ gccu$(R_OPT)$(D_OPT)\flamerobin_StatementHistoryDialog.o \ gccu$(R_OPT)$(D_OPT)\flamerobin_StartupFrame.o \ gccu$(R_OPT)$(D_OPT)\flamerobin_StyleGuide.o \ - gccu$(R_OPT)$(D_OPT)\flamerobin_ThreadBaseFrame.o \ gccu$(R_OPT)$(D_OPT)\flamerobin_UserDialog.o \ gccu$(R_OPT)$(D_OPT)\flamerobin_UsernamePasswordDialog.o \ gccu$(R_OPT)$(D_OPT)\flamerobin_logger.o \ @@ -452,6 +452,9 @@ gccu$(R_OPT)$(D_OPT)\flamerobin_RestoreFrame.o: ./src/gui/RestoreFrame.cpp gccu$(R_OPT)$(D_OPT)\flamerobin_ServerRegistrationDialog.o: ./src/gui/ServerRegistrationDialog.cpp $(CXX) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(CPPDEPS) $< +gccu$(R_OPT)$(D_OPT)\flamerobin_ServiceBaseFrame.o: ./${SOURCEDIR}/gui/ServiceBaseFrame.cpp + $(CXX) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(CPPDEPS) $< + gccu$(R_OPT)$(D_OPT)\flamerobin_ShutdownStartupBaseFrame.o: ./${SOURCEDIR}/gui/ShutdownStartupBaseFrame.cpp $(CXX) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(CPPDEPS) $< @@ -470,9 +473,6 @@ gccu$(R_OPT)$(D_OPT)\flamerobin_StartupFrame.o: ./${SOURCEDIR}/gui/StartupFrame. gccu$(R_OPT)$(D_OPT)\flamerobin_StyleGuide.o: ./src/gui/StyleGuide.cpp $(CXX) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(CPPDEPS) $< -gccu$(R_OPT)$(D_OPT)\flamerobin_ThreadBaseFrame.o: ./${SOURCEDIR}/gui/ThreadBaseFrame.cpp - $(CXX) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(CPPDEPS) $< - gccu$(R_OPT)$(D_OPT)\flamerobin_UserDialog.o: ./src/gui/UserDialog.cpp $(CXX) -c -o $@ $(FLAMEROBIN_CXXFLAGS) $(CPPDEPS) $< diff --git a/makefile.vc b/makefile.vc index bca219b6..7f860618 100644 --- a/makefile.vc +++ b/makefile.vc @@ -128,13 +128,13 @@ FLAMEROBIN_OBJECTS = \ vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_ReorderFieldsDialog.obj \ vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_RestoreFrame.obj \ vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_ServerRegistrationDialog.obj \ + vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_ServiceBaseFrame.obj \ vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_ShutdownStartupBaseFrame.obj \ vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_ShutdownFrame.obj \ vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_SimpleHtmlFrame.obj \ vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_StatementHistoryDialog.obj \ vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_StartupFrame.obj \ vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_StyleGuide.obj \ - vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_ThreadBaseFrame.obj \ vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_UserDialog.obj \ vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_UsernamePasswordDialog.obj \ vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_logger.obj \ @@ -545,6 +545,9 @@ vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_RestoreFrame.obj: .\src\gui\Rest vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_ServerRegistrationDialog.obj: .\src\gui\ServerRegistrationDialog.cpp $(CXX) /c /nologo /TP /Fo$@ $(FLAMEROBIN_CXXFLAGS) .\src\gui\ServerRegistrationDialog.cpp +vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_ServiceBaseFrame.obj: .\${SOURCEDIR}\gui\ServiceBaseFrame.cpp + $(CXX) /c /nologo /TP /Fo$@ $(FLAMEROBIN_CXXFLAGS) .\${SOURCEDIR}\gui\ServiceBaseFrame.cpp + vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_ShutdownStartupBaseFrame.obj: .\${SOURCEDIR}\gui\ShutdownStartupBaseFrame.cpp $(CXX) /c /nologo /TP /Fo$@ $(FLAMEROBIN_CXXFLAGS) .\${SOURCEDIR}\gui\ShutdownStartupBaseFrame.cpp @@ -563,9 +566,6 @@ vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_StartupFrame.obj: .\${SOURCEDIR} vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_StyleGuide.obj: .\src\gui\StyleGuide.cpp $(CXX) /c /nologo /TP /Fo$@ $(FLAMEROBIN_CXXFLAGS) .\src\gui\StyleGuide.cpp -vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_ThreadBaseFrame.obj: .\${SOURCEDIR}\gui\ThreadBaseFrame.cpp - $(CXX) /c /nologo /TP /Fo$@ $(FLAMEROBIN_CXXFLAGS) .\${SOURCEDIR}\gui\ThreadBaseFrame.cpp - vcu$(R_OPT)$(D_OPT)$(DIR_SUFFIX_CPU)\flamerobin_UserDialog.obj: .\src\gui\UserDialog.cpp $(CXX) /c /nologo /TP /Fo$@ $(FLAMEROBIN_CXXFLAGS) .\src\gui\UserDialog.cpp diff --git a/src/gui/BackupFrame.cpp b/src/gui/BackupFrame.cpp index 27214e47..4412f16e 100644 --- a/src/gui/BackupFrame.cpp +++ b/src/gui/BackupFrame.cpp @@ -47,161 +47,7 @@ #include "gui/UsernamePasswordDialog.h" #include "metadata/database.h" #include "metadata/server.h" - -// worker thread class to perform database backup -class BackupThread: public wxThread { -public: - BackupThread(BackupFrame* frame, wxString server, - wxString username, wxString password, wxString rolename, wxString charset, - wxString dbfilename, wxString bkfilename, - IBPP::BRF flags, int interval, wxString skipData, wxString includeData, - wxString cryptPluginName, wxString keyPlugin, wxString keyEncrypt - ); - - virtual void* Entry(); - virtual void OnExit(); -private: - BackupFrame* frameM; - wxString serverM; - wxString usernameM; - wxString passwordM; - wxString rolenameM; - wxString charsetM; - wxString dbfileM; - wxString bkfileM; - IBPP::BRF brfM; - wxString outputFileM; - int factorM; - int intervalM; - wxString skipDataM; - wxString includeDataM; - wxString cryptPluginNameM; - wxString keyPluginM; - wxString keyEncryptM; - - void logError(wxString& msg); - void logImportant(wxString& msg); - void logProgress(wxString& msg); -}; - -BackupThread::BackupThread(BackupFrame* frame, wxString server, - wxString username, wxString password, wxString rolename, wxString charset, - wxString dbfilename, wxString bkfilename, - IBPP::BRF flags, int interval, - wxString skipData, wxString includeData, wxString cryptPluginName, - wxString keyPlugin, wxString keyEncrypt) - : wxThread() -{ - frameM = frame; - serverM = server; - usernameM = username; - passwordM = password; - rolenameM = rolename; - charsetM = charset; - dbfileM = dbfilename; - bkfileM = bkfilename; - // always use verbose flag - brfM = (IBPP::BRF)((int)flags | (int)IBPP::brVerbose); - - intervalM = interval; - skipDataM = skipData; - includeDataM = includeData; - cryptPluginNameM = cryptPluginName; - keyPluginM = keyPlugin; - keyEncryptM = keyEncrypt; - -} - -void* BackupThread::Entry() -{ - wxDateTime now; - wxString msg; - - try - { - msg.Printf(_("Connecting to server %s..."), serverM.c_str()); - logImportant(msg); - IBPP::Service svc = IBPP::ServiceFactory(wx2std(serverM), - wx2std(usernameM), wx2std(passwordM), wx2std(rolenameM), wx2std(charsetM) - ); - svc->Connect(); - - now = wxDateTime::Now(); - msg.Printf(_("Database backup started %s"), now.FormatTime().c_str()); - logImportant(msg); - svc->StartBackup(wx2std(dbfileM), wx2std(bkfileM), wx2std(outputFileM), - factorM, brfM, wx2std(cryptPluginNameM), wx2std(keyPluginM), - wx2std(keyEncryptM), wx2std(skipDataM), wx2std(includeDataM), intervalM - ); - while (true) - { - if (TestDestroy()) - { - now = wxDateTime::Now(); - msg.Printf(_("Database backup canceled %s"), - now.FormatTime().c_str()); - logImportant(msg); - break; - } - const char* c = svc->WaitMsg(); - if (c == 0) - { - now = wxDateTime::Now(); - msg.Printf(_("Database backup finished %s"), - now.FormatTime().c_str()); - logImportant(msg); - break; - } - msg = c; - logProgress(msg); - } - svc->Disconnect(); - } - catch (IBPP::Exception& e) - { - now = wxDateTime::Now(); - msg.Printf(_("Database backup canceled %s due to IBPP exception:\n\n"), - now.FormatTime().c_str()); - msg += e.what(); - logError(msg); - } - catch (...) - { - now = wxDateTime::Now(); - msg.Printf(_("Database backup canceled %s due to exception"), - now.FormatTime().c_str()); - logError(msg); - } - return 0; -} - -void BackupThread::OnExit() -{ - if (frameM != 0) - { - wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, - BackupRestoreBaseFrame::ID_thread_finished); - wxPostEvent(frameM, event); - } -} - -void BackupThread::logError(wxString& msg) -{ - if (frameM != 0) - frameM->threadOutputMsg(msg, BackupRestoreBaseFrame::error_message); -} - -void BackupThread::logImportant(wxString& msg) -{ - if (frameM != 0) - frameM->threadOutputMsg(msg, BackupRestoreBaseFrame::important_message); -} - -void BackupThread::logProgress(wxString& msg) -{ - if (frameM != 0) - frameM->threadOutputMsg(msg, BackupRestoreBaseFrame::progress_message); -} +#include "ShutdownFrame.h" BackupFrame::BackupFrame(wxWindow* parent, DatabasePtr db) : BackupRestoreBaseFrame(parent, db) @@ -474,7 +320,7 @@ void BackupFrame::OnStartButtonClick(wxCommandEvent& WXUNUSED(event)) startThread(std::make_unique(this, server->getConnectionString(), username, password, rolename, charset, database->getPath(), text_ctrl_filename->GetValue(), - (IBPP::BRF)flags, spinctrl_showlogInterval->GetValue(), + (IBPP::BRF)flags, spinctrl_showlogInterval->GetValue(), spinctrl_parallelworkers->GetValue(), textCtrl_skipdata->GetValue(), textCtrl_includedata->GetValue(), textCtrl_crypt->GetValue(), textCtrl_keyholder->GetValue(), textCtrl_keyname->GetValue() ) @@ -483,3 +329,24 @@ void BackupFrame::OnStartButtonClick(wxCommandEvent& WXUNUSED(event)) updateControls(); } +BackupThread::BackupThread(BackupFrame* frame, + wxString server, wxString username, wxString password, + wxString rolename, wxString charset, wxString dbfilename, + wxString bkfilename, IBPP::BRF flags, int interval, int parallel, + wxString skipData, wxString includeData, wxString cryptPluginName, + wxString keyPlugin, wxString keyEncrypt) + :factorM(0), + BackupRestoreThread(frame, server, username, password,rolename, charset, + dbfilename,bkfilename, flags, interval, parallel, skipData, includeData, cryptPluginName, + keyPlugin, keyEncrypt) +{ +} + +void BackupThread::Execute(IBPP::Service svc) +{ + svc->StartBackup(wx2std(dbfileM), wx2std(bkfileM), wx2std(outputFileM), + factorM, brfM, wx2std(cryptPluginNameM), wx2std(keyPluginM), + wx2std(keyEncryptM), wx2std(skipDataM), wx2std(includeDataM), + intervalM, parallelM + ); +} diff --git a/src/gui/BackupFrame.h b/src/gui/BackupFrame.h index 626bbd7a..3911e242 100644 --- a/src/gui/BackupFrame.h +++ b/src/gui/BackupFrame.h @@ -66,4 +66,21 @@ class BackupFrame: public BackupRestoreBaseFrame { DECLARE_EVENT_TABLE() }; +class BackupThread : public BackupRestoreThread +{ +public: + BackupThread(BackupFrame* frame, wxString server, + wxString username, wxString password, wxString rolename, wxString charset, + wxString dbfilename, wxString bkfilename, + IBPP::BRF flags, int interval, int parallel, + wxString skipData, wxString includeData, + wxString cryptPluginName, wxString keyPlugin, wxString keyEncrypt + ); +protected: + virtual void Execute(IBPP::Service); + + int factorM; + +}; #endif // BACKUPFRAME_H + diff --git a/src/gui/BackupRestoreBaseFrame.cpp b/src/gui/BackupRestoreBaseFrame.cpp index 1650ceb6..6d467870 100644 --- a/src/gui/BackupRestoreBaseFrame.cpp +++ b/src/gui/BackupRestoreBaseFrame.cpp @@ -44,14 +44,8 @@ BackupRestoreBaseFrame::BackupRestoreBaseFrame(wxWindow* parent, DatabasePtr db) - : ThreadBaseFrame(parent, db) + : ServiceBaseFrame(parent, db) { - //wxASSERT(db); - //db->attachObserver(this, false); - - //threadMsgTimeMillisM = 0; - verboseMsgsM = true; - // create controls in constructor of descendant class (correct tab order) panel_controls = 0; checkbox_showlog = 0; @@ -71,7 +65,7 @@ void BackupRestoreBaseFrame::cancelBackupRestore() bool BackupRestoreBaseFrame::Destroy() { cancelBackupRestore(); - return ThreadBaseFrame::Destroy(); + return ServiceBaseFrame::Destroy(); } void BackupRestoreBaseFrame::doReadConfigSettings(const wxString& prefix) @@ -80,50 +74,69 @@ void BackupRestoreBaseFrame::doReadConfigSettings(const wxString& prefix) wxString strValue; - bool boolValue = true; + bool boolValue; int intValue; + strValue = ""; config().getValue(prefix + Config::pathSeparator + "backupfilename", strValue); if (!strValue.empty()) text_ctrl_filename->SetValue(strValue); + boolValue = false; config().getValue(prefix + Config::pathSeparator + "metadata", boolValue); checkbox_metadata->SetValue(boolValue); + boolValue = false; config().getValue(prefix + Config::pathSeparator + "verboselog", boolValue); checkbox_showlog->SetValue(boolValue); + intValue = 0; config().getValue(prefix + Config::pathSeparator + "verboselog_interval", intValue); spinctrl_showlogInterval->SetValue(intValue); + strValue = ""; config().getValue(prefix + Config::pathSeparator + "cryptplugin_name", strValue); if (!strValue.empty()) textCtrl_crypt->SetValue(strValue); + + strValue = ""; config().getValue(prefix + Config::pathSeparator + "keyholder_name", strValue); if (!strValue.empty()) textCtrl_keyholder->SetValue(strValue); + + strValue = ""; config().getValue(prefix + Config::pathSeparator + "key_name", strValue); if (!strValue.empty()) textCtrl_keyname->SetValue(strValue); - + strValue = ""; config().getValue(prefix + Config::pathSeparator + "skipdata", strValue); if (!strValue.empty()) textCtrl_skipdata->SetValue(strValue); + + strValue = ""; config().getValue(prefix + Config::pathSeparator + "includedata", strValue); if (!strValue.empty()) textCtrl_includedata->SetValue(strValue); + boolValue = false; config().getValue(prefix + Config::pathSeparator + "static_time", boolValue); checkbox_statictime->SetValue(boolValue); + boolValue = false; config().getValue(prefix + Config::pathSeparator + "static_delta", boolValue); checkbox_staticdelta->SetValue(boolValue); + boolValue = false; config().getValue(prefix + Config::pathSeparator + "static_pageread", boolValue); checkbox_staticpageread->SetValue(boolValue); + boolValue = false; config().getValue(prefix + Config::pathSeparator + "static_pagewrite", boolValue); checkbox_staticpagewrite->SetValue(boolValue); + intValue = 0; + config().getValue(prefix + Config::pathSeparator + "parallel_workers", intValue); + spinctrl_parallelworkers->SetValue(intValue); + } void BackupRestoreBaseFrame::doWriteConfigSettings(const wxString& prefix) const @@ -161,6 +174,10 @@ void BackupRestoreBaseFrame::doWriteConfigSettings(const wxString& prefix) const checkbox_staticpageread->GetValue()); config().setValue(prefix + Config::pathSeparator + "static_pagewrite", checkbox_staticpagewrite->GetValue()); + + config().setValue(prefix + Config::pathSeparator + "parallel_workers", + spinctrl_parallelworkers->GetValue()); + } @@ -173,7 +190,7 @@ const wxString BackupRestoreBaseFrame::getStorageName() const void BackupRestoreBaseFrame::createControls() { - ThreadBaseFrame::createControls(); + ServiceBaseFrame::createControls(); label_filename = new wxStaticText(panel_controls, wxID_ANY, _("Backup file:")); @@ -204,11 +221,13 @@ void BackupRestoreBaseFrame::createControls() checkbox_staticpageread = new wxCheckBox(panel_controls, wxID_ANY, _("Page reads")); checkbox_staticpagewrite = new wxCheckBox(panel_controls, wxID_ANY, _("Page writes")); + spinctrl_parallelworkers = new wxSpinCtrl(panel_controls, ID_spinctrl_parallelworkers); + spinctrl_parallelworkers->SetRange(0, 32767); } void BackupRestoreBaseFrame::layoutControls() { - ThreadBaseFrame::layoutControls(); + ServiceBaseFrame::layoutControls(); int wh = text_ctrl_filename->GetMinHeight(); button_browse->SetSize(wh, wh); @@ -226,14 +245,12 @@ void BackupRestoreBaseFrame::layoutControls() { - wxGridSizer* gsizer = new wxGridSizer(1, 3, + wxGridSizer* gsizer = new wxGridSizer(1, 4, styleguide().getCheckboxSpacing(), styleguide().getUnrelatedControlMargin(wxHORIZONTAL)); gsizer->Add(checkbox_metadata, 0, wxEXPAND); - //gsizer->Add(0, 0, wxEXPAND); gsizer->Add(checkbox_showlog, 0, wxEXPAND); - { wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(new wxStaticText(panel_controls, wxID_ANY, @@ -242,7 +259,15 @@ void BackupRestoreBaseFrame::layoutControls() sizer->Add(spinctrl_showlogInterval, 1, wxALIGN_CENTER_VERTICAL); gsizer->Add(sizer); - //sizerGeneralOptions->Add(0, styleguide().getRelatedControlMargin(wxVERTICAL)); + } + { + wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(new wxStaticText(panel_controls, wxID_ANY, + _("Parallel (FB3.0+)")), 0, wxALIGN_CENTER_VERTICAL); + sizer->Add(styleguide().getControlLabelMargin(), 0); + sizer->Add(spinctrl_parallelworkers, 1, wxALIGN_CENTER_VERTICAL); + + gsizer->Add(sizer); } sizerGeneralOptions->Add(gsizer); @@ -363,7 +388,7 @@ void BackupRestoreBaseFrame::updateControls() // empty implementation to allow this to be called from update() // which could happen in the constructor, when descendant isn't // completely initialized yet - ThreadBaseFrame::updateControls(); + ServiceBaseFrame::updateControls(); bool running = getThreadRunning(); @@ -386,13 +411,13 @@ void BackupRestoreBaseFrame::updateControls() checkbox_staticdelta->Enable(!running); checkbox_staticpageread->Enable(!running); checkbox_staticpagewrite->Enable(!running); + + spinctrl_parallelworkers->Enable(!running); } //! event handlers -BEGIN_EVENT_TABLE(BackupRestoreBaseFrame, ThreadBaseFrame) +BEGIN_EVENT_TABLE(BackupRestoreBaseFrame, ServiceBaseFrame) EVT_CHECKBOX(BackupRestoreBaseFrame::ID_checkbox_showlog, BackupRestoreBaseFrame::OnVerboseLogChange) - EVT_MENU(BackupRestoreBaseFrame::ID_thread_finished, BackupRestoreBaseFrame::OnThreadFinished) - EVT_MENU(BackupRestoreBaseFrame::ID_thread_output, BackupRestoreBaseFrame::OnThreadOutput) EVT_TEXT(BackupRestoreBaseFrame::ID_text_ctrl_filename, BackupRestoreBaseFrame::OnSettingsChange) END_EVENT_TABLE() @@ -408,3 +433,19 @@ void BackupRestoreBaseFrame::OnVerboseLogChange(wxCommandEvent& WXUNUSED(event)) updateMessages(0, msgsM.GetCount()); } + +BackupRestoreThread::BackupRestoreThread(BackupRestoreBaseFrame* frame, + wxString server, wxString username, wxString password, + wxString rolename, wxString charset, wxString dbfilename, + wxString bkfilename, IBPP::BRF flags, int interval, int parallel, + wxString skipData, wxString includeData, wxString cryptPluginName, + wxString keyPlugin, wxString keyEncrypt) + : + dbfileM(dbfilename), bkfileM(bkfilename), intervalM(interval), parallelM(parallel), + skipDataM(skipData), includeDataM(includeData), + cryptPluginNameM(cryptPluginName), keyPluginM(keyPlugin), keyEncryptM(keyEncrypt), + ServiceThread(frame, server, username, password, rolename, charset) +{ + // always use verbose flag + brfM = (IBPP::BRF)((int)flags | (int)IBPP::brVerbose); +} diff --git a/src/gui/BackupRestoreBaseFrame.h b/src/gui/BackupRestoreBaseFrame.h index 8d21b1b9..b21a1997 100644 --- a/src/gui/BackupRestoreBaseFrame.h +++ b/src/gui/BackupRestoreBaseFrame.h @@ -33,14 +33,14 @@ #include #include "core/Observer.h" -#include "gui/ThreadBaseFrame.h" +#include "gui/ServiceBaseFrame.h" #include "metadata/database.h" #include "metadata/MetadataClasses.h" class FileTextControl; class LogTextControl; -class BackupRestoreBaseFrame: public ThreadBaseFrame//, public Observer +class BackupRestoreBaseFrame: public ServiceBaseFrame//, public Observer { public: @@ -71,12 +71,11 @@ class BackupRestoreBaseFrame: public ThreadBaseFrame//, public Observer ID_text_ctrl_filename = 101, ID_checkbox_showlog, ID_spinctrl_showlogInterval, - ID_button_browse, - ID_button_showlog + ID_button_showlog, + ID_spinctrl_parallelworkers + - //ID_text_ctrl_log, - //ID_button_start }; wxStaticText* label_filename; @@ -103,6 +102,7 @@ class BackupRestoreBaseFrame: public ThreadBaseFrame//, public Observer wxCheckBox* checkbox_staticpageread; wxCheckBox* checkbox_staticpagewrite; + wxSpinCtrl* spinctrl_parallelworkers; private: @@ -112,4 +112,29 @@ class BackupRestoreBaseFrame: public ThreadBaseFrame//, public Observer DECLARE_EVENT_TABLE() }; +class BackupRestoreThread : public ServiceThread +{ +public: + BackupRestoreThread(BackupRestoreBaseFrame* frame, wxString server, + wxString username, wxString password, wxString rolename, wxString charset, + wxString dbfilename, wxString bkfilename, + IBPP::BRF flags, int interval, int parallel, + wxString skipData, wxString includeData, + wxString cryptPluginName, wxString keyPlugin, wxString keyEncrypt + ); +protected: + wxString bkfileM; + wxString dbfileM; + wxString outputFileM; + wxString skipDataM; + wxString includeDataM; + wxString cryptPluginNameM; + wxString keyPluginM; + wxString keyEncryptM; + + int intervalM; + int parallelM; + IBPP::BRF brfM; +}; + #endif // BACKUPRESTOREBASEFRAME_H diff --git a/src/gui/RestoreFrame.cpp b/src/gui/RestoreFrame.cpp index 987a594d..59928b96 100644 --- a/src/gui/RestoreFrame.cpp +++ b/src/gui/RestoreFrame.cpp @@ -47,164 +47,6 @@ #include "gui/UsernamePasswordDialog.h" #include "metadata/database.h" #include "metadata/server.h" - -// worker thread class to perform database restore -class RestoreThread: public wxThread { -public: - RestoreThread(RestoreFrame* frame, wxString server, - wxString username, wxString password, wxString rolename, wxString charset, - wxString bkfilename, wxString dbfilename, - int pagesize, IBPP::BRF flags, int interval, wxString skipData, wxString includeData, - wxString cryptPluginName, wxString keyPlugin, wxString keyEncrypt - ); - virtual void* Entry(); - virtual void OnExit(); -private: - RestoreFrame* frameM; - wxString serverM; - wxString usernameM; - wxString passwordM; - wxString rolenameM; - wxString charsetM; - wxString bkfileM; - wxString dbfileM; - int pagesizeM; - IBPP::BRF brfM; - - wxString outputFileM; - int intervalM; - wxString skipDataM; - wxString includeDataM; - wxString cryptPluginNameM; - wxString keyPluginM; - wxString keyEncryptM; - - void logError(wxString& msg); - void logImportant(wxString& msg); - void logProgress(wxString& msg); -}; - -RestoreThread::RestoreThread(RestoreFrame* frame, wxString server, - wxString username, wxString password, wxString rolename, wxString charset, - wxString bkfilename, wxString dbfilename, - int pagesize, IBPP::BRF flags, int interval, wxString skipData, wxString includeData, - wxString cryptPluginName, wxString keyPlugin, wxString keyEncrypt) - : wxThread() -{ - frameM = frame; - serverM = server; - usernameM = username; - passwordM = password; - rolenameM = rolename; - charsetM = charset; - - bkfileM = bkfilename; - dbfileM = dbfilename; - pagesizeM = pagesize; - // always use verbose flag - brfM = (IBPP::BRF)((int)flags | (int)IBPP::brVerbose); - wxString outputFileM; - intervalM = interval; - skipDataM = skipData; - includeDataM = includeData; - cryptPluginNameM = cryptPluginName; - keyPluginM = keyPlugin; - keyEncryptM = keyEncrypt; - -} - -void* RestoreThread::Entry() -{ - wxDateTime now; - wxString msg; - - try - { - msg.Printf(_("Connecting to server %s..."), serverM.c_str()); - logImportant(msg); - IBPP::Service svc = IBPP::ServiceFactory(wx2std(serverM), - wx2std(usernameM), wx2std(passwordM), wx2std(rolenameM), wx2std(charsetM) - ); - svc->Connect(); - - now = wxDateTime::Now(); - msg.Printf(_("Database restore started %s"), now.FormatTime().c_str()); - logImportant(msg); - svc->StartRestore(wx2std(bkfileM), wx2std(dbfileM), wx2std(outputFileM), - pagesizeM, 0, brfM, - wx2std(cryptPluginNameM), wx2std(keyPluginM), - wx2std(keyEncryptM), wx2std(skipDataM), wx2std(includeDataM), intervalM - ); - while (true) - { - if (TestDestroy()) - { - now = wxDateTime::Now(); - msg.Printf(_("Database restore canceled %s"), - now.FormatTime().c_str()); - logImportant(msg); - break; - } - const char* c = svc->WaitMsg(); - if (c == 0) - { - now = wxDateTime::Now(); - msg.Printf(_("Database restore finished %s"), - now.FormatTime().c_str()); - logImportant(msg); - break; - } - msg = c; - logProgress(msg); - } - svc->Disconnect(); - } - catch (IBPP::Exception& e) - { - now = wxDateTime::Now(); - msg.Printf(_("Database restore canceled %s due to IBPP exception:\n\n"), - now.FormatTime().c_str()); - msg += e.what(); - logError(msg); - } - catch (...) - { - now = wxDateTime::Now(); - msg.Printf(_("Database restore canceled %s due to exception"), - now.FormatTime().c_str()); - logError(msg); - } - return 0; -} - -void RestoreThread::OnExit() -{ - if (frameM != 0) - { - wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, - BackupRestoreBaseFrame::ID_thread_finished); - wxPostEvent(frameM, event); - } -} - -void RestoreThread::logError(wxString& msg) -{ - if (frameM != 0) - frameM->threadOutputMsg(msg, BackupRestoreBaseFrame::error_message); -} - -void RestoreThread::logImportant(wxString& msg) -{ - if (frameM != 0) - frameM->threadOutputMsg(msg, BackupRestoreBaseFrame::important_message); -} - -void RestoreThread::logProgress(wxString& msg) -{ - if (frameM != 0) - frameM->threadOutputMsg(msg, BackupRestoreBaseFrame::progress_message); -} - RestoreFrame::RestoreFrame(wxWindow* parent, DatabasePtr db) : BackupRestoreBaseFrame(parent, db) { @@ -269,6 +111,9 @@ void RestoreFrame::createControls() wxDefaultPosition, wxDefaultSize, sizeof(pagesize_choices) / sizeof(wxString), pagesize_choices); + spinctrl_pagebuffers = new wxSpinCtrl(panel_controls, wxID_ANY); + spinctrl_pagebuffers->SetRange(0, 2147483646); + } void RestoreFrame::layoutControls() @@ -300,6 +145,18 @@ void RestoreFrame::layoutControls() sizerCombo->Add(label_pagesize, 0, wxALIGN_CENTER_VERTICAL); sizerCombo->Add(styleguide().getControlLabelMargin(), 0); sizerCombo->Add(choice_pagesize, 1, wxEXPAND); + sizerCombo->Add(styleguide().getRelatedControlMargin(wxHORIZONTAL), 0); + { + wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(new wxStaticText(panel_controls, wxID_ANY, + _("Page buffers")), 0, wxALIGN_CENTER_VERTICAL); + sizer->Add(styleguide().getControlLabelMargin(), 0); + sizer->Add(spinctrl_pagebuffers, 1, wxALIGN_CENTER_VERTICAL); + + sizerCombo->Add(sizer); + } + + wxBoxSizer* sizerPanelV = new wxBoxSizer(wxVERTICAL); @@ -351,6 +208,7 @@ void RestoreFrame::updateControls() checkbox_fix_fss_data->Enable(!running); checkbox_fix_fss_metadata->Enable(!running); checkbox_readonlyDB->Enable(!running); + spinctrl_pagebuffers->Enable(!running); //radiobox_replicamode->Enable(!running); @@ -395,6 +253,11 @@ void RestoreFrame::doReadConfigSettings(const wxString& prefix) checkbox_readonlyDB->SetValue( flags.end() != std::find(flags.begin(), flags.end(), "readonlyDB")); } + + int intValue = 0; + config().getValue(prefix + Config::pathSeparator + "page_buffers", intValue); + spinctrl_pagebuffers->SetValue(intValue); + updateControls(); } @@ -426,6 +289,10 @@ void RestoreFrame::doWriteConfigSettings(const wxString& prefix) const flags.push_back("readonlyDB"); config().setValue(prefix + Config::pathSeparator + "options", flags); + + config().setValue(prefix + Config::pathSeparator + "page_buffers", + spinctrl_pagebuffers->GetValue()); + } const wxString RestoreFrame::getName() const @@ -540,12 +407,35 @@ void RestoreFrame::OnStartButtonClick(wxCommandEvent& WXUNUSED(event)) startThread(std::make_unique(this, server->getConnectionString(), username, password, rolename, charset, - text_ctrl_filename->GetValue(), database->getPath(), pagesize, - (IBPP::BRF)flags, - spinctrl_showlogInterval->GetValue(), + text_ctrl_filename->GetValue(), database->getPath(), pagesize, spinctrl_pagebuffers->GetValue(), + (IBPP::BRF)flags, spinctrl_showlogInterval->GetValue(), spinctrl_parallelworkers->GetValue(), textCtrl_skipdata->GetValue(), textCtrl_includedata->GetValue(), textCtrl_crypt->GetValue(), textCtrl_keyholder->GetValue(), textCtrl_keyname->GetValue() ) ); updateControls(); } + +RestoreThread::RestoreThread(RestoreFrame* frame, wxString + server, wxString username, wxString password, wxString + rolename, wxString charset, wxString bkfilename, wxString dbfilename, + int pagesize, int pagebuffers, IBPP::BRF flags, int interval, int parallel, + wxString skipData, wxString includeData, wxString cryptPluginName, wxString keyPlugin, + wxString keyEncrypt) + :pagesizeM(pagesize), pagebuffersM(pagebuffers), + BackupRestoreThread(frame, server, username, password, rolename, charset, + dbfilename, bkfilename, flags, interval, parallel, skipData, includeData, cryptPluginName, + keyPlugin, keyEncrypt) + +{ +} + +void RestoreThread::Execute(IBPP::Service svc) +{ + svc->StartRestore(wx2std(bkfileM), wx2std(dbfileM), wx2std(outputFileM), + pagesizeM, pagebuffersM, brfM, + wx2std(cryptPluginNameM), wx2std(keyPluginM), + wx2std(keyEncryptM), wx2std(skipDataM), wx2std(includeDataM), + intervalM, parallelM + ); +} diff --git a/src/gui/RestoreFrame.h b/src/gui/RestoreFrame.h index 64a81f5b..16b191c9 100644 --- a/src/gui/RestoreFrame.h +++ b/src/gui/RestoreFrame.h @@ -50,6 +50,8 @@ class RestoreFrame: public BackupRestoreBaseFrame { wxRadioBox* radiobox_replicamode; + wxSpinCtrl* spinctrl_pagebuffers; + void createControls(); void layoutControls(); virtual void updateControls(); @@ -71,4 +73,22 @@ class RestoreFrame: public BackupRestoreBaseFrame { DECLARE_EVENT_TABLE() }; + +class RestoreThread : public BackupRestoreThread +{ +public: + RestoreThread(RestoreFrame* frame, wxString server, + wxString username, wxString password, wxString rolename, wxString charset, + wxString bkfilename, wxString dbfilename, + int pagesize, int pagebuffers, IBPP::BRF flags, int interval, int parallel, + wxString skipData, wxString includeData, + wxString cryptPluginName, wxString keyPlugin, wxString keyEncrypt + ); +protected: + virtual void Execute(IBPP::Service); + + int pagesizeM; + int pagebuffersM; + +}; #endif // RESTOREFRAME_H diff --git a/src/gui/ThreadBaseFrame.cpp b/src/gui/ServiceBaseFrame.cpp similarity index 62% rename from src/gui/ThreadBaseFrame.cpp rename to src/gui/ServiceBaseFrame.cpp index ccc73f47..dab8e55e 100644 --- a/src/gui/ThreadBaseFrame.cpp +++ b/src/gui/ServiceBaseFrame.cpp @@ -33,16 +33,19 @@ #include #include +#include + #include "config/Config.h" #include "core/ArtProvider.h" -#include "gui/ThreadBaseFrame.h" +#include "core/StringUtils.h" +#include "gui/ServiceBaseFrame.h" #include "gui/controls/DndTextControls.h" #include "gui/controls/LogTextControl.h" #include "gui/StyleGuide.h" #include "metadata/database.h" #include "metadata/server.h" -ThreadBaseFrame::ThreadBaseFrame(wxWindow* parent, +ServiceBaseFrame::ServiceBaseFrame(wxWindow* parent, DatabasePtr db) : BaseFrame(parent, wxID_ANY, wxEmptyString), databaseM(db), threadM(0) { @@ -57,7 +60,7 @@ ThreadBaseFrame::ThreadBaseFrame(wxWindow* parent, } //! implementation details -void ThreadBaseFrame::addThreadMsg(const wxString msg, +void ServiceBaseFrame::addThreadMsg(const wxString msg, bool& notificationNeeded) { notificationNeeded = false; @@ -74,7 +77,7 @@ void ThreadBaseFrame::addThreadMsg(const wxString msg, } } -void ThreadBaseFrame::cancelThread() +void ServiceBaseFrame::cancelThread() { if (threadM != 0) { @@ -83,39 +86,39 @@ void ThreadBaseFrame::cancelThread() } } -void ThreadBaseFrame::clearLog() +void ServiceBaseFrame::clearLog() { msgKindsM.Clear(); msgsM.Clear(); text_ctrl_log->ClearAll(); } -bool ThreadBaseFrame::Destroy() +bool ServiceBaseFrame::Destroy() { cancelThread(); return BaseFrame::Destroy(); } -DatabasePtr ThreadBaseFrame::getDatabase() const +DatabasePtr ServiceBaseFrame::getDatabase() const { return databaseM.lock(); } -bool ThreadBaseFrame::getThreadRunning() const +bool ServiceBaseFrame::getThreadRunning() const { return threadM != 0; } -void ThreadBaseFrame::subjectRemoved(Subject* subject) +void ServiceBaseFrame::subjectRemoved(Subject* subject) { DatabasePtr db = getDatabase(); if (!db || !db->isConnected() || subject == db.get()) Close(); } -bool ThreadBaseFrame::startThread(std::unique_ptr thread) +bool ServiceBaseFrame::startThread(std::unique_ptr thread) { wxASSERT(threadM == 0); if (wxTHREAD_NO_ERROR != thread->Create()) @@ -134,7 +137,7 @@ bool ThreadBaseFrame::startThread(std::unique_ptr thread) return true; } -void ThreadBaseFrame::threadOutputMsg(const wxString msg, MsgKind kind) +void ServiceBaseFrame::threadOutputMsg(const wxString msg, MsgKind kind) { wxString s(msg); switch (kind) @@ -161,7 +164,7 @@ void ThreadBaseFrame::threadOutputMsg(const wxString msg, MsgKind kind) } } -void ThreadBaseFrame::createControls() +void ServiceBaseFrame::createControls() { panel_controls = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL | wxCLIP_CHILDREN); @@ -173,7 +176,7 @@ void ThreadBaseFrame::createControls() } -void ThreadBaseFrame::layoutControls() +void ServiceBaseFrame::layoutControls() { sizerButtons = new wxBoxSizer(wxHORIZONTAL); @@ -190,7 +193,7 @@ void ThreadBaseFrame::layoutControls() } -void ThreadBaseFrame::update() +void ServiceBaseFrame::update() { DatabasePtr db = getDatabase(); if (db) @@ -199,14 +202,14 @@ void ThreadBaseFrame::update() Close(); } -void ThreadBaseFrame::updateControls() +void ServiceBaseFrame::updateControls() { bool running = getThreadRunning(); button_start->Enable(!running); } -void ThreadBaseFrame::updateMessages(size_t firstmsg, size_t lastmsg) +void ServiceBaseFrame::updateMessages(size_t firstmsg, size_t lastmsg) { if (lastmsg > msgsM.GetCount()) lastmsg = msgsM.GetCount(); @@ -230,25 +233,25 @@ void ThreadBaseFrame::updateMessages(size_t firstmsg, size_t lastmsg) //! event handlers -BEGIN_EVENT_TABLE(ThreadBaseFrame, BaseFrame) - EVT_MENU(ThreadBaseFrame::ID_thread_finished, ThreadBaseFrame::OnThreadFinished) - EVT_MENU(ThreadBaseFrame::ID_thread_output, ThreadBaseFrame::OnThreadOutput) +BEGIN_EVENT_TABLE(ServiceBaseFrame, BaseFrame) + EVT_MENU(ServiceBaseFrame::ID_thread_finished, ServiceBaseFrame::OnThreadFinished) + EVT_MENU(ServiceBaseFrame::ID_thread_output, ServiceBaseFrame::OnThreadOutput) END_EVENT_TABLE() -void ThreadBaseFrame::OnSettingsChange(wxCommandEvent& WXUNUSED(event)) +void ServiceBaseFrame::OnSettingsChange(wxCommandEvent& WXUNUSED(event)) { if (IsShown()) updateControls(); } -void ThreadBaseFrame::OnThreadFinished(wxCommandEvent& event) +void ServiceBaseFrame::OnThreadFinished(wxCommandEvent& event) { threadM = 0; OnThreadOutput(event); updateControls(); } -void ThreadBaseFrame::OnThreadOutput(wxCommandEvent& WXUNUSED(event)) +void ServiceBaseFrame::OnThreadOutput(wxCommandEvent& WXUNUSED(event)) { wxCriticalSectionLocker locker(critsectM); threadMsgTimeMillisM = ::wxGetLocalTimeMillis(); @@ -281,4 +284,103 @@ void ThreadBaseFrame::OnThreadOutput(wxCommandEvent& WXUNUSED(event)) updateMessages(first, msgsM.GetCount()); } +ServiceThread::ServiceThread(ServiceBaseFrame* frame, wxString server, + wxString username, wxString password, wxString rolename, + wxString charset) : + frameM(frame), serverM(server), usernameM(username), passwordM(password), + rolenameM(rolename), charsetM(charset), + wxThread() + +{ +} + +void* ServiceThread::Entry() +{ + wxDateTime now; + wxString msg; + + try + { + msg.Printf(_("Connecting to server %s..."), serverM.c_str()); + logImportant(msg); + IBPP::Service svc = IBPP::ServiceFactory(wx2std(serverM), + wx2std(usernameM), wx2std(passwordM), wx2std(rolenameM), wx2std(charsetM) + ); + svc->Connect(); + + now = wxDateTime::Now(); + msg.Printf(_("Database restore started %s"), now.FormatTime().c_str()); + logImportant(msg); + Execute(svc); + while (true) + { + if (TestDestroy()) + { + now = wxDateTime::Now(); + msg.Printf(_("Database restore canceled %s"), + now.FormatTime().c_str()); + logImportant(msg); + break; + } + const char* c = svc->WaitMsg(); + if (c == 0) + { + now = wxDateTime::Now(); + msg.Printf(_("Database restore finished %s"), + now.FormatTime().c_str()); + logImportant(msg); + break; + } + msg = c; + logProgress(msg); + } + svc->Disconnect(); + } + catch (IBPP::Exception& e) + { + now = wxDateTime::Now(); + msg.Printf(_("Database restore canceled %s due to IBPP exception:\n\n"), + now.FormatTime().c_str()); + msg += e.what(); + logError(msg); + } + catch (...) + { + now = wxDateTime::Now(); + msg.Printf(_("Database restore canceled %s due to exception"), + now.FormatTime().c_str()); + logError(msg); + } + return 0; +} + +void ServiceThread::OnExit() +{ + if (frameM != 0) + { + wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, + ServiceBaseFrame::ID_thread_finished); + wxPostEvent(frameM, event); + } + +} + +void ServiceThread::logError(wxString& msg) +{ + if (frameM != 0) + frameM->threadOutputMsg(msg, ServiceBaseFrame::error_message); +} + +void ServiceThread::logImportant(wxString& msg) +{ + if (frameM != 0) + frameM->threadOutputMsg(msg, ServiceBaseFrame::important_message); +} + +void ServiceThread::logProgress(wxString& msg) +{ + if (frameM != 0) + frameM->threadOutputMsg(msg, ServiceBaseFrame::progress_message); + +} diff --git a/src/gui/ThreadBaseFrame.h b/src/gui/ServiceBaseFrame.h similarity index 78% rename from src/gui/ThreadBaseFrame.h rename to src/gui/ServiceBaseFrame.h index 3f9e4049..46d7811b 100644 --- a/src/gui/ThreadBaseFrame.h +++ b/src/gui/ServiceBaseFrame.h @@ -22,8 +22,8 @@ */ -#ifndef THREADBASEFRAME_H -#define THREADBASEFRAME_H +#ifndef SERVICEBASEFRAME_H +#define SERVICEBASEFRAME_H #include #include @@ -38,8 +38,9 @@ class FileTextControl; class LogTextControl; -class ThreadBaseFrame: public BaseFrame, public Observer +class ServiceBaseFrame: public BaseFrame, public Observer { + friend class ServiceThread; public: enum MsgKind { progress_message, @@ -82,7 +83,7 @@ class ThreadBaseFrame: public BaseFrame, public Observer void updateMessages(size_t firstmsg, size_t lastmsg); - ThreadBaseFrame(wxWindow* parent, DatabasePtr db); + ServiceBaseFrame(wxWindow* parent, DatabasePtr db); private: DatabaseWeakPtr databaseM; wxThread* threadM; @@ -116,4 +117,30 @@ class ThreadBaseFrame: public BaseFrame, public Observer DECLARE_EVENT_TABLE() }; -#endif // THREADBASEFRAME_H + +class ServiceThread : public wxThread { +public: + ServiceThread(ServiceBaseFrame* frame, wxString server, + wxString username, wxString password, wxString rolename, + wxString charset + ); + + virtual void* Entry(); + virtual void OnExit(); + +protected: + virtual void Execute(IBPP::Service ) = 0; +private: + ServiceBaseFrame* frameM; + wxString serverM; + wxString usernameM; + wxString passwordM; + wxString rolenameM; + wxString charsetM; + + void logError(wxString& msg); + void logImportant(wxString& msg); + void logProgress(wxString& msg); +}; + +#endif // SERVICEBASEFRAME_H diff --git a/src/gui/ShutdownFrame.cpp b/src/gui/ShutdownFrame.cpp index 52b2256f..80dac598 100644 --- a/src/gui/ShutdownFrame.cpp +++ b/src/gui/ShutdownFrame.cpp @@ -46,138 +46,6 @@ #include "gui/UsernamePasswordDialog.h" #include "metadata/database.h" #include "metadata/server.h" - -// worker thread class to perform database Shutdown -class ShutdownThread: public wxThread { -public: - ShutdownThread(ShutdownFrame* frame, wxString server, - wxString username, wxString password, wxString rolename, wxString charset, - wxString dbfilename, IBPP::DSM flags, - int timeout); - - virtual void* Entry(); - virtual void OnExit(); -private: - ShutdownFrame* frameM; - wxString serverM; - wxString usernameM; - wxString passwordM; - wxString rolenameM; - wxString charsetM; - wxString dbfileM; - IBPP::DSM dsmM; - int timeoutM; - void logError(wxString& msg); - void logImportant(wxString& msg); - void logProgress(wxString& msg); -}; - -ShutdownThread::ShutdownThread(ShutdownFrame* frame, wxString server, - wxString username, wxString password, wxString rolename, wxString charset, - wxString dbfilename, - IBPP::DSM flags, int timeout) - : wxThread() -{ - frameM = frame; - serverM = server; - usernameM = username; - passwordM = password; - rolenameM = rolename; - charsetM = charset; - dbfileM = dbfilename; - // always use verbose flag - dsmM = (IBPP::DSM)((int)flags | (int)IBPP::brVerbose); - timeoutM = timeout; -} - -void* ShutdownThread::Entry() -{ - wxDateTime now; - wxString msg; - - try - { - msg.Printf(_("Connecting to server %s..."), serverM.c_str()); - logImportant(msg); - IBPP::Service svc = IBPP::ServiceFactory(wx2std(serverM), - wx2std(usernameM), wx2std(passwordM), wx2std(rolenameM), wx2std(charsetM) - ); - svc->Connect(); - - now = wxDateTime::Now(); - msg.Printf(_("Database Shutdown started %s"), now.FormatTime().c_str()); - logImportant(msg); - svc->Shutdown(wx2std(dbfileM), dsmM, timeoutM); - while (true) - { - if (TestDestroy()) - { - now = wxDateTime::Now(); - msg.Printf(_("Database Shutdown canceled %s"), - now.FormatTime().c_str()); - logImportant(msg); - break; - } - const char* c = svc->WaitMsg(); - if (c == 0) - { - now = wxDateTime::Now(); - msg.Printf(_("Database Shutdown finished %s"), - now.FormatTime().c_str()); - logImportant(msg); - break; - } - msg = c; - logProgress(msg); - } - svc->Disconnect(); - } - catch (IBPP::Exception& e) - { - now = wxDateTime::Now(); - msg.Printf(_("Database Shutdown canceled %s due to IBPP exception:\n\n"), - now.FormatTime().c_str()); - msg += e.what(); - logError(msg); - } - catch (...) - { - now = wxDateTime::Now(); - msg.Printf(_("Database Shutdown canceled %s due to exception"), - now.FormatTime().c_str()); - logError(msg); - } - return 0; -} - -void ShutdownThread::OnExit() -{ - if (frameM != 0) - { - wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, - ShutdownStartupBaseFrame::ID_thread_finished); - wxPostEvent(frameM, event); - } -} - -void ShutdownThread::logError(wxString& msg) -{ - if (frameM != 0) - frameM->threadOutputMsg(msg, ShutdownStartupBaseFrame::error_message); -} - -void ShutdownThread::logImportant(wxString& msg) -{ - if (frameM != 0) - frameM->threadOutputMsg(msg, ShutdownStartupBaseFrame::important_message); -} - -void ShutdownThread::logProgress(wxString& msg) -{ - if (frameM != 0) - frameM->threadOutputMsg(msg, ShutdownStartupBaseFrame::progress_message); -} - ShutdownFrame::ShutdownFrame(wxWindow* parent, DatabasePtr db) : ShutdownStartupBaseFrame(parent, db) { @@ -373,3 +241,17 @@ void ShutdownFrame::OnStartButtonClick(wxCommandEvent& WXUNUSED(event)) updateControls(); } +ShutdownThread::ShutdownThread(ShutdownFrame* frame, + wxString server, wxString username, wxString password, + wxString rolename, wxString charset, wxString dbfilename, + IBPP::DSM flags, int timeout) + :timeoutM(timeout), + ShutdownStartupThread(frame, server, username, password, + rolename, charset, dbfilename, flags) +{ +} + +void ShutdownThread::Execute(IBPP::Service svc) +{ + svc->Shutdown(wx2std(dbfileM), dsmM, timeoutM); +} diff --git a/src/gui/ShutdownFrame.h b/src/gui/ShutdownFrame.h index ee2de553..ade9b3a7 100644 --- a/src/gui/ShutdownFrame.h +++ b/src/gui/ShutdownFrame.h @@ -62,4 +62,18 @@ class ShutdownFrame: public ShutdownStartupBaseFrame { DECLARE_EVENT_TABLE() }; + +class ShutdownThread : public ShutdownStartupThread +{ +public: + ShutdownThread(ShutdownFrame* frame, wxString server, + wxString username, wxString password, wxString rolename, wxString charset, + wxString dbfilename, IBPP::DSM flags, int timeout); +protected: + virtual void Execute(IBPP::Service); + int timeoutM; + + + +}; #endif // FR_SHUTDOWNFRAME_H diff --git a/src/gui/ShutdownStartupBaseFrame.cpp b/src/gui/ShutdownStartupBaseFrame.cpp index 675d1399..38121894 100644 --- a/src/gui/ShutdownStartupBaseFrame.cpp +++ b/src/gui/ShutdownStartupBaseFrame.cpp @@ -43,7 +43,7 @@ ShutdownStartupBaseFrame::ShutdownStartupBaseFrame(wxWindow* parent, DatabasePtr db) - : ThreadBaseFrame(parent, db) + : ServiceBaseFrame(parent, db) { verboseMsgsM = true; @@ -62,7 +62,7 @@ void ShutdownStartupBaseFrame::cancelShutdownStartup() bool ShutdownStartupBaseFrame::Destroy() { cancelShutdownStartup(); - return ThreadBaseFrame::Destroy(); + return ServiceBaseFrame::Destroy(); } void ShutdownStartupBaseFrame::doReadConfigSettings(const wxString& prefix) @@ -93,7 +93,7 @@ const wxString ShutdownStartupBaseFrame::getStorageName() const void ShutdownStartupBaseFrame::createControls() { - ThreadBaseFrame::createControls(); + ServiceBaseFrame::createControls(); wxArrayString choices; choices.Add("normal"); @@ -108,7 +108,7 @@ void ShutdownStartupBaseFrame::createControls() void ShutdownStartupBaseFrame::layoutControls() { - ThreadBaseFrame::layoutControls(); + ServiceBaseFrame::layoutControls(); } void ShutdownStartupBaseFrame::subjectRemoved(Subject* subject) @@ -141,7 +141,6 @@ IBPP::DSM ShutdownStartupBaseFrame::getDatabaseMode() case 2 : return IBPP::dsMulti; break; - case 3 : return IBPP::dsFull; break; @@ -152,7 +151,7 @@ IBPP::DSM ShutdownStartupBaseFrame::getDatabaseMode() void ShutdownStartupBaseFrame::updateControls() { - ThreadBaseFrame::updateControls(); + ServiceBaseFrame::updateControls(); bool running = getThreadRunning(); @@ -161,7 +160,7 @@ void ShutdownStartupBaseFrame::updateControls() } //! event handlers -BEGIN_EVENT_TABLE(ShutdownStartupBaseFrame, ThreadBaseFrame) +BEGIN_EVENT_TABLE(ShutdownStartupBaseFrame, ServiceBaseFrame) EVT_MENU(ShutdownStartupBaseFrame::ID_thread_finished, ShutdownStartupBaseFrame::OnThreadFinished) EVT_MENU(ShutdownStartupBaseFrame::ID_thread_output, ShutdownStartupBaseFrame::OnThreadOutput) END_EVENT_TABLE() @@ -178,3 +177,11 @@ void ShutdownStartupBaseFrame::OnVerboseLogChange(wxCommandEvent& WXUNUSED(event updateMessages(0, msgsM.GetCount()); } +ShutdownStartupThread::ShutdownStartupThread(ShutdownStartupBaseFrame* frame, + wxString server, wxString username, wxString password, wxString rolename, + wxString charset, wxString dbfilename, IBPP::DSM flags) + :dbfileM(dbfilename), + ServiceThread(frame, server, username, password, rolename, charset) +{ + dsmM = (IBPP::DSM)((int)flags | (int)IBPP::brVerbose); +} diff --git a/src/gui/ShutdownStartupBaseFrame.h b/src/gui/ShutdownStartupBaseFrame.h index 8afaf108..feb01801 100644 --- a/src/gui/ShutdownStartupBaseFrame.h +++ b/src/gui/ShutdownStartupBaseFrame.h @@ -31,14 +31,11 @@ #include #include "core/Observer.h" -#include "gui/ThreadBaseFrame.h" +#include "gui/ServiceBaseFrame.h" #include "metadata/database.h" #include "metadata/MetadataClasses.h" -class FileTextControl; -class LogTextControl; - -class ShutdownStartupBaseFrame: public ThreadBaseFrame//, public Observer +class ShutdownStartupBaseFrame: public ServiceBaseFrame { public: @@ -80,4 +77,16 @@ class ShutdownStartupBaseFrame: public ThreadBaseFrame//, public Observer DECLARE_EVENT_TABLE() }; +class ShutdownStartupThread : public ServiceThread +{ +public: + ShutdownStartupThread(ShutdownStartupBaseFrame* frame, wxString server, + wxString username, wxString password, wxString rolename, wxString charset, + wxString dbfilename, IBPP::DSM flags + ); +protected: + wxString dbfileM; + IBPP::DSM dsmM; +}; + #endif // FR_SHUTDOWNSTARTUPBASEFRAME_H diff --git a/src/gui/StartupFrame.cpp b/src/gui/StartupFrame.cpp index d06a6543..7591ac44 100644 --- a/src/gui/StartupFrame.cpp +++ b/src/gui/StartupFrame.cpp @@ -47,134 +47,6 @@ #include "metadata/database.h" #include "metadata/server.h" -// worker thread class to perform database Start -class StartupThread: public wxThread { -public: - StartupThread(StartupFrame* frame, wxString server, - wxString username, wxString password, wxString rolename, wxString charset, - wxString dbfilename, IBPP::DSM flags); - - virtual void* Entry(); - virtual void OnExit(); -private: - StartupFrame* frameM; - wxString serverM; - wxString usernameM; - wxString passwordM; - wxString rolenameM; - wxString charsetM; - wxString dbfileM; - IBPP::DSM dsmM; - void logError(wxString& msg); - void logImportant(wxString& msg); - void logProgress(wxString& msg); -}; - -StartupThread::StartupThread(StartupFrame* frame, wxString server, - wxString username, wxString password, wxString rolename, wxString charset, - wxString dbfilename, - IBPP::DSM flags) - : wxThread() -{ - frameM = frame; - serverM = server; - usernameM = username; - passwordM = password; - rolenameM = rolename; - charsetM = charset; - dbfileM = dbfilename; - // always use verbose flag - dsmM = (IBPP::DSM)((int)flags | (int)IBPP::brVerbose); -} - -void* StartupThread::Entry() -{ - wxDateTime now; - wxString msg; - - try - { - msg.Printf(_("Connecting to server %s..."), serverM.c_str()); - logImportant(msg); - IBPP::Service svc = IBPP::ServiceFactory(wx2std(serverM), - wx2std(usernameM), wx2std(passwordM), wx2std(rolenameM), wx2std(charsetM) - ); - svc->Connect(); - - now = wxDateTime::Now(); - msg.Printf(_("Database startup started %s"), now.FormatTime().c_str()); - logImportant(msg); - svc->Restart(wx2std(dbfileM), dsmM); - while (true) - { - if (TestDestroy()) - { - now = wxDateTime::Now(); - msg.Printf(_("Database startup canceled %s"), - now.FormatTime().c_str()); - logImportant(msg); - break; - } - const char* c = svc->WaitMsg(); - if (c == 0) - { - now = wxDateTime::Now(); - msg.Printf(_("Database startup finished %s"), - now.FormatTime().c_str()); - logImportant(msg); - break; - } - msg = c; - logProgress(msg); - } - svc->Disconnect(); - } - catch (IBPP::Exception& e) - { - now = wxDateTime::Now(); - msg.Printf(_("Database startup canceled %s due to IBPP exception:\n\n"), - now.FormatTime().c_str()); - msg += e.what(); - logError(msg); - } - catch (...) - { - now = wxDateTime::Now(); - msg.Printf(_("Database startup canceled %s due to exception"), - now.FormatTime().c_str()); - logError(msg); - } - return 0; -} - -void StartupThread::OnExit() -{ - if (frameM != 0) - { - wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, - ShutdownStartupBaseFrame::ID_thread_finished); - wxPostEvent(frameM, event); - } -} - -void StartupThread::logError(wxString& msg) -{ - if (frameM != 0) - frameM->threadOutputMsg(msg, ShutdownStartupBaseFrame::error_message); -} - -void StartupThread::logImportant(wxString& msg) -{ - if (frameM != 0) - frameM->threadOutputMsg(msg, ShutdownStartupBaseFrame::important_message); -} - -void StartupThread::logProgress(wxString& msg) -{ - if (frameM != 0) - frameM->threadOutputMsg(msg, ShutdownStartupBaseFrame::progress_message); -} - StartupFrame::StartupFrame(wxWindow* parent, DatabasePtr db) : ShutdownStartupBaseFrame(parent, db) { @@ -312,3 +184,16 @@ void StartupFrame::OnStartButtonClick(wxCommandEvent& WXUNUSED(event)) updateControls(); } +StartupThread::StartupThread(StartupFrame* frame, + wxString server, wxString username, wxString password, + wxString rolename, wxString charset, wxString + dbfilename, IBPP::DSM flags) + :ShutdownStartupThread(frame, server, username, password, + rolename, charset, dbfilename, flags) +{ +} + +void StartupThread::Execute(IBPP::Service svc) +{ + svc->Restart(wx2std(dbfileM), dsmM); +} diff --git a/src/gui/StartupFrame.h b/src/gui/StartupFrame.h index cccc54ae..4c850623 100644 --- a/src/gui/StartupFrame.h +++ b/src/gui/StartupFrame.h @@ -56,4 +56,17 @@ class StartupFrame: public ShutdownStartupBaseFrame { DECLARE_EVENT_TABLE() }; + +class StartupThread : public ShutdownStartupThread +{ +public: + StartupThread(StartupFrame* frame, wxString server, + wxString username, wxString password, wxString rolename, wxString charset, + wxString dbfilename, IBPP::DSM flags); +protected: + virtual void Execute(IBPP::Service); + + +}; + #endif // FR_STARTUPFRAME_H diff --git a/src/ibpp/_ibpp.h b/src/ibpp/_ibpp.h index 8dcdacf8..bb6c770d 100644 --- a/src/ibpp/_ibpp.h +++ b/src/ibpp/_ibpp.h @@ -809,17 +809,17 @@ class ServiceImpl : public IBPP::IService void StartBackup( const std::string& dbfile, const std::string& bkfile, const std::string& outfile = "", - const int factor = 0, - IBPP::BRF flags = IBPP::BRF(0), + const int factor = 0, IBPP::BRF flags = IBPP::BRF(0), const std::string& cryptName = "", const std::string& keyHolder = "", const std::string& keyName = "", - const std::string& skipData = "", const std::string& includeData = "", const int verboseInteval = 0 + const std::string& skipData = "", const std::string& includeData = "", const int verboseInteval = 0, + const int parallelWorkers = 0 ); void StartRestore( const std::string& bkfile, const std::string& dbfile, const std::string& outfile = "", - int pagesize = 0, int buffers = 0, - IBPP::BRF flags = IBPP::BRF(0), + int pagesize = 0, int buffers = 0, IBPP::BRF flags = IBPP::BRF(0), const std::string& cryptName = "", const std::string& keyHolder = "", const std::string& keyName = "", - const std::string& skipData = "", const std::string& includeData = "", const int verboseInteval = 0 + const std::string& skipData = "", const std::string& includeData = "", const int verboseInteval = 0, + const int parallelWorkers = 0 ); const char* WaitMsg(); diff --git a/src/ibpp/ibpp.h b/src/ibpp/ibpp.h index 7deae178..0f732e0b 100644 --- a/src/ibpp/ibpp.h +++ b/src/ibpp/ibpp.h @@ -638,18 +638,18 @@ namespace IBPP virtual void StartBackup( const std::string& dbfile,const std::string& bkfile, const std::string& outfile = "", - const int factor = 0, - BRF flags = BRF(0), + const int factor = 0, BRF flags = BRF(0), const std::string& cryptName = "", const std::string& keyHolder="", const std::string& keyName="", - const std::string& skipData = "", const std::string& includeData = "", const int verboseInteval = 0 + const std::string& skipData = "", const std::string& includeData = "", const int verboseInteval = 0, + const int parallelWorkers = 0 ) = 0; virtual void StartRestore( const std::string& bkfile, const std::string& dbfile, const std::string& outfile = "", - int pagesize = 0, int buffers = 0, - BRF flags = BRF(0), + int pagesize = 0, int buffers = 0, BRF flags = BRF(0), const std::string & cryptName = "", const std::string & keyHolder = "", const std::string & keyName = "", - const std::string & skipData = "", const std::string & includeData = "", const int verboseInteval = 0 + const std::string & skipData = "", const std::string & includeData = "", const int verboseInteval = 0, + const int parallelWorkers = 0 ) = 0; virtual const char* WaitMsg() = 0; // With reporting (does not block) diff --git a/src/ibpp/service.cpp b/src/ibpp/service.cpp index 260a1745..f109ba26 100644 --- a/src/ibpp/service.cpp +++ b/src/ibpp/service.cpp @@ -601,10 +601,11 @@ void ServiceImpl::Repair(const std::string& dbfile, IBPP::RPF flags) void ServiceImpl::StartBackup( const std::string& dbfile, const std::string& bkfile, const std::string& outfile, - const int factor, - IBPP::BRF flags, + const int factor, IBPP::BRF flags, const std::string& cryptName, const std::string& keyHolder, const std::string& keyName, - const std::string& skipData, const std::string& includeData, const int verboseInteval) + const std::string& skipData, const std::string& includeData, const int verboseInteval, + const int parallelWorkers + ) { if (mHandle == 0) throw LogicExceptionImpl("Service::Backup", _("Service is not connected.")); @@ -637,6 +638,9 @@ void ServiceImpl::StartBackup( if (!includeData.empty() && versionIsHigherOrEqualTo(4, 0)) spb.InsertString(isc_spb_bkp_include_data, 2, includeData.c_str()); + if (parallelWorkers > 0 && versionIsHigherOrEqualTo(3, 0)) + spb.InsertQuad(isc_spb_bkp_parallel_workers, parallelWorkers); + if (versionIsHigherOrEqualTo(4, 0)) { if (!cryptName.empty()) spb.InsertString(isc_spb_bkp_crypt, 2, cryptName.c_str()); @@ -685,11 +689,11 @@ void ServiceImpl::StartBackup( void ServiceImpl::StartRestore( const std::string& bkfile, const std::string& dbfile, const std::string& outfile, - int pagesize, int buffers, - IBPP::BRF flags, + int pagesize, int buffers, IBPP::BRF flags, const std::string& cryptName, const std::string& keyHolder, const std::string& keyName, - const std::string& skipData, const std::string& includeData, const int verboseInteval -) + const std::string& skipData, const std::string& includeData, const int verboseInteval, + const int parallelWorkers + ) { if (mHandle == 0) throw LogicExceptionImpl("Service::Restore", _("Service is not connected.")); @@ -719,6 +723,8 @@ void ServiceImpl::StartRestore( if (buffers > 0) spb.InsertQuad(isc_spb_res_buffers, buffers); + if (parallelWorkers > 0 && versionIsHigherOrEqualTo(3, 0)) + spb.InsertQuad(isc_spb_bkp_parallel_workers, parallelWorkers); if (!skipData.empty() && versionIsHigherOrEqualTo(3, 0)) spb.InsertString(isc_spb_res_skip_data, 2, skipData.c_str());