mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
chore: remove lru (#5008)
* chore: remove lru * chore: update logs * chore: clippy
This commit is contained in:
parent
c2c84a5812
commit
adc2ee755e
3
.github/workflows/rust_ci.yaml
vendored
3
.github/workflows/rust_ci.yaml
vendored
@ -93,7 +93,8 @@ jobs:
|
||||
af_cloud_test_base_url: http://localhost
|
||||
af_cloud_test_ws_url: ws://localhost/ws/v1
|
||||
af_cloud_test_gotrue_url: http://localhost/gotrue
|
||||
run: cargo test --no-default-features --features="rev-sqlite,dart" -- --nocapture
|
||||
run: |
|
||||
DISABLE_CI_TEST_LOG="true" cargo test --no-default-features --features="rev-sqlite,dart" -- --nocapture
|
||||
|
||||
- name: rustfmt rust-lib
|
||||
run: cargo fmt --all -- --check
|
||||
|
60
frontend/appflowy_tauri/src-tauri/Cargo.lock
generated
60
frontend/appflowy_tauri/src-tauri/Cargo.lock
generated
@ -132,12 +132,6 @@ dependencies = [
|
||||
"alloc-no-stdlib",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "allocator-api2"
|
||||
version = "0.2.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
|
||||
|
||||
[[package]]
|
||||
name = "android-tzdata"
|
||||
version = "0.1.1"
|
||||
@ -162,7 +156,7 @@ checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
|
||||
[[package]]
|
||||
name = "app-error"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bincode",
|
||||
@ -716,7 +710,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "client-api"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"again",
|
||||
"anyhow",
|
||||
@ -764,7 +758,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "client-websocket"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"futures-channel",
|
||||
"futures-util",
|
||||
@ -838,7 +832,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@ -862,7 +856,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-database"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@ -870,10 +864,10 @@ dependencies = [
|
||||
"collab",
|
||||
"collab-entity",
|
||||
"collab-plugins",
|
||||
"dashmap",
|
||||
"getrandom 0.2.10",
|
||||
"js-sys",
|
||||
"lazy_static",
|
||||
"lru",
|
||||
"nanoid",
|
||||
"parking_lot 0.12.1",
|
||||
"rayon",
|
||||
@ -892,7 +886,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-document"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"collab",
|
||||
@ -911,7 +905,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes",
|
||||
@ -926,7 +920,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-folder"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"chrono",
|
||||
@ -964,7 +958,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-plugins"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-stream",
|
||||
@ -1003,7 +997,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-rt-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bincode",
|
||||
@ -1028,7 +1022,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-rt-protocol"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bincode",
|
||||
@ -1041,7 +1035,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-user"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"collab",
|
||||
@ -1375,7 +1369,7 @@ checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
|
||||
[[package]]
|
||||
name = "database-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"app-error",
|
||||
@ -1879,7 +1873,6 @@ dependencies = [
|
||||
"lazy_static",
|
||||
"lib-dispatch",
|
||||
"lib-infra",
|
||||
"lru",
|
||||
"nanoid",
|
||||
"parking_lot 0.12.1",
|
||||
"protobuf",
|
||||
@ -1940,6 +1933,7 @@ dependencies = [
|
||||
"collab-entity",
|
||||
"collab-integrate",
|
||||
"collab-plugins",
|
||||
"dashmap",
|
||||
"flowy-codegen",
|
||||
"flowy-derive",
|
||||
"flowy-document-pub",
|
||||
@ -1951,7 +1945,6 @@ dependencies = [
|
||||
"indexmap 2.1.0",
|
||||
"lib-dispatch",
|
||||
"lib-infra",
|
||||
"lru",
|
||||
"nanoid",
|
||||
"parking_lot 0.12.1",
|
||||
"protobuf",
|
||||
@ -2677,7 +2670,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "gotrue"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"futures-util",
|
||||
@ -2694,7 +2687,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "gotrue-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"app-error",
|
||||
@ -2811,10 +2804,6 @@ name = "hashbrown"
|
||||
version = "0.14.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
|
||||
dependencies = [
|
||||
"ahash 0.8.6",
|
||||
"allocator-api2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "heck"
|
||||
@ -3149,7 +3138,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "infra"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"reqwest",
|
||||
@ -3507,15 +3496,6 @@ dependencies = [
|
||||
"tracing-subscriber",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lru"
|
||||
version = "0.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1efa59af2ddfad1854ae27d75009d538d0998b4b2fd47083e743ac1a10e46c60"
|
||||
dependencies = [
|
||||
"hashbrown 0.14.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mac"
|
||||
version = "0.1.1"
|
||||
@ -5591,7 +5571,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "shared-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"app-error",
|
||||
@ -7554,7 +7534,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "workspace-template"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
|
@ -29,7 +29,6 @@ tokio = "1.34.0"
|
||||
tokio-stream = "0.1.14"
|
||||
async-trait = "0.1.74"
|
||||
chrono = { version = "0.4.31", default-features = false, features = ["clock"] }
|
||||
lru = "0.12.0"
|
||||
|
||||
[dependencies]
|
||||
serde_json.workspace = true
|
||||
@ -86,7 +85,7 @@ custom-protocol = ["tauri/custom-protocol"]
|
||||
# Run the script:
|
||||
# scripts/tool/update_client_api_rev.sh new_rev_id
|
||||
# ⚠️⚠️⚠️️
|
||||
client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "d77fb77a3a1df1dec14db68bebe35d911d9ae437" }
|
||||
client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "0821c052f996b56ec42b86c9462f065e4639d735" }
|
||||
# Please use the following script to update collab.
|
||||
# Working directory: frontend
|
||||
#
|
||||
@ -96,10 +95,10 @@ client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "d77
|
||||
# To switch to the local path, run:
|
||||
# scripts/tool/update_collab_source.sh
|
||||
# ⚠️⚠️⚠️️
|
||||
collab = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab-folder = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab-document = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab-database = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab-plugins = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab-user = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab-entity = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
collab-folder = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
collab-document = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
collab-database = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
collab-plugins = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
collab-user = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
collab-entity = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
|
55
frontend/appflowy_web/wasm-libs/Cargo.lock
generated
55
frontend/appflowy_web/wasm-libs/Cargo.lock
generated
@ -191,12 +191,6 @@ dependencies = [
|
||||
"alloc-no-stdlib",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "allocator-api2"
|
||||
version = "0.2.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
|
||||
|
||||
[[package]]
|
||||
name = "android-tzdata"
|
||||
version = "0.1.1"
|
||||
@ -221,7 +215,7 @@ checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
|
||||
[[package]]
|
||||
name = "app-error"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bincode",
|
||||
@ -545,7 +539,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "client-api"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"again",
|
||||
"anyhow",
|
||||
@ -592,7 +586,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "client-websocket"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"futures-channel",
|
||||
"futures-util",
|
||||
@ -636,7 +630,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@ -660,7 +654,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-document"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"collab",
|
||||
@ -679,7 +673,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes",
|
||||
@ -694,7 +688,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-folder"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"chrono",
|
||||
@ -732,7 +726,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-plugins"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-stream",
|
||||
@ -770,7 +764,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-rt-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bincode",
|
||||
@ -795,7 +789,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-rt-protocol"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bincode",
|
||||
@ -808,7 +802,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-user"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"collab",
|
||||
@ -1005,7 +999,7 @@ checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5"
|
||||
[[package]]
|
||||
name = "database-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"app-error",
|
||||
@ -1292,6 +1286,7 @@ dependencies = [
|
||||
"collab-entity",
|
||||
"collab-integrate",
|
||||
"collab-plugins",
|
||||
"dashmap",
|
||||
"flowy-codegen",
|
||||
"flowy-derive",
|
||||
"flowy-document-pub",
|
||||
@ -1303,7 +1298,6 @@ dependencies = [
|
||||
"indexmap",
|
||||
"lib-dispatch",
|
||||
"lib-infra",
|
||||
"lru",
|
||||
"nanoid",
|
||||
"parking_lot 0.12.1",
|
||||
"protobuf",
|
||||
@ -1760,7 +1754,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "gotrue"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"futures-util",
|
||||
@ -1777,7 +1771,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "gotrue-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"app-error",
|
||||
@ -1830,10 +1824,6 @@ name = "hashbrown"
|
||||
version = "0.14.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
|
||||
dependencies = [
|
||||
"ahash",
|
||||
"allocator-api2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "heck"
|
||||
@ -2111,7 +2101,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "infra"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"reqwest",
|
||||
@ -2331,15 +2321,6 @@ version = "0.4.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
|
||||
|
||||
[[package]]
|
||||
name = "lru"
|
||||
version = "0.12.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "db2c024b41519440580066ba82aab04092b333e09066a5eb86c7c4890df31f22"
|
||||
dependencies = [
|
||||
"hashbrown",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mac"
|
||||
version = "0.1.1"
|
||||
@ -3795,7 +3776,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "shared-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"app-error",
|
||||
@ -5027,4 +5008,4 @@ dependencies = [
|
||||
[[patch.unused]]
|
||||
name = "collab-database"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
|
@ -55,7 +55,7 @@ codegen-units = 1
|
||||
# Run the script:
|
||||
# scripts/tool/update_client_api_rev.sh new_rev_id
|
||||
# ⚠️⚠️⚠️️
|
||||
client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "d77fb77a3a1df1dec14db68bebe35d911d9ae437" }
|
||||
client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "0821c052f996b56ec42b86c9462f065e4639d735" }
|
||||
# Please use the following script to update collab.
|
||||
# Working directory: frontend
|
||||
#
|
||||
@ -65,10 +65,10 @@ client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "d77
|
||||
# To switch to the local path, run:
|
||||
# scripts/tool/update_collab_source.sh
|
||||
# ⚠️⚠️⚠️️
|
||||
collab = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab-folder = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab-document = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab-database = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab-plugins = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab-user = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab-entity = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
collab-folder = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
collab-document = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
collab-database = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
collab-plugins = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
collab-user = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
collab-entity = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
|
60
frontend/rust-lib/Cargo.lock
generated
60
frontend/rust-lib/Cargo.lock
generated
@ -133,12 +133,6 @@ dependencies = [
|
||||
"alloc-no-stdlib",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "allocator-api2"
|
||||
version = "0.2.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
|
||||
|
||||
[[package]]
|
||||
name = "android-tzdata"
|
||||
version = "0.1.1"
|
||||
@ -163,7 +157,7 @@ checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
|
||||
[[package]]
|
||||
name = "app-error"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bincode",
|
||||
@ -673,7 +667,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "client-api"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"again",
|
||||
"anyhow",
|
||||
@ -721,7 +715,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "client-websocket"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"futures-channel",
|
||||
"futures-util",
|
||||
@ -764,7 +758,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@ -788,7 +782,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-database"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@ -796,10 +790,10 @@ dependencies = [
|
||||
"collab",
|
||||
"collab-entity",
|
||||
"collab-plugins",
|
||||
"dashmap",
|
||||
"getrandom 0.2.10",
|
||||
"js-sys",
|
||||
"lazy_static",
|
||||
"lru",
|
||||
"nanoid",
|
||||
"parking_lot 0.12.1",
|
||||
"rayon",
|
||||
@ -818,7 +812,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-document"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"collab",
|
||||
@ -837,7 +831,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes",
|
||||
@ -852,7 +846,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-folder"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"chrono",
|
||||
@ -890,7 +884,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-plugins"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-stream",
|
||||
@ -929,7 +923,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-rt-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bincode",
|
||||
@ -954,7 +948,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-rt-protocol"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bincode",
|
||||
@ -967,7 +961,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-user"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=c08d23f5a1f9f0de9465a3b248aedeaf8cd65381#c08d23f5a1f9f0de9465a3b248aedeaf8cd65381"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ab468ea96a15863d1e792ea4bed3a8769f3ea8a7#ab468ea96a15863d1e792ea4bed3a8769f3ea8a7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"collab",
|
||||
@ -1297,7 +1291,7 @@ checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
|
||||
[[package]]
|
||||
name = "database-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"app-error",
|
||||
@ -1838,7 +1832,6 @@ dependencies = [
|
||||
"lazy_static",
|
||||
"lib-dispatch",
|
||||
"lib-infra",
|
||||
"lru",
|
||||
"nanoid",
|
||||
"parking_lot 0.12.1",
|
||||
"protobuf",
|
||||
@ -1899,6 +1892,7 @@ dependencies = [
|
||||
"collab-entity",
|
||||
"collab-integrate",
|
||||
"collab-plugins",
|
||||
"dashmap",
|
||||
"flowy-codegen",
|
||||
"flowy-derive",
|
||||
"flowy-document-pub",
|
||||
@ -1910,7 +1904,6 @@ dependencies = [
|
||||
"indexmap 2.1.0",
|
||||
"lib-dispatch",
|
||||
"lib-infra",
|
||||
"lru",
|
||||
"nanoid",
|
||||
"parking_lot 0.12.1",
|
||||
"protobuf",
|
||||
@ -2472,7 +2465,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "gotrue"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"futures-util",
|
||||
@ -2489,7 +2482,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "gotrue-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"app-error",
|
||||
@ -2560,10 +2553,6 @@ name = "hashbrown"
|
||||
version = "0.14.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
|
||||
dependencies = [
|
||||
"ahash 0.8.6",
|
||||
"allocator-api2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hdrhistogram"
|
||||
@ -2883,7 +2872,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "infra"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"reqwest",
|
||||
@ -3120,15 +3109,6 @@ version = "0.4.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
|
||||
|
||||
[[package]]
|
||||
name = "lru"
|
||||
version = "0.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1efa59af2ddfad1854ae27d75009d538d0998b4b2fd47083e743ac1a10e46c60"
|
||||
dependencies = [
|
||||
"hashbrown 0.14.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mac"
|
||||
version = "0.1.1"
|
||||
@ -4945,7 +4925,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "shared-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"app-error",
|
||||
@ -6358,7 +6338,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "workspace-template"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=d77fb77a3a1df1dec14db68bebe35d911d9ae437#d77fb77a3a1df1dec14db68bebe35d911d9ae437"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=0821c052f996b56ec42b86c9462f065e4639d735#0821c052f996b56ec42b86c9462f065e4639d735"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
|
@ -74,7 +74,6 @@ tokio = "1.34.0"
|
||||
tokio-stream = "0.1.14"
|
||||
async-trait = "0.1.74"
|
||||
chrono = { version = "0.4.31", default-features = false, features = ["clock"] }
|
||||
lru = "0.12.0"
|
||||
|
||||
[profile.dev]
|
||||
opt-level = 0
|
||||
@ -110,7 +109,7 @@ rocksdb = { git = "https://github.com/LucasXu0/rust-rocksdb", rev = "21cf4a23ec1
|
||||
# Run the script:
|
||||
# scripts/tool/update_client_api_rev.sh new_rev_id
|
||||
# ⚠️⚠️⚠️️
|
||||
client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "d77fb77a3a1df1dec14db68bebe35d911d9ae437" }
|
||||
client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "0821c052f996b56ec42b86c9462f065e4639d735" }
|
||||
# Please use the following script to update collab.
|
||||
# Working directory: frontend
|
||||
#
|
||||
@ -120,10 +119,10 @@ client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "d77
|
||||
# To switch to the local path, run:
|
||||
# scripts/tool/update_collab_source.sh
|
||||
# ⚠️⚠️⚠️️
|
||||
collab = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab-folder = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab-document = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab-database = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab-plugins = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab-user = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab-entity = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "c08d23f5a1f9f0de9465a3b248aedeaf8cd65381" }
|
||||
collab = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
collab-folder = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
collab-document = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
collab-database = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
collab-plugins = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
collab-user = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
collab-entity = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ab468ea96a15863d1e792ea4bed3a8769f3ea8a7" }
|
||||
|
@ -21,7 +21,7 @@ use collab_plugins::local_storage::CollabPersistenceConfig;
|
||||
|
||||
use lib_infra::{if_native, if_wasm};
|
||||
use parking_lot::{Mutex, RwLock};
|
||||
use tracing::trace;
|
||||
use tracing::{error, trace};
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum CollabPluginProviderType {
|
||||
@ -208,33 +208,49 @@ impl AppFlowyCollabBuilder {
|
||||
#[allow(unused_variables)] persistence_config: CollabPersistenceConfig,
|
||||
build_config: CollabBuilderConfig,
|
||||
) -> Result<Arc<MutexCollab>, Error> {
|
||||
let mut builder = CollabBuilder::new(uid, object_id)
|
||||
let is_from_doc_state = matches!(collab_doc_state, DocStateSource::FromDocState(_));
|
||||
let collab = CollabBuilder::new(uid, object_id)
|
||||
.with_doc_state(collab_doc_state)
|
||||
.with_device_id(self.device_id.clone());
|
||||
.with_device_id(self.device_id.clone())
|
||||
.build()?;
|
||||
|
||||
// If the object is from doc state, we need to validate the object type
|
||||
if is_from_doc_state {
|
||||
if let Err(err) = object_type.validate(&collab.lock()) {
|
||||
error!(
|
||||
"{:?} validation failed: {}, object_id: {}",
|
||||
object_type, err, object_id
|
||||
);
|
||||
return Err(err);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
{
|
||||
builder = builder.with_plugin(IndexeddbDiskPlugin::new(
|
||||
collab.lock().add_plugin(Box::new(IndexeddbDiskPlugin::new(
|
||||
uid,
|
||||
object_id.to_string(),
|
||||
object_type.clone(),
|
||||
collab_db.clone(),
|
||||
));
|
||||
)));
|
||||
}
|
||||
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
{
|
||||
builder = builder.with_plugin(RocksdbDiskPlugin::new_with_config(
|
||||
uid,
|
||||
object_id.to_string(),
|
||||
object_type.clone(),
|
||||
collab_db.clone(),
|
||||
persistence_config.clone(),
|
||||
None,
|
||||
));
|
||||
collab
|
||||
.lock()
|
||||
.add_plugin(Box::new(RocksdbDiskPlugin::new_with_config(
|
||||
uid,
|
||||
object_id.to_string(),
|
||||
object_type.clone(),
|
||||
collab_db.clone(),
|
||||
persistence_config.clone(),
|
||||
None,
|
||||
)));
|
||||
}
|
||||
|
||||
let collab = Arc::new(builder.build()?);
|
||||
let arc_collab = Arc::new(collab);
|
||||
|
||||
{
|
||||
let collab_object = self.collab_object(uid, object_id, object_type)?;
|
||||
if build_config.sync_enable {
|
||||
@ -244,7 +260,7 @@ impl AppFlowyCollabBuilder {
|
||||
match provider_type {
|
||||
CollabPluginProviderType::AppFlowyCloud => {
|
||||
trace!("init appflowy cloud collab plugins");
|
||||
let local_collab = Arc::downgrade(&collab);
|
||||
let local_collab = Arc::downgrade(&arc_collab);
|
||||
let plugins =
|
||||
self
|
||||
.plugin_provider
|
||||
@ -257,14 +273,14 @@ impl AppFlowyCollabBuilder {
|
||||
|
||||
trace!("add appflowy cloud collab plugins: {}", plugins.len());
|
||||
for plugin in plugins {
|
||||
collab.lock().add_plugin(plugin);
|
||||
arc_collab.lock().add_plugin(plugin);
|
||||
}
|
||||
},
|
||||
CollabPluginProviderType::Supabase => {
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
{
|
||||
trace!("init supabase collab plugins");
|
||||
let local_collab = Arc::downgrade(&collab);
|
||||
let local_collab = Arc::downgrade(&arc_collab);
|
||||
let local_collab_db = collab_db.clone();
|
||||
let plugins =
|
||||
self
|
||||
@ -277,7 +293,7 @@ impl AppFlowyCollabBuilder {
|
||||
local_collab_db,
|
||||
});
|
||||
for plugin in plugins {
|
||||
collab.lock().add_plugin(plugin);
|
||||
arc_collab.lock().add_plugin(plugin);
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -287,12 +303,12 @@ impl AppFlowyCollabBuilder {
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
futures::executor::block_on(collab.lock().initialize());
|
||||
futures::executor::block_on(arc_collab.lock().initialize());
|
||||
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
collab.lock().initialize();
|
||||
arc_collab.lock().initialize();
|
||||
|
||||
trace!("collab initialized: {}", object_id);
|
||||
Ok(collab)
|
||||
Ok(arc_collab)
|
||||
}
|
||||
}
|
||||
|
@ -73,6 +73,7 @@ impl FlowySupabaseDatabaseTest {
|
||||
.get_database_object_doc_state(database_id, CollabType::Database, &workspace_id)
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -126,6 +126,15 @@ impl FolderOperationHandler for DocumentFolderOperation {
|
||||
})
|
||||
}
|
||||
|
||||
fn open_view(&self, view_id: &str) -> FutureResult<(), FlowyError> {
|
||||
let manager = self.0.clone();
|
||||
let view_id = view_id.to_string();
|
||||
FutureResult::new(async move {
|
||||
manager.open_document(&view_id).await?;
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
|
||||
/// Close the document view.
|
||||
fn close_view(&self, view_id: &str) -> FutureResult<(), FlowyError> {
|
||||
let manager = self.0.clone();
|
||||
@ -236,6 +245,15 @@ impl FolderOperationHandler for DocumentFolderOperation {
|
||||
|
||||
struct DatabaseFolderOperation(Arc<DatabaseManager>);
|
||||
impl FolderOperationHandler for DatabaseFolderOperation {
|
||||
fn open_view(&self, view_id: &str) -> FutureResult<(), FlowyError> {
|
||||
let database_manager = self.0.clone();
|
||||
let view_id = view_id.to_string();
|
||||
FutureResult::new(async move {
|
||||
database_manager.open_database_view(view_id).await?;
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
|
||||
fn close_view(&self, view_id: &str) -> FutureResult<(), FlowyError> {
|
||||
let database_manager = self.0.clone();
|
||||
let view_id = view_id.to_string();
|
||||
|
@ -4,6 +4,10 @@ use crate::AppFlowyCoreConfig;
|
||||
|
||||
static INIT_LOG: AtomicBool = AtomicBool::new(false);
|
||||
pub(crate) fn init_log(config: &AppFlowyCoreConfig) {
|
||||
if cfg!(debug_assertions) && get_bool_from_env_var("DISABLE_CI_TEST_LOG") {
|
||||
return;
|
||||
}
|
||||
|
||||
if !INIT_LOG.load(Ordering::SeqCst) {
|
||||
INIT_LOG.store(true, Ordering::SeqCst);
|
||||
|
||||
@ -12,6 +16,7 @@ pub(crate) fn init_log(config: &AppFlowyCoreConfig) {
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn create_log_filter(level: String, with_crates: Vec<String>) -> String {
|
||||
let level = std::env::var("RUST_LOG").unwrap_or(level);
|
||||
let mut filters = with_crates
|
||||
@ -49,3 +54,15 @@ pub(crate) fn create_log_filter(level: String, with_crates: Vec<String>) -> Stri
|
||||
|
||||
filters.join(",")
|
||||
}
|
||||
|
||||
#[cfg(debug_assertions)]
|
||||
fn get_bool_from_env_var(env_var_name: &str) -> bool {
|
||||
match std::env::var(env_var_name) {
|
||||
Ok(value) => match value.to_lowercase().as_str() {
|
||||
"true" | "1" => true,
|
||||
"false" | "0" => false,
|
||||
_ => false,
|
||||
},
|
||||
Err(_) => false,
|
||||
}
|
||||
}
|
||||
|
@ -225,7 +225,7 @@ impl DatabaseCloudService for ServerProvider {
|
||||
object_id: &str,
|
||||
collab_type: CollabType,
|
||||
workspace_id: &str,
|
||||
) -> FutureResult<Vec<u8>, Error> {
|
||||
) -> FutureResult<Option<Vec<u8>>, Error> {
|
||||
let workspace_id = workspace_id.to_string();
|
||||
let server = self.get_server();
|
||||
let database_id = object_id.to_string();
|
||||
|
@ -9,13 +9,16 @@ pub type CollabDocStateByOid = HashMap<String, DocStateSource>;
|
||||
/// A trait for database cloud service.
|
||||
/// Each kind of server should implement this trait. Check out the [AppFlowyServerProvider] of
|
||||
/// [flowy-server] crate for more information.
|
||||
///
|
||||
/// returns the doc state of the object with the given object_id.
|
||||
/// None if the object is not found.
|
||||
pub trait DatabaseCloudService: Send + Sync {
|
||||
fn get_database_object_doc_state(
|
||||
&self,
|
||||
object_id: &str,
|
||||
collab_type: CollabType,
|
||||
workspace_id: &str,
|
||||
) -> FutureResult<Vec<u8>, Error>;
|
||||
) -> FutureResult<Option<Vec<u8>>, Error>;
|
||||
|
||||
fn batch_get_database_object_doc_state(
|
||||
&self,
|
||||
|
@ -47,7 +47,6 @@ chrono-tz = "0.8.2"
|
||||
csv = "1.1.6"
|
||||
strum = "0.25"
|
||||
strum_macros = "0.25"
|
||||
lru.workspace = true
|
||||
validator = { version = "0.16.0", features = ["derive"] }
|
||||
|
||||
[dev-dependencies]
|
||||
|
@ -14,7 +14,7 @@ pub fn init(database_manager: Weak<DatabaseManager>) -> AFPlugin {
|
||||
.state(database_manager);
|
||||
plugin
|
||||
.event(DatabaseEvent::GetDatabase, get_database_data_handler)
|
||||
.event(DatabaseEvent::OpenDatabase, get_database_data_handler)
|
||||
.event(DatabaseEvent::GetDatabaseData, get_database_data_handler)
|
||||
.event(DatabaseEvent::GetDatabaseId, get_database_id_handler)
|
||||
.event(DatabaseEvent::GetDatabaseSetting, get_database_setting_handler)
|
||||
.event(DatabaseEvent::UpdateDatabaseSetting, update_database_setting_handler)
|
||||
@ -128,7 +128,7 @@ pub enum DatabaseEvent {
|
||||
DeleteAllSorts = 6,
|
||||
|
||||
#[event(input = "DatabaseViewIdPB")]
|
||||
OpenDatabase = 7,
|
||||
GetDatabaseData = 7,
|
||||
|
||||
/// [GetFields] event is used to get the database's fields.
|
||||
///
|
||||
|
@ -1,19 +1,17 @@
|
||||
use anyhow::anyhow;
|
||||
use std::collections::HashMap;
|
||||
use std::num::NonZeroUsize;
|
||||
use std::sync::{Arc, Weak};
|
||||
|
||||
use collab::core::collab::{DocStateSource, MutexCollab};
|
||||
use collab_database::blocks::BlockEvent;
|
||||
use collab_database::database::{get_inline_view_id, DatabaseData, MutexDatabase};
|
||||
use collab_database::database::{DatabaseData, MutexDatabase};
|
||||
use collab_database::error::DatabaseError;
|
||||
use collab_database::user::{
|
||||
use collab_database::views::{CreateDatabaseParams, CreateViewParams, DatabaseLayout};
|
||||
use collab_database::workspace_database::{
|
||||
CollabDocStateByOid, CollabFuture, DatabaseCollabService, DatabaseMeta, WorkspaceDatabase,
|
||||
};
|
||||
use collab_database::views::{CreateDatabaseParams, CreateViewParams, DatabaseLayout};
|
||||
use collab_entity::CollabType;
|
||||
use collab_plugins::local_storage::kv::KVTransactionDB;
|
||||
|
||||
use lru::LruCache;
|
||||
use tokio::sync::{Mutex, RwLock};
|
||||
use tracing::{event, instrument, trace};
|
||||
|
||||
@ -40,7 +38,7 @@ pub struct DatabaseManager {
|
||||
user: Arc<dyn DatabaseUser>,
|
||||
workspace_database: Arc<RwLock<Option<Arc<WorkspaceDatabase>>>>,
|
||||
task_scheduler: Arc<RwLock<TaskDispatcher>>,
|
||||
editors: Mutex<LruCache<String, Arc<DatabaseEditor>>>,
|
||||
editors: Mutex<HashMap<String, Arc<DatabaseEditor>>>,
|
||||
collab_builder: Arc<AppFlowyCollabBuilder>,
|
||||
cloud_service: Arc<dyn DatabaseCloudService>,
|
||||
}
|
||||
@ -52,12 +50,11 @@ impl DatabaseManager {
|
||||
collab_builder: Arc<AppFlowyCollabBuilder>,
|
||||
cloud_service: Arc<dyn DatabaseCloudService>,
|
||||
) -> Self {
|
||||
let editors = Mutex::new(LruCache::new(NonZeroUsize::new(5).unwrap()));
|
||||
Self {
|
||||
user: database_user,
|
||||
workspace_database: Default::default(),
|
||||
task_scheduler,
|
||||
editors,
|
||||
editors: Default::default(),
|
||||
collab_builder,
|
||||
cloud_service,
|
||||
}
|
||||
@ -84,7 +81,7 @@ impl DatabaseManager {
|
||||
self.task_scheduler.write().await.clear_task();
|
||||
// 2. Release all existing editors
|
||||
for (_, editor) in self.editors.lock().await.iter() {
|
||||
editor.close().await;
|
||||
editor.close_all_views().await;
|
||||
}
|
||||
self.editors.lock().await.clear();
|
||||
// 3. Clear the workspace database
|
||||
@ -111,8 +108,13 @@ impl DatabaseManager {
|
||||
)
|
||||
.await
|
||||
{
|
||||
Ok(doc_state) => {
|
||||
workspace_database_doc_state = DocStateSource::FromDocState(doc_state);
|
||||
Ok(doc_state) => match doc_state {
|
||||
Some(doc_state) => {
|
||||
workspace_database_doc_state = DocStateSource::FromDocState(doc_state);
|
||||
},
|
||||
None => {
|
||||
workspace_database_doc_state = DocStateSource::FromDisk;
|
||||
},
|
||||
},
|
||||
Err(err) => {
|
||||
return Err(FlowyError::record_not_found().with_context(format!(
|
||||
@ -136,7 +138,7 @@ impl DatabaseManager {
|
||||
collab_db.clone(),
|
||||
workspace_database_doc_state,
|
||||
config.clone(),
|
||||
);
|
||||
)?;
|
||||
let workspace_database =
|
||||
WorkspaceDatabase::open(uid, collab, collab_db, config, collab_builder);
|
||||
*self.workspace_database.write().await = Some(Arc::new(workspace_database));
|
||||
@ -163,17 +165,12 @@ impl DatabaseManager {
|
||||
|
||||
pub async fn get_database_inline_view_id(&self, database_id: &str) -> FlowyResult<String> {
|
||||
let wdb = self.get_workspace_database().await?;
|
||||
let database_collab = wdb.get_database_collab(database_id).await.ok_or_else(|| {
|
||||
let database_collab = wdb.get_database(database_id).await.ok_or_else(|| {
|
||||
FlowyError::record_not_found().with_context(format!("The database:{} not found", database_id))
|
||||
})?;
|
||||
|
||||
let inline_view_id = get_inline_view_id(&database_collab.lock()).ok_or_else(|| {
|
||||
FlowyError::record_not_found().with_context(format!(
|
||||
"Can't find the inline view for database:{}",
|
||||
database_id
|
||||
))
|
||||
})?;
|
||||
Ok(inline_view_id)
|
||||
let lock_guard = database_collab.lock();
|
||||
Ok(lock_guard.get_inline_view_id())
|
||||
}
|
||||
|
||||
pub async fn get_all_databases_meta(&self) -> Vec<DatabaseMeta> {
|
||||
@ -218,7 +215,7 @@ impl DatabaseManager {
|
||||
}
|
||||
|
||||
pub async fn open_database(&self, database_id: &str) -> FlowyResult<Arc<DatabaseEditor>> {
|
||||
trace!("create new editor for database {}", database_id);
|
||||
trace!("open database editor:{}", database_id);
|
||||
let database = self
|
||||
.get_workspace_database()
|
||||
.await?
|
||||
@ -234,18 +231,35 @@ impl DatabaseManager {
|
||||
.editors
|
||||
.lock()
|
||||
.await
|
||||
.put(database_id.to_string(), editor.clone());
|
||||
.insert(database_id.to_string(), editor.clone());
|
||||
Ok(editor)
|
||||
}
|
||||
|
||||
pub async fn open_database_view<T: AsRef<str>>(&self, view_id: T) -> FlowyResult<()> {
|
||||
let view_id = view_id.as_ref();
|
||||
let wdb = self.get_workspace_database().await?;
|
||||
if let Some(database_id) = wdb.get_database_id_with_view_id(view_id) {
|
||||
wdb.open_database(&database_id);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn close_database_view<T: AsRef<str>>(&self, view_id: T) -> FlowyResult<()> {
|
||||
let view_id = view_id.as_ref();
|
||||
let wdb = self.get_workspace_database().await?;
|
||||
let database_id = wdb.get_database_id_with_view_id(view_id);
|
||||
if let Some(database_id) = database_id {
|
||||
let mut editors = self.editors.lock().await;
|
||||
let mut should_remove = false;
|
||||
if let Some(editor) = editors.get(&database_id) {
|
||||
editor.close_view(view_id).await;
|
||||
should_remove = editor.num_views().await == 0;
|
||||
}
|
||||
|
||||
if should_remove {
|
||||
trace!("remove database editor:{}", database_id);
|
||||
editors.remove(&database_id);
|
||||
wdb.close_database(&database_id);
|
||||
}
|
||||
}
|
||||
|
||||
@ -428,15 +442,15 @@ impl DatabaseCollabService for UserDatabaseCollabServiceImpl {
|
||||
let weak_cloud_service = Arc::downgrade(&self.cloud_service);
|
||||
Box::pin(async move {
|
||||
match weak_cloud_service.upgrade() {
|
||||
None => {
|
||||
tracing::warn!("Cloud service is dropped");
|
||||
Ok(DocStateSource::FromDocState(vec![]))
|
||||
},
|
||||
None => Err(DatabaseError::Internal(anyhow!("Cloud service is dropped"))),
|
||||
Some(cloud_service) => {
|
||||
let doc_state = cloud_service
|
||||
.get_database_object_doc_state(&object_id, object_ty, &workspace_id)
|
||||
.await?;
|
||||
Ok(DocStateSource::FromDocState(doc_state))
|
||||
match doc_state {
|
||||
None => Ok(DocStateSource::FromDisk),
|
||||
Some(doc_state) => Ok(DocStateSource::FromDocState(doc_state)),
|
||||
}
|
||||
},
|
||||
}
|
||||
})
|
||||
@ -473,18 +487,16 @@ impl DatabaseCollabService for UserDatabaseCollabServiceImpl {
|
||||
collab_db: Weak<CollabKVDB>,
|
||||
collab_raw_data: DocStateSource,
|
||||
persistence_config: CollabPersistenceConfig,
|
||||
) -> Arc<MutexCollab> {
|
||||
self
|
||||
.collab_builder
|
||||
.build_with_config(
|
||||
uid,
|
||||
object_id,
|
||||
object_type,
|
||||
collab_db,
|
||||
collab_raw_data,
|
||||
persistence_config,
|
||||
CollabBuilderConfig::default().sync_enable(true),
|
||||
)
|
||||
.unwrap()
|
||||
) -> Result<Arc<MutexCollab>, DatabaseError> {
|
||||
let collab = self.collab_builder.build_with_config(
|
||||
uid,
|
||||
object_id,
|
||||
object_type.clone(),
|
||||
collab_db.clone(),
|
||||
collab_raw_data,
|
||||
persistence_config,
|
||||
CollabBuilderConfig::default().sync_enable(true),
|
||||
)?;
|
||||
Ok(collab)
|
||||
}
|
||||
}
|
||||
|
@ -1,22 +1,3 @@
|
||||
use std::collections::HashMap;
|
||||
use std::sync::Arc;
|
||||
|
||||
use collab_database::database::MutexDatabase;
|
||||
use collab_database::fields::{Field, TypeOptionData};
|
||||
use collab_database::rows::{Cell, Cells, Row, RowCell, RowDetail, RowId};
|
||||
use collab_database::views::{
|
||||
DatabaseLayout, DatabaseView, FilterMap, LayoutSetting, OrderObjectPosition,
|
||||
};
|
||||
use futures::StreamExt;
|
||||
use lib_infra::box_any::BoxAny;
|
||||
use tokio::sync::{broadcast, RwLock};
|
||||
use tracing::{event, warn};
|
||||
|
||||
use flowy_error::{internal_error, ErrorCode, FlowyError, FlowyResult};
|
||||
use lib_dispatch::prelude::af_spawn;
|
||||
use lib_infra::future::{to_fut, Fut, FutureResult};
|
||||
use lib_infra::priority_task::TaskDispatcher;
|
||||
|
||||
use crate::entities::*;
|
||||
use crate::notification::{send_notification, DatabaseNotification};
|
||||
use crate::services::calculations::Calculation;
|
||||
@ -39,6 +20,22 @@ use crate::services::group::{default_group_setting, GroupChangeset, GroupSetting
|
||||
use crate::services::share::csv::{CSVExport, CSVFormat};
|
||||
use crate::services::sort::Sort;
|
||||
use crate::utils::cache::AnyTypeCache;
|
||||
use collab_database::database::MutexDatabase;
|
||||
use collab_database::fields::{Field, TypeOptionData};
|
||||
use collab_database::rows::{Cell, Cells, Row, RowCell, RowDetail, RowId};
|
||||
use collab_database::views::{
|
||||
DatabaseLayout, DatabaseView, FilterMap, LayoutSetting, OrderObjectPosition,
|
||||
};
|
||||
use flowy_error::{internal_error, ErrorCode, FlowyError, FlowyResult};
|
||||
use futures::StreamExt;
|
||||
use lib_dispatch::prelude::af_spawn;
|
||||
use lib_infra::box_any::BoxAny;
|
||||
use lib_infra::future::{to_fut, Fut, FutureResult};
|
||||
use lib_infra::priority_task::TaskDispatcher;
|
||||
use std::collections::HashMap;
|
||||
use std::sync::Arc;
|
||||
use tokio::sync::{broadcast, RwLock};
|
||||
use tracing::{event, warn};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct DatabaseEditor {
|
||||
@ -115,23 +112,16 @@ impl DatabaseEditor {
|
||||
})
|
||||
}
|
||||
|
||||
/// Returns bool value indicating whether the database is empty.
|
||||
///
|
||||
pub async fn close_view(&self, view_id: &str) -> bool {
|
||||
// If the database is empty, flush the database to the disk.
|
||||
if self.database_views.editors().await.len() == 1 {
|
||||
if let Some(database) = self.database.try_lock() {
|
||||
let _ = database.flush();
|
||||
}
|
||||
}
|
||||
self.database_views.close_view(view_id).await
|
||||
pub async fn close_view(&self, view_id: &str) {
|
||||
self.database_views.close_view(view_id).await;
|
||||
}
|
||||
|
||||
pub async fn num_views(&self) -> usize {
|
||||
self.database_views.num_editors().await
|
||||
}
|
||||
|
||||
#[tracing::instrument(level = "debug", skip_all)]
|
||||
pub async fn close(&self) {
|
||||
if let Some(database) = self.database.try_lock() {
|
||||
let _ = database.flush();
|
||||
}
|
||||
pub async fn close_all_views(&self) {
|
||||
for view in self.database_views.editors().await {
|
||||
view.close().await;
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ pub struct DatabaseViews {
|
||||
database: Arc<MutexDatabase>,
|
||||
cell_cache: CellCache,
|
||||
view_operation: Arc<dyn DatabaseViewOperation>,
|
||||
editor_by_view_id: Arc<RwLock<EditorByViewId>>,
|
||||
view_editors: Arc<RwLock<EditorByViewId>>,
|
||||
}
|
||||
|
||||
impl DatabaseViews {
|
||||
@ -28,41 +28,38 @@ impl DatabaseViews {
|
||||
database: Arc<MutexDatabase>,
|
||||
cell_cache: CellCache,
|
||||
view_operation: Arc<dyn DatabaseViewOperation>,
|
||||
editor_by_view_id: Arc<RwLock<EditorByViewId>>,
|
||||
view_editors: Arc<RwLock<EditorByViewId>>,
|
||||
) -> FlowyResult<Self> {
|
||||
Ok(Self {
|
||||
database,
|
||||
view_operation,
|
||||
cell_cache,
|
||||
editor_by_view_id,
|
||||
view_editors,
|
||||
})
|
||||
}
|
||||
|
||||
pub async fn close_view(&self, view_id: &str) -> bool {
|
||||
let mut editor_map = self.editor_by_view_id.write().await;
|
||||
if let Some(view) = editor_map.remove(view_id) {
|
||||
pub async fn close_view(&self, view_id: &str) {
|
||||
let mut lock_guard = self.view_editors.write().await;
|
||||
if let Some(view) = lock_guard.remove(view_id) {
|
||||
view.close().await;
|
||||
}
|
||||
editor_map.is_empty()
|
||||
}
|
||||
|
||||
pub async fn num_editors(&self) -> usize {
|
||||
self.view_editors.read().await.len()
|
||||
}
|
||||
|
||||
pub async fn editors(&self) -> Vec<Arc<DatabaseViewEditor>> {
|
||||
self
|
||||
.editor_by_view_id
|
||||
.read()
|
||||
.await
|
||||
.values()
|
||||
.cloned()
|
||||
.collect()
|
||||
self.view_editors.read().await.values().cloned().collect()
|
||||
}
|
||||
|
||||
pub async fn get_view_editor(&self, view_id: &str) -> FlowyResult<Arc<DatabaseViewEditor>> {
|
||||
debug_assert!(!view_id.is_empty());
|
||||
if let Some(editor) = self.editor_by_view_id.read().await.get(view_id) {
|
||||
if let Some(editor) = self.view_editors.read().await.get(view_id) {
|
||||
return Ok(editor.clone());
|
||||
}
|
||||
|
||||
let mut editor_map = self.editor_by_view_id.try_write().map_err(|err| {
|
||||
let mut editor_map = self.view_editors.try_write().map_err(|err| {
|
||||
FlowyError::internal().with_context(format!(
|
||||
"fail to acquire the lock of editor_by_view_id: {}",
|
||||
err
|
||||
|
@ -35,8 +35,8 @@ indexmap = {version = "2.1.0", features = ["serde"]}
|
||||
uuid.workspace = true
|
||||
futures.workspace = true
|
||||
tokio-stream = { workspace = true, features = ["sync"] }
|
||||
dashmap = "5"
|
||||
scraper = "0.18.0"
|
||||
lru.workspace = true
|
||||
|
||||
[target.'cfg(target_arch = "wasm32")'.dependencies]
|
||||
getrandom = { version = "0.2", features = ["js"]}
|
||||
|
@ -1,21 +1,18 @@
|
||||
use std::{
|
||||
ops::{Deref, DerefMut},
|
||||
sync::Arc,
|
||||
};
|
||||
|
||||
use collab::core::collab::MutexCollab;
|
||||
use collab_document::{blocks::DocumentData, document::Document};
|
||||
use futures::StreamExt;
|
||||
use parking_lot::Mutex;
|
||||
|
||||
use flowy_error::FlowyResult;
|
||||
use lib_dispatch::prelude::af_spawn;
|
||||
use tracing::trace;
|
||||
|
||||
use crate::entities::{
|
||||
DocEventPB, DocumentAwarenessStatesPB, DocumentSnapshotStatePB, DocumentSyncStatePB,
|
||||
};
|
||||
use crate::notification::{send_notification, DocumentNotification};
|
||||
use collab::core::collab::MutexCollab;
|
||||
use collab_document::{blocks::DocumentData, document::Document};
|
||||
use flowy_error::FlowyResult;
|
||||
use futures::StreamExt;
|
||||
use lib_dispatch::prelude::af_spawn;
|
||||
use parking_lot::Mutex;
|
||||
use std::{
|
||||
ops::{Deref, DerefMut},
|
||||
sync::Arc,
|
||||
};
|
||||
use tracing::trace;
|
||||
|
||||
/// This struct wrap the document::Document
|
||||
#[derive(Clone)]
|
||||
|
@ -1,4 +1,3 @@
|
||||
use std::num::NonZeroUsize;
|
||||
use std::sync::Arc;
|
||||
use std::sync::Weak;
|
||||
|
||||
@ -13,10 +12,9 @@ use collab_document::document_awareness::DocumentAwarenessUser;
|
||||
use collab_document::document_data::default_document_data;
|
||||
use collab_entity::CollabType;
|
||||
use collab_plugins::CollabKVDB;
|
||||
use dashmap::DashMap;
|
||||
use flowy_storage::object_from_disk;
|
||||
use lib_infra::util::timestamp;
|
||||
use lru::LruCache;
|
||||
use parking_lot::Mutex;
|
||||
use tokio::io::AsyncWriteExt;
|
||||
use tracing::{error, trace};
|
||||
use tracing::{event, instrument};
|
||||
@ -53,7 +51,8 @@ pub trait DocumentSnapshotService: Send + Sync {
|
||||
pub struct DocumentManager {
|
||||
pub user_service: Arc<dyn DocumentUserService>,
|
||||
collab_builder: Arc<AppFlowyCollabBuilder>,
|
||||
documents: Arc<Mutex<LruCache<String, Arc<MutexDocument>>>>,
|
||||
documents: Arc<DashMap<String, Arc<MutexDocument>>>,
|
||||
removing_documents: Arc<DashMap<String, Arc<MutexDocument>>>,
|
||||
cloud_service: Arc<dyn DocumentCloudService>,
|
||||
storage_service: Weak<dyn ObjectStorageService>,
|
||||
snapshot_service: Arc<dyn DocumentSnapshotService>,
|
||||
@ -67,11 +66,11 @@ impl DocumentManager {
|
||||
storage_service: Weak<dyn ObjectStorageService>,
|
||||
snapshot_service: Arc<dyn DocumentSnapshotService>,
|
||||
) -> Self {
|
||||
let documents = Arc::new(Mutex::new(LruCache::new(NonZeroUsize::new(10).unwrap())));
|
||||
Self {
|
||||
user_service,
|
||||
collab_builder,
|
||||
documents,
|
||||
documents: Arc::new(Default::default()),
|
||||
removing_documents: Arc::new(Default::default()),
|
||||
cloud_service,
|
||||
storage_service,
|
||||
snapshot_service,
|
||||
@ -79,7 +78,7 @@ impl DocumentManager {
|
||||
}
|
||||
|
||||
pub async fn initialize(&self, _uid: i64, _workspace_id: String) -> FlowyResult<()> {
|
||||
self.documents.lock().clear();
|
||||
self.documents.clear();
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@ -137,7 +136,11 @@ impl DocumentManager {
|
||||
/// If the document exists, open the document and cache it
|
||||
#[tracing::instrument(level = "info", skip(self), err)]
|
||||
pub async fn get_document(&self, doc_id: &str) -> FlowyResult<Arc<MutexDocument>> {
|
||||
if let Some(doc) = self.documents.lock().get(doc_id).cloned() {
|
||||
if let Some(doc) = self.documents.get(doc_id).map(|item| item.value().clone()) {
|
||||
return Ok(doc);
|
||||
}
|
||||
|
||||
if let Some(doc) = self.restore_document_from_removing(doc_id) {
|
||||
return Ok(doc);
|
||||
}
|
||||
|
||||
@ -170,10 +173,7 @@ impl DocumentManager {
|
||||
match MutexDocument::open(doc_id, collab) {
|
||||
Ok(document) => {
|
||||
let document = Arc::new(document);
|
||||
self
|
||||
.documents
|
||||
.lock()
|
||||
.put(doc_id.to_string(), document.clone());
|
||||
self.documents.insert(doc_id.to_string(), document.clone());
|
||||
Ok(document)
|
||||
},
|
||||
Err(err) => {
|
||||
@ -188,31 +188,50 @@ impl DocumentManager {
|
||||
}
|
||||
|
||||
pub async fn get_document_data(&self, doc_id: &str) -> FlowyResult<DocumentData> {
|
||||
let mut doc_state = vec![];
|
||||
let mut doc_state = DocStateSource::FromDisk;
|
||||
if !self.is_doc_exist(doc_id).await? {
|
||||
doc_state = self
|
||||
.cloud_service
|
||||
.get_document_doc_state(doc_id, &self.user_service.workspace_id()?)
|
||||
.await?;
|
||||
doc_state = DocStateSource::FromDocState(
|
||||
self
|
||||
.cloud_service
|
||||
.get_document_doc_state(doc_id, &self.user_service.workspace_id()?)
|
||||
.await?,
|
||||
);
|
||||
}
|
||||
let uid = self.user_service.user_id()?;
|
||||
let collab = self
|
||||
.collab_for_document(uid, doc_id, DocStateSource::FromDocState(doc_state), false)
|
||||
.collab_for_document(uid, doc_id, doc_state, false)
|
||||
.await?;
|
||||
Document::open(collab)?
|
||||
.get_document_data()
|
||||
.map_err(internal_error)
|
||||
}
|
||||
|
||||
pub async fn open_document(&self, doc_id: &str) -> FlowyResult<()> {
|
||||
// TODO(nathan): refactor the get_database that split the database creation and database opening.
|
||||
self.restore_document_from_removing(doc_id);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn close_document(&self, doc_id: &str) -> FlowyResult<()> {
|
||||
// The lru will pop the least recently used document when the cache is full.
|
||||
if let Ok(doc) = self.get_document(doc_id).await {
|
||||
trace!("close document: {}", doc_id);
|
||||
if let Some(doc) = doc.try_lock() {
|
||||
if let Some((doc_id, document)) = self.documents.remove(doc_id) {
|
||||
if let Some(doc) = document.try_lock() {
|
||||
// clear the awareness state when close the document
|
||||
doc.clean_awareness_local_state();
|
||||
let _ = doc.flush();
|
||||
}
|
||||
let clone_doc_id = doc_id.clone();
|
||||
trace!("move document to removing_documents: {}", doc_id);
|
||||
self.removing_documents.insert(doc_id, document);
|
||||
|
||||
let weak_removing_documents = Arc::downgrade(&self.removing_documents);
|
||||
af_spawn(async move {
|
||||
tokio::time::sleep(std::time::Duration::from_secs(120)).await;
|
||||
if let Some(removing_documents) = weak_removing_documents.upgrade() {
|
||||
if removing_documents.remove(&clone_doc_id).is_some() {
|
||||
trace!("drop document from removing_documents: {}", clone_doc_id);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Ok(())
|
||||
@ -222,9 +241,8 @@ impl DocumentManager {
|
||||
let uid = self.user_service.user_id()?;
|
||||
if let Some(db) = self.user_service.collab_db(uid)?.upgrade() {
|
||||
db.delete_doc(uid, doc_id).await?;
|
||||
|
||||
// When deleting a document, we need to remove it from the cache.
|
||||
self.documents.lock().pop(doc_id);
|
||||
self.documents.remove(doc_id);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@ -401,6 +419,16 @@ impl DocumentManager {
|
||||
pub fn get_file_storage_service(&self) -> &Weak<dyn ObjectStorageService> {
|
||||
&self.storage_service
|
||||
}
|
||||
|
||||
fn restore_document_from_removing(&self, doc_id: &str) -> Option<Arc<MutexDocument>> {
|
||||
let (doc_id, doc) = self.removing_documents.remove(doc_id)?;
|
||||
trace!(
|
||||
"move document {} from removing_documents to documents",
|
||||
doc_id
|
||||
);
|
||||
self.documents.insert(doc_id, doc.clone());
|
||||
Some(doc)
|
||||
}
|
||||
}
|
||||
|
||||
async fn doc_state_from_document_data(
|
||||
|
@ -205,7 +205,7 @@ impl FolderManager {
|
||||
workspace_id,
|
||||
CollabType::Folder,
|
||||
collab_db,
|
||||
DocStateSource::FromDocState(vec![]),
|
||||
DocStateSource::FromDisk,
|
||||
CollabPersistenceConfig::new()
|
||||
.enable_snapshot(true)
|
||||
.snapshot_per_update(50),
|
||||
@ -782,7 +782,15 @@ impl FolderManager {
|
||||
},
|
||||
)?;
|
||||
|
||||
send_workspace_setting_notification(workspace_id, self.get_current_view().await);
|
||||
let view = self.get_current_view().await;
|
||||
if let Some(view) = &view {
|
||||
let view_layout: ViewLayout = view.layout.clone().into();
|
||||
if let Some(handle) = self.operation_handlers.get(&view_layout) {
|
||||
let _ = handle.open_view(view_id).await;
|
||||
}
|
||||
}
|
||||
|
||||
send_workspace_setting_notification(workspace_id, view);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -211,7 +211,6 @@ pub(crate) fn notify_did_update_section_views(workspace_id: &str, folder: &Folde
|
||||
|
||||
pub(crate) fn notify_did_update_workspace(workspace_id: &str, folder: &Folder) {
|
||||
let repeated_view: RepeatedViewPB = get_workspace_public_view_pbs(workspace_id, folder).into();
|
||||
tracing::trace!("Did update workspace views: {:?}", repeated_view);
|
||||
send_notification(workspace_id, FolderNotification::DidUpdateWorkspaceViews)
|
||||
.payload(repeated_view)
|
||||
.send();
|
||||
|
@ -32,6 +32,7 @@ pub trait FolderOperationHandler {
|
||||
FutureResult::new(async { Ok(()) })
|
||||
}
|
||||
|
||||
fn open_view(&self, view_id: &str) -> FutureResult<(), FlowyError>;
|
||||
/// Closes the view and releases the resources that this view has in
|
||||
/// the backend
|
||||
fn close_view(&self, view_id: &str) -> FutureResult<(), FlowyError>;
|
||||
|
@ -45,11 +45,20 @@ mime_guess = "2.0"
|
||||
url = "2.4"
|
||||
tokio-util = "0.7"
|
||||
tokio-stream = { workspace = true, features = ["sync"] }
|
||||
client-api = { version = "0.1.0", features = ["collab-sync", "test_util"] }
|
||||
lib-dispatch = { workspace = true }
|
||||
yrs = "0.17.1"
|
||||
rand = "0.8.5"
|
||||
|
||||
|
||||
[dependencies.client-api]
|
||||
version = "0.1.0"
|
||||
features = [
|
||||
"collab-sync",
|
||||
"test_util",
|
||||
# Uncomment the following line to enable verbose logging for sync
|
||||
# "sync_verbose_log",
|
||||
]
|
||||
|
||||
[dev-dependencies]
|
||||
uuid.workspace = true
|
||||
tracing-subscriber = { version = "0.3.3", features = ["env-filter"] }
|
||||
|
@ -23,7 +23,7 @@ where
|
||||
object_id: &str,
|
||||
collab_type: CollabType,
|
||||
workspace_id: &str,
|
||||
) -> FutureResult<Vec<u8>, Error> {
|
||||
) -> FutureResult<Option<Vec<u8>>, Error> {
|
||||
let workspace_id = workspace_id.to_string();
|
||||
let object_id = object_id.to_string();
|
||||
let try_get_client = self.0.try_get_client();
|
||||
@ -36,10 +36,10 @@ where
|
||||
},
|
||||
};
|
||||
match try_get_client?.get_collab(params).await {
|
||||
Ok(data) => Ok(data.doc_state.to_vec()),
|
||||
Ok(data) => Ok(Some(data.doc_state.to_vec())),
|
||||
Err(err) => {
|
||||
if err.code == RecordNotFound {
|
||||
Ok(vec![])
|
||||
Ok(None)
|
||||
} else {
|
||||
Err(Error::new(err))
|
||||
}
|
||||
|
@ -1,5 +1,8 @@
|
||||
use anyhow::Error;
|
||||
use collab::preclude::Collab;
|
||||
use collab_entity::define::{DATABASE, DATABASE_ROW_DATA, WORKSPACE_DATABASES};
|
||||
use collab_entity::CollabType;
|
||||
use yrs::{Any, MapPrelim};
|
||||
|
||||
use flowy_database_pub::cloud::{CollabDocStateByOid, DatabaseCloudService, DatabaseSnapshot};
|
||||
use lib_infra::future::FutureResult;
|
||||
@ -9,11 +12,40 @@ pub(crate) struct LocalServerDatabaseCloudServiceImpl();
|
||||
impl DatabaseCloudService for LocalServerDatabaseCloudServiceImpl {
|
||||
fn get_database_object_doc_state(
|
||||
&self,
|
||||
_object_id: &str,
|
||||
_collab_type: CollabType,
|
||||
object_id: &str,
|
||||
collab_type: CollabType,
|
||||
_workspace_id: &str,
|
||||
) -> FutureResult<Vec<u8>, Error> {
|
||||
FutureResult::new(async move { Ok(vec![]) })
|
||||
) -> FutureResult<Option<Vec<u8>>, Error> {
|
||||
let object_id = object_id.to_string();
|
||||
// create the minimal required data for the given collab type
|
||||
FutureResult::new(async move {
|
||||
let data = match collab_type {
|
||||
CollabType::Database => {
|
||||
let collab = Collab::new(1, object_id, collab_type, vec![], false);
|
||||
collab.with_origin_transact_mut(|txn| {
|
||||
collab.insert_map_with_txn(txn, DATABASE);
|
||||
});
|
||||
collab.encode_collab_v1().doc_state.to_vec()
|
||||
},
|
||||
CollabType::WorkspaceDatabase => {
|
||||
let collab = Collab::new(1, object_id, collab_type, vec![], false);
|
||||
collab.with_origin_transact_mut(|txn| {
|
||||
collab.create_array_with_txn::<MapPrelim<Any>>(txn, WORKSPACE_DATABASES, vec![]);
|
||||
});
|
||||
collab.encode_collab_v1().doc_state.to_vec()
|
||||
},
|
||||
CollabType::DatabaseRow => {
|
||||
let collab = Collab::new(1, object_id, collab_type, vec![], false);
|
||||
collab.with_origin_transact_mut(|txn| {
|
||||
collab.insert_map_with_txn(txn, DATABASE_ROW_DATA);
|
||||
});
|
||||
collab.encode_collab_v1().doc_state.to_vec()
|
||||
},
|
||||
_ => vec![],
|
||||
};
|
||||
|
||||
Ok(Some(data))
|
||||
})
|
||||
}
|
||||
|
||||
fn batch_get_database_object_doc_state(
|
||||
|
@ -30,7 +30,7 @@ where
|
||||
object_id: &str,
|
||||
collab_type: CollabType,
|
||||
_workspace_id: &str,
|
||||
) -> FutureResult<Vec<u8>, Error> {
|
||||
) -> FutureResult<Option<Vec<u8>>, Error> {
|
||||
let try_get_postgrest = self.server.try_get_weak_postgrest();
|
||||
let object_id = object_id.to_string();
|
||||
let (tx, rx) = channel();
|
||||
@ -41,7 +41,7 @@ where
|
||||
let updates = FetchObjectUpdateAction::new(object_id.to_string(), collab_type, postgrest)
|
||||
.run_with_fix_interval(5, 10)
|
||||
.await?;
|
||||
Ok(updates)
|
||||
Ok(Some(updates))
|
||||
}
|
||||
.await,
|
||||
)
|
||||
|
@ -284,7 +284,7 @@ pub async fn batch_get_updates_from_server(
|
||||
match parser_updates_form_json(record.clone(), &postgrest.secret()) {
|
||||
Ok(items) => {
|
||||
if items.is_empty() {
|
||||
updates_by_oid.insert(oid.to_string(), DocStateSource::FromDocState(vec![]));
|
||||
updates_by_oid.insert(oid.to_string(), DocStateSource::FromDisk);
|
||||
} else {
|
||||
let updates = items
|
||||
.iter()
|
||||
|
@ -10,7 +10,7 @@ use collab_database::database::{
|
||||
is_database_collab, mut_database_views_with_collab, reset_inline_view_id,
|
||||
};
|
||||
use collab_database::rows::{database_row_document_id_from_row_id, mut_row_with_collab, RowId};
|
||||
use collab_database::user::DatabaseMetaList;
|
||||
use collab_database::workspace_database::DatabaseMetaList;
|
||||
use collab_folder::{Folder, UserId};
|
||||
use collab_plugins::local_storage::kv::KVTransactionDB;
|
||||
use parking_lot::{Mutex, RwLock};
|
||||
|
@ -8,7 +8,7 @@ use collab::core::collab::MutexCollab;
|
||||
use collab::preclude::Collab;
|
||||
use collab_database::database::get_database_row_ids;
|
||||
use collab_database::rows::database_row_document_id_from_row_id;
|
||||
use collab_database::user::{get_all_database_meta, DatabaseMeta};
|
||||
use collab_database::workspace_database::{get_all_database_meta, DatabaseMeta};
|
||||
use collab_entity::{CollabObject, CollabType};
|
||||
use collab_folder::{Folder, View, ViewLayout};
|
||||
use collab_plugins::local_storage::kv::KVTransactionDB;
|
||||
|
@ -14,7 +14,7 @@ use collab_database::database::{
|
||||
is_database_collab, mut_database_views_with_collab, reset_inline_view_id,
|
||||
};
|
||||
use collab_database::rows::{database_row_document_id_from_row_id, mut_row_with_collab, RowId};
|
||||
use collab_database::user::DatabaseMetaList;
|
||||
use collab_database::workspace_database::DatabaseMetaList;
|
||||
use collab_document::document_data::default_document_collab_data;
|
||||
use collab_entity::CollabType;
|
||||
use collab_folder::{Folder, UserId, View, ViewIdentifier, ViewLayout};
|
||||
|
@ -77,7 +77,7 @@ env = { RUST_LOG = "info" }
|
||||
description = "Run rust-lib unit tests"
|
||||
script = '''
|
||||
cd rust-lib
|
||||
RUST_LOG=info RUST_BACKTRACE=1 cargo test --no-default-features --features "rev-sqlite"
|
||||
RUST_LOG=info DISABLE_CI_TEST_LOG="true" RUST_BACKTRACE=1 cargo test --no-default-features --features "rev-sqlite"
|
||||
'''
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user