Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Removed getDataDirectory() #1107

Merged
merged 3 commits into from
Aug 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions include/downloader.h
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,12 @@ class Downloader
typedef std::vector<std::pair<std::string, std::string>> Options;

public: // functions
Downloader();
/*
* Create a new Downloader object.
*
* @param sessionFileDir: The directory where aria2 will store its session file.
*/
explicit Downloader(std::string sessionFileDir);
virtual ~Downloader();

void close();
Expand All @@ -191,10 +196,11 @@ class Downloader
* User should call `update` on the returned `Download` to have an accurate status.
*
* @param uri: The uri of the thing to download.
* @param downloadDir: The download directory where the thing should be stored (takes precedence over any "dir" in `options`).
* @param options: A series of pair <option_name, option_value> to pass to aria.
* @return: The newly created Download.
*/
std::shared_ptr<Download> startDownload(const std::string& uri, const Options& options = {});
std::shared_ptr<Download> startDownload(const std::string& uri, const std::string& downloadDir, Options options = {});
sgourdas marked this conversation as resolved.
Show resolved Hide resolved
sgourdas marked this conversation as resolved.
Show resolved Hide resolved

/**
* Get a download corrsponding to a download id (did)
Expand Down
26 changes: 0 additions & 26 deletions include/tools.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,32 +45,6 @@ typedef std::vector<std::string> FeedCategories;
*/
std::string getCurrentDirectory();

/**
* Return the data directory
*
* The data directory is the default directory where downloaded files
* should be saved (it can be overriden via the options parameter of
* `kiwix::Downloader::startDownload()`).
*
* Its path can vary and is determined as follows:
*
* * `$KIWIX_DATA_DIR` if `$KIWIX_DATA_DIR` environment variable set, *otherwise...*
* * On Windows:
*
* * `$APPDATA/kiwix` if environment variable `$APPDATA` set, *otherwise...*
* * `$USERPROFILE/kiwix` if environment variable `$USERPROFILE` set, *otherwise...*
*
* * On other Operating Systems:
*
* * `$XDG_DATA_HOME/kiwix` if environment variable `$XDG_DATA_HOME` set, *otherwise...*
* * `$HOME/.local/share/kiwx` if environment variable `$HOME` set, *otherwise...*
*
* * Current working directory.
*
* @return the path of the data directory (UTF-8 encoded)
*/
std::string getDataDirectory();

/** Return the path of the executable
*
* Some application may be packaged in auto extractible archive (Appimage) and the
Expand Down
8 changes: 2 additions & 6 deletions src/aria2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,18 +55,15 @@

} // unnamed namespace

Aria2::Aria2():
Aria2::Aria2(std::string sessionFileDir):

Check warning on line 58 in src/aria2.cpp

View check run for this annotation

Codecov / codecov/patch

src/aria2.cpp#L58

Added line #L58 was not covered by tests
mp_aria(nullptr),
m_port(42042),
m_secret(getNewRpcSecret())
{
m_downloadDir = getDataDirectory();
makeDirectory(m_downloadDir);
std::vector<const char*> callCmd;

std::string rpc_port = "--rpc-listen-port=" + to_string(m_port);
std::string download_dir = "--dir=" + getDataDirectory();
std::string session_file = appendToDirectory(getDataDirectory(), "kiwix.session");
std::string session_file = appendToDirectory(sessionFileDir, "kiwix.session");
pauseAnyActiveDownloads(session_file);
std::string session = "--save-session=" + session_file;
std::string inputFile = "--input-file=" + session_file;
Expand Down Expand Up @@ -94,7 +91,6 @@
callCmd.push_back("--enable-rpc");
callCmd.push_back(rpc_secret.c_str());
callCmd.push_back(rpc_port.c_str());
callCmd.push_back(download_dir.c_str());
if (fileReadable(session_file)) {
callCmd.push_back(inputFile.c_str());
}
Expand Down
3 changes: 1 addition & 2 deletions src/aria2.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,10 @@ class Aria2
std::unique_ptr<Subprocess> mp_aria;
int m_port;
std::string m_secret;
std::string m_downloadDir;
std::string doRequest(const MethodCall& methodCall);

public:
Aria2();
explicit Aria2(std::string sessionFileDir);
virtual ~Aria2() = default;
void close();

Expand Down
10 changes: 7 additions & 3 deletions src/downloader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,8 @@
}

/* Constructor */
Downloader::Downloader() :
mp_aria(new Aria2())
Downloader::Downloader(std::string sessionFileDir) :

Check warning on line 128 in src/downloader.cpp

View check run for this annotation

Codecov / codecov/patch

src/downloader.cpp#L128

Added line #L128 was not covered by tests
mp_aria(new Aria2(sessionFileDir))
{
try {
for (auto gid : mp_aria->tellWaiting()) {
Expand Down Expand Up @@ -209,9 +209,13 @@

} // unnamed namespace

std::shared_ptr<Download> Downloader::startDownload(const std::string& uri, const Options& options)
std::shared_ptr<Download> Downloader::startDownload(const std::string& uri, const std::string& downloadDir, Options options)

Check warning on line 212 in src/downloader.cpp

View check run for this annotation

Codecov / codecov/patch

src/downloader.cpp#L212

Added line #L212 was not covered by tests
{
std::unique_lock<std::mutex> lock(m_lock);
options.erase(std::remove_if(options.begin(), options.end(), [](const auto& option) {
return option.first == "dir";

Check warning on line 216 in src/downloader.cpp

View check run for this annotation

Codecov / codecov/patch

src/downloader.cpp#L215-L216

Added lines #L215 - L216 were not covered by tests
}), options.end());
options.push_back({"dir", downloadDir});
for (auto& p: m_knownDownloads) {
auto& d = p.second;
if ( downloadCanBeReused(*d, uri, options) )
Expand Down
56 changes: 0 additions & 56 deletions src/tools/pathTools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -320,16 +320,6 @@ bool kiwix::fileReadable(const std::string& path)
#endif
}

bool makeDirectory(const std::string& path)
{
#ifdef _WIN32
int status = _wmkdir(Utf8ToWide(path).c_str());
#else
int status = mkdir(path.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
#endif
return status == 0;
}

std::string makeTmpDirectory()
{
#ifdef _WIN32
Expand Down Expand Up @@ -438,52 +428,6 @@ std::string kiwix::getCurrentDirectory()
return ret;
}

std::string kiwix::getDataDirectory()
{
// Try to get the dataDir from the `KIWIX_DATA_DIR` env var
#ifdef _WIN32
wchar_t* cDataDir = ::_wgetenv(L"KIWIX_DATA_DIR");
if (cDataDir != nullptr) {
return WideToUtf8(cDataDir);
}
#else
char* cDataDir = ::getenv("KIWIX_DATA_DIR");
if (cDataDir != nullptr) {
return cDataDir;
}
#endif

// Compute the dataDir from the user directory.
std::string dataDir;
#ifdef _WIN32
cDataDir = ::_wgetenv(L"APPDATA");
if (cDataDir == nullptr)
cDataDir = ::_wgetenv(L"USERPROFILE");
if (cDataDir != nullptr)
dataDir = WideToUtf8(cDataDir);
#else
cDataDir = ::getenv("XDG_DATA_HOME");
if (cDataDir != nullptr) {
dataDir = cDataDir;
} else {
cDataDir = ::getenv("HOME");
if (cDataDir != nullptr) {
dataDir = cDataDir;
dataDir = appendToDirectory(dataDir, ".local");
dataDir = appendToDirectory(dataDir, "share");
}
}
#endif
if (!dataDir.empty()) {
dataDir = appendToDirectory(dataDir, "kiwix");
makeDirectory(dataDir);
return dataDir;
}

// Let's use the currentDirectory
return getCurrentDirectory();
}

static std::map<std::string, std::string> extMimeTypes = {
{ "html", "text/html"},
{ "htm", "text/html"},
Expand Down
1 change: 0 additions & 1 deletion src/tools/pathTools.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ std::wstring Utf8ToWide(const std::string& str);

unsigned int getFileSize(const std::string& path);
std::string getFileSizeAsString(const std::string& path);
bool makeDirectory(const std::string& path);
std::string makeTmpDirectory();
bool copyFile(const std::string& sourcePath, const std::string& destPath);
bool writeTextFile(const std::string& path, const std::string& content);
Expand Down
Loading