[client] Refactor common functionality in resource actions

This commit is contained in:
Abhishek Shroff
2024-12-25 13:16:49 +05:30
parent 75ba71a3a8
commit a4528d73f6
9 changed files with 65 additions and 101 deletions

View File

@@ -1,5 +1,22 @@
import 'dart:async';
import 'package:offtheline/offtheline.dart';
import 'package:phylum/libphylum/phylum_api_types.dart';
abstract class ResourceAction extends PhylumAction {
String get resourceId;
String _resourceId;
String get resourceId => _resourceId;
ResourceAction({required String resourceId}) : _resourceId = resourceId;
void updateResourceId(String resourceId) {
_resourceId = resourceId;
}
@override
FutureOr<void> processResponse(ApiResponse response) async {
if (response is PhylumApiSuccessResponse) {
await account.resourceRepository.processResourceUpdateResponse(resourceId, response.data);
}
}
}

View File

@@ -1,8 +1,26 @@
import 'action_resource.dart';
abstract class ResourceBindAction extends ResourceAction {
String get parent;
String get resourceName;
String _parent;
String get parent => _parent;
Future<void> updateResourceName(String resourceName);
String _resourceName;
String get resourceName => _resourceName;
ResourceBindAction({
required super.resourceId,
required String parent,
required String resourceName,
}) : _parent = parent,
_resourceName = resourceName;
Future<void> updateParent(String parent) {
_parent = parent;
return update(revertOptimisticUpdate);
}
Future<void> updateResourceName(String resourceName) {
_resourceName = resourceName;
return update(revertOptimisticUpdate);
}
}

View File

@@ -17,24 +17,17 @@ class ResourceCopyAction extends ResourceCreateAction with JsonApiAction {
String get endpoint => '/api/v1/fs/cp/$srcId';
final String srcId;
@override
final String resourceId;
@override
final String parent;
String _resourceName;
@override
String get resourceName => _resourceName;
final String description;
final bool dir;
ResourceCopyAction._({
required this.srcId,
required this.resourceId,
required this.parent,
required String resourceName,
required super.resourceId,
required super.parent,
required super.resourceName,
required this.dir,
required this.description,
}) : _resourceName = resourceName;
});
ResourceCopyAction({
required Resource src,
@@ -94,19 +87,6 @@ class ResourceCopyAction extends ResourceCreateAction with JsonApiAction {
'description': description,
};
@override
FutureOr<void> processResponse(ApiResponse response) async {
if (response is PhylumApiSuccessResponse) {
await account.resourceRepository.processResourceUpdateResponse(resourceId, response.data);
}
}
@override
Future<void> updateResourceName(String resourceName) {
_resourceName = resourceName;
return update(revertOptimisticUpdate);
}
@override
bool dependsOn(PhylumAction action) => action is ResourceCreateAction && action.resourceId == parent;
}

View File

@@ -5,11 +5,18 @@ import 'package:phylum/libphylum/actions/action_resource_bind.dart';
import 'package:phylum/libphylum/phylum_api_types.dart';
abstract class ResourceCreateAction extends ResourceBindAction {
ResourceCreateAction({
required super.resourceId,
required super.parent,
required super.resourceName,
});
@override
FutureOr<void> processResponse(ApiResponse response) async {
if (response is PhylumApiSuccessResponse) {
final resource = await account.resourceRepository.processResourceUpdateResponse(resourceId, response.data);
if (resource.id.value != resourceId) {
final parsedId = resource.id.value;
if (parsedId != resourceId) {
revertOptimisticUpdate();
}
}

View File

@@ -19,12 +19,10 @@ class ResourceDeleteAction extends ResourceAction with JsonApiAction {
@override
String get endpoint => '/api/v1/fs/rm/$id';
@override
final String resourceId;
final String resourceName;
ResourceDeleteAction._({
required this.resourceId,
required super.resourceId,
required this.resourceName,
});

View File

@@ -15,19 +15,11 @@ class ResourceMkdirAction extends ResourceCreateAction with JsonApiAction {
@override
String get endpoint => '/api/v1/fs/mkdir/$resourceId';
@override
final String resourceId;
@override
final String parent;
String _resourceName;
@override
String get resourceName => _resourceName;
ResourceMkdirAction({
required this.resourceId,
required this.parent,
required String resourceName,
}) : _resourceName = resourceName;
required super.resourceId,
required super.parent,
required super.resourceName,
});
static ResourceMkdirAction fromMap(Map<String, dynamic> map) {
return ResourceMkdirAction(
@@ -67,12 +59,6 @@ class ResourceMkdirAction extends ResourceCreateAction with JsonApiAction {
'parent': parent,
};
@override
Future<void> updateResourceName(String resourceName) {
_resourceName = resourceName;
return update(revertOptimisticUpdate);
}
@override
bool dependsOn(PhylumAction action) => action is ResourceMkdirAction && action.resourceId == parent;
}

View File

@@ -18,23 +18,16 @@ class ResourceMoveAction extends ResourceBindAction with JsonApiAction {
@override
String get endpoint => '/api/v1/fs/mv/$resourceId';
@override
final String resourceId;
@override
final String parent;
String _resourceName;
@override
String get resourceName => _resourceName;
final DateTime modified;
final String description;
ResourceMoveAction._({
required this.resourceId,
required this.parent,
required String resourceName,
required super.resourceId,
required super.parent,
required super.resourceName,
required this.description,
required this.modified,
}) : _resourceName = resourceName;
});
ResourceMoveAction({
required Resource r,
@@ -114,19 +107,6 @@ class ResourceMoveAction extends ResourceBindAction with JsonApiAction {
'modified': modified.millisecondsSinceEpoch,
};
@override
FutureOr<void> processResponse(ApiResponse response) async {
if (response is PhylumApiSuccessResponse) {
await account.resourceRepository.processResourceUpdateResponse(resourceId, response.data);
}
}
@override
Future<void> updateResourceName(String resourceName) {
_resourceName = resourceName;
return update(revertOptimisticUpdate);
}
@override
bool dependsOn(PhylumAction action) =>
(action is ResourceCreateAction && action.resourceId == resourceId) ||

View File

@@ -20,15 +20,13 @@ class ResourceShareAction extends ResourceAction with JsonApiAction {
@override
String get endpoint => '/api/v1/fs/share/$resourceId';
@override
final String resourceId;
final String username;
final int permission;
final DateTime modified;
final String description;
ResourceShareAction._({
required this.resourceId,
required super.resourceId,
required this.username,
required this.permission,
required this.modified,
@@ -124,13 +122,6 @@ class ResourceShareAction extends ResourceAction with JsonApiAction {
'description': description,
};
@override
FutureOr<void> processResponse(ApiResponse response) async {
if (response is PhylumApiSuccessResponse) {
await account.resourceRepository.processResourceUpdateResponse(resourceId, response.data);
}
}
@override
bool dependsOn(PhylumAction action) =>
(action is ResourceCreateAction && action.resourceId == resourceId) ||

View File

@@ -23,25 +23,18 @@ class ResourceUploadAction extends ResourceCreateAction with FileUploadApiAction
@override
Future<MultipartFile> get file => MultipartFile.fromPath('contents', path, filename: resourceName, contentType: MediaType.parse(contentType));
@override
final String resourceId;
@override
final String parent;
String _resourceName;
@override
String get resourceName => _resourceName;
final String path;
final int size;
final String contentType;
ResourceUploadAction._({
required this.resourceId,
required this.parent,
required String resourceName,
required super.resourceId,
required super.parent,
required super.resourceName,
required this.path,
required this.size,
required this.contentType,
}) : _resourceName = resourceName;
});
static Future<ResourceUploadAction> fromPath({
required String parent,
@@ -104,12 +97,6 @@ class ResourceUploadAction extends ResourceCreateAction with FileUploadApiAction
};
}
@override
Future<void> updateResourceName(String resourceName) {
_resourceName = resourceName;
return update(revertOptimisticUpdate);
}
@override
bool dependsOn(PhylumAction action) => (action is ResourceCreateAction && action.resourceId == parent);
}