28 #include "../../../../core/encoding/CharEncoding.h" 31 #include <curl/curl.h> 34 #include <boost/foreach.hpp> 35 #include <boost/property_tree/ptree.hpp> 36 #include <boost/property_tree/json_parser.hpp> 37 #include <boost/uuid/random_generator.hpp> 38 #include <boost/uuid/uuid_io.hpp> 44 int progressFunc(
void *bar,
double donwTotal,
double downNow,
double upTotal,
double upNow)
48 te::qt::plugins::terramobile::GeopackagePublisher::m_staticPointer->
emitSignal(downNow, donwTotal);
52 te::qt::plugins::terramobile::GeopackagePublisher::m_staticPointer->
emitSignal(upNow, upTotal);
73 static size_t WriteCallback(
void *contents,
size_t size,
size_t nmemb,
void *userp)
75 ((std::string*)userp)->append((
char*)contents, size * nmemb);
81 url +=
"/listprojects";
86 struct curl_httppost *formpost = NULL;
87 struct curl_httppost *lastptr = NULL;
88 struct curl_slist *headerlist = NULL;
89 static const char buf[] =
"Expect:";
91 curl_global_init(CURL_GLOBAL_ALL);
94 curl_formadd(&formpost,
96 CURLFORM_COPYNAME,
"user",
97 CURLFORM_COPYCONTENTS,
"userName",
100 curl_formadd(&formpost,
102 CURLFORM_COPYNAME,
"password",
103 CURLFORM_COPYCONTENTS,
"password",
106 curl_formadd(&formpost,
108 CURLFORM_COPYNAME,
"projectStatus",
109 CURLFORM_COPYCONTENTS,
"1",
112 std::string readBuffer;
114 curl = curl_easy_init();
116 headerlist = curl_slist_append(headerlist, buf);
121 curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
123 curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
125 curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
127 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,
WriteCallback);
129 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
132 res = curl_easy_perform(curl);
142 curl_easy_cleanup(curl);
145 curl_formfree(formpost);
147 curl_slist_free_all(headerlist);
153 size_t write_data(
void *ptr,
size_t size,
size_t nmemb, FILE *stream)
156 written = fwrite(ptr, size, nmemb, stream);
164 url +=
"/downloadproject";
171 std::string outfilename = pathDir +
"/" + gpkgFile.
m_name;
173 struct curl_httppost *formpost = NULL;
174 struct curl_httppost *lastptr = NULL;
175 struct curl_slist *headerlist = NULL;
176 static const char buf[] =
"Expect:";
178 curl_global_init(CURL_GLOBAL_ALL);
181 curl_formadd(&formpost,
183 CURLFORM_COPYNAME,
"user",
184 CURLFORM_COPYCONTENTS,
"userName",
187 curl_formadd(&formpost,
189 CURLFORM_COPYNAME,
"password",
190 CURLFORM_COPYCONTENTS,
"password",
193 curl_formadd(&formpost,
195 CURLFORM_COPYNAME,
"projectId",
196 CURLFORM_COPYCONTENTS, gpkgFile.
m_objId.c_str(),
199 curl_formadd(&formpost,
201 CURLFORM_COPYNAME,
"projectStatus",
202 CURLFORM_COPYCONTENTS,
"1",
205 curl_formadd(&formpost,
207 CURLFORM_COPYNAME,
"projectName",
208 CURLFORM_COPYCONTENTS, gpkgFile.
m_name.c_str() ,
212 curl = curl_easy_init();
214 headerlist = curl_slist_append(headerlist, buf);
221 curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
223 curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
225 curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
227 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,
write_data);
229 curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
231 curl_easy_setopt(curl, CURLOPT_VERBOSE, 1
L);
233 curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0
L);
235 curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION,
progressFunc);
238 res = curl_easy_perform(curl);
249 curl_easy_cleanup(curl);
252 curl_formfree(formpost);
255 curl_slist_free_all(headerlist);
267 url +=
"/uploadproject";
272 struct curl_httppost *formpost = NULL;
273 struct curl_httppost *lastptr = NULL;
274 struct curl_slist *headerlist = NULL;
275 static const char buf[] =
"Expect:";
277 curl_global_init(CURL_GLOBAL_ALL);
280 curl_formadd(&formpost,
282 CURLFORM_COPYNAME,
"user",
283 CURLFORM_COPYCONTENTS,
"userName",
286 curl_formadd(&formpost,
288 CURLFORM_COPYNAME,
"password",
289 CURLFORM_COPYCONTENTS,
"password",
292 curl_formadd(&formpost,
294 CURLFORM_COPYNAME,
"fileName",
295 CURLFORM_COPYCONTENTS, fileName.c_str(),
298 curl_formadd(&formpost,
300 CURLFORM_COPYNAME,
"file",
301 CURLFORM_FILE, filePath.c_str(),
304 curl = curl_easy_init();
306 headerlist = curl_slist_append(headerlist, buf);
311 curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
313 curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
315 curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
317 curl_easy_setopt(curl, CURLOPT_VERBOSE, 1
L);
319 curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0
L);
321 curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION,
progressFunc);
324 res = curl_easy_perform(curl);
335 curl_easy_cleanup(curl);
338 curl_formfree(formpost);
341 curl_slist_free_all(headerlist);
349 std::stringstream ss(stream);
355 boost::property_tree::ptree pt;
356 boost::property_tree::json_parser::read_json(ss, pt);
358 BOOST_FOREACH(boost::property_tree::ptree::value_type &v, pt.get_child(
"projects"))
362 gpkgFile.
m_name = v.second.get<std::string>(
"project_name");
363 gpkgFile.
m_status = v.second.get<std::string>(
"project_status");
364 gpkgFile.
m_objId = v.second.get<std::string>(
"project_id");
365 gpkgFile.
m_desc = v.second.get<std::string>(
"project_description");
367 gpkgFiles.push_back(gpkgFile);
370 catch (boost::property_tree::json_parser::json_parser_error &je)
374 catch (std::exception
const& e)
384 std::string msg =
"";
388 msg =
"Downloading Geopackage File...";
392 msg =
"Uploading Geopackage File...";
GeopackageFiles readJSONInfo(std::string stream)
static GeopackagePublisher * m_staticPointer
void uploadGeopackageFile(std::string url, std::string filePath, std::string fileName)
std::string getErrorMessage()
static std::string fromUTF8(const std::string &src)
Convert a string in UTF-8 to the current locale encoding.
static GeopackagePublisherOperation m_gpkgOpType
void downloadGeopackageFile(std::string url, GeopackageFile gpkgFile, std::string pathDir)
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream)
void setCurrentStep(double curStep, double totalStep, std::string msg)
int progressFunc(void *bar, double donwTotal, double downNow, double upTotal, double upNow)
static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
std::vector< GeopackageFile > GeopackageFiles
std::string m_errorMessage
GeopackageFiles getGeopackageFiles(std::string url)
void emitSignal(double curStep, double totalStep)
GeopackagePublisherOperation