From a5472254b392b4543f9d690eba91c5b535091c30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20D=C3=B6rfelt?= Date: Sun, 29 Sep 2024 15:22:06 +0200 Subject: [PATCH] add support for google docs --- docs/formats/google_docs.md | 15 +++++++++++++++ mkdocs.yml | 1 + readme.md | 19 ++++++++++--------- src/formats/google_docs.py | 22 ++++++++++++++++++++++ src/formats/google_keep.py | 2 +- test/data | 2 +- test/test_convert.py | 1 + 7 files changed, 51 insertions(+), 11 deletions(-) create mode 100644 docs/formats/google_docs.md create mode 100644 src/formats/google_docs.py diff --git a/docs/formats/google_docs.md b/docs/formats/google_docs.md new file mode 100644 index 0000000..fe89d6c --- /dev/null +++ b/docs/formats/google_docs.md @@ -0,0 +1,15 @@ +This page describes how to convert notes from Google Docs to Markdown. + +## General Information + +- [Website](https://docs.google.com/) +- Typical extensions: `.zip`, `.tgz` + +## Instructions + +1. Export via [Google Takeout](https://takeout.google.com) + 1. Select "Drive" + 2. Select the folders you want to export +2. [Install jimmy](../index.md#installation) +3. Convert to Markdown. Example: `jimmy-cli-linux takeout-20240401T160556Z-001.zip --format google_docs` +4. [Import to your app](../import_instructions.md) diff --git a/mkdocs.yml b/mkdocs.yml index cf09c8f..d6b63fa 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -59,6 +59,7 @@ nav: - Dynalist: formats/dynalist.md - Facebook: formats/facebook.md - FuseBase: formats/fusebase.md + - Google Docs: formats/google_docs.md - Google Keep: formats/google_keep.md - Joplin: formats/joplin.md - jrnl: formats/jrnl.md diff --git a/readme.md b/readme.md index 6c66a6f..8c25d7a 100644 --- a/readme.md +++ b/readme.md @@ -26,15 +26,16 @@ If this app is useful for you, feel free to star it on [github](https://github.c ```mermaid flowchart LR - A[App 1] -->|Backup| D - B[App 2] -->|Export| D - C[Filesystem] --> D - D(ZIP archive/JSON/folder) --> E - E{jimmy} --> F(Markdown + Frontmatter) - F -->|Import| G[Joplin] - F -->|Import| H[Obsidian] - F --> I[...] - F --> J[Editor, e. g. VSCode] + A[App 1] -->|Backup| M + B[App 2] -->|Export| M + C[...] --> M + D[Filesystem] --> M + M(ZIP archive/JSON/Folder) --> N + N{jimmy} --> O(Markdown + Frontmatter) + O -->|Import| P[Joplin] + O -->|Import| Q[Obsidian] + O --> R[...] + O --> S[Editor, e. g. VSCode] ``` 1. Export/backup notes from your note application diff --git a/src/formats/google_docs.py b/src/formats/google_docs.py new file mode 100644 index 0000000..991e12b --- /dev/null +++ b/src/formats/google_docs.py @@ -0,0 +1,22 @@ +"""Convert Google Docs documents to the intermediate format.""" + +from pathlib import Path + +import common +import converter +from converter import DefaultConverter + + +class Converter(converter.BaseConverter): + accepted_extensions = [".tgz", ".zip"] + + def prepare_input(self, input_: Path) -> Path: + return common.extract_zip(input_) + + def convert(self, file_or_folder: Path): + self.root_path = self.prepare_input(file_or_folder) + + # see BaseConverter.convert_multiple() + docs_converter = DefaultConverter(self.format, self.output_folder) + docs_converter.root_notebook = self.root_notebook + docs_converter.convert(self.root_path / "Takeout/Drive") diff --git a/src/formats/google_keep.py b/src/formats/google_keep.py index 7f5e684..77f38a0 100644 --- a/src/formats/google_keep.py +++ b/src/formats/google_keep.py @@ -10,7 +10,7 @@ class Converter(converter.BaseConverter): - accepted_extensions = [".zip", ".tgz"] + accepted_extensions = [".tgz", ".zip"] def prepare_input(self, input_: Path) -> Path: match input_.suffix.lower(): diff --git a/test/data b/test/data index e5ef40e..dc9f0b2 160000 --- a/test/data +++ b/test/data @@ -1 +1 @@ -Subproject commit e5ef40e38231db0dbe44ab1de6993300c55f3327 +Subproject commit dc9f0b218a2871995eda4bb083e297e4232dd724 diff --git a/test/test_convert.py b/test/test_convert.py index 9048cab..d246afa 100644 --- a/test/test_convert.py +++ b/test/test_convert.py @@ -86,6 +86,7 @@ def compare_dirs(dir1: Path, dir2: Path): [["day_one/test_2/dayone-to-obsidian.zip"]], [["day_one/test_3/Export-Tagebuch.zip"]], [["dynalist/test_1/dynalist-backup-2024-04-12.zip"]], + [["google_docs/test_1/takeout-20240929T124909Z-001.zip"]], [["google_keep/test_1/takeout-20240401T160556Z-001.tgz"]], [["google_keep/test_2/takeout-20240920T140112Z-001.zip"]], [["joplin/test_1/29_04_2024.jex"]],