From 91144bf8f19bd8760f00d2b20b47fc5681caac35 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Thu, 8 Feb 2024 09:55:06 +0800 Subject: [PATCH] Hide markAsNsfw and markAsAd if user do not have permissions --- lib/api/user.dart | 6 ++-- lib/auth.dart | 9 ++++++ lib/components/thumbnail.dart | 55 ++++++++++++++++++++--------------- lib/globals.dart | 2 +- lib/platform/display.dart | 11 +++++++ 5 files changed, 57 insertions(+), 26 deletions(-) diff --git a/lib/api/user.dart b/lib/api/user.dart index e69737e..1eaa388 100644 --- a/lib/api/user.dart +++ b/lib/api/user.dart @@ -6,9 +6,11 @@ part 'user.g.dart'; enum UserPermission with EnumFlag { readGallery, editGallery, + deleteGallery, + manageTasks, } -const userPermissionAll = 3; +const userPermissionAll = 15; class UserPermissions { const UserPermissions(this.code); @@ -25,7 +27,7 @@ class UserPermissions { @override String toString() { - if (code & userPermissionAll != 0) return "all"; + if (code & userPermissionAll == userPermissionAll) return "all"; final set = code.getFlags(UserPermission.values).toSet(); if (set.isEmpty) return "none"; return set.map((e) => e.name).join("|"); diff --git a/lib/auth.dart b/lib/auth.dart index f0c99e0..9112311 100644 --- a/lib/auth.dart +++ b/lib/auth.dart @@ -22,10 +22,19 @@ class AuthInfo { bool get isChecking => _isChecking; bool? get isAdmin => _user?.isAdmin; bool? get isDocker => _status?.isDocker; + bool? get canReadGallery => + _user?.permissions.has(UserPermission.readGallery); + bool? get canEditGallery => + _user?.permissions.has(UserPermission.editGallery); + bool? get canDeleteGallery => + _user?.permissions.has(UserPermission.deleteGallery); + bool? get canManageTasks => + _user?.permissions.has(UserPermission.manageTasks); void clear() { _user = null; _status = null; + _token = null; _checked = false; } diff --git a/lib/components/thumbnail.dart b/lib/components/thumbnail.dart index 8a26857..aa1eb59 100644 --- a/lib/components/thumbnail.dart +++ b/lib/components/thumbnail.dart @@ -297,22 +297,26 @@ class _Thumbnail extends State { PopupMenuItem( value: _ThumbnailMenu.saveAs, child: Text(AppLocalizations.of(context)!.saveAs)), - const PopupMenuDivider(), - PopupMenuItem( - value: isNsfw - ? _ThumbnailMenu.markAsSfw - : _ThumbnailMenu.markAsNsfw, - child: Text(isNsfw - ? AppLocalizations.of(context)!.markAsSfw - : AppLocalizations.of(context)!.markAsNsfw)), - PopupMenuItem( - value: isAd - ? _ThumbnailMenu.markAsNonAd - : _ThumbnailMenu.markAsAd, - child: Text(isAd - ? AppLocalizations.of(context)!.markAsNonAd - : AppLocalizations.of(context)!.markAsAd)), ]; + if (auth.canEditGallery == true) { + list += [ + const PopupMenuDivider(), + PopupMenuItem( + value: isNsfw + ? _ThumbnailMenu.markAsSfw + : _ThumbnailMenu.markAsNsfw, + child: Text(isNsfw + ? AppLocalizations.of(context)!.markAsSfw + : AppLocalizations.of(context)!.markAsNsfw)), + PopupMenuItem( + value: isAd + ? _ThumbnailMenu.markAsNonAd + : _ThumbnailMenu.markAsAd, + child: Text(isAd + ? AppLocalizations.of(context)!.markAsNonAd + : AppLocalizations.of(context)!.markAsAd)), + ]; + } return list; })); final timg = _data != null @@ -320,14 +324,19 @@ class _Thumbnail extends State { uri: _uri, fileName: _fileName, dir: _dir, - isNsfw: () => widget._pMeta.isNsfw, - changeNsfw: (isNsfw) { - _markAsNsfw(isNsfw); - }, - isAd: () => widget._pMeta.isAd, - changeAd: (isAd) { - _markAsAd(isAd); - }) + isNsfw: + auth.canEditGallery == true ? () => widget._pMeta.isNsfw : null, + changeNsfw: auth.canEditGallery == true + ? (isNsfw) { + _markAsNsfw(isNsfw); + } + : null, + isAd: auth.canEditGallery == true ? () => widget._pMeta.isAd : null, + changeAd: auth.canEditGallery == true + ? (isAd) { + _markAsAd(isAd); + } + : null) : null; final img = widget.gid != null && widget.index != null && _data != null ? GestureDetector( diff --git a/lib/globals.dart b/lib/globals.dart index 6c36398..2972358 100644 --- a/lib/globals.dart +++ b/lib/globals.dart @@ -212,7 +212,7 @@ List> buildMoreVertSettings( title: Text(AppLocalizations.of(context)!.displayAd), ), ))); - if (path == "/gallery/:gid") { + if (path == "/gallery/:gid" && auth.canEditGallery == true) { list.add(const PopupMenuDivider()); final isAllNsfw = GalleryPage.of(context).isAllNsfw; if (isAllNsfw != null) { diff --git a/lib/platform/display.dart b/lib/platform/display.dart index 7fb73af..e090733 100644 --- a/lib/platform/display.dart +++ b/lib/platform/display.dart @@ -1,6 +1,8 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:logging/logging.dart'; +import 'package:window_manager/window_manager.dart'; +import '../utils.dart'; final _log = Logger("platformDisplay"); @@ -30,6 +32,15 @@ class Display { } Future setFullscreenMode(bool fullscreenMode) async { + if (isDesktop) { + try { + await WindowManager.instance.setFullScreen(fullscreenMode); + return true; + } catch (e) { + _log.warning("Failed to set screen mode", e); + return false; + } + } try { await platform.invokeMethod("setScreenMode", fullscreenMode); return true;