Skip to content

Commit

Permalink
Add API for listing directory content
Browse files Browse the repository at this point in the history
  • Loading branch information
pktiuk committed Feb 15, 2024
1 parent 31d456c commit 54ed3a8
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
31 changes: 31 additions & 0 deletions src/webui/api/appcontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@

#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
Expand All @@ -62,6 +63,7 @@
#include "base/utils/password.h"
#include "base/utils/string.h"
#include "base/version.h"
#include "apierror.h"
#include "../webapplication.h"

using namespace std::chrono_literals;
Expand Down Expand Up @@ -1083,6 +1085,35 @@ void AppController::defaultSavePathAction()
setResult(BitTorrent::Session::instance()->savePath().toString());
}

void AppController::getDirectoryContentAction()
{
requireParams({u"dirPath"_s});

const QString dirPath = params().value(u"dirPath"_s);
if (dirPath.isEmpty() || dirPath.startsWith(u':'))
throw APIError(APIErrorType::BadParams, u"Invalid directory path"_s);

const QDir dir {dirPath};
if (!dir.isAbsolute())
throw APIError(APIErrorType::BadParams, u"Invalid directory path"_s);
if (!dir.exists())
throw APIError(APIErrorType::NotFound, u"Directory does not exist"_s);

const QString visibility = params().value(u"mode"_s, u"all"_s);
QDir::Filters filters = QDir::NoDotAndDotDot;
if (visibility == u"dirs"_s)
filters |= QDir::Dirs;
else if (visibility == u"files"_s)
filters |= QDir::Files;
else if (visibility == u"all")
filters |= QDir::Dirs | QDir::Files;
else
throw APIError(APIErrorType::BadParams, u"Invalid mode, allowed values: all, dirs, files"_s);

const QStringList dirs = dir.entryList(filters);
setResult(QJsonArray::fromStringList(dirs));
}

void AppController::networkInterfaceListAction()
{
QJsonArray ifaceList;
Expand Down
1 change: 1 addition & 0 deletions src/webui/api/appcontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ private slots:
void preferencesAction();
void setPreferencesAction();
void defaultSavePathAction();
void getDirectoryContentAction();

void networkInterfaceListAction();
void networkInterfaceAddressListAction();
Expand Down

0 comments on commit 54ed3a8

Please sign in to comment.