commit 692bb794aea5609b9e9abf5228620f4479e50983
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Sun Feb 27 17:52:43 2022 +0800
bump to 0.3.0
commit 77335412ad2da2b5bd1ed5075061a5af006e3c36
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Sun Feb 27 17:50:57 2022 +0800
change titles for minimal intrusive design
commit 2812adebb84344d384749a62acb63fd0c6fd509d
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Sun Feb 27 17:30:53 2022 +0800
remove syncv1
commit 22fc24a76c9851740bbc7c0177d1cb2526e15d8b
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Sun Feb 27 17:30:27 2022 +0800
full notice to any one
commit d56ea24a78f6dc1fbea2740011ee1cea9c403d4c
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Sat Feb 26 23:11:14 2022 +0800
fix test
commit 759f82593bbfb9b49079cfd80dbadbbafc0287e5
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Sat Feb 26 21:59:25 2022 +0800
obfuscate metadata on remote
commit 9b6bf05288af0e52d0f02468e5ac8757f4f896df
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Sat Feb 26 21:33:52 2022 +0800
avoid re-uploading if meta not changed
commit 03be1453764e48e99207f44467ee4d5801072ed8
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Sat Feb 26 00:35:52 2022 +0800
add password condition
commit 7f899f7c2572df3e2a35e16cbdaab94db113f366
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Sat Feb 26 00:22:58 2022 +0800
add decision branch for easier debugging
commit cf4071bf3156356ae6ec3a9cb187c2cb541d1b17
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Fri Feb 25 23:40:52 2022 +0800
change folder error
commit 964493dd998699a1d53018a201637bda192c4baa
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Fri Feb 25 23:09:44 2022 +0800
finnaly remote remove should be working
commit 2888e65452f9c0e1dde6005f012c3ee0a6313c3f
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Fri Feb 25 01:18:15 2022 +0800
optimize comparation
commit 024936951d6180b1296c2a5d56c5bf5d468e9ae7
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Fri Feb 25 01:14:44 2022 +0800
allow uploading extra meta
commit 007006701d536da2b4b46389941980579bbc4e67
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Thu Feb 24 01:08:58 2022 +0800
add logic to fetch extra meta
commit c9d3a05ca1bf45c06f22233124670e5e45b5f5f1
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Thu Feb 24 00:29:16 2022 +0800
another way to deal with trash
commit 82d455f8bf60f7bac8eb4e299a2ca44c331a6d7f
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Thu Feb 24 00:28:51 2022 +0800
add return buffer for downloading
commit b8e6b79bc078def2854bc73578b7f520cc39ab34
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Wed Feb 23 00:16:06 2022 +0800
half way to actual sync
commit 90cceb1411b46af9741f2caa3ab8beafaf69c1b2
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Tue Feb 22 23:36:09 2022 +0800
cleaner way to remember the folder being kept
commit c1afb763cc4e0f7905c83e0a8eb20f8ed969a279
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Tue Feb 22 00:03:21 2022 +0800
simplified way to get plans for sync algo v2
commit 5c5ecce39eb3854900f1f5b79c7beb189e78a6a7
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Mon Feb 21 23:13:58 2022 +0800
archive the old sync algo v1 doc
commit 75cdfa1ee9834600f83ded6672b102de2c5f9616
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Mon Feb 21 23:13:14 2022 +0800
simplify sync algo v2
commit dc9275835d961de07efcbaa81657e4745242e72a
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Mon Feb 21 22:58:57 2022 +0800
add way to skip recording removing
commit f9712ef96021dfed4ae33e6c649f78e940b7e530
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Mon Feb 21 09:38:09 2022 +0800
fix sync
commit 9007dcf22ef317dde36ac4f1dd589d05cc8d5cf6
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Mon Feb 21 00:54:21 2022 +0800
fix assignment
commit 77abee6ad443b62353ed3913e0945ea7d1314f87
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Mon Feb 21 00:28:43 2022 +0800
draft of sync v2
commit a0c26238bf60692e095cfd8527abf937255b56d4
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Mon Feb 21 00:23:19 2022 +0800
how to deal with folders
commit c10f92a7e8d3c4a4f4c585e39e0abad1a5376c02
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Sun Feb 20 23:39:16 2022 +0800
helper func to get parents
commit f903c98b3b7b9d1e785d04b9fc0cfcafdc6e5661
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Sun Feb 20 23:31:21 2022 +0800
add optional ending slash to getFolderLevels
commit 2d67c9b2b941e676588fa43ab289fab79f567e5e
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Sun Feb 20 14:44:44 2022 +0800
update sync algo v2
commit 491ed1bb85759df2411706fd02d740acb5598ce6
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Sun Feb 20 14:34:51 2022 +0800
dry run mode
commit dfd588dcef512ba7dfe760008bcf97138b97e339
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Sat Feb 19 23:14:32 2022 +0800
prettier
commit eae580f882a045ae9df799b816e68c3500704131
Author: fyears <1142836+fyears@users.noreply.github.com>
Date: Sat Feb 19 23:12:29 2022 +0800
draft design for sync algo v2
62 lines
6.8 KiB
Markdown
62 lines
6.8 KiB
Markdown
# Sync Algorithm V2
|
|
|
|
## Sources
|
|
|
|
We have 4 record sources:
|
|
|
|
1. Local files. By scanning all files in the vault locally. Actually Obsidian provides an api directly returning this.
|
|
2. Remote files. By scanning all files on the remote service. Some services provide an api directly returning this, and some other services require the plugin scanning the folders recursively.
|
|
3. Local "delete-or-rename" history. It's recorded by using Obsidian's tracking api. So if users delete or rename files/folders outside Obsidian, we could do nothing.
|
|
4. Remote "delete" history. It's uploaded by the plugin in each sync.
|
|
|
|
Assuming all sources are reliable.
|
|
|
|
## Deal with them
|
|
|
|
We list all combinations mutually exclusive and collectively exhaustive.
|
|
|
|
### Files
|
|
|
|
| t1 | t2 | t3 | t4 | local file to do | remote file to do | local del history to do | remote del history to do | equal to sync v2 branch |
|
|
| -------------- | -------------- | -------------- | -------------- | ---------------- | ----------------- | ----------------------- | ------------------------ | ----------------------- |
|
|
| mtime_remote | mtime_local | deltime_remote | deltime_local | del_if_exists | del_if_exists | clean | upload_local_del_history | |
|
|
| mtime_local | mtime_remote | deltime_remote | deltime_local | del_if_exists | del_if_exists | clean | upload_local_del_history | |
|
|
| mtime_remote | deltime_remote | mtime_local | deltime_local | del_if_exists | del_if_exists | clean | upload_local_del_history | |
|
|
| deltime_remote | mtime_remote | mtime_local | deltime_local | del_if_exists | del_if_exists | clean | upload_local_del_history | |
|
|
| mtime_local | deltime_remote | mtime_remote | deltime_local | del_if_exists | del_if_exists | clean | upload_local_del_history | |
|
|
| deltime_remote | mtime_local | mtime_remote | deltime_local | del_if_exists | del_if_exists | clean | upload_local_del_history | 8 |
|
|
| mtime_remote | mtime_local | deltime_local | deltime_remote | del_if_exists | del_if_exists | clean | keep | |
|
|
| mtime_local | mtime_remote | deltime_local | deltime_remote | del_if_exists | del_if_exists | clean | keep | |
|
|
| mtime_remote | deltime_local | mtime_local | deltime_remote | del_if_exists | del_if_exists | clean | keep | |
|
|
| deltime_local | mtime_remote | mtime_local | deltime_remote | del_if_exists | del_if_exists | clean | keep | |
|
|
| mtime_local | deltime_local | mtime_remote | deltime_remote | del_if_exists | del_if_exists | clean | keep | |
|
|
| deltime_local | mtime_local | mtime_remote | deltime_remote | del_if_exists | del_if_exists | clean | keep | |
|
|
| mtime_remote | deltime_remote | deltime_local | mtime_local | skip | upload_local | clean | clean | |
|
|
| deltime_remote | mtime_remote | deltime_local | mtime_local | skip | upload_local | clean | clean | 10 |
|
|
| mtime_remote | deltime_local | deltime_remote | mtime_local | skip | upload_local | clean | clean | |
|
|
| deltime_local | mtime_remote | deltime_remote | mtime_local | skip | upload_local | clean | clean | |
|
|
| deltime_remote | deltime_local | mtime_remote | mtime_local | skip | upload_local | clean | clean | 2;3;4;5;6 |
|
|
| deltime_local | deltime_remote | mtime_remote | mtime_local | skip | upload_local | clean | clean | |
|
|
| mtime_local | deltime_remote | deltime_local | mtime_remote | download_remote | skip | clean | clean | |
|
|
| deltime_remote | mtime_local | deltime_local | mtime_remote | download_remote | skip | clean | clean | 7;9 |
|
|
| mtime_local | deltime_local | deltime_remote | mtime_remote | download_remote | skip | clean | clean | |
|
|
| deltime_local | mtime_local | deltime_remote | mtime_remote | download_remote | skip | clean | clean | |
|
|
| deltime_remote | deltime_local | mtime_local | mtime_remote | download_remote | skip | clean | clean | 1;9 |
|
|
| deltime_local | deltime_remote | mtime_local | mtime_remote | download_remote | skip | clean | clean | |
|
|
|
|
### Folders
|
|
|
|
We actually do not use any folders' metadata. Thus the only relevent info is their names, while the mtime is actually ignorable.
|
|
|
|
1. Firstly generate all the files' plan. If any files exist, then it's parent folders all should exist. If the should-exist folder doesn't exist locally, the local should create it recursively. If the should-exist folder doesn't exist remotely, the remote should create it recursively.
|
|
2. Then, a folder is deletable, if and only if all the following conditions meet:
|
|
|
|
- it shows up in the remote deletion history
|
|
- it's empty, or all its sub-folders are deletable
|
|
|
|
Some examples:
|
|
|
|
- A user deletes the folder in device 1, then syncs from the device 1, then creates the same-name folder in device 2, then syncs from the device 2. The folder is deleted (again), on device 2.
|
|
- A user deletes the folder in device 1, then syncs from the device 1, then creates the same-name folder in device 2, **then create a new file inside it,** then syncs from the device 2. The folder is **kept** instead of deleted because of the new file, on device 2.
|
|
- A user deletes the folder in device 1, then syncs from the device 1, then do not touch the same-name folder in device 2, then syncs from the device 2. The folder and its untouched sub-files should be deleted on device 2.
|