From b99e816f7f3c3a58c1730e98a980ec5b40826c42 Mon Sep 17 00:00:00 2001 From: Maximilian Stiefel Date: Fri, 20 Apr 2018 18:13:09 +0200 Subject: [PATCH] Initial commit. --- .gitmodules | 3 + dictcc | 1 + harbour-wordbook.desktop | 12 + harbour-wordbook.pro | 74 ++ harbour-wordbook.pro.user | 671 ++++++++++++++ icons/108x108/harbour-wordbook.png | Bin 0 -> 7433 bytes icons/128x128/harbour-wordbook.png | Bin 0 -> 9004 bytes icons/172x172/harbour-wordbook.png | Bin 0 -> 12765 bytes icons/86x86/harbour-wordbook.png | Bin 0 -> 5835 bytes lib/curlpp-inst-arm/bin/curlpp-config | 91 ++ lib/curlpp-inst-arm/include/curlpp/Easy.hpp | 170 ++++ lib/curlpp-inst-arm/include/curlpp/Easy.inl | 48 + .../include/curlpp/Exception.hpp | 306 ++++++ lib/curlpp-inst-arm/include/curlpp/Form.hpp | 272 ++++++ lib/curlpp-inst-arm/include/curlpp/Info.hpp | 121 +++ lib/curlpp-inst-arm/include/curlpp/Info.inl | 79 ++ lib/curlpp-inst-arm/include/curlpp/Infos.hpp | 99 ++ lib/curlpp-inst-arm/include/curlpp/Multi.hpp | 82 ++ lib/curlpp-inst-arm/include/curlpp/Option.hpp | 253 +++++ lib/curlpp-inst-arm/include/curlpp/Option.inl | 206 +++++ .../include/curlpp/OptionBase.hpp | 107 +++ .../include/curlpp/Options.hpp | 336 +++++++ lib/curlpp-inst-arm/include/curlpp/Types.hpp | 56 ++ lib/curlpp-inst-arm/include/curlpp/cURLpp.hpp | 223 +++++ .../include/curlpp/internal/CurlHandle.hpp | 203 ++++ .../include/curlpp/internal/CurlHandle.inl | 76 ++ .../curlpp/internal/OptionContainer.hpp | 106 +++ .../curlpp/internal/OptionContainer.inl | 73 ++ .../curlpp/internal/OptionContainerType.hpp | 172 ++++ .../include/curlpp/internal/OptionList.hpp | 122 +++ .../include/curlpp/internal/OptionSetter.hpp | 504 ++++++++++ .../include/curlpp/internal/OptionSetter.inl | 56 ++ .../include/curlpp/internal/SList.hpp | 92 ++ .../include/utilspp/EmptyType.hpp | 32 + .../include/utilspp/NonCopyable.hpp | 41 + .../include/utilspp/NullType.hpp | 32 + .../include/utilspp/SmartPtr.hpp | 186 ++++ .../include/utilspp/ThreadingFactoryMutex.hpp | 45 + .../include/utilspp/ThreadingFactoryMutex.inl | 37 + .../include/utilspp/ThreadingSingle.hpp | 52 ++ .../include/utilspp/ThreadingSingle.inl | 50 + .../include/utilspp/TypeList.hpp | 216 +++++ .../include/utilspp/TypeTrait.hpp | 869 ++++++++++++++++++ .../include/utilspp/clone_ptr.hpp | 96 ++ lib/curlpp-inst-arm/lib/libcurlpp.a | Bin 0 -> 148516 bytes lib/curlpp-inst-arm/lib/libcurlpp.so | Bin 0 -> 89300 bytes lib/curlpp-inst-arm/lib/libcurlpp.so.1 | Bin 0 -> 89300 bytes lib/curlpp-inst-arm/lib/libcurlpp.so.1.0.0 | Bin 0 -> 89300 bytes lib/curlpp-inst-arm/lib/pkgconfig/curlpp.pc | 13 + lib/curlpp-inst-i486/bin/curlpp-config | 91 ++ lib/curlpp-inst-i486/include/curlpp/Easy.hpp | 170 ++++ lib/curlpp-inst-i486/include/curlpp/Easy.inl | 48 + .../include/curlpp/Exception.hpp | 306 ++++++ lib/curlpp-inst-i486/include/curlpp/Form.hpp | 272 ++++++ lib/curlpp-inst-i486/include/curlpp/Info.hpp | 121 +++ lib/curlpp-inst-i486/include/curlpp/Info.inl | 79 ++ lib/curlpp-inst-i486/include/curlpp/Infos.hpp | 99 ++ lib/curlpp-inst-i486/include/curlpp/Multi.hpp | 82 ++ .../include/curlpp/Option.hpp | 253 +++++ .../include/curlpp/Option.inl | 206 +++++ .../include/curlpp/OptionBase.hpp | 107 +++ .../include/curlpp/Options.hpp | 336 +++++++ lib/curlpp-inst-i486/include/curlpp/Types.hpp | 56 ++ .../include/curlpp/cURLpp.hpp | 223 +++++ .../include/curlpp/internal/CurlHandle.hpp | 203 ++++ .../include/curlpp/internal/CurlHandle.inl | 76 ++ .../curlpp/internal/OptionContainer.hpp | 106 +++ .../curlpp/internal/OptionContainer.inl | 73 ++ .../curlpp/internal/OptionContainerType.hpp | 172 ++++ .../include/curlpp/internal/OptionList.hpp | 122 +++ .../include/curlpp/internal/OptionSetter.hpp | 504 ++++++++++ .../include/curlpp/internal/OptionSetter.inl | 56 ++ .../include/curlpp/internal/SList.hpp | 92 ++ .../include/utilspp/EmptyType.hpp | 32 + .../include/utilspp/NonCopyable.hpp | 41 + .../include/utilspp/NullType.hpp | 32 + .../include/utilspp/SmartPtr.hpp | 186 ++++ .../include/utilspp/ThreadingFactoryMutex.hpp | 45 + .../include/utilspp/ThreadingFactoryMutex.inl | 37 + .../include/utilspp/ThreadingSingle.hpp | 52 ++ .../include/utilspp/ThreadingSingle.inl | 50 + .../include/utilspp/TypeList.hpp | 216 +++++ .../include/utilspp/TypeTrait.hpp | 869 ++++++++++++++++++ .../include/utilspp/clone_ptr.hpp | 96 ++ lib/curlpp-inst-i486/lib/libcurlpp.a | Bin 0 -> 143280 bytes lib/curlpp-inst-i486/lib/libcurlpp.so | Bin 0 -> 104116 bytes lib/curlpp-inst-i486/lib/libcurlpp.so.1 | Bin 0 -> 104116 bytes lib/curlpp-inst-i486/lib/libcurlpp.so.1.0.0 | Bin 0 -> 104116 bytes lib/curlpp-inst-i486/lib/pkgconfig/curlpp.pc | 13 + qml/cover/CoverPage.qml | 22 + qml/harbour-wordbook.qml | 10 + qml/pages/About.qml | 61 ++ qml/pages/FirstPage.qml | 99 ++ rpm/harbour-wordbook.changes.in | 18 + rpm/harbour-wordbook.changes.run.in | 25 + rpm/harbour-wordbook.spec | 71 ++ rpm/harbour-wordbook.yaml | 45 + src/dict_model.cpp | 104 +++ src/dict_model.h | 63 ++ src/harbour-wordbook.cpp | 24 + translations/harbour-wordbook-de.ts | 37 + translations/harbour-wordbook.ts | 37 + 102 files changed, 12421 insertions(+) create mode 100644 .gitmodules create mode 160000 dictcc create mode 100644 harbour-wordbook.desktop create mode 100644 harbour-wordbook.pro create mode 100644 harbour-wordbook.pro.user create mode 100644 icons/108x108/harbour-wordbook.png create mode 100644 icons/128x128/harbour-wordbook.png create mode 100644 icons/172x172/harbour-wordbook.png create mode 100644 icons/86x86/harbour-wordbook.png create mode 100755 lib/curlpp-inst-arm/bin/curlpp-config create mode 100644 lib/curlpp-inst-arm/include/curlpp/Easy.hpp create mode 100644 lib/curlpp-inst-arm/include/curlpp/Easy.inl create mode 100644 lib/curlpp-inst-arm/include/curlpp/Exception.hpp create mode 100644 lib/curlpp-inst-arm/include/curlpp/Form.hpp create mode 100644 lib/curlpp-inst-arm/include/curlpp/Info.hpp create mode 100644 lib/curlpp-inst-arm/include/curlpp/Info.inl create mode 100644 lib/curlpp-inst-arm/include/curlpp/Infos.hpp create mode 100644 lib/curlpp-inst-arm/include/curlpp/Multi.hpp create mode 100644 lib/curlpp-inst-arm/include/curlpp/Option.hpp create mode 100644 lib/curlpp-inst-arm/include/curlpp/Option.inl create mode 100644 lib/curlpp-inst-arm/include/curlpp/OptionBase.hpp create mode 100644 lib/curlpp-inst-arm/include/curlpp/Options.hpp create mode 100644 lib/curlpp-inst-arm/include/curlpp/Types.hpp create mode 100644 lib/curlpp-inst-arm/include/curlpp/cURLpp.hpp create mode 100644 lib/curlpp-inst-arm/include/curlpp/internal/CurlHandle.hpp create mode 100644 lib/curlpp-inst-arm/include/curlpp/internal/CurlHandle.inl create mode 100644 lib/curlpp-inst-arm/include/curlpp/internal/OptionContainer.hpp create mode 100644 lib/curlpp-inst-arm/include/curlpp/internal/OptionContainer.inl create mode 100644 lib/curlpp-inst-arm/include/curlpp/internal/OptionContainerType.hpp create mode 100644 lib/curlpp-inst-arm/include/curlpp/internal/OptionList.hpp create mode 100644 lib/curlpp-inst-arm/include/curlpp/internal/OptionSetter.hpp create mode 100644 lib/curlpp-inst-arm/include/curlpp/internal/OptionSetter.inl create mode 100644 lib/curlpp-inst-arm/include/curlpp/internal/SList.hpp create mode 100644 lib/curlpp-inst-arm/include/utilspp/EmptyType.hpp create mode 100644 lib/curlpp-inst-arm/include/utilspp/NonCopyable.hpp create mode 100644 lib/curlpp-inst-arm/include/utilspp/NullType.hpp create mode 100644 lib/curlpp-inst-arm/include/utilspp/SmartPtr.hpp create mode 100644 lib/curlpp-inst-arm/include/utilspp/ThreadingFactoryMutex.hpp create mode 100644 lib/curlpp-inst-arm/include/utilspp/ThreadingFactoryMutex.inl create mode 100644 lib/curlpp-inst-arm/include/utilspp/ThreadingSingle.hpp create mode 100644 lib/curlpp-inst-arm/include/utilspp/ThreadingSingle.inl create mode 100644 lib/curlpp-inst-arm/include/utilspp/TypeList.hpp create mode 100644 lib/curlpp-inst-arm/include/utilspp/TypeTrait.hpp create mode 100644 lib/curlpp-inst-arm/include/utilspp/clone_ptr.hpp create mode 100644 lib/curlpp-inst-arm/lib/libcurlpp.a create mode 100755 lib/curlpp-inst-arm/lib/libcurlpp.so create mode 100755 lib/curlpp-inst-arm/lib/libcurlpp.so.1 create mode 100755 lib/curlpp-inst-arm/lib/libcurlpp.so.1.0.0 create mode 100644 lib/curlpp-inst-arm/lib/pkgconfig/curlpp.pc create mode 100755 lib/curlpp-inst-i486/bin/curlpp-config create mode 100644 lib/curlpp-inst-i486/include/curlpp/Easy.hpp create mode 100644 lib/curlpp-inst-i486/include/curlpp/Easy.inl create mode 100644 lib/curlpp-inst-i486/include/curlpp/Exception.hpp create mode 100644 lib/curlpp-inst-i486/include/curlpp/Form.hpp create mode 100644 lib/curlpp-inst-i486/include/curlpp/Info.hpp create mode 100644 lib/curlpp-inst-i486/include/curlpp/Info.inl create mode 100644 lib/curlpp-inst-i486/include/curlpp/Infos.hpp create mode 100644 lib/curlpp-inst-i486/include/curlpp/Multi.hpp create mode 100644 lib/curlpp-inst-i486/include/curlpp/Option.hpp create mode 100644 lib/curlpp-inst-i486/include/curlpp/Option.inl create mode 100644 lib/curlpp-inst-i486/include/curlpp/OptionBase.hpp create mode 100644 lib/curlpp-inst-i486/include/curlpp/Options.hpp create mode 100644 lib/curlpp-inst-i486/include/curlpp/Types.hpp create mode 100644 lib/curlpp-inst-i486/include/curlpp/cURLpp.hpp create mode 100644 lib/curlpp-inst-i486/include/curlpp/internal/CurlHandle.hpp create mode 100644 lib/curlpp-inst-i486/include/curlpp/internal/CurlHandle.inl create mode 100644 lib/curlpp-inst-i486/include/curlpp/internal/OptionContainer.hpp create mode 100644 lib/curlpp-inst-i486/include/curlpp/internal/OptionContainer.inl create mode 100644 lib/curlpp-inst-i486/include/curlpp/internal/OptionContainerType.hpp create mode 100644 lib/curlpp-inst-i486/include/curlpp/internal/OptionList.hpp create mode 100644 lib/curlpp-inst-i486/include/curlpp/internal/OptionSetter.hpp create mode 100644 lib/curlpp-inst-i486/include/curlpp/internal/OptionSetter.inl create mode 100644 lib/curlpp-inst-i486/include/curlpp/internal/SList.hpp create mode 100644 lib/curlpp-inst-i486/include/utilspp/EmptyType.hpp create mode 100644 lib/curlpp-inst-i486/include/utilspp/NonCopyable.hpp create mode 100644 lib/curlpp-inst-i486/include/utilspp/NullType.hpp create mode 100644 lib/curlpp-inst-i486/include/utilspp/SmartPtr.hpp create mode 100644 lib/curlpp-inst-i486/include/utilspp/ThreadingFactoryMutex.hpp create mode 100644 lib/curlpp-inst-i486/include/utilspp/ThreadingFactoryMutex.inl create mode 100644 lib/curlpp-inst-i486/include/utilspp/ThreadingSingle.hpp create mode 100644 lib/curlpp-inst-i486/include/utilspp/ThreadingSingle.inl create mode 100644 lib/curlpp-inst-i486/include/utilspp/TypeList.hpp create mode 100644 lib/curlpp-inst-i486/include/utilspp/TypeTrait.hpp create mode 100644 lib/curlpp-inst-i486/include/utilspp/clone_ptr.hpp create mode 100644 lib/curlpp-inst-i486/lib/libcurlpp.a create mode 100755 lib/curlpp-inst-i486/lib/libcurlpp.so create mode 100755 lib/curlpp-inst-i486/lib/libcurlpp.so.1 create mode 100755 lib/curlpp-inst-i486/lib/libcurlpp.so.1.0.0 create mode 100644 lib/curlpp-inst-i486/lib/pkgconfig/curlpp.pc create mode 100644 qml/cover/CoverPage.qml create mode 100644 qml/harbour-wordbook.qml create mode 100644 qml/pages/About.qml create mode 100644 qml/pages/FirstPage.qml create mode 100644 rpm/harbour-wordbook.changes.in create mode 100644 rpm/harbour-wordbook.changes.run.in create mode 100644 rpm/harbour-wordbook.spec create mode 100644 rpm/harbour-wordbook.yaml create mode 100644 src/dict_model.cpp create mode 100644 src/dict_model.h create mode 100644 src/harbour-wordbook.cpp create mode 100644 translations/harbour-wordbook-de.ts create mode 100644 translations/harbour-wordbook.ts diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..7d3b970 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "dictcc"] + path = dictcc + url = https://github.com/m3x1m0m/dictcc diff --git a/dictcc b/dictcc new file mode 160000 index 0000000..78d4508 --- /dev/null +++ b/dictcc @@ -0,0 +1 @@ +Subproject commit 78d450818192bf700f20422427aca3a81a78bf92 diff --git a/harbour-wordbook.desktop b/harbour-wordbook.desktop new file mode 100644 index 0000000..93aaf8d --- /dev/null +++ b/harbour-wordbook.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Type=Application +X-Nemo-Application-Type=silica-qt5 +Icon=harbour-wordbook +Exec=harbour-wordbook +Name=harbour-wordbook +# translation example: +# your app name in German locale (de) +# +# Remember to comment out the following line, if you do not want to use +# a different app name in German locale (de). +# Name[de]=harbour-wordbook diff --git a/harbour-wordbook.pro b/harbour-wordbook.pro new file mode 100644 index 0000000..80e8f31 --- /dev/null +++ b/harbour-wordbook.pro @@ -0,0 +1,74 @@ +# NOTICE: +# +# Application name defined in TARGET has a corresponding QML filename. +# If name defined in TARGET is changed, the following needs to be done +# to match new name: +# - corresponding QML filename must be changed +# - desktop icon filename must be changed +# - desktop filename must be changed +# - icon definition filename in desktop file must be changed +# - translation filenames have to be changed + +# The name of your application +TARGET = harbour-wordbook + +CONFIG += sailfishapp + +# Path to installation of CURLPP +CONFIG(debug,debug|release){ CURLPP_PATH = lib/curlpp-inst-arm } +CONFIG(release,debug|release){ CURLPP_PATH = lib/curlpp-inst-i486 } + +# Add curlpp include files +INCLUDEPATH += $$CURLPP_PATH/include + +# Tell linker to link libcurl first, then libcurlpp +LIBS += -lcurl\ +-L$$PWD/$$CURLPP_PATH/lib\ +-lcurlpp + +# Install file on system +lib.files += $$CURLPP_PATH/lib/libcurlpp.so\ +$$CURLPP_PATH/lib/libcurlpp.so.1\ +$$CURLPP_PATH/lib/libcurlpp.so.1.0.0 + +lib.path = /usr/share/$$TARGET/lib +INSTALLS += lib + +SOURCES += src/harbour-wordbook.cpp \ + src/dict_model.cpp \ + dictcc/dict/dict_imp.cc \ + dictcc/dict/desv.cc \ + dictcc/dict/deen.cc + +DISTFILES += qml/harbour-wordbook.qml \ + qml/cover/CoverPage.qml \ + rpm/harbour-wordbook.changes.in \ + rpm/harbour-wordbook.changes.run.in \ + rpm/harbour-wordbook.spec \ + rpm/harbour-wordbook.yaml \ + translations/*.ts \ + harbour-wordbook.desktop \ + qml/pages/About.qml \ + qml/pages/FirstPage.qml + +SAILFISHAPP_ICONS = 86x86 108x108 128x128 172x172 + +# to disable building translations every time, comment out the +# following CONFIG line +# CONFIG += sailfishapp_i18n + +# German translation is enabled as an example. If you aren't +# planning to localize your app, remember to comment out the +# following TRANSLATIONS line. And also do not forget to +# modify the localized app name in the the .desktop file. +# TRANSLATIONS += translations/harbour-wordbook-de.ts + +HEADERS += \ + src/dict_model.h \ + dictcc/dict.h \ + dictcc/dict/types.h \ + dictcc/dict/exceptions.h \ + dictcc/dict/dict_int.h \ + dictcc/dict/desv.h \ + dictcc/dict/deen.h \ + dictcc/dict/creator.h diff --git a/harbour-wordbook.pro.user b/harbour-wordbook.pro.user new file mode 100644 index 0000000..ae31ae6 --- /dev/null +++ b/harbour-wordbook.pro.user @@ -0,0 +1,671 @@ + + + + + + EnvironmentId + {80bcf696-971a-458e-b870-5250a3256889} + + + ProjectExplorer.Project.ActiveTarget + 1 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop + {a1ccde5b-c399-4de9-847c-fecf9ec99eb2} + 0 + 0 + 0 + + /home/maximilian/build-harbour-wordbook-Desktop-Debug + + + true + Start Build Engine + + Mer.MerSdkStartStep + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 3 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Start Build Engine + + Mer.MerSdkStartStep + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 2 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + true + + + /home/maximilian/build-harbour-wordbook-Desktop-Release + + + true + Start Build Engine + + Mer.MerSdkStartStep + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 3 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Start Build Engine + + Mer.MerSdkStartStep + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 2 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 2 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy locally + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + /home/maximilian/harbour-wordbook + false + 10234 + 3 + + 2 + + harbour-wordbook + + Qt4ProjectManager.Qt4RunConfiguration:/home/maximilian/harbour-wordbook/harbour-wordbook.pro + true + + harbour-wordbook.pro + false + + /home/maximilian/build-harbour-wordbook-SailfishOS_2_1_4_13_armv7hl_in_Sailfish_OS_Build_Engine-Debug + 3768 + false + true + false + false + true + + 1 + + + + ProjectExplorer.Project.Target.1 + + SailfishOS-2.1.4.13-armv7hl (in Sailfish OS Build Engine) + SailfishOS-2.1.4.13-armv7hl (in Sailfish OS Build Engine) + {78ef6d63-a499-4e0c-a2c9-319195055963} + 0 + 2 + 0 + + /home/maximilian/build-harbour-wordbook-SailfishOS_2_1_4_13_armv7hl_in_Sailfish_OS_Build_Engine-Debug + + + true + Start Build Engine + + Mer.MerSdkStartStep + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 3 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Start Build Engine + + Mer.MerSdkStartStep + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 2 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + true + + + /home/maximilian/build-harbour-wordbook-SailfishOS_2_1_4_13_armv7hl_in_Sailfish_OS_Build_Engine-Release + + + true + Start Build Engine + + Mer.MerSdkStartStep + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 3 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Start Build Engine + + Mer.MerSdkStartStep + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 2 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + + /home/maximilian/build-harbour-wordbook-SailfishOS_2_1_4_13_armv7hl_in_Sailfish_OS_Build_Engine-Profile + + + true + Start Build Engine + + Mer.MerSdkStartStep + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + true + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 3 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Start Build Engine + + Mer.MerSdkStartStep + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 2 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 3 + + + + true + RPM + + QmakeProjectManager.MerRpmBuildStep + + + true + RPM Validation + + QmakeProjectManager.MerRpmValidationStep + + 2 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy By Building An RPM Package + + QmakeProjectManager.MerMb2RpmBuildConfiguration + + + + + true + Prepare Target + + QmakeProjectManager.MerPrepareTargetStep + + + true + Rsync + + QmakeProjectManager.MerRsyncDeployStep + + 2 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy By Copying Binaries + + QmakeProjectManager.MerRSyncDeployConfiguration + + + + + true + Prepare Target + + QmakeProjectManager.MerPrepareTargetStep + + + true + RPM + + QmakeProjectManager.MerRpmDeployStep + + 2 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy As RPM Package + + QmakeProjectManager.MerRpmDeployConfiguration + + 3 + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + /home/maximilian/harbour-wordbook + false + 10234 + 3 + + 1 + + harbour-wordbook (on Remote Device) + + QmakeProjectManager.MerRunConfiguration:harbour-wordbook + + harbour-wordbook + 1 + + false + + 3768 + false + true + false + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 2 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/icons/108x108/harbour-wordbook.png b/icons/108x108/harbour-wordbook.png new file mode 100644 index 0000000000000000000000000000000000000000..ab10628d3741e1893912e2a304931b55c8c43cf7 GIT binary patch literal 7433 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 Hu0mjfp95I$ literal 0 HcmV?d00001 diff --git a/icons/128x128/harbour-wordbook.png b/icons/128x128/harbour-wordbook.png new file mode 100644 index 0000000000000000000000000000000000000000..54375c53cbe19c8ff70ed0c2b435707a7f8a5db5 GIT binary patch literal 9004 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 A4gdfE literal 0 HcmV?d00001 diff --git a/icons/172x172/harbour-wordbook.png b/icons/172x172/harbour-wordbook.png new file mode 100644 index 0000000000000000000000000000000000000000..36eee58569097cff9011308279775e3f40a72175 GIT binary patch literal 12765 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
    3*BJ-*)G#D0C>ZP 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 literal 0 HcmV?d00001 diff --git a/icons/86x86/harbour-wordbook.png b/icons/86x86/harbour-wordbook.png new file mode 100644 index 0000000000000000000000000000000000000000..ad316d6f88bf9cbdaed51583ae466d7bf2e4337e GIT binary patch literal 5835 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 + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (curlpp), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef CURLPP_EASY_HPP +#define CURLPP_EASY_HPP + + +#include "internal/CurlHandle.hpp" +#include "internal/OptionList.hpp" + +#include "Option.hpp" + +#include + + +namespace curlpp +{ + + + /** + * Easy class. + * Detailed description. + */ + + class Easy + { + + public: + + friend struct InfoGetter; + + Easy(); + + /** + * This allow to have a handle, which might have + * some option set, but we don't care about them. + */ + Easy(std::unique_ptr handle); + virtual ~Easy(); + + /** + * it will call the curl_easy_perform function will all the options + * previously set for this handle. + */ + void perform(); + + /** + * This function will set the option value of the OptionBase + * to the handle. + */ + virtual void setOpt(const OptionBase & option); + + /** + * This function will set the option value of the OptionBase to the + * handle. + */ + virtual void setOpt(std::unique_ptr option); + + /** + * This function will set the option value of the OptionBase to the + * handle. + * + * Note: be carefull when using this function, see + * curlpp::OptionList::setOpt(OptionBase * option) function for more + * details. + */ + virtual void setOpt(OptionBase * option); + + /** + * This function will create OptionTrait class with the value given and call + * virtual void setOpt(const OptionBase & option) with it. + */ + template + void setOpt(typename OptionTrait::ParamType); + + /** + * Setting options from custom container with curlpp options. + */ + template + void setOpt(InputIterator first, InputIterator last); + + /** + * This function will get the current option value of the corresponding + * OptionBase. Note that if the option is not set, the option passed in + * parameter will be cleared. (See Option::getOpt for more details) + */ + void getOpt(OptionBase * option) const; + + /** + * This function will get the current option value of the corresponding + * OptionBase. Note that if the option is not set, the option passed in + * parameter will be cleared. (See Option::getOpt for more details) + */ + void getOpt(OptionBase & option) const; + + /** + * Get all options. + */ + //template + //void getOptions(OutputIterator out); + + /* + * This function empties the option collection and reset all options + * to their default value + */ + virtual void reset (); + + /** + * This function will return the cURL * handle. + * DO NOT use this, unless you REALLY know what you + * are doing. + */ + CURL * getHandle() const; + + internal::CurlHandle & getCurlHandle() { return *mCurl; } + const internal::CurlHandle & getCurlHandle() const { return *mCurl; } + + private: + + /** + * This function will call the setOpt on each options + * contained by * the option list passed in argument. + */ + virtual void setOpt(const internal::OptionList & options); + + /** + * This is the function that curlpp::InfoGetter will call + * to retreive option. + */ + template + void getInfo(CURLINFO info, T & value) const; + + std::unique_ptr mCurl; + + internal::OptionList mOptions; + + }; + + +} // namespace curlpp + +namespace cURLpp = curlpp; + +#include "Easy.inl" + +// Not quite sure if we shouldn't pass a const handle and clone it instead. +std::ostream & operator<<(std::ostream & stream, const curlpp::Easy & handle); + + +#endif // #ifndef CURLPP_EASY_HPP diff --git a/lib/curlpp-inst-arm/include/curlpp/Easy.inl b/lib/curlpp-inst-arm/include/curlpp/Easy.inl new file mode 100644 index 0000000..e06bc24 --- /dev/null +++ b/lib/curlpp-inst-arm/include/curlpp/Easy.inl @@ -0,0 +1,48 @@ +/* + * Copyright (c) <2002-2006> + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (curlpp), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +template +void curlpp::Easy::getInfo(CURLINFO info, T & value) const +{ + mCurl->getInfo(info, value); +} + + +template +void +curlpp::Easy::setOpt(typename OptionTrait::ParamType value) +{ + setOpt(curlpp::OptionTrait(value)); +} + + +template +void +curlpp::Easy::setOpt(InputIterator first, InputIterator last) +{ + for(InputIterator it=first; it != last; ++it) + { + setOpt(*it); + } +} diff --git a/lib/curlpp-inst-arm/include/curlpp/Exception.hpp b/lib/curlpp-inst-arm/include/curlpp/Exception.hpp new file mode 100644 index 0000000..66b11d0 --- /dev/null +++ b/lib/curlpp-inst-arm/include/curlpp/Exception.hpp @@ -0,0 +1,306 @@ +/* +* Copyright (c) <2002-2009> +* +* Permission is hereby granted, free of charge, to any person obtaining +* a copy of this software and associated documentation files +* (curlpp), to deal in the Software without restriction, +* including without limitation the rights to use, copy, modify, merge, +* publish, distribute, sublicense, and/or sell copies of the Software, +* and to permit persons to whom the Software is furnished to do so, +* subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included +* in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#ifndef CURLPP_EXCEPTION_HPP +#define CURLPP_EXCEPTION_HPP + + + +#include + +#include +#include + + +namespace curlpp +{ + + + /** + * This class is a parent to all curlpp's RuntimeErrors. + * + * This class takes a const std::string & as argument for it's parent: std::runtime_errors. + * This class is thrown when curlpp is encountering an error, but for runtime + * considerations, "unpredictable" by the library user. + */ + + class RuntimeError : public std::runtime_error + { + + public: + + RuntimeError(const char * reason); + RuntimeError(const std::string & string); + virtual ~RuntimeError() throw(); + + }; + + + /** + * This class is a parent to all curlpp's RuntimeErrors. + * + * This class takes a const std::string & as argument for it's parent: std::runtime_errors. + * This class is thrown when curlpp is encountering an error, but for logic + * considerations, "predictable" by the library user. Predictable means + * that the library user is missusing the library. + */ + + class LogicError : public std::logic_error + { + + public: + + LogicError(const char * reason); + LogicError(const std::string & string); + virtual ~LogicError() throw(); + + }; + + + /** + * This is a class derived from curlpp::RuntimeError. + * + * It takes a const char * and a CURLcode as arguments. This class is thrown when libcurl is + * returning an error with a CURLcode, but for runtime considerations, + * "unpredictable" by the library user. + */ + + class LibcurlRuntimeError : public curlpp::RuntimeError + { + + public: + + LibcurlRuntimeError(const std::string & reason, CURLcode code); + LibcurlRuntimeError(const char * reason, CURLcode code); + + /** + * Returns the CURLcode that libcurl returned. + */ + CURLcode whatCode() const throw(); + + private: + + CURLcode mCode; + + }; + + + /* + * This is a class derived from curlpp::LogicError, that takes a const + * char * and a CURLcode as arguments. This class is thrown when libcurl is + * returning an error with a CURLcode, but for logic considerations, + * "predictable" by the library user. Predictable means that the library + * user is missusing the library. + */ + + class LibcurlLogicError : public curlpp::LogicError + { + + public: + + LibcurlLogicError(const std::string & reason, CURLcode code); + LibcurlLogicError(const char * reason, CURLcode code); + + /* + * return the CURLcode that libcurl returned + */ + CURLcode whatCode() const throw(); + + private: + + CURLcode mCode; + + }; + + + /** + * This exception is thrown when you try to retreive a value for an + * unset option. + */ + + class UnsetOption : public curlpp::RuntimeError + { + + public: + + UnsetOption(const std::string & reason); + UnsetOption(const char * reason); + + }; + + + /** + * This exception is thrown when you try to instantiate an option + * that isn't available for your current libcURL version. + */ + + class NotAvailable : public curlpp::LogicError + { + + public: + + NotAvailable(); + + }; + + + /** + * This exception is thrown when an exception is thrown within + * a callback without the curlpp::raiseException function. + */ + + class UnknowException : public curlpp::RuntimeError + { + + public: + + UnknowException(); + + }; + + + /** + * This exception is thrown by the curlpp::raiseException function. + * It's used to throw exceptions within callbacks + */ + + class CallbackExceptionBase : public curlpp::RuntimeError + { + + protected: + + CallbackExceptionBase(); + CallbackExceptionBase(const CallbackExceptionBase & other); + + public: + + virtual void throwMe() = 0; + virtual CallbackExceptionBase * clone() = 0; + + }; + + + /** + * This exception is thrown by the curlpp::raiseException function. + * It's used to throw exceptions within callbacks + */ + + template + class CallbackException : public CallbackExceptionBase + { + + public: + + typedef CallbackException _CE; + + CallbackException(const ExceptionType & e) + : mException(e) + {} + + virtual void throwMe() + { + throw mException; + } + + virtual _CE * clone() + { + return new _CE(*this); + } + + private: + + ExceptionType mException; + + }; + + + /** + * This function is the function to be called within callbacks + * if you want an exception to be thrown at the + * curlpp::Easy::perform function call level. + */ + + template + void raiseException(const T & e) + { + throw (CallbackExceptionBase *)(new CallbackException(e)); + } + + + template + CallbackException * createCallbackException(const T & e) + { + return CallbackException(e); + } + + + /** + * if CURLcode is not equal to CURLE_OK, it throws a + * curlpp::LibcurlRuntimeError with the reason and the code. It's used + * in inline function, because throwing an exception is heavy in binary + * code, something we don't want in inline functions. + */ + + void libcurlRuntimeAssert(const std::string & reason, CURLcode code); + void libcurlRuntimeAssert(const char * reason, CURLcode code); + + + /** + * if CURLcode is not equal to CURLE_OK, it throws a + * curlpp::LibcurlLogicError with the reason and the code. It's used + * in inline function, because throwing an exception is heavy in binary + * code, something we don't want in inline functions. + */ + + void libcurlLogicAssert(const std::string & reason, CURLcode code); + void libcurlLogicAssert(const char * reason, CURLcode code); + + + /** + * if isOkay is false, it throws a curlpp::RuntimeError + * with the reason. It's used in inline function, because throwing + * an exception is heavy in binary code, something we don't want in + * an inline function. + */ + + void runtimeAssert(const std::string & reason, bool isOkay); + void runtimeAssert(const char * reason, bool isOkay); + + + /** + * if is_true is false, it throws a curlpp::LogicError with + * the reason. It's used in inline function, because throwing + * an exception is heavy in binary code, something we don't + * want in an inline function. + */ + + void logicAssert(const std::string & reason, bool isOkay); + void logicAssert(const char * reason, bool isOkay); + + +} // namespace curlpp + +namespace cURLpp = curlpp; + + +#endif // #ifndef CURLPP_EXCEPTION_HPP diff --git a/lib/curlpp-inst-arm/include/curlpp/Form.hpp b/lib/curlpp-inst-arm/include/curlpp/Form.hpp new file mode 100644 index 0000000..c499aee --- /dev/null +++ b/lib/curlpp-inst-arm/include/curlpp/Form.hpp @@ -0,0 +1,272 @@ +/* + * Copyright (c) <2002-2009> + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (curlpp), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef CURLPP_FORM_HPP +#define CURLPP_FORM_HPP + + +#include + +#include + +#include +#include + + +namespace curlpp +{ + + + class FormPart; + + + typedef std::list > Forms; + + + /** + * This class is used internally to wrap over curl_httppost + * class. + */ + + class HttpPost + { + + public: + + HttpPost(const Forms & posts); + HttpPost(); + ~HttpPost(); + + /** + * initialize the HTTP post with the list of forms. The Forms + * will be cloned. + */ + HttpPost & operator=(const Forms & posts); + + operator Forms() { return getList(); } + + + /** + * return the curl_httppost representation of this HTTP Post. + * Be aware that the memory return is owned by the current + * instance, so don't try to delete it. + */ + ::curl_httppost * cHttpPost() const; + + /** + * Free all HTTP posts. + */ + void clear(); + + /** + * Get the list. + */ + Forms getList(); + + private: + + ::curl_httppost * mFirst; + ::curl_httppost * mLast; + Forms mForms; + + }; + + + /** + * This class is the base representation of a post. You need + * to inherit from it to define a type of post. + */ + + class FormPart + { + friend class HttpPost; + + public: + + /** + * initialize the FormPart. "name" is the name of the field. + */ + FormPart(const char * name); + + /** + * initialize the FormPart. "name" is the name of the field. + */ + FormPart(const std::string & name); + + virtual ~FormPart(); + + virtual FormPart * clone() const = 0; + + protected: + + /** + * it will add himself to the curl_httppost * first. + */ + virtual void add(::curl_httppost ** first, + ::curl_httppost ** last) = 0; + + /** + * Contain the name of the field. + */ + const std::string mName; + + }; + + +namespace FormParts +{ + + + /** + * This class is a file post. It will send a file in the + * HTTP post. + */ + + class File : public FormPart + { + + public: + + /** + * initialize a File part. "name" is the name of the field. + * "filename" is the string that holds the filename. + */ + File(const char * name, + const char * filename); + + /** + * initialize a File part. "name" is the name of the field. + * "filename" is the string that holds the filename. + * "contentType" is the MIME type of the file. + */ + File(const char * name, + const char * filename, + const char * contentType); + + /** + * initialize a File part. "name" is the name of the field. + * "filename" is the string that holds the filename. + */ + File(const std::string & name, + const std::string & filename); + + /** + * initialize a File part. "name" is the name of the field. + * "filename" is the string that holds the filename. + * "contentType" is the MIME type of the file. + */ + File(const std::string & name, + const std::string & filename, + const std::string & contentType); + + virtual ~File(); + + /** + * This function will return a copy of the instance. + */ + virtual File * clone() const; + + private: + + void add(::curl_httppost ** first, + ::curl_httppost ** last); + + private: + + const std::string mFilename; + const std::string mContentType; + + }; + + + /** + * This class is a file post. It will send a file in the + * HTTP post. + */ + + class Content : public FormPart + { + + public: + + /** + * initialize a Content part. "name" is the name of the field. + * "content" is the string that holds the filename. + */ + Content(const char * name, + const char * content); + + /** + * initialize a Content part. "name" is the name of the field. + * "content" is the string that holds the filename. + * "contentType" is the MIME type of the file. + */ + Content(const char * name, + const char * content, + const char * contentType); + + /** + * initialize a Content part. "name" is the name of the field. + * "content" is the string that holds the content. + */ + Content(const std::string & name, + const std::string & content); + + /** + * initialize a Content part. "name" is the name of the field. + * "content" is the string that holds the content. + * "content_type" is the MIME type of the file. + */ + Content(const std::string & name, + const std::string & content, + const std::string & content_type); + + virtual ~Content(); + + /** + * This function will return a copy of the instance. + */ + virtual Content * clone() const; + + private: + + void add(::curl_httppost ** first, + ::curl_httppost ** last); + + private: + + const std::string mContent; + const std::string mContentType; + + }; + + +} // namespace FormParts + + +} // namespace curlpp + +namespace cURLpp = curlpp; + + +#endif //CURLPP_FORM_HPP diff --git a/lib/curlpp-inst-arm/include/curlpp/Info.hpp b/lib/curlpp-inst-arm/include/curlpp/Info.hpp new file mode 100644 index 0000000..5132218 --- /dev/null +++ b/lib/curlpp-inst-arm/include/curlpp/Info.hpp @@ -0,0 +1,121 @@ +/* + * Copyright (c) <2002-2009> + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (curlpp), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef CURLPP_INFO_HPP +#define CURLPP_INFO_HPP + + + +#include "Easy.hpp" + + +namespace curlpp +{ + + + /** + * This class is responsible of retreiving the Info from + * a handle. This is the class you use when you want to do + * so. + */ + + template + struct Info + { + static void get(const curlpp::Easy & handle, T & value); + static T get(const curlpp::Easy & handle); + }; + + + /** + * This class is used when an info is not available for the + * current libcURL version. + */ + + template + struct NotAvailableInfo : Info + { + static void get(const curlpp::Easy & handle, T & value); + static T get(const curlpp::Easy & handle); + }; + + + /** + * This is the class you need to specialize if you use + * a special type that libcURL is not aware of. This class + * need to call curlpp::InfoGetter::get function. See + * curlpp::InfoGetter for more information. + */ + + template + struct InfoTypeConverter + { + static void get(const curlpp::Easy & handle, CURLINFO info, T & value); + }; + + + template<> + void InfoTypeConverter + ::get(const curlpp::Easy & handle, CURLINFO info, std::string & value); + + + template<> + void InfoTypeConverter > + ::get(const curlpp::Easy & handle, CURLINFO info, std::list & value); + + + template<> + void InfoTypeConverter + ::get(const curlpp::Easy & handle, CURLINFO info, long & value); + + + template<> + void InfoTypeConverter + ::get(const curlpp::Easy & handle, CURLINFO info, double & value); + + + /** + * This is the only class that is authorized to retreive + * info from a curlpp::Easy class. So, this is the class + * you need to use when you specialize the class + * curlpp::InfoTypeConverter. This class is in fact used + * as a proxy, just to be sure that nobody access curlpp::Easy's + * private data. + */ + + struct InfoGetter + { + template + static void get(const curlpp::Easy & handle, CURLINFO info, T & value); + }; + + +} // namespace curlpp + +namespace cURLpp = curlpp; + + +#include "Info.inl" + +#endif // #ifndef CURLPP_INFO_HPP diff --git a/lib/curlpp-inst-arm/include/curlpp/Info.inl b/lib/curlpp-inst-arm/include/curlpp/Info.inl new file mode 100644 index 0000000..d15d090 --- /dev/null +++ b/lib/curlpp-inst-arm/include/curlpp/Info.inl @@ -0,0 +1,79 @@ +/* + * Copyright (c) <2002-2006> + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (curlpp), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef CURLPP_INFO_INL +#define CURLPP_INFO_INL + +template +void +curlpp::Info::get(const curlpp::Easy & handle, T & value) +{ + curlpp::InfoTypeConverter::get(handle, info, value); +} + +template +T +curlpp::Info::get(const curlpp::Easy & handle) +{ + T value; + curlpp::InfoTypeConverter::get(handle, info, value); + return value; +} + +template +void +curlpp::NotAvailableInfo::get(const curlpp::Easy &, T &) +{ + throw curlpp::NotAvailable(); +} + +template +T +curlpp::NotAvailableInfo::get(const curlpp::Easy &) +{ + throw curlpp::NotAvailable(); +} + + + +template +void +curlpp::InfoGetter::get(const curlpp::Easy & handle, + CURLINFO info, + T & value) +{ + handle.getInfo(info, value); +} + + +template +void +curlpp::InfoTypeConverter::get(const curlpp::Easy & handle, + CURLINFO info, + T & value) +{ + InfoGetter::get(handle, info, value); +} + + +#endif diff --git a/lib/curlpp-inst-arm/include/curlpp/Infos.hpp b/lib/curlpp-inst-arm/include/curlpp/Infos.hpp new file mode 100644 index 0000000..515dfda --- /dev/null +++ b/lib/curlpp-inst-arm/include/curlpp/Infos.hpp @@ -0,0 +1,99 @@ +/* + * Copyright (c) <2002-2009> + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (curlpp), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef CURLPP_INFOS_HPP +#define CURLPP_INFOS_HPP + + +#include "Info.hpp" + +#include + +#include + + +namespace curlpp +{ + + +namespace infos +{ + + + typedef curlpp::Info EffectiveUrl; + typedef curlpp::Info ResponseCode; + typedef curlpp::Info HttpConnectCode; + typedef curlpp::Info FileTime; + typedef curlpp::Info TotalTime; + typedef curlpp::Info NameLookupTime; + typedef curlpp::Info ConnectTime; + typedef curlpp::Info PreTransferTime; + typedef curlpp::Info StartTransferTime; + typedef curlpp::Info RedirectTime; + typedef curlpp::Info RedirectCount; + typedef curlpp::Info SizeUpload; + typedef curlpp::Info SizeDownload; + typedef curlpp::Info SpeedDownload; + typedef curlpp::Info SpeedUpload; + typedef curlpp::Info HeaderSize; + typedef curlpp::Info RequestSize; + typedef curlpp::Info SslVerifyResult; +#if LIBCURL_VERSION_NUM >= 0x070c03 + typedef curlpp::Info > SslEngines; +#endif + typedef curlpp::Info ContentLengthDownload; + typedef curlpp::Info ContentLengthUpload; + typedef curlpp::Info ContentType; + typedef curlpp::Info HttpAuthAvail; + typedef curlpp::Info ProxyAuthAvail; +#if LIBCURL_VERSION_NUM >= 0x070c02 + typedef curlpp::Info OsErrno; +#endif +#if LIBCURL_VERSION_NUM >= 0x070c03 + typedef curlpp::Info NumConnects; +#endif + +#if LIBCURL_VERSION_NUM >= 0x070e01 + typedef curlpp::Info > CookieList; +#else +#ifdef CURLPP_ALLOW_NOT_AVAILABLE + // This curlinfo text must be specified, so we specify something + // that we know will be there. + typedef curlpp::NotAvailableInfo > CookieList; +#endif +#endif + + +} // namespace infos + +namespace Infos = infos; + + +} // namespace curlpp + +namespace cURLpp = curlpp; + + +#endif // #ifndef CURLPP_INFOS_HPP diff --git a/lib/curlpp-inst-arm/include/curlpp/Multi.hpp b/lib/curlpp-inst-arm/include/curlpp/Multi.hpp new file mode 100644 index 0000000..c29102e --- /dev/null +++ b/lib/curlpp-inst-arm/include/curlpp/Multi.hpp @@ -0,0 +1,82 @@ +/* + * Copyright (c) <2002-2009> + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (curlpp), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef CURLPP_MULTI_HPP +#define CURLPP_MULTI_HPP + + +#include + +#include +#include + + +namespace curlpp +{ + + + class Easy; + + class Multi + { + + public: + + struct Info + { + CURLcode code; + CURLMSG msg; + }; + + public: + + Multi(); + ~Multi(); + + void add(const curlpp::Easy * handle); + void remove(const curlpp::Easy * handle); + + bool perform(int * nbHandles); + void fdset(fd_set * read_fd_set, + fd_set * write_fd_set, + fd_set * exc_fd_set, + int * max_fd); + + typedef std::list > + Msgs; + + Msgs info(); + + private: + + CURLM * mMultiHandle; + std::map mHandles; + }; + + +} // namespace curlpp + +namespace cURLpp = curlpp; + + +#endif // #ifndef CURLPP_MULTI_HPP diff --git a/lib/curlpp-inst-arm/include/curlpp/Option.hpp b/lib/curlpp-inst-arm/include/curlpp/Option.hpp new file mode 100644 index 0000000..5781820 --- /dev/null +++ b/lib/curlpp-inst-arm/include/curlpp/Option.hpp @@ -0,0 +1,253 @@ +/* + * Copyright (c) <2002-2009> + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (curlpp), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef CURLPP_OPTION_HPP +#define CURLPP_OPTION_HPP + + +#include "internal/OptionContainer.hpp" + +#include "OptionBase.hpp" + + +namespace curlpp +{ + + + class Easy; + + /** + * This class is representing an option that you set on a class. + * + * We use utilspp::pointer_on_member_function and utilspp::type_trait to simplify + * the declaration of an option object. + */ + + template + class Option : public curlpp::OptionBase + { + + public: + + typedef OT OptionType; + + typedef typename internal::OptionContainer::ParamType ParamType; + typedef typename internal::OptionContainer::ValueType ValueType; + typedef typename internal::OptionContainer::ReturnType ReturnType; + typedef typename internal::OptionContainer::HandleOptionType HandleOptionType; + + protected: + + /** + * The constructor takes the a value to set a handle. + */ + Option(CURLoption option, typename Option::ParamType value); + + /** + * The construction will copy the value of the Option passed in argument. + */ + Option(const Option & other); + + /** + * The constructor will contain an unset option value. + * Note that if you try to retreive the value of this option + * before calling the curlpp::Option::setValue function it will + * throw a UnsetOption exception. + */ + Option(CURLoption option); + + public: + + /** + * What can I say? Everyone is dying one time or another... + */ + virtual ~Option(); + + + /** + * This function will set the value that will be set on handle when we + * will call the "update" function on a handle. + */ + void setValue(typename Option::ParamType value); + + /** + * This function will return the value that this option was set to. + * + * Note: if you didn't set any value by the curlpp::Option::setValue function, + * or the handle option value, retreived by the curlpp::Option::updateMeToHandle + * function, is a unset value, it will throw a UnsetOption exception. + */ + typename Option::ReturnType getValue() const; + + /** + * This function will reset the option value. That means that if you try to + * retreive the value of this option, or if you try to set this option to a + * handle, it will throw an UnsetOption exception. + */ + virtual void clear(); + + /** + * Will update the value of the option with the value of the + * option passed is argument. + */ + virtual void updateMeToOption(const OptionBase & other); + + private: + + /** + * This function will update the given handle to the value previously set, + * by the curlpp::Option::setValue function. + */ + void setOpt(curlpp::Easy * handle) const; + + /** + * This function will update the current value of the option to the handle + * option value. + */ + void getOpt(curlpp::Easy * handle); + + protected: + + /** + * the class that actually have the value. + */ + typename curlpp::internal::OptionContainer * mContainer; + + }; + + + /** + * This class is just a wrapper around curlpp::Option, in order to + * be able to typedef Options. + */ + + template + class OptionTrait : public Option + { + + friend class Easy; + + public: + + static const CURLoption option = opt; + + /** + * The constructor takes the a value to set a handle. + */ + OptionTrait(typename Option::ParamType value); + + /** + * The constructor will contain an unset option value. + * Note that if you try to retreive the value of this option + * before calling the curlpp::Option::setValue function it will + * throw a UnsetOption exception. + */ + OptionTrait(); + + /** + * Return a copy of the current option. + * Note that the option value is copied too. + */ + virtual OptionTrait * clone() const; + + private: + + /** + * will call the actual libcurl option function with the value we got + * on the handle. + */ + virtual void updateHandleToMe(internal::CurlHandle * handle) const; + + }; + + + /** + * This class is just a wrapper around curlpp::OptionTrait, in order to + * be able to have "No value" option, like SslDefaultEngine. + */ + + template + class NoValueOptionTrait : public OptionTrait + { + + public: + + NoValueOptionTrait(); + + /** + * Return a copy of the current option. + * Note that the option value is copied too. + */ + virtual NoValueOptionTrait * clone() const; + + }; + + + /** + * This class is used when the option is not implemented. + */ + + template + class NotAvailableOptionTrait : public Option + { + + public: + + /** + * The constructor takes the a value to set a handle. + */ + NotAvailableOptionTrait(typename Option::ParamType value); + + /** + * The constructor will contain an unset option value. + * Note that if you try to retreive the value of this option + * before calling the curlpp::Option::setValue function it will + * throw a UnsetOption exception. + */ + NotAvailableOptionTrait(); + + /** + * Return a copy of the current option. + * Note that the option value is copied too. + */ + virtual NotAvailableOptionTrait * clone() const; + + private: + + /** + * will call the actual libcurl option function with the value we got + * on the handle. + */ + virtual void updateHandleToMe(internal::CurlHandle * handle) const; + + }; + + +} // namespace curlpp + +namespace cURLpp = curlpp; + + +#include "Option.inl" + +#endif // #ifndef CURLPP_OPTION_HPP diff --git a/lib/curlpp-inst-arm/include/curlpp/Option.inl b/lib/curlpp-inst-arm/include/curlpp/Option.inl new file mode 100644 index 0000000..a7cc5ad --- /dev/null +++ b/lib/curlpp-inst-arm/include/curlpp/Option.inl @@ -0,0 +1,206 @@ +/* + * Copyright (c) <2002-2006> + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (curlpp), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef CURLPP_OPTION_INL +#define CURLPP_OPTION_INL + +#include "internal/OptionSetter.hpp" +#include "Exception.hpp" + +#include + + +namespace curlpp +{ + + +// Option + +template +Option::Option(CURLoption option, typename Option::ParamType value) +: OptionBase(option), +mContainer(NULL) +{ + setValue(value); +} + + +template +Option::Option(CURLoption option) +: OptionBase(option), +mContainer(NULL) +{} + +template +Option::Option(const Option & other) + : OptionBase(other) + , mContainer(NULL) +{ + if(other.mContainer != NULL) + { + setValue(other.getValue()); + } +} + + +template +Option::~Option() +{ + delete mContainer; + mContainer = NULL; +} + + +template +void +Option::setValue(typename Option::ParamType value) +{ + if(mContainer == NULL) + { + mContainer = new internal::OptionContainer(value); + } + else + { + mContainer->setValue(value); + } +} + + +template +void +Option::updateMeToOption(const OptionBase & other) +{ + const Option * option = dynamic_cast *>(&other); + if(option == NULL) + { + throw UnsetOption("You are trying to update an option to an incompatible option"); + } + setValue(option->getValue()); +} + +template +void +Option::clear() +{ + delete mContainer; + mContainer = NULL; +} + +template +typename Option::ReturnType +Option::getValue() const +{ + if(mContainer == NULL) + throw UnsetOption("You are trying to retreive the value of an unset option"); + + return mContainer->getValue(); +} + + +// OptionTrait + +template +OptionTrait::OptionTrait(typename Option::ParamType value) +: Option(option, value) +{} + + +template +OptionTrait::OptionTrait() +: Option(option) +{} + + +template +OptionTrait * +OptionTrait::clone() const +{ + return new OptionTrait(this->getValue()); +} + + +template +void +OptionTrait::updateHandleToMe(internal::CurlHandle * handle) const +{ + if(this->mContainer == NULL) + { + throw UnsetOption("You are trying to set an unset option to a handle"); + } + + internal::OptionSetter::setOpt(handle, this->mContainer->getHandleOptionValue()); +} + + +// NoValueOptionTrait + +template +NoValueOptionTrait