mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 15:24:35 +01:00
Option in settings to disable SFTP folders-first
This commit is contained in:
@@ -1342,6 +1342,12 @@ abstract class S {
|
||||
/// **'Use `rm -r` to delete a folder in SFTP.'**
|
||||
String get sftpRmrDirSummary;
|
||||
|
||||
/// No description provided for @sftpShowFoldersFirst.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Disply folders first'**
|
||||
String get sftpShowFoldersFirst;
|
||||
|
||||
/// No description provided for @sftpSSHConnected.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
||||
@@ -651,6 +651,9 @@ class SDe extends S {
|
||||
@override
|
||||
String get sftpRmrDirSummary => 'Verwenden Sie \"rm -r\", um das Verzeichnis in SFTP zu löschen.';
|
||||
|
||||
@override
|
||||
String get sftpShowFoldersFirst => 'Ordner zuerst anzeigen';
|
||||
|
||||
@override
|
||||
String get sftpSSHConnected => 'SFTP Verbunden';
|
||||
|
||||
|
||||
@@ -651,6 +651,9 @@ class SEn extends S {
|
||||
@override
|
||||
String get sftpRmrDirSummary => 'Use `rm -r` to delete a folder in SFTP.';
|
||||
|
||||
@override
|
||||
String get sftpShowFoldersFirst => 'Disply folders first';
|
||||
|
||||
@override
|
||||
String get sftpSSHConnected => 'SFTP Connected';
|
||||
|
||||
|
||||
@@ -651,6 +651,9 @@ class SFr extends S {
|
||||
@override
|
||||
String get sftpRmrDirSummary => 'Utilisez `rm -r` pour supprimer un dossier dans SFTP.';
|
||||
|
||||
@override
|
||||
String get sftpShowFoldersFirst => 'Dossiers d\'abord lors du tri';
|
||||
|
||||
@override
|
||||
String get sftpSSHConnected => 'SFTP connecté';
|
||||
|
||||
|
||||
@@ -651,6 +651,9 @@ class SId extends S {
|
||||
@override
|
||||
String get sftpRmrDirSummary => 'Gunakan `rm -r` untuk menghapus dir di SFTP';
|
||||
|
||||
@override
|
||||
String get sftpShowFoldersFirst => 'Folder ditampilkan lebih dulu';
|
||||
|
||||
@override
|
||||
String get sftpSSHConnected => 'Sftp terhubung';
|
||||
|
||||
|
||||
@@ -651,6 +651,9 @@ class SZh extends S {
|
||||
@override
|
||||
String get sftpRmrDirSummary => '在 SFTP 中使用 `rm -r` 来删除文件夹';
|
||||
|
||||
@override
|
||||
String get sftpShowFoldersFirst => '排序时文件夹显示在前';
|
||||
|
||||
@override
|
||||
String get sftpSSHConnected => 'SFTP 已连接...';
|
||||
|
||||
@@ -1502,6 +1505,9 @@ class SZhTw extends SZh {
|
||||
@override
|
||||
String get sftpRmrDirSummary => '在 SFTP 中使用 `rm -r` 來刪除文件夾';
|
||||
|
||||
@override
|
||||
String get sftpShowFoldersFirst => '排序時文件夾顯示在前';
|
||||
|
||||
@override
|
||||
String get sftpSSHConnected => 'SFTP 已連接...';
|
||||
|
||||
|
||||
@@ -197,6 +197,9 @@ class SettingStore extends PersistentStore {
|
||||
/// Open SFTP with last viewed path
|
||||
late final sftpOpenLastPath = property('sftpOpenLastPath', true);
|
||||
|
||||
/// Show folders first in SFTP file browser
|
||||
late final sftpShowFoldersFirst = property('sftpShowFoldersFirst', true);
|
||||
|
||||
/// Show tip of suspend
|
||||
late final showSuspendTip = property('showSuspendTip', true);
|
||||
|
||||
|
||||
@@ -207,6 +207,7 @@
|
||||
"setting": "Einstellungen",
|
||||
"sftpDlPrepare": "Verbindung vorbereiten...",
|
||||
"sftpRmrDirSummary": "Verwenden Sie \"rm -r\", um das Verzeichnis in SFTP zu löschen.",
|
||||
"sftpShowFoldersFirst": "Ordner zuerst anzeigen",
|
||||
"sftpSSHConnected": "SFTP Verbunden",
|
||||
"showDistLogo": "Distributionslogo anzeigen",
|
||||
"shutdown": "Abschaltung",
|
||||
|
||||
@@ -207,6 +207,7 @@
|
||||
"setting": "Settings",
|
||||
"sftpDlPrepare": "Preparing to connect...",
|
||||
"sftpRmrDirSummary": "Use `rm -r` to delete a folder in SFTP.",
|
||||
"sftpShowFoldersFirst": "Disply folders first",
|
||||
"sftpSSHConnected": "SFTP Connected",
|
||||
"showDistLogo": "Show distribution logo",
|
||||
"shutdown": "Shutdown",
|
||||
|
||||
@@ -207,6 +207,7 @@
|
||||
"setting": "Paramètres",
|
||||
"sftpDlPrepare": "Préparation de la connexion...",
|
||||
"sftpRmrDirSummary": "Utilisez `rm -r` pour supprimer un dossier dans SFTP.",
|
||||
"sftpShowFoldersFirst": "Dossiers d'abord lors du tri",
|
||||
"sftpSSHConnected": "SFTP connecté",
|
||||
"showDistLogo": "Afficher le logo de la distribution",
|
||||
"shutdown": "Éteindre",
|
||||
|
||||
@@ -207,6 +207,7 @@
|
||||
"setting": "Pengaturan",
|
||||
"sftpDlPrepare": "Bersiap untuk terhubung ...",
|
||||
"sftpRmrDirSummary": "Gunakan `rm -r` untuk menghapus dir di SFTP",
|
||||
"sftpShowFoldersFirst": "Folder ditampilkan lebih dulu",
|
||||
"sftpSSHConnected": "Sftp terhubung",
|
||||
"showDistLogo": "Tampilkan logo distribusi",
|
||||
"shutdown": "Matikan",
|
||||
|
||||
@@ -207,6 +207,7 @@
|
||||
"setting": "设置",
|
||||
"sftpDlPrepare": "准备连接至服务器...",
|
||||
"sftpRmrDirSummary": "在 SFTP 中使用 `rm -r` 来删除文件夹",
|
||||
"sftpShowFoldersFirst": "排序时文件夹显示在前",
|
||||
"sftpSSHConnected": "SFTP 已连接...",
|
||||
"showDistLogo": "显示发行版 Logo",
|
||||
"shutdown": "关机",
|
||||
|
||||
@@ -207,6 +207,7 @@
|
||||
"setting": "設置",
|
||||
"sftpDlPrepare": "準備連接至服務器...",
|
||||
"sftpRmrDirSummary": "在 SFTP 中使用 `rm -r` 來刪除文件夾",
|
||||
"sftpShowFoldersFirst": "排序時文件夾顯示在前",
|
||||
"sftpSSHConnected": "SFTP 已連接...",
|
||||
"showDistLogo": "顯示發行版 Logo",
|
||||
"shutdown": "关机",
|
||||
|
||||
@@ -855,6 +855,7 @@ class _SettingPageState extends State<SettingPage> {
|
||||
children: [
|
||||
_buildSftpRmrDir(),
|
||||
_buildSftpOpenLastPath(),
|
||||
_buildSftpShowFoldersFirst(),
|
||||
].map((e) => CardX(child: e)).toList(),
|
||||
);
|
||||
}
|
||||
@@ -867,6 +868,13 @@ class _SettingPageState extends State<SettingPage> {
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildSftpShowFoldersFirst() {
|
||||
return ListTile(
|
||||
title: Text(l10n.sftpShowFoldersFirst),
|
||||
trailing: StoreSwitch(prop: _setting.sftpShowFoldersFirst),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildNetViewType() {
|
||||
final items = NetViewType.values
|
||||
.map((e) => PopupMenuItem(
|
||||
|
||||
@@ -15,6 +15,7 @@ import 'package:toolbox/data/res/logger.dart';
|
||||
import 'package:toolbox/data/res/misc.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
import 'package:toolbox/data/store/setting.dart';
|
||||
import 'package:toolbox/view/widget/omit_start_text.dart';
|
||||
import 'package:toolbox/view/widget/cardx.dart';
|
||||
|
||||
@@ -820,11 +821,14 @@ enum _SortType {
|
||||
;
|
||||
|
||||
List<SftpName> sort(List<SftpName> files, {bool reversed = false}) {
|
||||
var comparator = ChainComparator<SftpName>.create();
|
||||
if (Stores.setting.sftpShowFoldersFirst.fetch()) {
|
||||
comparator = comparator.thenTrueFirst((x) => x.attr.isDirectory);
|
||||
}
|
||||
switch (this) {
|
||||
case _SortType.name:
|
||||
files.sort(
|
||||
ChainComparator<SftpName>.create()
|
||||
.thenTrueFirst((x) => x.attr.isDirectory)
|
||||
comparator
|
||||
.thenWithComparator(
|
||||
(a, b) => Comparators.compareStringCaseInsensitive()(
|
||||
a.filename, b.filename),
|
||||
@@ -835,8 +839,7 @@ enum _SortType {
|
||||
break;
|
||||
case _SortType.time:
|
||||
files.sort(
|
||||
ChainComparator<SftpName>.create()
|
||||
.thenTrueFirst((x) => x.attr.isDirectory)
|
||||
comparator
|
||||
.thenCompareBy<num>(
|
||||
(x) => x.attr.modifyTime ?? 0,
|
||||
reversed: reversed,
|
||||
@@ -846,8 +849,7 @@ enum _SortType {
|
||||
break;
|
||||
case _SortType.size:
|
||||
files.sort(
|
||||
ChainComparator<SftpName>.create()
|
||||
.thenTrueFirst((x) => x.attr.isDirectory)
|
||||
comparator
|
||||
.thenCompareBy<num>(
|
||||
(x) => x.attr.size ?? 0,
|
||||
reversed: reversed,
|
||||
|
||||
Reference in New Issue
Block a user