diff --git a/client/lib/libphylum/actions/action_resource.dart b/client/lib/libphylum/actions/action_resource.dart index 59d1c466..798cc178 100644 --- a/client/lib/libphylum/actions/action_resource.dart +++ b/client/lib/libphylum/actions/action_resource.dart @@ -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 processResponse(ApiResponse response) async { + if (response is PhylumApiSuccessResponse) { + await account.resourceRepository.processResourceUpdateResponse(resourceId, response.data); + } + } } diff --git a/client/lib/libphylum/actions/action_resource_bind.dart b/client/lib/libphylum/actions/action_resource_bind.dart index 638030aa..1651a9a2 100644 --- a/client/lib/libphylum/actions/action_resource_bind.dart +++ b/client/lib/libphylum/actions/action_resource_bind.dart @@ -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 updateResourceName(String resourceName); + String _resourceName; + String get resourceName => _resourceName; + + ResourceBindAction({ + required super.resourceId, + required String parent, + required String resourceName, + }) : _parent = parent, + _resourceName = resourceName; + + Future updateParent(String parent) { + _parent = parent; + return update(revertOptimisticUpdate); + } + + Future updateResourceName(String resourceName) { + _resourceName = resourceName; + return update(revertOptimisticUpdate); + } } diff --git a/client/lib/libphylum/actions/action_resource_copy.dart b/client/lib/libphylum/actions/action_resource_copy.dart index 248a2cdb..fe9a4373 100644 --- a/client/lib/libphylum/actions/action_resource_copy.dart +++ b/client/lib/libphylum/actions/action_resource_copy.dart @@ -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 processResponse(ApiResponse response) async { - if (response is PhylumApiSuccessResponse) { - await account.resourceRepository.processResourceUpdateResponse(resourceId, response.data); - } - } - - @override - Future updateResourceName(String resourceName) { - _resourceName = resourceName; - return update(revertOptimisticUpdate); - } - @override bool dependsOn(PhylumAction action) => action is ResourceCreateAction && action.resourceId == parent; } diff --git a/client/lib/libphylum/actions/action_resource_create.dart b/client/lib/libphylum/actions/action_resource_create.dart index 9c6325cc..2d18f56a 100644 --- a/client/lib/libphylum/actions/action_resource_create.dart +++ b/client/lib/libphylum/actions/action_resource_create.dart @@ -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 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(); } } diff --git a/client/lib/libphylum/actions/action_resource_delete.dart b/client/lib/libphylum/actions/action_resource_delete.dart index 824a377e..b810d49d 100644 --- a/client/lib/libphylum/actions/action_resource_delete.dart +++ b/client/lib/libphylum/actions/action_resource_delete.dart @@ -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, }); diff --git a/client/lib/libphylum/actions/action_resource_mkdir.dart b/client/lib/libphylum/actions/action_resource_mkdir.dart index 9d3fbbc0..7fa340b1 100644 --- a/client/lib/libphylum/actions/action_resource_mkdir.dart +++ b/client/lib/libphylum/actions/action_resource_mkdir.dart @@ -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 map) { return ResourceMkdirAction( @@ -67,12 +59,6 @@ class ResourceMkdirAction extends ResourceCreateAction with JsonApiAction { 'parent': parent, }; - @override - Future updateResourceName(String resourceName) { - _resourceName = resourceName; - return update(revertOptimisticUpdate); - } - @override bool dependsOn(PhylumAction action) => action is ResourceMkdirAction && action.resourceId == parent; } diff --git a/client/lib/libphylum/actions/action_resource_move.dart b/client/lib/libphylum/actions/action_resource_move.dart index ef62903d..e1d4638a 100644 --- a/client/lib/libphylum/actions/action_resource_move.dart +++ b/client/lib/libphylum/actions/action_resource_move.dart @@ -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 processResponse(ApiResponse response) async { - if (response is PhylumApiSuccessResponse) { - await account.resourceRepository.processResourceUpdateResponse(resourceId, response.data); - } - } - - @override - Future updateResourceName(String resourceName) { - _resourceName = resourceName; - return update(revertOptimisticUpdate); - } - @override bool dependsOn(PhylumAction action) => (action is ResourceCreateAction && action.resourceId == resourceId) || diff --git a/client/lib/libphylum/actions/action_resource_share.dart b/client/lib/libphylum/actions/action_resource_share.dart index a3340ade..440442fe 100644 --- a/client/lib/libphylum/actions/action_resource_share.dart +++ b/client/lib/libphylum/actions/action_resource_share.dart @@ -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 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) || diff --git a/client/lib/libphylum/actions/action_resource_upload.dart b/client/lib/libphylum/actions/action_resource_upload.dart index 36ae83df..2d34a180 100644 --- a/client/lib/libphylum/actions/action_resource_upload.dart +++ b/client/lib/libphylum/actions/action_resource_upload.dart @@ -23,25 +23,18 @@ class ResourceUploadAction extends ResourceCreateAction with FileUploadApiAction @override Future 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 fromPath({ required String parent, @@ -104,12 +97,6 @@ class ResourceUploadAction extends ResourceCreateAction with FileUploadApiAction }; } - @override - Future updateResourceName(String resourceName) { - _resourceName = resourceName; - return update(revertOptimisticUpdate); - } - @override bool dependsOn(PhylumAction action) => (action is ResourceCreateAction && action.resourceId == parent); }