Открыть боковую панель
Aurora OS
Flutter
Flutter Community Plugins
file_selector_aurora
Коммиты
160560fb
Коммит
160560fb
создал
Сен 02, 2024
по автору
d.girenko
Просмотр файлов
Move o BasicPlugin
владелец
79ceb4f5
Изменения
3
Скрыть пробелы
Построчно
Рядом
aurora/CMakeLists.txt
Просмотр файла @
160560fb
...
...
@@ -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
)
...
...
aurora/file_selector_aurora_plugin.cpp
Просмотр файла @
160560fb
...
...
@@ -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
+
'*'
;
QS
tring
q
Q
uery
=
QString
::
fromUtf8
(
query
.
c_str
()
);
QS
tring
qD
irectory
=
QString
::
fromUtf8
(
directory
.
c_str
()
);
Result
FileSelectorAuroraPlugin
::
FindFilesByName
(
const
EncodableValue
*
args
)
{
std
::
s
tring
query
=
*
args
->
GetValue
<
std
::
string
>
(
"query"
);
std
::
s
tring
d
irectory
=
*
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
());
}
aurora/include/file_selector_aurora/file_selector_aurora_plugin.h
Просмотр файла @
160560fb
...
...
@@ -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.
Сначала завершите редактирование этого сообщения!
Отмена
Пожалуйста,
зарегистрируйтесь
или
войдите
чтобы прокомментировать