Коммит 160560fb создал по автору d.girenko's avatar d.girenko
Просмотр файлов

Move o BasicPlugin

владелец 79ceb4f5
......@@ -8,6 +8,10 @@ set(PLUGIN_NAME file_selector_aurora_platform_plugin)
project(${PROJECT_NAME} LANGUAGES CXX)
if(${PSDK_MAJOR} LESS 5)
message( FATAL_ERROR "Сannot build this project on Aurora version less than 5" )
endif()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
......
......@@ -4,6 +4,8 @@
*/
#include <file_selector_aurora/file_selector_aurora_plugin.h>
typedef FileSelectorAuroraPlugin::Result Result;
namespace Channels {
constexpr auto Methods = "file_selector_aurora_methods";
} // namespace Channels
......@@ -20,79 +22,56 @@ void FileSelectorAuroraPlugin::RegisterWithRegistrar(PluginRegistrar* registrar)
FileSelectorAuroraPlugin::FileSelectorAuroraPlugin(PluginRegistrar* registrar)
// Create MethodChannel with StandardMethodCodec
: m_methodChannel(std::make_unique<MethodChannel>(registrar->messenger(),
Channels::Methods,
&flutter::StandardMethodCodec::GetInstance())) {
// Create MethodHandler
RegisterMethodHandler();
}
: BasicPlugin(Channels::Methods, registrar->messenger()) {}
void FileSelectorAuroraPlugin::RegisterMethodHandler() {
m_methodChannel->SetMethodCallHandler([this](const MethodCall& call, std::unique_ptr<MethodResult> result) {
auto const& method_name = call.method_name();
ErrorOr methodResult;
if (method_name.compare(Methods::FindFilesByName) == 0) {
auto args = call.arguments();
methodResult = FindFilesByName(args);
} else if (method_name.compare(Methods::FindRecentFiles) == 0) {
auto args = call.arguments();
methodResult = FindRecentFiles(args);
} else {
result->NotImplemented();
return;
}
if (!methodResult.HasError()) {
result->Success(methodResult.GetValue());
} else {
auto error = methodResult.GetError();
result->Error(error.code(), error.message());
}
});
}
Result FileSelectorAuroraPlugin::HandleMethodCall(const std::string& name, const flutter::EncodableValue* arguments) {
if (!arguments) {
return Result::BadArgumentsError("Method invoked without args");
}
ErrorOr FileSelectorAuroraPlugin::FindFilesByName(const EncodableValue* args) {
if (args && args->GetMapValue()) {
std::string query = *std::move(args->GetValue<std::string>("query"));
std::string directory = *std::move(args->GetValue<std::string>("directory"));
if (name.compare(Methods::FindFilesByName) == 0) {
return FindFilesByName(arguments);
}
if (name.compare(Methods::FindRecentFiles) == 0) {
return FindRecentFiles(arguments);
}
return Result(flutter::NotImplemented());
}
query = '*' + query + '*';
QString qQuery = QString::fromUtf8(query.c_str());
QString qDirectory = QString::fromUtf8(directory.c_str());
Result FileSelectorAuroraPlugin::FindFilesByName(const EncodableValue* args) {
std::string query = *args->GetValue<std::string>("query");
std::string directory = *args->GetValue<std::string>("directory");
QString paths = "";
QDirIterator it(qDirectory, QStringList() << qQuery, QDir::Files, QDirIterator::Subdirectories);
while (it.hasNext()) {
paths += it.next() + '\n';
}
query = '*' + query + '*';
QString qQuery = QString::fromStdString(query);
QString qDirectory = QString::fromStdString(directory);
return EncodableValue(paths.toStdString());
} else {
return FlutterError{"Bad arguments", "Bad argument type"};
QString paths;
QDirIterator it(qDirectory, QStringList() << qQuery, QDir::Files, QDirIterator::Subdirectories);
while (it.hasNext()) {
paths += it.next() + '\n';
}
}
ErrorOr FileSelectorAuroraPlugin::FindRecentFiles(const EncodableValue* args) {
if (args && args->GetMapValue()) {
int maxCount = *std::move(args->GetValue<int>("maxCount"));
return EncodableValue(paths.toStdString());
}
QFileInfoList files;
QDirIterator it(QDir::homePath(), QDir::Files, QDirIterator::Subdirectories);
while (it.hasNext()) {
files.append(QFileInfo(it.next()));
}
Result FileSelectorAuroraPlugin::FindRecentFiles(const EncodableValue* args) {
const auto maxCountOpt = *args->GetValue<int>("maxCount");
std::sort(files.begin(), files.end(),
[](QFileInfo& a, QFileInfo& b) { return a.lastModified() > b.lastModified(); });
QFileInfoList files;
QDirIterator it(QDir::homePath(), QDir::Files, QDirIterator::Subdirectories);
while (it.hasNext()) {
files.append(QFileInfo(it.next()));
}
QString paths = "";
for (int i = 0; i < std::min(files.size(), maxCount); i++) {
paths += files[i].absoluteFilePath() + "\n";
}
std::sort(files.begin(), files.end(),
[](QFileInfo& a, QFileInfo& b) { return a.lastModified() > b.lastModified(); });
return EncodableValue(paths.toStdString());
} else {
return FlutterError{"Bad arguments", "Bad argument type"};
QString paths = "";
const int maxCount = maxCountOpt ? std::min<std::size_t>(files.size(), maxCountOpt) : files.size();
for (int i = 0; i < maxCount; i++) {
paths += files[i].absoluteFilePath() + "\n";
}
return EncodableValue(paths.toStdString());
}
......@@ -14,6 +14,7 @@
#include <file_selector_aurora/globals.h>
#include <flutter/basic_plugin.h>
#include <flutter/encodable_value.h>
#include <flutter/error_or.h>
#include <flutter/flutter_aurora.h>
......@@ -25,18 +26,11 @@
typedef flutter::EncodableValue EncodableValue;
typedef flutter::EncodableMap EncodableMap;
typedef flutter::EncodableList EncodableList;
// Flutter register
typedef flutter::Plugin Plugin;
// Flutter plugin
typedef flutter::PluginRegistrar PluginRegistrar;
// Flutter methods
typedef flutter::MethodChannel<EncodableValue> MethodChannel;
typedef flutter::MethodCall<EncodableValue> MethodCall;
typedef flutter::MethodResult<EncodableValue> MethodResult;
// Flutter errors
typedef flutter::FlutterError FlutterError;
typedef flutter::ErrorOr<EncodableValue> ErrorOr;
class PLUGIN_EXPORT FileSelectorAuroraPlugin final : public flutter::Plugin {
typedef flutter::BasicPlugin<> BasicPlugin;
class PLUGIN_EXPORT FileSelectorAuroraPlugin final : public BasicPlugin {
public:
static void RegisterWithRegistrar(PluginRegistrar* registrar);
......@@ -44,12 +38,11 @@ public:
FileSelectorAuroraPlugin(PluginRegistrar* registrar);
private:
void RegisterMethodHandler();
ErrorOr FindFilesByName(const EncodableValue* args);
ErrorOr FindRecentFiles(const EncodableValue* args);
// Called when a method is called on |channel_|;
Result HandleMethodCall(const std::string& name, const EncodableValue* arguments) final;
std::unique_ptr<MethodChannel> m_methodChannel;
Result FindFilesByName(const EncodableValue* args);
Result FindRecentFiles(const EncodableValue* args);
};
#endif /* FLUTTER_PLUGIN_file_selector_aurora_PLUGIN_H */
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать