-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathwsjcpp_package_downloader_http.cpp
More file actions
104 lines (85 loc) · 3.76 KB
/
Copy pathwsjcpp_package_downloader_http.cpp
File metadata and controls
104 lines (85 loc) · 3.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include "wsjcpp_package_downloader_http.h"
#include <wsjcpp_core.h>
#include <wsjcpp_helpers.h>
#include <wsjcpp_package_manager.h>
// ---------------------------------------------------------------------
// WsjcppPackageDownloaderHttp
WsjcppPackageDownloaderHttp::WsjcppPackageDownloaderHttp()
: WsjcppPackageDownloaderBase("http") {
TAG = "WsjcppPackageDownloaderHttp";
m_sHttpPrefix = "http://"; // from some http://
m_sHttpsPrefix = "https://";
}
// ---------------------------------------------------------------------
bool WsjcppPackageDownloaderHttp::canDownload(const std::string &sPackage) {
return
sPackage.compare(0, m_sHttpPrefix.size(), m_sHttpPrefix) == 0
|| sPackage.compare(0, m_sHttpsPrefix.size(), m_sHttpsPrefix) == 0;
}
// ---------------------------------------------------------------------
bool WsjcppPackageDownloaderHttp::downloadToCache(
const std::string &sPackage,
const std::string &sCacheDir,
WsjcppPackageManagerDependence &dep,
std::string &sError
) {
std::cout << "Download package from " << sPackage << " ..." << std::endl;
std::string sWsjcppBaseUrl = sPackage;
std::string sDownloadedWsjCppYml2 = sCacheDir + "/wsjcpp.yml";
if (!WsjcppPackageDownloaderBase::downloadFileOverHttps(sWsjcppBaseUrl + "/wsjcpp.yml", sDownloadedWsjCppYml2)) {
sError = "Could not download " + sWsjcppBaseUrl;
return false;
}
WsjcppPackageManager pkg(sCacheDir);
if (!pkg.load()) {
sError = "Could not load " + sCacheDir;
return false;
}
// sources
std::vector<WsjcppPackageManagerDistributionFile> vSources = pkg.getListOfDistributionFiles();
for (int i = 0; i < vSources.size(); i++) {
WsjcppPackageManagerDistributionFile src = vSources[i];
std::cout << " - " << src.getSourceFile() << ": " << std::endl;
if (!WsjcppPackageDownloaderBase::prepareCacheSubdirForFile(sCacheDir, src.getSourceFile(), sError)) {
return false;
}
std::string sDownloadedWsjCppSourceFrom = sWsjcppBaseUrl + "/" + src.getSourceFile();
std::string sDownloadedWsjCppSourceTo = sCacheDir + "/" + src.getSourceFile();
std::cout
<< " Downloading file from '" << sDownloadedWsjCppSourceFrom << "'" << " to '" << sDownloadedWsjCppSourceTo << "'."
<< std::endl;
if (!WsjcppPackageDownloaderBase::downloadFileOverHttps(sDownloadedWsjCppSourceFrom, sDownloadedWsjCppSourceTo)) {
sError = "Could not download " + sDownloadedWsjCppSourceFrom;
return false;
} else {
std::cout
<< " Completed." << std::endl;
}
std::string sContent = "";
if (!WsjcppCore::readTextFile(sDownloadedWsjCppSourceTo, sContent)) {
sError = "Could not read file " + sDownloadedWsjCppSourceTo;
return false;
}
if (!pkg.updateSourceFile(src.getSourceFile(), false)) {
sError = "Could not download " + sDownloadedWsjCppSourceFrom;
return false;
}
}
pkg.save();
std::string sInstallationDir = "./src.wsjcpp/" + WsjcppPackageDownloaderBase::prepareCacheSubFolderName(pkg.getName());
dep.setName(pkg.getName());
dep.setVersion(pkg.getVersion());
dep.setUrl(sPackage);
dep.setInstallationDir(sInstallationDir);
// remove package/version from url
std::vector<std::string> vSubdirs = WsjcppCore::split(sPackage, "/");
if (vSubdirs[vSubdirs.size()-1] == "") {
vSubdirs.pop_back();
}
vSubdirs.pop_back(); // version
vSubdirs.pop_back(); // package-name
std::string sOrigin = WsjcppCore::join(vSubdirs, "/");
dep.setOrigin(sOrigin);
return true;
}
// ---------------------------------------------------------------------