first commit
This commit is contained in:
parent
1e9f40ec9b
commit
a76f32ea30
38
RsyncUI.pro
Normal file
38
RsyncUI.pro
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
QT += core gui concurrent
|
||||||
|
QT += KItemViews
|
||||||
|
QT += KCompletion
|
||||||
|
QT += widgets
|
||||||
|
|
||||||
|
#LIBS += -lKF5WindowSystem
|
||||||
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||||
|
|
||||||
|
CONFIG += c++11
|
||||||
|
|
||||||
|
# You can make your code fail to compile if it uses deprecated APIs.
|
||||||
|
# In order to do so, uncomment the following line.
|
||||||
|
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
downloadfile.cpp \
|
||||||
|
main.cpp \
|
||||||
|
mainwindow.cpp \
|
||||||
|
tools.cpp
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
downloadfile.h \
|
||||||
|
mainwindow.h \
|
||||||
|
tools.h
|
||||||
|
|
||||||
|
FORMS += \
|
||||||
|
mainwindow.ui
|
||||||
|
|
||||||
|
TRANSLATIONS += \
|
||||||
|
RsyncUI_fr_FR.ts
|
||||||
|
|
||||||
|
INCLUDEPATH += \
|
||||||
|
/usr/include/KF5
|
||||||
|
|
||||||
|
# Default rules for deployment.
|
||||||
|
qnx: target.path = /tmp/$${TARGET}/bin
|
||||||
|
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||||
|
!isEmpty(target.path): INSTALLS += target
|
319
RsyncUI.pro.user
Normal file
319
RsyncUI.pro.user
Normal file
@ -0,0 +1,319 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE QtCreatorProject>
|
||||||
|
<!-- Written by QtCreator 4.14.2, 2023-01-05T23:51:06. -->
|
||||||
|
<qtcreator>
|
||||||
|
<data>
|
||||||
|
<variable>EnvironmentId</variable>
|
||||||
|
<value type="QByteArray">{a3117c94-e673-4dca-aa4c-050bbea034fe}</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||||
|
<value type="int">0</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
|
||||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
||||||
|
<value type="QString" key="language">Cpp</value>
|
||||||
|
<valuemap type="QVariantMap" key="value">
|
||||||
|
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
||||||
|
<value type="QString" key="language">QmlJS</value>
|
||||||
|
<valuemap type="QVariantMap" key="value">
|
||||||
|
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
|
||||||
|
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
||||||
|
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
||||||
|
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
|
||||||
|
<value type="bool" key="AutoTest.Framework.Boost">true</value>
|
||||||
|
<value type="bool" key="AutoTest.Framework.Catch">true</value>
|
||||||
|
<value type="bool" key="AutoTest.Framework.GTest">true</value>
|
||||||
|
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
|
||||||
|
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
|
||||||
|
<value type="int" key="AutoTest.RunAfterBuild">0</value>
|
||||||
|
<value type="bool" key="AutoTest.UseGlobal">true</value>
|
||||||
|
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
|
||||||
|
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
|
||||||
|
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.Questionable</value>
|
||||||
|
<valuemap type="QVariantMap" key="ClangTools">
|
||||||
|
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
|
||||||
|
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
|
||||||
|
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
|
||||||
|
<value type="int" key="ClangTools.ParallelJobs">2</value>
|
||||||
|
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
|
||||||
|
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
|
||||||
|
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
|
||||||
|
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Target.0</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="QString" key="DeviceType">Desktop</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{893f9ca6-0efa-4c08-a4a6-5a818f60a8a0}</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||||
|
<value type="int" key="EnableQmlDebugging">0</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/daniel/develope/build-RsyncUI-Desktop-Debug</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/daniel/develope/build-RsyncUI-Desktop-Debug</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
||||||
|
<value type="int" key="RunSystemFunction">0</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/daniel/develope/build-RsyncUI-Desktop-Release</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/daniel/develope/build-RsyncUI-Desktop-Release</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
|
<value type="int" key="QtQuickCompiler">0</value>
|
||||||
|
<value type="int" key="RunSystemFunction">0</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
||||||
|
<value type="int" key="EnableQmlDebugging">0</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/daniel/develope/build-RsyncUI-Desktop-Profile</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/daniel/develope/build-RsyncUI-Desktop-Profile</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
|
<value type="int" key="QtQuickCompiler">0</value>
|
||||||
|
<value type="int" key="RunSystemFunction">0</value>
|
||||||
|
<value type="int" key="SeparateDebugInfo">0</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
|
||||||
|
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||||
|
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
|
||||||
|
<value type="QString">cpu-cycles</value>
|
||||||
|
</valuelist>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
|
||||||
|
<value type="int" key="Analyzer.Perf.Frequency">250</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
|
||||||
|
<value type="QString">-e</value>
|
||||||
|
<value type="QString">cpu-cycles</value>
|
||||||
|
<value type="QString">--call-graph</value>
|
||||||
|
<value type="QString">dwarf,4096</value>
|
||||||
|
<value type="QString">-F</value>
|
||||||
|
<value type="QString">250</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
|
||||||
|
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
|
||||||
|
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
|
||||||
|
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
||||||
|
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
||||||
|
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
||||||
|
<value type="int">0</value>
|
||||||
|
<value type="int">1</value>
|
||||||
|
<value type="int">2</value>
|
||||||
|
<value type="int">3</value>
|
||||||
|
<value type="int">4</value>
|
||||||
|
<value type="int">5</value>
|
||||||
|
<value type="int">6</value>
|
||||||
|
<value type="int">7</value>
|
||||||
|
<value type="int">8</value>
|
||||||
|
<value type="int">9</value>
|
||||||
|
<value type="int">10</value>
|
||||||
|
<value type="int">11</value>
|
||||||
|
<value type="int">12</value>
|
||||||
|
<value type="int">13</value>
|
||||||
|
<value type="int">14</value>
|
||||||
|
</valuelist>
|
||||||
|
<valuelist type="QVariantList" key="CustomOutputParsers"/>
|
||||||
|
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||||
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/daniel/develope/RsyncUI/RsyncUI.pro</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/daniel/develope/RsyncUI/RsyncUI.pro</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||||
|
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/daniel/develope/build-RsyncUI-Desktop-Debug</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.TargetCount</variable>
|
||||||
|
<value type="int">1</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
||||||
|
<value type="int">22</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>Version</variable>
|
||||||
|
<value type="int">22</value>
|
||||||
|
</data>
|
||||||
|
</qtcreator>
|
BIN
RsyncUI_fr_FR.qm
Normal file
BIN
RsyncUI_fr_FR.qm
Normal file
Binary file not shown.
67
RsyncUI_fr_FR.ts
Normal file
67
RsyncUI_fr_FR.ts
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1" language="fr_FR">
|
||||||
|
<context>
|
||||||
|
<name>Dialog</name>
|
||||||
|
<message>
|
||||||
|
<location filename="downloadProgress.ui" line="20"/>
|
||||||
|
<source>Dialog</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="downloadProgress.ui" line="32"/>
|
||||||
|
<source>TextLabel</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>MainWindow</name>
|
||||||
|
<message>
|
||||||
|
<location filename="mainwindow.ui" line="21"/>
|
||||||
|
<source>MainWindow</source>
|
||||||
|
<translation>Fenêtre principale</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="mainwindow.ui" line="80"/>
|
||||||
|
<source>Server</source>
|
||||||
|
<oldsource>Serveur</oldsource>
|
||||||
|
<translation>Serveur</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="mainwindow.ui" line="112"/>
|
||||||
|
<source>Port</source>
|
||||||
|
<translation>Port</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="mainwindow.ui" line="278"/>
|
||||||
|
<source>%p%</source>
|
||||||
|
<extracomment>Downloading</extracomment>
|
||||||
|
<translation>Téléchargement</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="mainwindow.ui" line="295"/>
|
||||||
|
<source>debug</source>
|
||||||
|
<translation>debug</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="mainwindow.cpp" line="34"/>
|
||||||
|
<source>Path</source>
|
||||||
|
<translation>Chemin</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="mainwindow.cpp" line="34"/>
|
||||||
|
<source>Size</source>
|
||||||
|
<translation>Taille</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="mainwindow.cpp" line="233"/>
|
||||||
|
<source>server does not exists</source>
|
||||||
|
<translation>Le serveur n'existe pas</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="mainwindow.cpp" line="326"/>
|
||||||
|
<source>Choose directory to save file</source>
|
||||||
|
<translation>Choisissez le dossier où enregistrer</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|
103
downloadfile.cpp
Normal file
103
downloadfile.cpp
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
#include "downloadfile.h"
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#include "ui_mainwindow.h"
|
||||||
|
#include "tools.h"
|
||||||
|
#include <pstreams/pstream.h>
|
||||||
|
#include <sstream>
|
||||||
|
#include <string>
|
||||||
|
#include <cstring>
|
||||||
|
#include <iostream>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <vector>
|
||||||
|
#include <boost/algorithm/string/replace.hpp>
|
||||||
|
#include <memory>
|
||||||
|
#include <stdexcept>
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
downloadFile::downloadFile()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void downloadFile::cancelled()
|
||||||
|
{
|
||||||
|
this->canceled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void downloadFile::download(QString savePath, MainWindow *mw)
|
||||||
|
{
|
||||||
|
string server;
|
||||||
|
string service;
|
||||||
|
string path;
|
||||||
|
string line;
|
||||||
|
string errorRsync;
|
||||||
|
char cmd[4096];
|
||||||
|
int portN;
|
||||||
|
int pos;
|
||||||
|
int pid;
|
||||||
|
QTreeWidgetItem * item;
|
||||||
|
stringstream output;
|
||||||
|
// QString savePath = ".";
|
||||||
|
vector<string> v;
|
||||||
|
int value;
|
||||||
|
//char command_out[1024] = {0};
|
||||||
|
array<char, 2048> buffer;
|
||||||
|
|
||||||
|
server.assign(mw->ui->khistorycombobox->currentText().toStdString());
|
||||||
|
portN = mw->ui->portEdit->text().toInt();
|
||||||
|
service = mw->ui->listWidget->currentItem()->text().toStdString();
|
||||||
|
pos = service.find_first_of('\n');
|
||||||
|
service.resize(pos);
|
||||||
|
|
||||||
|
item = mw->ui->treeWidget->currentItem();
|
||||||
|
path = item->text(0).toStdString();
|
||||||
|
while(item->parent() != NULL)
|
||||||
|
{
|
||||||
|
item = item->parent();
|
||||||
|
path = item->text(0).toStdString() + "/" + path;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
sprintf(cmd, "rsync --bwlimit=100K --port %i -P %s::\"%s/%s\" \"%s/\" 2>&1", portN, server.c_str(), service.c_str(), path.c_str(), savePath.toStdString().c_str());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd, "r"), pclose);
|
||||||
|
FILE * fp = popen2(cmd, "r", pid);
|
||||||
|
|
||||||
|
if (!fp)
|
||||||
|
{
|
||||||
|
throw runtime_error("popen2() failed!");
|
||||||
|
}
|
||||||
|
|
||||||
|
while (fgets(buffer.data(), buffer.size(), fp) != nullptr)
|
||||||
|
{
|
||||||
|
buffer.data();
|
||||||
|
if (this->canceled == true)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
line = buffer.data();
|
||||||
|
//cout << line << endl;
|
||||||
|
pos = line.find('%');
|
||||||
|
if (pos != -1)
|
||||||
|
{
|
||||||
|
line.erase(pos);
|
||||||
|
pos = line.find_last_of(' ');
|
||||||
|
if (pos != -1)
|
||||||
|
{
|
||||||
|
line.erase(0, pos);
|
||||||
|
value = stoi(line);
|
||||||
|
cout << value << endl;
|
||||||
|
emit progressSignal(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buffer.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
//cout << path << endl;
|
||||||
|
}
|
||||||
|
|
24
downloadfile.h
Normal file
24
downloadfile.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#ifndef DOWNLOADFILE_H
|
||||||
|
#define DOWNLOADFILE_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include "ui_mainwindow.h"
|
||||||
|
|
||||||
|
class MainWindow;
|
||||||
|
|
||||||
|
class downloadFile : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
downloadFile();
|
||||||
|
void download(QString savePath, MainWindow *parent = nullptr);
|
||||||
|
bool canceled;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void progressSignal(int);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void cancelled();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // DOWNLOADFILE_H
|
10
main.cpp
Normal file
10
main.cpp
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#include "mainwindow.h"
|
||||||
|
#include <QApplication>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
MainWindow w;
|
||||||
|
w.show();
|
||||||
|
return a.exec();
|
||||||
|
}
|
344
mainwindow.cpp
Normal file
344
mainwindow.cpp
Normal file
@ -0,0 +1,344 @@
|
|||||||
|
#include "mainwindow.h"
|
||||||
|
#include "ui_mainwindow.h"
|
||||||
|
#include "downloadfile.h"
|
||||||
|
#include "tools.h"
|
||||||
|
#include <iostream>
|
||||||
|
#include <KTreeWidgetSearchLineWidget>
|
||||||
|
#include <pstreams/pstream.h>
|
||||||
|
#include <sstream>
|
||||||
|
#include <string>
|
||||||
|
#include <cstring>
|
||||||
|
#include <iostream>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <vector>
|
||||||
|
#include <boost/algorithm/string/replace.hpp>
|
||||||
|
#include <QFuture>
|
||||||
|
#include <QtConcurrent>
|
||||||
|
#include <qtconcurrentrun.h>
|
||||||
|
#include <QFileDialog>
|
||||||
|
#include <QThread>
|
||||||
|
#include <QProgressDialog>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
bool display = false;
|
||||||
|
|
||||||
|
MainWindow::MainWindow(QWidget *parent)
|
||||||
|
: QMainWindow(parent)
|
||||||
|
, ui(new Ui::MainWindow)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
ui->ktreewidgetsearchline->setTreeWidget(ui->treeWidget);
|
||||||
|
ui->ktreewidgetsearchline->setCaseSensitivity(Qt::CaseInsensitive);
|
||||||
|
ui->treeWidget->setHeaderLabels({tr("Path"), tr("Size")} );
|
||||||
|
ui->progressBar->hide();
|
||||||
|
populateList();
|
||||||
|
}
|
||||||
|
|
||||||
|
MainWindow::~MainWindow()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::populateTree()
|
||||||
|
{
|
||||||
|
string server;
|
||||||
|
string port;
|
||||||
|
int portN;
|
||||||
|
stringstream ss;
|
||||||
|
vector<string> path;
|
||||||
|
|
||||||
|
server.assign(ui->khistorycombobox->currentText().toStdString());
|
||||||
|
port.assign(ui->portEdit->text().toStdString());
|
||||||
|
ss << port;
|
||||||
|
ss >> portN;
|
||||||
|
if (!server.empty() and !port.empty() and portN < 65536)
|
||||||
|
{
|
||||||
|
if (validateServer(server))
|
||||||
|
{
|
||||||
|
ui->treeWidget->cursor().setShape(Qt::WaitCursor);
|
||||||
|
path = explode(ui->listWidget->currentItem()->text().toStdString(), '\n', 2);
|
||||||
|
scanDir(server, portN, NULL, path[0].append("/") );
|
||||||
|
ui->treeWidget->cursor().setShape(Qt::ArrowCursor);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::populateList()
|
||||||
|
{
|
||||||
|
string server;
|
||||||
|
string port;
|
||||||
|
int portN;
|
||||||
|
stringstream ss;
|
||||||
|
|
||||||
|
server.assign(ui->khistorycombobox->currentText().toStdString());
|
||||||
|
port.assign(ui->portEdit->text().toStdString());
|
||||||
|
ss << port;
|
||||||
|
ss >> portN;
|
||||||
|
if (!server.empty() and !port.empty() and portN < 65536)
|
||||||
|
{
|
||||||
|
if (validateServer(server))
|
||||||
|
{
|
||||||
|
ui->centralwidget->cursor().setShape(Qt::WaitCursor);
|
||||||
|
listServices(server, portN);
|
||||||
|
ui->centralwidget->cursor().setShape(Qt::ArrowCursor);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::listServices(string server, int portN)
|
||||||
|
{
|
||||||
|
char cmd[4096];
|
||||||
|
string line;
|
||||||
|
string errorRsync;
|
||||||
|
vector<string> v;
|
||||||
|
char service[4096];
|
||||||
|
|
||||||
|
sprintf(cmd, "rsync --contimeout=10 -P \"%s::\" --port %d ", server.c_str(), portN );
|
||||||
|
redi::ipstream in(cmd, redi::pstreams::pstdout | redi::pstreams::pstderr);
|
||||||
|
while (getline(in.out(), line))
|
||||||
|
{
|
||||||
|
cout << "stdout: " << line << endl;
|
||||||
|
boost::replace_all(line," ","");
|
||||||
|
boost::replace_all(line, "\t", " - ");
|
||||||
|
v = explode(line, ' ', 3 );
|
||||||
|
sprintf(service, "%s\n\t%s", v[0].c_str(), v[2].c_str());
|
||||||
|
ui->listWidget->addItem(service);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::scanDir(string server, int portN, QTreeWidgetItem *parent, string path)
|
||||||
|
{
|
||||||
|
char cmd[4096];
|
||||||
|
string line;
|
||||||
|
string errorRsync;
|
||||||
|
vector<string> v;
|
||||||
|
QTreeWidgetItem * item;
|
||||||
|
char npath[4096];
|
||||||
|
|
||||||
|
sprintf(cmd, "rsync --contimeout=10 -P \"%s::%s\" --port %d ", server.c_str(), path.c_str(), portN );
|
||||||
|
redi::ipstream in(cmd, redi::pstreams::pstdout | redi::pstreams::pstderr);
|
||||||
|
|
||||||
|
while (getline(in.out(), line))
|
||||||
|
{
|
||||||
|
|
||||||
|
v = explode(line, ' ', 5);
|
||||||
|
if (v.size() == 5)
|
||||||
|
{
|
||||||
|
if (v[4].at(0) != '.' and (v[0].at(0) == '-' or v[0].at(0) == 'd'))
|
||||||
|
{
|
||||||
|
if (parent != NULL)
|
||||||
|
{
|
||||||
|
item = addTreeChild(parent,QString::fromStdString(v[4]), QString::fromStdString(v[1]));
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
item = addTreeRoot(QString::fromStdString(v[4]), QString::fromStdString(v[1]));
|
||||||
|
}
|
||||||
|
if (v[0].at(0) == 'd')
|
||||||
|
{
|
||||||
|
sprintf(npath, "%s%s/", path.c_str(), v[4].c_str());
|
||||||
|
scanDir(server, portN, item, npath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// if reading stdout stopped at EOF then reset the state:
|
||||||
|
if (in.eof() && in.fail())
|
||||||
|
in.clear();
|
||||||
|
// read child's stderr
|
||||||
|
while (getline(in.err(), line))
|
||||||
|
{
|
||||||
|
cout << "stderr: " << line << endl;
|
||||||
|
errorRsync.append(line);
|
||||||
|
errorRsync.append("\n");
|
||||||
|
}
|
||||||
|
if ( !errorRsync.empty())
|
||||||
|
{
|
||||||
|
QMessageBox::warning(
|
||||||
|
this,
|
||||||
|
"RsyncUI",
|
||||||
|
errorRsync.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MainWindow::isIpAddress(string server)
|
||||||
|
{
|
||||||
|
bool returnCode = false;
|
||||||
|
vector<string> r;
|
||||||
|
stringstream ss;
|
||||||
|
int elementN;
|
||||||
|
|
||||||
|
r = explode(server, '.');
|
||||||
|
if (r.size() == 4)
|
||||||
|
{
|
||||||
|
for (auto element : r)
|
||||||
|
{
|
||||||
|
ss << element;
|
||||||
|
ss >> elementN;
|
||||||
|
if (elementN >0 and elementN < 256)
|
||||||
|
{
|
||||||
|
returnCode &= true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return returnCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MainWindow::validateServer(string server)
|
||||||
|
{
|
||||||
|
char cmd[512];
|
||||||
|
string line;
|
||||||
|
string errorDig;
|
||||||
|
bool flag = false;
|
||||||
|
|
||||||
|
sprintf(cmd, "dig %s", server.c_str());
|
||||||
|
redi::ipstream in(cmd, redi::pstreams::pstdout | redi::pstreams::pstderr);
|
||||||
|
|
||||||
|
while (getline(in.out(), line))
|
||||||
|
{
|
||||||
|
cout << "stdout: " << line << '\n';
|
||||||
|
if (line.find(";; ANSWER SECTION:") != string::npos)
|
||||||
|
{
|
||||||
|
flag = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// if reading stdout stopped at EOF then reset the state:
|
||||||
|
if (in.eof() && in.fail())
|
||||||
|
in.clear();
|
||||||
|
// read child's stderr
|
||||||
|
while (std::getline(in.err(), line))
|
||||||
|
{
|
||||||
|
cout << "stderr: " << line << '\n';
|
||||||
|
errorDig.append(line);
|
||||||
|
errorDig.append("\n");
|
||||||
|
}
|
||||||
|
if ( !errorDig.empty())
|
||||||
|
{
|
||||||
|
QMessageBox::warning(
|
||||||
|
this,
|
||||||
|
"RsyncUI",
|
||||||
|
errorDig.c_str()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if ( flag == false)
|
||||||
|
{
|
||||||
|
flag = isIpAddress(server);
|
||||||
|
QMessageBox::warning(
|
||||||
|
this,
|
||||||
|
"RsyncUI",
|
||||||
|
tr("server does not exists" )
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::displayTree()
|
||||||
|
{
|
||||||
|
populateTree();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_khistorycombobox_returnPressed()
|
||||||
|
{
|
||||||
|
populateList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*void MainWindow::on_portEdit_userTextChanged()
|
||||||
|
{
|
||||||
|
populateTree();
|
||||||
|
}*/
|
||||||
|
|
||||||
|
void MainWindow::on_portEdit_returnPressed()
|
||||||
|
{
|
||||||
|
populateList();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_khistorycombobox_textActivated()
|
||||||
|
{
|
||||||
|
populateList();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_treeWidget_itemClicked(QTreeWidgetItem *item, int column)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_treeWidget_customContextMenuRequested()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_actionDownload_triggered()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
QTreeWidgetItem * MainWindow::addTreeRoot(QString name, QString fileSize)
|
||||||
|
{
|
||||||
|
// QTreeWidgetItem(QTreeWidget * parent, int type = Type)
|
||||||
|
QTreeWidgetItem *treeItem = new QTreeWidgetItem(ui->treeWidget);
|
||||||
|
|
||||||
|
// QTreeWidgetItem::setText(int column, const QString & text)
|
||||||
|
treeItem->setText(0, name);
|
||||||
|
treeItem->setText(1, fileSize);
|
||||||
|
return treeItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTreeWidgetItem * MainWindow::addTreeChild(QTreeWidgetItem *parent, QString name, QString fileSize)
|
||||||
|
{
|
||||||
|
// QTreeWidgetItem(QTreeWidget * parent, int type = Type)
|
||||||
|
QTreeWidgetItem *treeItem = new QTreeWidgetItem();
|
||||||
|
|
||||||
|
// QTreeWidgetItem::setText(int column, const QString & text)
|
||||||
|
treeItem->setText(0, name);
|
||||||
|
treeItem->setText(1, fileSize);
|
||||||
|
|
||||||
|
// QTreeWidgetItem::addChild(QTreeWidgetItem * child)
|
||||||
|
parent->addChild(treeItem);
|
||||||
|
return treeItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_listWidget_clicked(const QModelIndex &index)
|
||||||
|
{
|
||||||
|
populateTree();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_listDownload_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
|
||||||
|
{
|
||||||
|
cout << current->text().toStdString() << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)
|
||||||
|
{
|
||||||
|
string path;
|
||||||
|
QFuture<void> future;
|
||||||
|
QFutureWatcher<void> watcher;
|
||||||
|
QString savePath;
|
||||||
|
QFileDialog dialog;
|
||||||
|
QString dirPath;
|
||||||
|
/*int p[2];
|
||||||
|
|
||||||
|
if (pipe(p) < 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}*/
|
||||||
|
dirPath = getenv("HOME");
|
||||||
|
dirPath.append("/Vidéos/");
|
||||||
|
savePath = dialog.getExistingDirectory(this, tr("Choose directory to save file"), dirPath, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
|
||||||
|
downloadFile downloadO;
|
||||||
|
|
||||||
|
|
||||||
|
//QProgressDialog progress("Downloading file ...", "Abort Download", 0, 100, this);
|
||||||
|
|
||||||
|
ui->progressBar->setWindowModality(Qt::WindowModal);
|
||||||
|
ui->progressBar->setValue(0);
|
||||||
|
ui->progressBar->show();
|
||||||
|
connect(&watcher, &QFutureWatcherBase::finished, ui->progressBar, &QProgressBar::hide);
|
||||||
|
connect(&downloadO, &downloadFile::progressSignal, ui->progressBar, &QProgressBar::setValue);
|
||||||
|
future = QtConcurrent::run(&this->MyObject, &downloadFile::download, savePath, this);
|
||||||
|
watcher.setFuture(future);
|
||||||
|
}
|
61
mainwindow.h
Normal file
61
mainwindow.h
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
#ifndef MAINWINDOW_H
|
||||||
|
#define MAINWINDOW_H
|
||||||
|
|
||||||
|
#include <QMainWindow>
|
||||||
|
#include <string>
|
||||||
|
#include <QTreeWidgetItem>
|
||||||
|
#include <QListWidgetItem>
|
||||||
|
#include "downloadfile.h"
|
||||||
|
#include <QProgressDialog>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
namespace Ui { class MainWindow; }
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
class MainWindow : public QMainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
Ui::MainWindow *ui;
|
||||||
|
MainWindow(QWidget *parent = nullptr);
|
||||||
|
~MainWindow();
|
||||||
|
QProgressDialog *progress;
|
||||||
|
void displayTree();
|
||||||
|
void populateTree();
|
||||||
|
void populateList();
|
||||||
|
void listServices(std::string server, int portN);
|
||||||
|
bool validateServer(std::string server);
|
||||||
|
bool isIpAddress(std::string server);
|
||||||
|
QTreeWidgetItem * addTreeRoot(QString name, QString description);
|
||||||
|
QTreeWidgetItem * addTreeChild(QTreeWidgetItem *parent, QString name, QString size);
|
||||||
|
void scanDir(std::string server, int portN, QTreeWidgetItem *parent = NULL, std::string path = "" );
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void on_khistorycombobox_returnPressed();
|
||||||
|
|
||||||
|
//void on_portEdit_userTextChanged();
|
||||||
|
|
||||||
|
void on_portEdit_returnPressed();
|
||||||
|
|
||||||
|
void on_khistorycombobox_textActivated();
|
||||||
|
|
||||||
|
void on_treeWidget_itemClicked(QTreeWidgetItem *item, int column);
|
||||||
|
|
||||||
|
void on_treeWidget_customContextMenuRequested();
|
||||||
|
|
||||||
|
void on_actionDownload_triggered();
|
||||||
|
|
||||||
|
void on_listWidget_clicked(const QModelIndex &index);
|
||||||
|
|
||||||
|
void on_listDownload_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
|
||||||
|
|
||||||
|
void on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
|
||||||
|
private:
|
||||||
|
downloadFile MyObject;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MAINWINDOW_H
|
326
mainwindow.ui
Normal file
326
mainwindow.ui
Normal file
@ -0,0 +1,326 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<author>DTux</author>
|
||||||
|
<class>MainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="MainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>500</width>
|
||||||
|
<height>571</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>MainWindow</string>
|
||||||
|
</property>
|
||||||
|
<property name="documentMode">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralwidget">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>32763</width>
|
||||||
|
<height>32765</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="baseSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>11</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="cursor">
|
||||||
|
<cursorShape>IBeamCursor</cursorShape>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::TabFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="acceptDrops">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string extracomment="numéro du port rsync distant"/>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Server</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="KHistoryComboBox" name="khistorycombobox">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Port</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="KLineEdit" name="portEdit">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>70</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="inputMethodHints">
|
||||||
|
<set>Qt::ImhPreferNumbers</set>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string comment="numéro"/>
|
||||||
|
</property>
|
||||||
|
<property name="maxLength">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="clearButtonEnabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="trapEnterKeyEvent" stdset="0">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QSplitter" name="splitter_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<widget class="QSplitter" name="splitter">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<widget class="QListWidget" name="listWidget">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="editTriggers">
|
||||||
|
<set>QAbstractItemView::SelectedClicked</set>
|
||||||
|
</property>
|
||||||
|
<property name="resizeMode">
|
||||||
|
<enum>QListView::Adjust</enum>
|
||||||
|
</property>
|
||||||
|
<property name="uniformItemSizes">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="layoutWidget">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="KTreeWidgetSearchLine" name="ktreewidgetsearchline">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||||
|
<horstretch>1</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="inputMethodHints">
|
||||||
|
<set>Qt::ImhNoAutoUppercase</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QTreeWidget" name="treeWidget">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>1</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="contextMenuPolicy">
|
||||||
|
<enum>Qt::CustomContextMenu</enum>
|
||||||
|
</property>
|
||||||
|
<property name="editTriggers">
|
||||||
|
<set>QAbstractItemView::NoEditTriggers</set>
|
||||||
|
</property>
|
||||||
|
<property name="showDropIndicator" stdset="0">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="dragEnabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="dragDropMode">
|
||||||
|
<enum>QAbstractItemView::DragOnly</enum>
|
||||||
|
</property>
|
||||||
|
<property name="alternatingRowColors">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="selectionMode">
|
||||||
|
<enum>QAbstractItemView::MultiSelection</enum>
|
||||||
|
</property>
|
||||||
|
<property name="selectionBehavior">
|
||||||
|
<enum>QAbstractItemView::SelectItems</enum>
|
||||||
|
</property>
|
||||||
|
<property name="uniformRowHeights">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="sortingEnabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="columnCount">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<attribute name="headerHighlightSections">
|
||||||
|
<bool>true</bool>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="headerShowSortIndicator" stdset="0">
|
||||||
|
<bool>true</bool>
|
||||||
|
</attribute>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">1</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QListWidget" name="listDownload">
|
||||||
|
<property name="dragEnabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="dragDropMode">
|
||||||
|
<enum>QAbstractItemView::DropOnly</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QProgressBar" name="progressBar">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="format">
|
||||||
|
<string extracomment="Downloading">%p%</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenuBar" name="menubar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>500</width>
|
||||||
|
<height>30</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<widget class="QMenu" name="menudebug">
|
||||||
|
<property name="title">
|
||||||
|
<string>debug</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<addaction name="menudebug"/>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="statusbar"/>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>KComboBox</class>
|
||||||
|
<extends>QComboBox</extends>
|
||||||
|
<header>kcombobox.h</header>
|
||||||
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>KHistoryComboBox</class>
|
||||||
|
<extends>KComboBox</extends>
|
||||||
|
<header>khistorycombobox.h</header>
|
||||||
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>KLineEdit</class>
|
||||||
|
<extends>QLineEdit</extends>
|
||||||
|
<header>klineedit.h</header>
|
||||||
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>KTreeWidgetSearchLine</class>
|
||||||
|
<extends>QLineEdit</extends>
|
||||||
|
<header>ktreewidgetsearchline.h</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
113
tools.cpp
Normal file
113
tools.cpp
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
#include <iostream>
|
||||||
|
#include <pstreams/pstream.h>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
#define READ 0
|
||||||
|
#define WRITE 1
|
||||||
|
|
||||||
|
const vector<string> explode(const string& s, const char& c, int n = 0)
|
||||||
|
{
|
||||||
|
string buff;
|
||||||
|
vector<string> v;
|
||||||
|
size_t pos = 0;
|
||||||
|
size_t ppos = 0;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
while (i < n - 1)
|
||||||
|
{
|
||||||
|
pos = s.find(c, ppos);
|
||||||
|
if (pos != string::npos)
|
||||||
|
{
|
||||||
|
buff = s.substr(ppos, pos - ppos);
|
||||||
|
if (buff != "")
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
v.push_back(s.substr(ppos, pos - ppos));
|
||||||
|
}
|
||||||
|
ppos = pos + 1;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ppos < s.size())
|
||||||
|
{
|
||||||
|
v.push_back(s.substr(ppos));
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
FILE * popen2(char * cmd, string type, int & pid)
|
||||||
|
{
|
||||||
|
pid_t child_pid;
|
||||||
|
int fd[2];
|
||||||
|
pipe(fd);
|
||||||
|
|
||||||
|
if((child_pid = fork()) == -1)
|
||||||
|
{
|
||||||
|
perror("fork");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* child process */
|
||||||
|
if (child_pid == 0)
|
||||||
|
{
|
||||||
|
if (type == "r")
|
||||||
|
{
|
||||||
|
close(fd[READ]); //Close the READ end of the pipe since the child's fd is write-only
|
||||||
|
dup2(fd[WRITE], 1); //Redirect stdout to pipe
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
close(fd[WRITE]); //Close the WRITE end of the pipe since the child's fd is read-only
|
||||||
|
dup2(fd[READ], 0); //Redirect stdin to pipe
|
||||||
|
}
|
||||||
|
|
||||||
|
setpgid(child_pid, child_pid); //Needed so negative PIDs can kill children of /bin/sh
|
||||||
|
execl(cmd, "");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (type == "r")
|
||||||
|
{
|
||||||
|
close(fd[WRITE]); //Close the WRITE end of the pipe since parent's fd is read-only
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
close(fd[READ]); //Close the READ end of the pipe since parent's fd is write-only
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pid = child_pid;
|
||||||
|
|
||||||
|
if (type == "r")
|
||||||
|
{
|
||||||
|
return fdopen(fd[READ], "r");
|
||||||
|
}
|
||||||
|
|
||||||
|
return fdopen(fd[WRITE], "w");
|
||||||
|
}
|
||||||
|
|
||||||
|
int pclose2(FILE * fp, pid_t pid)
|
||||||
|
{
|
||||||
|
int stat;
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
while (waitpid(pid, &stat, 0) == -1)
|
||||||
|
{
|
||||||
|
if (errno != EINTR)
|
||||||
|
{
|
||||||
|
stat = -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return stat;
|
||||||
|
}
|
||||||
|
|
14
tools.h
Normal file
14
tools.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#ifndef TOOLS_H
|
||||||
|
#define TOOLS_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
const vector<string> explode(const string& s, const char& c, int n = 0);
|
||||||
|
FILE * popen2(char * command, string type, int & pid);
|
||||||
|
int pclose2(FILE * fp, pid_t pid);
|
||||||
|
|
||||||
|
#endif // TOOLS_H
|
Loading…
Reference in New Issue
Block a user