From bd30e31f6cb774d0566a5b207e816b4bd0e3bd48 Mon Sep 17 00:00:00 2001 From: "Lucas.Xu" Date: Mon, 21 Aug 2023 13:54:26 +0800 Subject: [PATCH] feat: improve copy paste plugins, and support in-app copy-paste (#3233) --- .../assets/test/images/sample.gif | Bin 0 -> 97796 bytes .../assets/test/images/sample.jpeg | Bin 0 -> 22051 bytes .../assets/test/images/sample.png | Bin 0 -> 38475 bytes .../document_copy_and_paste_test.dart | 234 ++++++++++++++++-- .../document/presentation/editor_page.dart | 2 + .../copy_and_paste/clipboard_service.dart | 129 ++++++++++ .../copy_and_paste/custom_copy_command.dart | 52 ++++ .../copy_and_paste/custom_paste_command.dart | 62 +++++ .../editor_state_paste_node_extension.dart | 155 ++++++++++++ .../copy_and_paste/paste_from_html.dart | 23 ++ .../copy_and_paste/paste_from_image.dart | 44 ++++ .../paste_from_in_app_json.dart | 25 ++ .../copy_and_paste/paste_from_plain_text.dart | 36 +++ .../presentation/editor_plugins/plugins.dart | 2 + .../lib/startup/deps_resolver.dart | 29 ++- frontend/appflowy_flutter/pubspec.lock | 44 +++- frontend/appflowy_flutter/pubspec.yaml | 2 + 17 files changed, 801 insertions(+), 38 deletions(-) create mode 100644 frontend/appflowy_flutter/assets/test/images/sample.gif create mode 100644 frontend/appflowy_flutter/assets/test/images/sample.jpeg create mode 100644 frontend/appflowy_flutter/assets/test/images/sample.png create mode 100644 frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/clipboard_service.dart create mode 100644 frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/custom_copy_command.dart create mode 100644 frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/custom_paste_command.dart create mode 100644 frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/editor_state_paste_node_extension.dart create mode 100644 frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_html.dart create mode 100644 frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_image.dart create mode 100644 frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_in_app_json.dart create mode 100644 frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_plain_text.dart diff --git a/frontend/appflowy_flutter/assets/test/images/sample.gif b/frontend/appflowy_flutter/assets/test/images/sample.gif new file mode 100644 index 0000000000000000000000000000000000000000..b3b85f4a402b14298807a8db77441265d951be14 GIT binary patch literal 97796 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 H?ttFwAVX=)_1EYg5Jtu#?%d)TNh$RYdPQr*1$ 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 literal 0 HcmV?d00001 diff --git a/frontend/appflowy_flutter/assets/test/images/sample.jpeg b/frontend/appflowy_flutter/assets/test/images/sample.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..d2f50a4148176b0c1c5ebfcb42ffac4ce57cb685 GIT binary patch literal 22051 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 literal 0 HcmV?d00001 diff --git a/frontend/appflowy_flutter/assets/test/images/sample.png b/frontend/appflowy_flutter/assets/test/images/sample.png new file mode 100644 index 0000000000000000000000000000000000000000..84f633437f7ee6834e26a7258c7dabcbd3d1364a GIT binary patch literal 38475 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 literal 0 HcmV?d00001 diff --git a/frontend/appflowy_flutter/integration_test/document/document_copy_and_paste_test.dart b/frontend/appflowy_flutter/integration_test/document/document_copy_and_paste_test.dart index 296f71be82..42ed3f69e5 100644 --- a/frontend/appflowy_flutter/integration_test/document/document_copy_and_paste_test.dart +++ b/frontend/appflowy_flutter/integration_test/document/document_copy_and_paste_test.dart @@ -1,5 +1,7 @@ import 'dart:io'; +import 'package:appflowy/plugins/document/presentation/editor_plugins/copy_and_paste/clipboard_service.dart'; +import 'package:appflowy/startup/startup.dart'; import 'package:appflowy_editor/appflowy_editor.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -12,36 +14,220 @@ void main() { group('copy and paste in document', () { testWidgets('paste multiple lines at the first line', (tester) async { - await tester.initializeAppFlowy(); - await tester.tapGoButton(); - - // create a new document - await tester.createNewPageWithName(); - // mock the clipboard const lines = 3; - AppFlowyClipboard.mockSetData( - AppFlowyClipboardData( - text: List.generate(lines, (index) => 'line $index').join('\n'), - ), + await tester.pasteContent( + plainText: List.generate(lines, (index) => 'line $index').join('\n'), + (editorState) { + expect(editorState.document.root.children.length, 3); + for (var i = 0; i < lines; i++) { + expect( + editorState.getNodeAtPath([i])!.delta!.toPlainText(), + 'line $i', + ); + } + }, ); + }); - // paste the text - await tester.simulateKeyEvent( - LogicalKeyboardKey.keyV, - isControlPressed: Platform.isLinux || Platform.isWindows, - isMetaPressed: Platform.isMacOS, + // ## **User Installation** + // - [Windows/Mac/Linux](https://appflowy.gitbook.io/docs/essential-documentation/install-appflowy/installation-methods/mac-windows-linux-packages) + // - [Docker](https://appflowy.gitbook.io/docs/essential-documentation/install-appflowy/installation-methods/installing-with-docker) + // - [Source](https://appflowy.gitbook.io/docs/essential-documentation/install-appflowy/installation-methods/from-source) + testWidgets('paste content from html, sample 1', (tester) async { + await tester.pasteContent( + html: + '''

User Installation

+
''', + (editorState) { + expect(editorState.document.root.children.length, 4); + final node1 = editorState.getNodeAtPath([0])!; + final node2 = editorState.getNodeAtPath([1])!; + final node3 = editorState.getNodeAtPath([2])!; + final node4 = editorState.getNodeAtPath([3])!; + expect(node1.delta!.toJson(), [ + { + "insert": "User Installation", + "attributes": {"bold": true}, + } + ]); + expect(node2.delta!.toJson(), [ + { + "insert": "Windows/Mac/Linux", + "attributes": { + "href": + "https://appflowy.gitbook.io/docs/essential-documentation/install-appflowy/installation-methods/mac-windows-linux-packages", + }, + } + ]); + expect( + node3.delta!.toJson(), + [ + { + "insert": "Docker", + "attributes": { + "href": + "https://appflowy.gitbook.io/docs/essential-documentation/install-appflowy/installation-methods/installing-with-docker", + }, + } + ], + ); + expect( + node4.delta!.toJson(), + [ + { + "insert": "Source", + "attributes": { + "href": + "https://appflowy.gitbook.io/docs/essential-documentation/install-appflowy/installation-methods/from-source", + }, + } + ], + ); + }, ); - await tester.pumpAndSettle(); + }); - final editorState = tester.editor.getCurrentEditorState(); - expect(editorState.document.root.children.length, 4); - for (var i = 0; i < lines; i++) { - expect( - editorState.getNodeAtPath([i])!.delta!.toPlainText(), - 'line $i', - ); - } + testWidgets('paste code from VSCode', (tester) async { + await tester.pasteContent( + html: + '''
void main() {
runApp(const MyApp());
}
''', + (editorState) { + expect(editorState.document.root.children.length, 3); + final node1 = editorState.getNodeAtPath([0])!; + final node2 = editorState.getNodeAtPath([1])!; + final node3 = editorState.getNodeAtPath([2])!; + expect(node1.type, ParagraphBlockKeys.type); + expect(node2.type, ParagraphBlockKeys.type); + expect(node3.type, ParagraphBlockKeys.type); + expect(node1.delta!.toJson(), [ + { + "insert": "void", + "attributes": {"font_color": "0xfffede5d"}, + }, + { + "insert": " ", + "attributes": {"font_color": "0xffff7edb"}, + }, + { + "insert": "main", + "attributes": {"font_color": "0xff36f9f6"}, + }, + { + "insert": "() {", + "attributes": {"font_color": "0xffff7edb"}, + } + ]); + expect(node2.delta!.toJson(), [ + { + "insert": " ", + "attributes": {"font_color": "0xffff7edb"}, + }, + { + "insert": "runApp", + "attributes": {"font_color": "0xff36f9f6"}, + }, + { + "insert": "(", + "attributes": {"font_color": "0xffff7edb"}, + }, + { + "insert": "const", + "attributes": {"font_color": "0xfffede5d"}, + }, + { + "insert": " ", + "attributes": {"font_color": "0xffff7edb"}, + }, + { + "insert": "MyApp", + "attributes": {"font_color": "0xfffe4450"}, + }, + { + "insert": "());", + "attributes": {"font_color": "0xffff7edb"}, + } + ]); + expect(node3.delta!.toJson(), [ + { + "insert": "}", + "attributes": {"font_color": "0xffff7edb"}, + } + ]); + }); }); }); + + testWidgets('paste image(png) from memory', (tester) async { + final image = await rootBundle.load('assets/test/images/sample.png'); + final bytes = image.buffer.asUint8List(); + await tester.pasteContent(image: ('png', bytes), (editorState) { + expect(editorState.document.root.children.length, 2); + final node = editorState.getNodeAtPath([0])!; + expect(node.type, ImageBlockKeys.type); + expect(node.attributes[ImageBlockKeys.url], isNotNull); + }); + }); + + testWidgets('paste image(jpeg) from memory', (tester) async { + final image = await rootBundle.load('assets/test/images/sample.jpeg'); + final bytes = image.buffer.asUint8List(); + await tester.pasteContent(image: ('jpeg', bytes), (editorState) { + expect(editorState.document.root.children.length, 2); + final node = editorState.getNodeAtPath([0])!; + expect(node.type, ImageBlockKeys.type); + expect(node.attributes[ImageBlockKeys.url], isNotNull); + }); + }); + + testWidgets('paste image(gif) from memory', (tester) async { + // It's not supported yet. + // final image = await rootBundle.load('assets/test/images/sample.gif'); + // final bytes = image.buffer.asUint8List(); + // await tester.pasteContent(image: ('gif', bytes), (editorState) { + // expect(editorState.document.root.children.length, 2); + // final node = editorState.getNodeAtPath([0])!; + // expect(node.type, ImageBlockKeys.type); + // expect(node.attributes[ImageBlockKeys.url], isNotNull); + // }); + }); +} + +extension on WidgetTester { + Future pasteContent( + void Function(EditorState editorState) test, { + String? plainText, + String? html, + (String, Uint8List?)? image, + }) async { + await initializeAppFlowy(); + await tapGoButton(); + + // create a new document + await createNewPageWithName(); + + // mock the clipboard + getIt().setData( + ClipboardServiceData( + plainText: plainText, + html: html, + image: image, + ), + ); + + // paste the text + await simulateKeyEvent( + LogicalKeyboardKey.keyV, + isControlPressed: Platform.isLinux || Platform.isWindows, + isMetaPressed: Platform.isMacOS, + ); + await pumpAndSettle(); + + final editorState = editor.getCurrentEditorState(); + test(editorState); + } } diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_page.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_page.dart index 5bced06640..f80525d737 100644 --- a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_page.dart +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_page.dart @@ -50,6 +50,8 @@ class _AppFlowyEditorPageState extends State { final List commandShortcutEvents = [ toggleToggleListCommand, ...codeBlockCommands, + customCopyCommand, + customPasteCommand, ...standardCommandShortcutEvents, ]; diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/clipboard_service.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/clipboard_service.dart new file mode 100644 index 0000000000..84185f763a --- /dev/null +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/clipboard_service.dart @@ -0,0 +1,129 @@ +import 'dart:async'; +import 'dart:convert'; + +import 'package:appflowy_backend/log.dart'; +import 'package:flutter/foundation.dart'; +import 'package:super_clipboard/super_clipboard.dart'; + +/// Used for in-app copy and paste without losing the format. +/// +/// It's a Json string representing the copied editor nodes. +final inAppJsonFormat = CustomValueFormat( + applicationId: 'io.appflowy.InAppJsonType', + onDecode: (value, platformType) async { + if (value is PlatformDataProvider) { + final data = await value.getData(platformType); + if (data is List) { + return utf8.decode(data, allowMalformed: true); + } + if (data is String) { + return Uri.decodeFull(data); + } + } + return null; + }, +); + +class ClipboardServiceData { + const ClipboardServiceData({ + this.plainText, + this.html, + this.image, + this.inAppJson, + }); + + final String? plainText; + final String? html; + final (String, Uint8List?)? image; + final String? inAppJson; +} + +class ClipboardService { + Future setData(ClipboardServiceData data) async { + final plainText = data.plainText; + final html = data.html; + final inAppJson = data.inAppJson; + final image = data.image; + + final item = DataWriterItem(); + if (plainText != null) { + item.add(Formats.plainText(plainText)); + } + if (html != null) { + item.add(Formats.htmlText(html)); + } + if (inAppJson != null) { + item.add(inAppJsonFormat(inAppJson)); + } + if (image != null && image.$2?.isNotEmpty == true) { + switch (image.$1) { + case 'png': + item.add(Formats.png(image.$2!)); + break; + case 'jpeg': + item.add(Formats.jpeg(image.$2!)); + break; + case 'gif': + item.add(Formats.gif(image.$2!)); + break; + default: + throw Exception('unsupported image format: ${image.$1}'); + } + } + await ClipboardWriter.instance.write([item]); + } + + Future getData() async { + final reader = await ClipboardReader.readClipboard(); + + for (final item in reader.items) { + final availableFormats = await item.rawReader!.getAvailableFormats(); + Log.debug( + 'availableFormats: $availableFormats', + ); + } + + final plainText = await reader.readValue(Formats.plainText); + final html = await reader.readValue(Formats.htmlText); + final inAppJson = await reader.readValue(inAppJsonFormat); + (String, Uint8List?)? image; + if (reader.canProvide(Formats.png)) { + image = ('png', await reader.readFile(Formats.png)); + } else if (reader.canProvide(Formats.jpeg)) { + image = ('jpeg', await reader.readFile(Formats.jpeg)); + } else if (reader.canProvide(Formats.gif)) { + image = ('gif', await reader.readFile(Formats.gif)); + } + + return ClipboardServiceData( + plainText: plainText, + html: html, + image: image, + inAppJson: inAppJson, + ); + } +} + +extension on DataReader { + Future? readFile(FileFormat format) { + final c = Completer(); + final progress = getFile( + format, + (file) async { + try { + final all = await file.readAll(); + c.complete(all); + } catch (e) { + c.completeError(e); + } + }, + onError: (e) { + c.completeError(e); + }, + ); + if (progress == null) { + c.complete(null); + } + return c.future; + } +} diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/custom_copy_command.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/custom_copy_command.dart new file mode 100644 index 0000000000..e36d10a28f --- /dev/null +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/custom_copy_command.dart @@ -0,0 +1,52 @@ +import 'dart:convert'; + +import 'package:appflowy/plugins/document/presentation/editor_plugins/copy_and_paste/clipboard_service.dart'; +import 'package:appflowy/startup/startup.dart'; +import 'package:appflowy_editor/appflowy_editor.dart'; +import 'package:flutter/material.dart'; + +/// Copy. +/// +/// - support +/// - desktop +/// - web +/// - mobile +/// +final CommandShortcutEvent customCopyCommand = CommandShortcutEvent( + key: 'copy the selected content', + command: 'ctrl+c', + macOSCommand: 'cmd+c', + handler: _copyCommandHandler, +); + +CommandShortcutEventHandler _copyCommandHandler = (editorState) { + final selection = editorState.selection?.normalized; + if (selection == null || selection.isCollapsed) { + return KeyEventResult.ignored; + } + + // plain text. + final text = editorState.getTextInSelection(selection).join('\n'); + + final nodes = editorState.getSelectedNodes(selection); + final document = Document.blank()..insert([0], nodes); + + // in app json + final inAppJson = jsonEncode(document.toJson()); + + // html + final html = documentToHTML(document); + + () async { + await getIt().setData( + ClipboardServiceData( + plainText: text, + html: html, + inAppJson: inAppJson, + image: null, + ), + ); + }(); + + return KeyEventResult.handled; +}; diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/custom_paste_command.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/custom_paste_command.dart new file mode 100644 index 0000000000..f5dbf8c559 --- /dev/null +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/custom_paste_command.dart @@ -0,0 +1,62 @@ +import 'package:appflowy/plugins/document/presentation/editor_plugins/copy_and_paste/clipboard_service.dart'; +import 'package:appflowy/plugins/document/presentation/editor_plugins/copy_and_paste/editor_state_paste_node_extension.dart'; +import 'package:appflowy/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_html.dart'; +import 'package:appflowy/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_image.dart'; +import 'package:appflowy/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_in_app_json.dart'; +import 'package:appflowy/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_plain_text.dart'; +import 'package:appflowy/startup/startup.dart'; +import 'package:appflowy_editor/appflowy_editor.dart'; +import 'package:flutter/material.dart'; + +/// Paste. +/// +/// - support +/// - desktop +/// - web +/// - mobile +/// +final CommandShortcutEvent customPasteCommand = CommandShortcutEvent( + key: 'paste the content', + command: 'ctrl+v', + macOSCommand: 'cmd+v', + handler: _pasteCommandHandler, +); + +CommandShortcutEventHandler _pasteCommandHandler = (editorState) { + final selection = editorState.selection; + if (selection == null) { + return KeyEventResult.ignored; + } + + // because the event handler is not async, so we need to use wrap the async function here + () async { + // dispatch the paste event + final data = await getIt().getData(); + final inAppJson = data.inAppJson; + final html = data.html; + final plainText = data.plainText; + final image = data.image; + + // Order: + // 1. in app json format + // 2. html + // 3. image + // 4. plain text + + if (inAppJson != null && inAppJson.isNotEmpty) { + await editorState.deleteSelectionIfNeeded(); + await editorState.pasteInAppJson(inAppJson); + } else if (html != null && html.isNotEmpty) { + await editorState.deleteSelectionIfNeeded(); + await editorState.pasteHtml(html); + } else if (image != null && image.$2?.isNotEmpty == true) { + await editorState.deleteSelectionIfNeeded(); + await editorState.pasteImage(image.$1, image.$2!); + } else if (plainText != null && plainText.isNotEmpty) { + await editorState.deleteSelectionIfNeeded(); + await editorState.pastePlainText(plainText); + } + }(); + + return KeyEventResult.handled; +}; diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/editor_state_paste_node_extension.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/editor_state_paste_node_extension.dart new file mode 100644 index 0000000000..feca93e8dd --- /dev/null +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/editor_state_paste_node_extension.dart @@ -0,0 +1,155 @@ +import 'package:appflowy_editor/appflowy_editor.dart'; + +extension PasteNodes on EditorState { + Future pasteSingleLineNode(Node insertedNode) async { + final selection = await deleteSelectionIfNeeded(); + if (selection == null) { + return; + } + final node = getNodeAtPath(selection.start.path); + final delta = node?.delta; + if (node == null || delta == null) { + return; + } + final transaction = this.transaction; + final insertedDelta = insertedNode.delta; + // if the node is empty, replace it with the inserted node. + if (delta.isEmpty || insertedDelta == null) { + transaction.insertNode( + selection.end.path.next, + node.copyWith( + type: node.type, + attributes: { + ...node.attributes, + ...insertedNode.attributes, + }, + ), + ); + transaction.deleteNode(node); + transaction.afterSelection = Selection.collapsed( + Position( + path: selection.end.path, + offset: insertedDelta?.length ?? 0, + ), + ); + } else { + // if the node is not empty, insert the delta from inserted node after the selection. + transaction.insertTextDelta(node, selection.endIndex, insertedDelta); + } + await apply(transaction); + } + + Future pasteMultiLineNodes(List nodes) async { + assert(nodes.length > 1); + + final selection = await deleteSelectionIfNeeded(); + if (selection == null) { + return; + } + final node = getNodeAtPath(selection.start.path); + final delta = node?.delta; + if (node == null || delta == null) { + return; + } + final transaction = this.transaction; + + final lastNodeLength = nodes.last.delta?.length ?? 0; + // merge the current selected node delta into the nodes. + if (delta.isNotEmpty) { + nodes.first.insertDelta( + delta.slice(0, selection.startIndex), + insertAfter: false, + ); + + nodes.last.insertDelta( + delta.slice(selection.endIndex), + insertAfter: true, + ); + } + + if (delta.isEmpty && node.type != ParagraphBlockKeys.type) { + nodes[0] = nodes.first.copyWith( + type: node.type, + attributes: { + ...node.attributes, + ...nodes.first.attributes, + }, + ); + } + + for (final child in node.children) { + nodes.last.insert(child); + } + + transaction.insertNodes(selection.end.path, nodes); + + // delete the current node. + transaction.deleteNode(node); + + var path = selection.end.path; + for (var i = 0; i < nodes.length; i++) { + path = path.next; + } + transaction.afterSelection = Selection.collapsed( + Position( + path: path.previous, // because a node is deleted. + offset: lastNodeLength, + ), + ); + + await apply(transaction); + } + + // delete the selection if it's not collapsed. + Future deleteSelectionIfNeeded() async { + final selection = this.selection; + if (selection == null) { + return null; + } + + // delete the selection first. + if (!selection.isCollapsed) { + deleteSelection(selection); + } + + // fetch selection again.selection = editorState.selection; + assert(this.selection?.isCollapsed == true); + return this.selection; + } +} + +extension on Node { + void insertDelta(Delta delta, {bool insertAfter = true}) { + assert(delta.every((element) => element is TextInsert)); + if (this.delta == null) { + updateAttributes({ + blockComponentDelta: delta.toJson(), + }); + } else if (insertAfter) { + updateAttributes( + { + blockComponentDelta: this + .delta! + .compose( + Delta() + ..retain(this.delta!.length) + ..addAll(delta), + ) + .toJson(), + }, + ); + } else { + updateAttributes( + { + blockComponentDelta: delta + .compose( + Delta() + ..retain(delta.length) + ..addAll(this.delta!), + ) + .toJson(), + }, + ); + } + } +} diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_html.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_html.dart new file mode 100644 index 0000000000..cddc26b1c6 --- /dev/null +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_html.dart @@ -0,0 +1,23 @@ +import 'package:appflowy/plugins/document/presentation/editor_plugins/copy_and_paste/editor_state_paste_node_extension.dart'; +import 'package:appflowy_editor/appflowy_editor.dart'; + +extension PasteFromHtml on EditorState { + Future pasteHtml(String html) async { + final nodes = htmlToDocument(html).root.children.toList(); + // remove the front and back empty line + while (nodes.isNotEmpty && nodes.first.delta?.isEmpty == true) { + nodes.removeAt(0); + } + while (nodes.isNotEmpty && nodes.last.delta?.isEmpty == true) { + nodes.removeLast(); + } + if (nodes.isEmpty) { + return; + } + if (nodes.length == 1) { + await pasteSingleLineNode(nodes.first); + } else { + await pasteMultiLineNodes(nodes.toList()); + } + } +} diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_image.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_image.dart new file mode 100644 index 0000000000..c926591c95 --- /dev/null +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_image.dart @@ -0,0 +1,44 @@ +import 'dart:io'; +import 'dart:typed_data'; + +import 'package:appflowy/startup/startup.dart'; +import 'package:appflowy/workspace/application/settings/application_data_storage.dart'; +import 'package:appflowy_backend/log.dart'; +import 'package:appflowy_editor/appflowy_editor.dart' hide Log; +import 'package:flowy_infra/uuid.dart'; +import 'package:path/path.dart' as p; + +extension PasteFromImage on EditorState { + static final supportedImageFormats = [ + 'png', + 'jpeg', + 'gif', + ]; + + Future pasteImage(String format, Uint8List imageBytes) async { + if (!supportedImageFormats.contains(format)) { + return; + } + + final path = await getIt().getPath(); + final imagePath = p.join( + path, + 'images', + ); + try { + // create the directory if not exists + final directory = Directory(imagePath); + if (!directory.existsSync()) { + await directory.create(recursive: true); + } + final copyToPath = p.join( + imagePath, + '${uuid()}.$format', + ); + await File(copyToPath).writeAsBytes(imageBytes); + await insertImageNode(copyToPath); + } catch (e) { + Log.error('cannot copy image file', e); + } + } +} diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_in_app_json.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_in_app_json.dart new file mode 100644 index 0000000000..c36114ee4b --- /dev/null +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_in_app_json.dart @@ -0,0 +1,25 @@ +import 'dart:convert'; + +import 'package:appflowy/plugins/document/presentation/editor_plugins/copy_and_paste/editor_state_paste_node_extension.dart'; +import 'package:appflowy_backend/log.dart'; +import 'package:appflowy_editor/appflowy_editor.dart' hide Log; + +extension PasteFromInAppJson on EditorState { + Future pasteInAppJson(String inAppJson) async { + try { + final nodes = Document.fromJson(jsonDecode(inAppJson)).root.children; + if (nodes.isEmpty) { + return; + } + if (nodes.length == 1) { + await pasteSingleLineNode(nodes.first); + } else { + await pasteMultiLineNodes(nodes.toList()); + } + } catch (e) { + Log.error( + 'Failed to paste in app json: $inAppJson, error: $e', + ); + } + } +} diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_plain_text.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_plain_text.dart new file mode 100644 index 0000000000..e9dcde3e3d --- /dev/null +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/copy_and_paste/paste_from_plain_text.dart @@ -0,0 +1,36 @@ +import 'package:appflowy/plugins/document/presentation/editor_plugins/copy_and_paste/editor_state_paste_node_extension.dart'; +import 'package:appflowy_editor/appflowy_editor.dart'; + +RegExp _hrefRegex = RegExp( + r'https?://(?:www\.)?[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,}(?:/[^\s]*)?', +); + +extension PasteFromPlainText on EditorState { + Future pastePlainText(String plainText) async { + final nodes = plainText + .split('\n') + .map( + (e) => e + ..replaceAll(r'\r', '') + ..trimRight(), + ) + .map((e) { + // parse the url content + final Attributes attributes = {}; + if (_hrefRegex.hasMatch(e)) { + attributes[AppFlowyRichTextKeys.href] = e; + } + return Delta()..insert(e, attributes: attributes); + }) + .map((e) => paragraphNode(delta: e)) + .toList(); + if (nodes.isEmpty) { + return; + } + if (nodes.length == 1) { + await pasteSingleLineNode(nodes.first); + } else { + await pasteMultiLineNodes(nodes.toList()); + } + } +} diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/plugins.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/plugins.dart index 9bb56f873a..cfa482f91f 100644 --- a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/plugins.dart +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/plugins.dart @@ -3,6 +3,8 @@ export 'actions/option_action.dart'; export 'callout/callout_block_component.dart'; export 'code_block/code_block_component.dart'; export 'code_block/code_block_shortcut_event.dart'; +export 'copy_and_paste/custom_copy_command.dart'; +export 'copy_and_paste/custom_paste_command.dart'; export 'database/database_view_block_component.dart'; export 'database/inline_database_menu_item.dart'; export 'database/referenced_database_menu_item.dart'; diff --git a/frontend/appflowy_flutter/lib/startup/deps_resolver.dart b/frontend/appflowy_flutter/lib/startup/deps_resolver.dart index 091f9bf6c3..a4ab39de95 100644 --- a/frontend/appflowy_flutter/lib/startup/deps_resolver.dart +++ b/frontend/appflowy_flutter/lib/startup/deps_resolver.dart @@ -6,28 +6,29 @@ import 'package:appflowy/plugins/database_view/application/field/field_controlle import 'package:appflowy/plugins/database_view/application/field/field_service.dart'; import 'package:appflowy/plugins/database_view/application/setting/property_bloc.dart'; import 'package:appflowy/plugins/database_view/grid/application/grid_header_bloc.dart'; +import 'package:appflowy/plugins/document/application/prelude.dart'; +import 'package:appflowy/plugins/document/presentation/editor_plugins/copy_and_paste/clipboard_service.dart'; import 'package:appflowy/plugins/document/presentation/editor_plugins/openai/service/openai_client.dart'; +import 'package:appflowy/plugins/trash/application/prelude.dart'; import 'package:appflowy/startup/startup.dart'; import 'package:appflowy/user/application/auth/auth_service.dart'; import 'package:appflowy/user/application/auth/supabase_auth_service.dart'; +import 'package:appflowy/user/application/prelude.dart'; import 'package:appflowy/user/application/user_listener.dart'; import 'package:appflowy/user/application/user_service.dart'; -import 'package:appflowy/workspace/application/tabs/tabs_bloc.dart'; -import 'package:flowy_infra/file_picker/file_picker_impl.dart'; -import 'package:flowy_infra/file_picker/file_picker_service.dart'; -import 'package:appflowy/plugins/document/application/prelude.dart'; -import 'package:appflowy/workspace/application/favorite/favorite_bloc.dart'; -import 'package:appflowy/workspace/application/user/prelude.dart'; -import 'package:appflowy/workspace/application/workspace/prelude.dart'; -import 'package:appflowy/workspace/application/edit_panel/edit_panel_bloc.dart'; -import 'package:appflowy/workspace/application/view/prelude.dart'; -import 'package:appflowy/workspace/application/settings/prelude.dart'; -import 'package:appflowy/user/application/prelude.dart'; import 'package:appflowy/user/presentation/router.dart'; -import 'package:appflowy/plugins/trash/application/prelude.dart'; +import 'package:appflowy/workspace/application/edit_panel/edit_panel_bloc.dart'; +import 'package:appflowy/workspace/application/favorite/favorite_bloc.dart'; +import 'package:appflowy/workspace/application/settings/prelude.dart'; +import 'package:appflowy/workspace/application/tabs/tabs_bloc.dart'; +import 'package:appflowy/workspace/application/user/prelude.dart'; +import 'package:appflowy/workspace/application/view/prelude.dart'; +import 'package:appflowy/workspace/application/workspace/prelude.dart'; import 'package:appflowy/workspace/presentation/home/menu/menu_shared_state.dart'; import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-user/user_profile.pb.dart'; +import 'package:flowy_infra/file_picker/file_picker_impl.dart'; +import 'package:flowy_infra/file_picker/file_picker_service.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:get_it/get_it.dart'; import 'package:http/http.dart' as http; @@ -79,6 +80,10 @@ void _resolveCommonService( ); }, ); + + getIt.registerFactory( + () => ClipboardService(), + ); } void _resolveUserDeps(GetIt getIt) { diff --git a/frontend/appflowy_flutter/pubspec.lock b/frontend/appflowy_flutter/pubspec.lock index 9d05c3019e..8ae7d71c4a 100644 --- a/frontend/appflowy_flutter/pubspec.lock +++ b/frontend/appflowy_flutter/pubspec.lock @@ -318,10 +318,10 @@ packages: dependency: "direct main" description: name: device_info_plus - sha256: "499c61743e13909c13374a8c209075385858c614b9c0f2487b5f9995eeaf7369" + sha256: "86add5ef97215562d2e090535b0a16f197902b10c369c558a100e74ea06e8659" url: "https://pub.dev" source: hosted - version: "9.0.1" + version: "9.0.3" device_info_plus_platform_interface: dependency: transitive description: @@ -721,6 +721,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" + irondash_engine_context: + dependency: transitive + description: + name: irondash_engine_context + sha256: "6431b11844472574a90803c02f1e55221e6a390a872786735f6757a67dacd678" + url: "https://pub.dev" + source: hosted + version: "0.3.0" + irondash_message_channel: + dependency: transitive + description: + name: irondash_message_channel + sha256: "4114739083d1c63e6a1a8b93f09dd69b3cf9a9d6ee215ae7f23079307197ebba" + url: "https://pub.dev" + source: hosted + version: "0.3.0" isolates: dependency: transitive description: @@ -1001,6 +1017,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.4.0" + pixel_snap: + dependency: transitive + description: + name: pixel_snap + sha256: "5de3662b926c9bc189578cf90f9d5b350ee61bc8e20e8a91fa1dfdd26c9f5ece" + url: "https://pub.dev" + source: hosted + version: "0.1.2" platform: dependency: transitive description: @@ -1423,6 +1447,22 @@ packages: url: "https://github.com/LucasXu0/supabase-flutter" source: git version: "1.10.12" + super_clipboard: + dependency: "direct main" + description: + name: super_clipboard + sha256: "204284b1a721d33a65bcab077b191a3b7379b46a231f05688d17220153338ede" + url: "https://pub.dev" + source: hosted + version: "0.6.0" + super_native_extensions: + dependency: transitive + description: + name: super_native_extensions + sha256: "1f15e9b1adb0bc59cf9b889a0b248f3c192fa17e2d5c923aeeec6d4fa2eeffd6" + url: "https://pub.dev" + source: hosted + version: "0.6.0" sync_http: dependency: transitive description: diff --git a/frontend/appflowy_flutter/pubspec.yaml b/frontend/appflowy_flutter/pubspec.yaml index cf3c5c2e7e..16f807250a 100644 --- a/frontend/appflowy_flutter/pubspec.yaml +++ b/frontend/appflowy_flutter/pubspec.yaml @@ -107,6 +107,7 @@ dependencies: url_protocol: hive: ^2.2.3 hive_flutter: ^1.1.0 + super_clipboard: ^0.6.0 dev_dependencies: flutter_lints: ^2.0.1 @@ -200,6 +201,7 @@ flutter: # The following assets will be excluded in release. # BEGIN: EXCLUDE_IN_RELEASE - assets/test/workspaces/ + - assets/test/images/ - assets/template/ - assets/test/workspaces/markdowns/ - assets/test/workspaces/database/