Hide markAsNsfw and markAsAd if user do not have permissions

This commit is contained in:
2024-02-08 09:55:06 +08:00
parent 04e73abe47
commit 91144bf8f1
5 changed files with 57 additions and 26 deletions

View File

@@ -6,9 +6,11 @@ part 'user.g.dart';
enum UserPermission with EnumFlag { enum UserPermission with EnumFlag {
readGallery, readGallery,
editGallery, editGallery,
deleteGallery,
manageTasks,
} }
const userPermissionAll = 3; const userPermissionAll = 15;
class UserPermissions { class UserPermissions {
const UserPermissions(this.code); const UserPermissions(this.code);
@@ -25,7 +27,7 @@ class UserPermissions {
@override @override
String toString() { String toString() {
if (code & userPermissionAll != 0) return "all"; if (code & userPermissionAll == userPermissionAll) return "all";
final set = code.getFlags(UserPermission.values).toSet(); final set = code.getFlags(UserPermission.values).toSet();
if (set.isEmpty) return "none"; if (set.isEmpty) return "none";
return set.map((e) => e.name).join("|"); return set.map((e) => e.name).join("|");

View File

@@ -22,10 +22,19 @@ class AuthInfo {
bool get isChecking => _isChecking; bool get isChecking => _isChecking;
bool? get isAdmin => _user?.isAdmin; bool? get isAdmin => _user?.isAdmin;
bool? get isDocker => _status?.isDocker; 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() { void clear() {
_user = null; _user = null;
_status = null; _status = null;
_token = null;
_checked = false; _checked = false;
} }

View File

@@ -297,22 +297,26 @@ class _Thumbnail extends State<Thumbnail> {
PopupMenuItem( PopupMenuItem(
value: _ThumbnailMenu.saveAs, value: _ThumbnailMenu.saveAs,
child: Text(AppLocalizations.of(context)!.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; return list;
})); }));
final timg = _data != null final timg = _data != null
@@ -320,14 +324,19 @@ class _Thumbnail extends State<Thumbnail> {
uri: _uri, uri: _uri,
fileName: _fileName, fileName: _fileName,
dir: _dir, dir: _dir,
isNsfw: () => widget._pMeta.isNsfw, isNsfw:
changeNsfw: (isNsfw) { auth.canEditGallery == true ? () => widget._pMeta.isNsfw : null,
_markAsNsfw(isNsfw); changeNsfw: auth.canEditGallery == true
}, ? (isNsfw) {
isAd: () => widget._pMeta.isAd, _markAsNsfw(isNsfw);
changeAd: (isAd) { }
_markAsAd(isAd); : null,
}) isAd: auth.canEditGallery == true ? () => widget._pMeta.isAd : null,
changeAd: auth.canEditGallery == true
? (isAd) {
_markAsAd(isAd);
}
: null)
: null; : null;
final img = widget.gid != null && widget.index != null && _data != null final img = widget.gid != null && widget.index != null && _data != null
? GestureDetector( ? GestureDetector(

View File

@@ -212,7 +212,7 @@ List<PopupMenuEntry<MoreVertSettings>> buildMoreVertSettings(
title: Text(AppLocalizations.of(context)!.displayAd), title: Text(AppLocalizations.of(context)!.displayAd),
), ),
))); )));
if (path == "/gallery/:gid") { if (path == "/gallery/:gid" && auth.canEditGallery == true) {
list.add(const PopupMenuDivider()); list.add(const PopupMenuDivider());
final isAllNsfw = GalleryPage.of(context).isAllNsfw; final isAllNsfw = GalleryPage.of(context).isAllNsfw;
if (isAllNsfw != null) { if (isAllNsfw != null) {

View File

@@ -1,6 +1,8 @@
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import 'package:window_manager/window_manager.dart';
import '../utils.dart';
final _log = Logger("platformDisplay"); final _log = Logger("platformDisplay");
@@ -30,6 +32,15 @@ class Display {
} }
Future<bool> setFullscreenMode(bool fullscreenMode) async { Future<bool> 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 { try {
await platform.invokeMethod<void>("setScreenMode", fullscreenMode); await platform.invokeMethod<void>("setScreenMode", fullscreenMode);
return true; return true;