[client] Bring bookmark actions into ResourceAction hierarchy

This commit is contained in:
Abhishek Shroff
2024-12-25 13:33:00 +05:30
parent a4528d73f6
commit 85b253e8ab
5 changed files with 39 additions and 32 deletions

View File

@@ -1,11 +1,14 @@
import 'dart:async';
import 'package:offtheline/offtheline.dart';
import 'package:phylum/libphylum/actions/bookmark_action.dart';
import 'package:phylum/libphylum/actions/action_resource_create.dart';
import 'package:phylum/libphylum/actions/action_resource_bookmark_remove.dart';
import 'package:phylum/libphylum/db/db.dart';
import 'package:phylum/libphylum/phylum_api_types.dart';
class BookmarkAddAction extends PhylumAction with JsonApiAction, BookmarkAction {
import 'action_resource.dart';
class ResourceBookmarkAddAction extends ResourceAction with JsonApiAction {
static const kActionName = 'bookmarkAdd';
@override
String get actionName => kActionName;
@@ -19,14 +22,16 @@ class BookmarkAddAction extends PhylumAction with JsonApiAction, BookmarkAction
@override
Map<String, String> get queryParamters => {'name': bookmarkName};
@override
final String resourceId;
final String bookmarkName;
final int createdMillis;
BookmarkAddAction._({required this.resourceId, required this.bookmarkName, required this.createdMillis});
ResourceBookmarkAddAction._({
required super.resourceId,
required this.bookmarkName,
required this.createdMillis,
});
BookmarkAddAction({
ResourceBookmarkAddAction({
required Resource r,
String? name,
}) : this._(
@@ -35,8 +40,8 @@ class BookmarkAddAction extends PhylumAction with JsonApiAction, BookmarkAction
createdMillis: DateTime.now().millisecondsSinceEpoch,
);
static BookmarkAddAction fromMap(Map<String, dynamic> map) {
return BookmarkAddAction._(
static ResourceBookmarkAddAction fromMap(Map<String, dynamic> map) {
return ResourceBookmarkAddAction._(
resourceId: map['resourceId'],
bookmarkName: map['bookmarkName'],
createdMillis: map['createdMillis'],
@@ -81,5 +86,8 @@ class BookmarkAddAction extends PhylumAction with JsonApiAction, BookmarkAction
}
@override
bool dependsOn(PhylumAction action) => action is BookmarkAction && action.resourceId == resourceId;
bool dependsOn(PhylumAction action) =>
action is ResourceAction &&
(action is ResourceCreateAction || action is ResourceBookmarkAddAction || action is ResourceBookmarkRemoveAction) &&
action.resourceId == resourceId;
}

View File

@@ -2,11 +2,14 @@ import 'dart:async';
import 'package:drift/drift.dart';
import 'package:offtheline/offtheline.dart';
import 'package:phylum/libphylum/actions/bookmark_action.dart';
import 'package:phylum/libphylum/db/db.dart';
import 'package:phylum/libphylum/phylum_api_types.dart';
class BookmarkRemoveAction extends PhylumAction with JsonApiAction, BookmarkAction {
import 'action_resource.dart';
import 'action_resource_bookmark_add.dart';
import 'action_resource_create.dart';
class ResourceBookmarkRemoveAction extends ResourceAction with JsonApiAction {
static const kActionName = 'bookmarkRemove';
@override
String get actionName => kActionName;
@@ -17,21 +20,19 @@ class BookmarkRemoveAction extends PhylumAction with JsonApiAction, BookmarkActi
@override
String get endpoint => '/api/v1/my/bookmarks/remove/$resourceId';
@override
final String resourceId;
final String bookmarkName;
BookmarkRemoveAction._({required this.resourceId, required this.bookmarkName});
ResourceBookmarkRemoveAction._({required super.resourceId, required this.bookmarkName});
BookmarkRemoveAction({
ResourceBookmarkRemoveAction({
required Resource r,
}) : this._(
resourceId: r.id,
bookmarkName: r.name,
);
static BookmarkRemoveAction fromMap(Map<String, dynamic> map) {
return BookmarkRemoveAction._(
static ResourceBookmarkRemoveAction fromMap(Map<String, dynamic> map) {
return ResourceBookmarkRemoveAction._(
resourceId: map['resourceId'],
bookmarkName: map['bookmarkName'],
);
@@ -69,5 +70,8 @@ class BookmarkRemoveAction extends PhylumAction with JsonApiAction, BookmarkActi
}
@override
bool dependsOn(PhylumAction action) => action is BookmarkAction && action.resourceId == resourceId;
bool dependsOn(PhylumAction action) =>
action is ResourceAction &&
(action is ResourceCreateAction || action is ResourceBookmarkAddAction || action is ResourceBookmarkRemoveAction) &&
action.resourceId == resourceId;
}

View File

@@ -1,5 +0,0 @@
import 'package:phylum/libphylum/phylum_api_types.dart';
mixin BookmarkAction on PhylumAction {
String get resourceId;
}

View File

@@ -4,12 +4,12 @@ import 'package:phylum/libphylum/actions/action_resource_mkdir.dart';
import 'package:phylum/libphylum/actions/action_resource_move.dart';
import 'package:phylum/libphylum/actions/action_resource_share.dart';
import 'package:phylum/libphylum/actions/action_resource_upload.dart';
import 'package:phylum/libphylum/actions/bookmark_add_action.dart';
import 'package:phylum/libphylum/actions/bookmark_remove_action.dart';
import 'package:phylum/libphylum/actions/action_resource_bookmark_add.dart';
import 'package:phylum/libphylum/actions/action_resource_bookmark_remove.dart';
const actionDeserializers = {
BookmarkAddAction.kActionName: BookmarkAddAction.fromMap,
BookmarkRemoveAction.kActionName: BookmarkRemoveAction.fromMap,
ResourceBookmarkAddAction.kActionName: ResourceBookmarkAddAction.fromMap,
ResourceBookmarkRemoveAction.kActionName: ResourceBookmarkRemoveAction.fromMap,
ResourceCopyAction.kActionName: ResourceCopyAction.fromMap,
ResourceDeleteAction.kActionName: ResourceDeleteAction.fromMap,
ResourceMkdirAction.kActionName: ResourceMkdirAction.fromMap,

View File

@@ -6,8 +6,8 @@ import 'package:phylum/integrations/download_manager.dart';
import 'package:phylum/libphylum/actions/action_resource_copy.dart';
import 'package:phylum/libphylum/actions/action_resource_delete.dart';
import 'package:phylum/libphylum/actions/action_resource_move.dart';
import 'package:phylum/libphylum/actions/bookmark_add_action.dart';
import 'package:phylum/libphylum/actions/bookmark_remove_action.dart';
import 'package:phylum/libphylum/actions/action_resource_bookmark_add.dart';
import 'package:phylum/libphylum/actions/action_resource_bookmark_remove.dart';
import 'package:phylum/libphylum/db/db.dart';
import 'package:phylum/libphylum/phylum_account.dart';
import 'package:phylum/libphylum/util/uuid.dart';
@@ -114,16 +114,16 @@ void handleOption(BuildContext context, Iterable<Resource> resources, MenuOption
if (name == null || !context.mounted) {
return;
}
account.addAction(BookmarkAddAction(r: r, name: name.isEmpty ? '' : name));
account.addAction(ResourceBookmarkAddAction(r: r, name: name.isEmpty ? '' : name));
} else {
for (final r in resources) {
account.addAction(BookmarkAddAction(r: r));
account.addAction(ResourceBookmarkAddAction(r: r));
}
}
break;
case MenuOption.bookmarkRemove:
for (final r in resources) {
account.addAction(BookmarkRemoveAction(r: r));
account.addAction(ResourceBookmarkRemoveAction(r: r));
}
break;
case MenuOption.newFolder: