Skip to content

Commit ac1801d

Browse files
committed
feat: 完善收藏和下载
1 parent 521756d commit ac1801d

File tree

4 files changed

+48
-85
lines changed

4 files changed

+48
-85
lines changed

lib/screen/favorite_screen.dart

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -455,20 +455,20 @@ class _FavoriteScreenState extends State<FavoriteScreen>
455455
String? modifyTimeStr = resp.getReformatModified(modifyTime);
456456

457457
return FileItemVO(
458-
name: resp.name,
459-
path: resp.getCompletePath(path),
460-
size: resp.isDir ? null : resp.size,
461-
sizeDesc: resp.formatBytes(),
462-
isDir: resp.isDir,
463-
modified: modifyTimeStr,
464-
typeInt: resp.type,
465-
type: resp.getFileType(),
466-
thumb: resp.thumb,
467-
sign: resp.sign,
468-
icon: resp.getFileIcon(),
469-
modifiedMilliseconds: modifyTime?.millisecondsSinceEpoch ?? -1,
470-
provider: provider,
471-
favorite: true);
458+
name: resp.name,
459+
path: resp.getCompletePath(path),
460+
size: resp.isDir ? null : resp.size,
461+
sizeDesc: resp.formatBytes(),
462+
isDir: resp.isDir,
463+
modified: modifyTimeStr,
464+
typeInt: resp.type,
465+
type: resp.getFileType(),
466+
thumb: resp.thumb,
467+
sign: resp.sign,
468+
icon: resp.getFileIcon(),
469+
modifiedMilliseconds: modifyTime?.millisecondsSinceEpoch ?? -1,
470+
provider: provider,
471+
);
472472
}
473473

474474
void _gotoVideoPlayer(Favorite file) async {

lib/screen/file_list/file_list_screen.dart

Lines changed: 19 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ class _FileListScreenState extends State<FileListScreen>
101101
bool _hasWritePermission = false;
102102
User? _currentUser;
103103
StreamSubscription? _userStreamSubscription;
104-
StreamSubscription? _favoriteSubscription;
105104

106105
@override
107106
void initState() {
@@ -137,12 +136,6 @@ class _FileListScreenState extends State<FileListScreen>
137136
}
138137
});
139138
}
140-
_favoriteSubscription =
141-
_databaseController.favoriteDao.countStream().listen((event) {
142-
if (_files.isNotEmpty) {
143-
_refreshFavoriteState();
144-
}
145-
});
146139
Log.d("initState", tag: tag);
147140
}
148141

@@ -196,7 +189,7 @@ class _FileListScreenState extends State<FileListScreen>
196189
var fileItemVOs = <FileItemVO>[];
197190
var files = data?.content ?? [];
198191
for (var file in files) {
199-
var fileItemVO = await _fileResp2VO(data?.provider ?? "", file);
192+
var fileItemVO = _fileResp2VO(data?.provider ?? "", file);
200193
fileItemVOs.add(fileItemVO);
201194
}
202195
_sort(fileItemVOs);
@@ -243,7 +236,6 @@ class _FileListScreenState extends State<FileListScreen>
243236
void dispose() {
244237
super.dispose();
245238
_userStreamSubscription?.cancel();
246-
_favoriteSubscription?.cancel();
247239
_cancelToken.cancel();
248240
Log.d("dispose", tag: tag);
249241
}
@@ -379,7 +371,9 @@ class _FileListScreenState extends State<FileListScreen>
379371

380372
AlistScaffold _buildScaffold(BuildContext context) {
381373
return AlistScaffold(
382-
appbarTitle: OverflowText(text: _pageName ?? Intl.screenName_fileListRoot.tr,),
374+
appbarTitle: OverflowText(
375+
text: _pageName ?? Intl.screenName_fileListRoot.tr,
376+
),
383377
appbarActions: [_menuMoreIcon()],
384378
onLeadingDoubleTap: () =>
385379
Get.until((route) => route.isFirst, id: stackId),
@@ -610,23 +604,13 @@ class _FileListScreenState extends State<FileListScreen>
610604
});
611605
}
612606

613-
Future<FileItemVO> _fileResp2VO(
614-
String provider, FileListRespContent resp) async {
607+
FileItemVO _fileResp2VO(String provider, FileListRespContent resp) {
615608
DateTime? modifyTime = resp.parseModifiedTime();
616609
String? modifyTimeStr = resp.getReformatModified(modifyTime);
617610

618-
AlistDatabaseController databaseController = Get.find();
619-
FavoriteDao favoriteDao = databaseController.favoriteDao;
620-
UserController userController = Get.find();
621-
var user = userController.user.value;
622-
623-
String fileRemotePath = resp.getCompletePath(path);
624-
Favorite? favorite = await favoriteDao.findByPath(
625-
user.serverUrl, user.username, fileRemotePath);
626-
627611
return FileItemVO(
628612
name: resp.name,
629-
path: fileRemotePath,
613+
path: resp.getCompletePath(path),
630614
size: resp.isDir ? null : resp.size,
631615
sizeDesc: resp.formatBytes(),
632616
isDir: resp.isDir,
@@ -637,13 +621,18 @@ class _FileListScreenState extends State<FileListScreen>
637621
sign: resp.sign,
638622
icon: resp.getFileIcon(),
639623
modifiedMilliseconds: modifyTime?.millisecondsSinceEpoch ?? -1,
640-
favorite: favorite != null,
641624
provider: provider,
642625
);
643626
}
644627

645628
_showBottomMenuDialog(
646-
BuildContext widgetContext, FileItemVO file, int index) {
629+
BuildContext widgetContext, FileItemVO file, int index) async {
630+
var user = _userController.user.value;
631+
Favorite? favorite = await _databaseController.favoriteDao
632+
.findByPath(user.serverUrl, user.username, file.path);
633+
if (!mounted) {
634+
return;
635+
}
647636
showModalBottomSheet(
648637
context: Get.context!,
649638
isScrollControlled: true,
@@ -734,24 +723,24 @@ class _FileListScreenState extends State<FileListScreen>
734723
_showRenameDialog(file);
735724
},
736725
),
737-
if (!file.favorite)
726+
if (favorite == null)
738727
ListTile(
739728
leading: const Icon(Icons.favorite_border_rounded),
740729
title: Text(Intl.fileList_menu_favorite.tr),
741730
onTap: () {
742731
Navigator.pop(context);
743-
_favorite(file);
732+
_favorite(file, true);
744733
},
745734
),
746-
if (file.favorite)
735+
if (favorite != null)
747736
ListTile(
748737
leading: const Icon(
749738
Icons.favorite_rounded,
750739
),
751740
title: Text(Intl.fileList_menu_cancel_favorite.tr),
752741
onTap: () {
753742
Navigator.pop(context);
754-
_favorite(file);
743+
_favorite(file, false);
755744
},
756745
),
757746
if (_hasWritePermission)
@@ -861,13 +850,13 @@ class _FileListScreenState extends State<FileListScreen>
861850
_showBottomMenuDialog(context, _files[index], index);
862851
}
863852

864-
void _favorite(FileItemVO file) async {
853+
void _favorite(FileItemVO file, bool favorite) async {
865854
AlistDatabaseController databaseController = Get.find();
866855
FavoriteDao favoriteDao = databaseController.favoriteDao;
867856
UserController userController = Get.find();
868857
var user = userController.user.value;
869858

870-
if (!file.favorite) {
859+
if (favorite) {
871860
var favoriteId = await favoriteDao.insertRecord(
872861
Favorite(
873862
isDir: file.isDir,
@@ -891,8 +880,6 @@ class _FileListScreenState extends State<FileListScreen>
891880
} else {
892881
favoriteDao.deleteByPath(user.serverUrl, user.username, file.path);
893882
}
894-
file.favorite = !file.favorite;
895-
_files.refresh();
896883
}
897884

898885
void _showRenameDialog(FileItemVO file) {
@@ -1028,28 +1015,6 @@ class _FileListScreenState extends State<FileListScreen>
10281015
);
10291016
});
10301017
}
1031-
1032-
void _refreshFavoriteState() async {
1033-
AlistDatabaseController databaseController = Get.find();
1034-
FavoriteDao favoriteDao = databaseController.favoriteDao;
1035-
UserController userController = Get.find();
1036-
var user = userController.user.value;
1037-
1038-
bool refresh = false;
1039-
for (var element in _files) {
1040-
Favorite? favorite = await favoriteDao.findByPath(
1041-
user.serverUrl, user.username, element.path);
1042-
bool isFavorite = favorite != null;
1043-
if (element.favorite != isFavorite) {
1044-
element.favorite = isFavorite;
1045-
refresh = true;
1046-
}
1047-
}
1048-
1049-
if (refresh) {
1050-
_files.refresh();
1051-
}
1052-
}
10531018
}
10541019

10551020
class _FileListView extends StatelessWidget {

lib/screen/recents_screen.dart

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -469,20 +469,20 @@ class _RecentsScreenState extends State<RecentsScreen>
469469
String? modifyTimeStr = resp.getReformatModified(modifyTime);
470470

471471
return FileItemVO(
472-
name: resp.name,
473-
path: resp.getCompletePath(path),
474-
size: resp.isDir ? null : resp.size,
475-
sizeDesc: resp.formatBytes(),
476-
isDir: resp.isDir,
477-
modified: modifyTimeStr,
478-
typeInt: resp.type,
479-
type: resp.getFileType(),
480-
thumb: resp.thumb,
481-
sign: resp.sign,
482-
icon: resp.getFileIcon(),
483-
modifiedMilliseconds: modifyTime?.millisecondsSinceEpoch ?? -1,
484-
provider: provider,
485-
favorite: false);
472+
name: resp.name,
473+
path: resp.getCompletePath(path),
474+
size: resp.isDir ? null : resp.size,
475+
sizeDesc: resp.formatBytes(),
476+
isDir: resp.isDir,
477+
modified: modifyTimeStr,
478+
typeInt: resp.type,
479+
type: resp.getFileType(),
480+
thumb: resp.thumb,
481+
sign: resp.sign,
482+
icon: resp.getFileIcon(),
483+
modifiedMilliseconds: modifyTime?.millisecondsSinceEpoch ?? -1,
484+
provider: provider,
485+
);
486486
}
487487

488488
void _gotoVideoPlayer(FileViewingRecord file) async {

lib/widget/file_list_item_view.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,6 @@ class FileItemVO {
121121
final FileType type;
122122
final String icon;
123123
final String? provider;
124-
bool favorite;
125124

126125
FileItemVO({
127126
required this.name,
@@ -136,7 +135,6 @@ class FileItemVO {
136135
required this.typeInt,
137136
required this.type,
138137
required this.icon,
139-
required this.provider,
140-
required this.favorite,
138+
required this.provider
141139
});
142140
}

0 commit comments

Comments
 (0)