mirror of
https://github.com/lifegpc/eh_downloader_flutter.git
synced 2026-07-08 01:30:28 +08:00
Add select mode to gallery page
This commit is contained in:
@@ -44,14 +44,25 @@ class _GalleryPage extends State<GalleryPage>
|
||||
Object? _error;
|
||||
CancelToken? _cancel;
|
||||
CancelToken? _markAsNsfwCancel;
|
||||
CancelToken? _markAsAdCancel;
|
||||
bool _isLoading = false;
|
||||
bool _isSelectMode = false;
|
||||
final List<String> _selected = [];
|
||||
bool? get isAllNsfw => _data?.isAllNsfw;
|
||||
bool get isSelectMode => _isSelectMode;
|
||||
Future<void> markGalleryAsNsfw(bool isNsfw) async {
|
||||
try {
|
||||
_markAsNsfwCancel = CancelToken();
|
||||
(await api.updateGalleryFileMeta(_gid,
|
||||
isNsfw: isNsfw, cancel: _markAsNsfwCancel))
|
||||
.unwrap();
|
||||
if (_isSelectMode) {
|
||||
if (_selected.isEmpty) return;
|
||||
(await api.updateFilesMeta(_selected.join(","),
|
||||
isNsfw: isNsfw, cancel: _markAsNsfwCancel))
|
||||
.unwrap();
|
||||
} else {
|
||||
(await api.updateGalleryFileMeta(_gid,
|
||||
isNsfw: isNsfw, cancel: _markAsNsfwCancel))
|
||||
.unwrap();
|
||||
}
|
||||
if (!_markAsNsfwCancel!.isCancelled) {
|
||||
_fetchData();
|
||||
}
|
||||
@@ -62,6 +73,23 @@ class _GalleryPage extends State<GalleryPage>
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> markAsAd(bool isAd) async {
|
||||
if (!_isSelectMode || _selected.isEmpty) return;
|
||||
try {
|
||||
_markAsAdCancel = CancelToken();
|
||||
(await api.updateFilesMeta(_selected.join(","),
|
||||
isAd: isAd, cancel: _markAsAdCancel))
|
||||
.unwrap();
|
||||
if (!_markAsAdCancel!.isCancelled) {
|
||||
_fetchData();
|
||||
}
|
||||
} catch (e) {
|
||||
if (!_markAsAdCancel!.isCancelled) {
|
||||
_log.warning("Failed to mark gallery $_gid:", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _fetchData() async {
|
||||
try {
|
||||
_cancel = CancelToken();
|
||||
@@ -76,6 +104,7 @@ class _GalleryPage extends State<GalleryPage>
|
||||
setState(() {
|
||||
_files = fileData;
|
||||
_isLoading = false;
|
||||
_selected.clear();
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
@@ -138,11 +167,22 @@ class _GalleryPage extends State<GalleryPage>
|
||||
body: isLoading
|
||||
? const Center(child: CircularProgressIndicator())
|
||||
: _data != null
|
||||
? GalleryInfo(_data!,
|
||||
files: _files, refreshIndicatorKey: _refreshIndicatorKey,
|
||||
? GalleryInfo(
|
||||
_data!,
|
||||
files: _files,
|
||||
refreshIndicatorKey: _refreshIndicatorKey,
|
||||
onRefresh: () async {
|
||||
await _fetchData();
|
||||
})
|
||||
await _fetchData();
|
||||
},
|
||||
onSelectChanged: (v) {
|
||||
setState(() {
|
||||
_isSelectMode = v;
|
||||
if (v) _selected.clear();
|
||||
});
|
||||
},
|
||||
isSelectMode: _isSelectMode,
|
||||
selected: _selected,
|
||||
)
|
||||
: Center(
|
||||
child: Text("Error: $_error"),
|
||||
));
|
||||
@@ -152,6 +192,7 @@ class _GalleryPage extends State<GalleryPage>
|
||||
void dispose() {
|
||||
_cancel?.cancel();
|
||||
_markAsNsfwCancel?.cancel();
|
||||
_markAsAdCancel?.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user